Exemple #1
0
def create_generators(args):
    """
    Create generators for training and validation.

    Args
        args: parseargs object containing configuration for generators.
        preprocess_image: Function that preprocesses an image for the network.
    """
    common_args = {
        'batch_size': args.batch_size,
        'input_size': args.input_size,
    }

    # create random transform generator for augmenting training data
    if args.random_transform:
        misc_effect = MiscEffect(border_value=0)
        visual_effect = VisualEffect()
    else:
        misc_effect = None
        visual_effect = None

    if args.dataset_type == 'coco':
        from generators.coco import CocoGenerator

        train_generator = CocoGenerator(args.coco_path,
                                        'train',
                                        misc_effect=misc_effect,
                                        visual_effect=visual_effect,
                                        **common_args)

        validation_generator = CocoGenerator(args.coco_path,
                                             'val',
                                             shuffle_groups=False,
                                             **common_args)
    else:
        raise ValueError('Invalid data type received: {}'.format(
            args.dataset_type))

    return train_generator, validation_generator
Exemple #2
0
def create_generators(args):
    """
    Create generators for training and validation.

    Args
        args: parseargs object containing configuration for generators.
        preprocess_image: Function that preprocesses an image for the network.
    """
    common_args = {
        'batch_size': args.batch_size,
        'phi': args.phi,
        'detect_text': args.detect_text,
        'detect_quadrangle': args.detect_quadrangle
    }

    # create random transform generator for augmenting training data
    if args.random_transform:
        misc_effect = MiscEffect()
        visual_effect = VisualEffect()
    else:
        misc_effect = None
        visual_effect = None

    if args.dataset_type == 'pascal':
        from generators.pascal import PascalVocGenerator
        train_generator = PascalVocGenerator(args.pascal_path,
                                             'trainval',
                                             skip_difficult=True,
                                             misc_effect=misc_effect,
                                             visual_effect=visual_effect,
                                             **common_args)

        validation_generator = PascalVocGenerator(args.pascal_path,
                                                  'val',
                                                  skip_difficult=True,
                                                  shuffle_groups=False,
                                                  **common_args)
    elif args.dataset_type == 'csv':
        from generators.csv_ import CSVGenerator
        train_generator = CSVGenerator(args.annotations_path,
                                       args.classes_path,
                                       misc_effect=misc_effect,
                                       visual_effect=visual_effect,
                                       **common_args)

        if args.val_annotations_path:
            validation_generator = CSVGenerator(args.val_annotations_path,
                                                args.classes_path,
                                                shuffle_groups=False,
                                                **common_args)
        else:
            validation_generator = None
    elif args.dataset_type == 'coco':
        # import here to prevent unnecessary dependency on cocoapi
        from generators.coco import CocoGenerator
        train_generator = CocoGenerator(args.coco_path,
                                        'train2017',
                                        misc_effect=misc_effect,
                                        visual_effect=visual_effect,
                                        group_method='random',
                                        **common_args)

        validation_generator = CocoGenerator(args.coco_path,
                                             'val2017',
                                             shuffle_groups=False,
                                             **common_args)
    else:
        raise ValueError('Invalid data type received: {}'.format(
            args.dataset_type))

    return train_generator, validation_generator
Exemple #3
0
                    tag = '{}. {}'.format(index + 1, coco_tag[index])
                    tf.summary.scalar(tag, result, epoch)


if __name__ == '__main__':
    from model import efficientdet
    import os
    from generators.coco import CocoGenerator

    os.environ['CUDA_VISIBLE_DEVICES'] = '0'

    phi = 2
    weighted_bifpn = True
    model_path = 'efficientdet-d2.h5'
    common_args = {
        'batch_size': 1,
        'phi': phi,
    }

    test_generator = CocoGenerator('datasets/coco',
                                   'test-dev2017',
                                   shuffle_groups=False,
                                   **common_args)
    num_classes = test_generator.num_classes()
    model, prediction_model = efficientdet(phi=phi,
                                           num_classes=num_classes,
                                           weighted_bifpn=weighted_bifpn,
                                           score_threshold=0.01)
    prediction_model.load_weights(model_path, by_name=True)
    evaluate(test_generator, prediction_model, threshold=0.01)
Exemple #4
0
if __name__ == '__main__':
    # from generators.pascal import PascalVocGenerator
    #
    # train_generator = PascalVocGenerator(
    #     'datasets/VOC0712',
    #     'trainval',
    #     skip_difficult=True,
    #     batch_size=1,
    #     shuffle_groups=False
    # )
    from generators.coco import CocoGenerator

    train_generator = CocoGenerator(
        '/home/adam/.keras/datasets/coco/2017_118_5',
        'train2017',
        batch_size=1,
        shuffle_groups=False
    )
    misc_effect = MiscEffect()
    for i in range(train_generator.size()):
        image = train_generator.load_image(i)
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
        annotations = train_generator.load_annotations(i)
        boxes = annotations['bboxes']
        for box in boxes.astype(np.int32):
            cv2.rectangle(image, (box[0], box[1]), (box[2], box[3]), (0, 0, 255), 2)
        src_image = image.copy()
        # cv2.namedWindow('src_image', cv2.WINDOW_NORMAL)
        cv2.imshow('src_image', src_image)
        image, boxes = misc_effect(image, boxes)
        # image, boxes = multi_scale(image, boxes)
        if coco_eval_stats is not None and self.tensorboard is not None and self.tensorboard.writer is not None:
            import tensorflow as tf
            summary = tf.Summary()
            for index, result in enumerate(coco_eval_stats):
                summary_value = summary.value.add()
                summary_value.simple_value = result
                summary_value.tag = '{}. {}'.format(index + 1, coco_tag[index])
                self.tensorboard.writer.add_summary(summary, epoch)
                logs[coco_tag[index]] = result


if __name__ == '__main__':
    dataset_dir = '/home/adam/.keras/datasets/coco/2017_118_5'
    test_generator = CocoGenerator(
        anchors_path='yolo_anchors.txt',
        data_dir=dataset_dir,
        set_name='test-dev2017',
        shuffle_groups=False,
    )
    input_shape = (416, 416)
    model, prediction_model = yolo_body(test_generator.anchors, num_classes=80)
    model.load_weights('checkpoints/yolov3_weights.h5', by_name=True)
    coco_eval_stats = evaluate(test_generator, model)
    coco_tag = [
        'AP @[ IoU=0.50:0.95 | area=   all | maxDets=100 ]',
        'AP @[ IoU=0.50      | area=   all | maxDets=100 ]',
        'AP @[ IoU=0.75      | area=   all | maxDets=100 ]',
        'AP @[ IoU=0.50:0.95 | area= small | maxDets=100 ]',
        'AP @[ IoU=0.50:0.95 | area=medium | maxDets=100 ]',
        'AP @[ IoU=0.50:0.95 | area= large | maxDets=100 ]',
        'AR @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ]',
        'AR @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ]',
Exemple #6
0
                    tag = '{}. {}'.format(index + 1, coco_tag[index])
                    tf.summary.scalar(tag, result, epoch)


if __name__ == '__main__':
    from model import efficientdet
    import os
    from generators.coco import CocoGenerator

    os.environ['CUDA_VISIBLE_DEVICES'] = '0'

    phi = 1
    weighted_bifpn = True
    model_path = 'checkpoints/colab_efficientdet.h5'
    common_args = {
        'batch_size': 1,
        'phi': phi,
    }

    test_generator = CocoGenerator('G:\datasets\COCO',
                                   'train2017',
                                   shuffle_groups=False,
                                   **common_args)
    num_classes = test_generator.num_classes()
    model, prediction_model = efficientdet(phi=phi,
                                           num_classes=num_classes,
                                           weighted_bifpn=weighted_bifpn,
                                           score_threshold=0.01)
    prediction_model.load_weights(model_path, by_name=True)
    evaluate(test_generator, prediction_model, threshold=0.01)
Exemple #7
0
def create_generators(args):
    """
    Create generators for training and validation.

    Args
        args: parseargs object containing configuration for generators.
        preprocess_image: Function that preprocesses an image for the network.
    """
    common_args = {
        'batch_size': args.batch_size,
        'input_size': args.input_size,
    }

    # create random transform generator for augmenting training data
    if args.random_transform:
        misc_effect = MiscEffect(border_value=0)
        visual_effect = VisualEffect()
    else:
        misc_effect = None
        visual_effect = None

    if args.dataset_type == 'pascal':
        from generators.pascal import PascalVocGenerator
        train_generator = PascalVocGenerator(
            args.pascal_path,
            'trainval',
            skip_difficult=True,
            multi_scale=args.multi_scale,
            misc_effect=misc_effect,
            visual_effect=visual_effect,
            **common_args
        )

        validation_generator = PascalVocGenerator(
            '/opt/train_data/VOC_data/VOCdevkit/VOC2007/',
            'test',
            skip_difficult=True,
            shuffle_groups=False,
            **common_args
        )
    elif args.dataset_type == 'csv':
        from generators.csv_ import CSVGenerator
        train_generator = CSVGenerator(
            args.annotations_path,
            args.classes_path,
            misc_effect=misc_effect,
            visual_effect=visual_effect,
            **common_args
        )

        if args.val_annotations_path:
            validation_generator = CSVGenerator(
                args.val_annotations_path,
                args.classes_path,
                shuffle_groups=False,
                **common_args
            )
        else:
            validation_generator = None
    elif args.dataset_type == 'coco':
        from generators.coco import CocoGenerator

        train_generator = CocoGenerator(
            args.coco_path,
            'train2017',
            misc_effect=misc_effect,
            visual_effect=visual_effect,
            **common_args
        )

        validation_generator = CocoGenerator(
            args.coco_path,
            'val2017',
            shuffle_groups=False,
            **common_args
        )
    else:
        raise ValueError('Invalid data type received: {}'.format(args.dataset_type))

    return train_generator, validation_generator
Exemple #8
0
                self.tensorboard.writer.add_summary(summary, epoch)
                logs[coco_tag[index]] = result


if __name__ == '__main__':
    from model import efficientdet
    import os
    from generators.coco import CocoGenerator

    os.environ['CUDA_VISIBLE_DEVICES'] = '1'

    phi = 0
    weighted_bifpn = True
    common_args = {
        'batch_size': 1,
        'phi': phi,
    }

    test_generator = CocoGenerator('/home/adam/workspace/datasets/coco',
                                   'val2017',
                                   shuffle_groups=False,
                                   **common_args)
    model_path = 'checkpoints/2019-12-06/coco_14_1.6369_1.6223.h5'
    num_classes = test_generator.num_classes()
    model, prediction_model = efficientdet(phi=phi,
                                           num_classes=num_classes,
                                           weighted_bifpn=weighted_bifpn,
                                           score_threshold=0.01)
    prediction_model.load_weights(model_path, by_name=True)
    evaluate(test_generator, prediction_model, threshold=0.01)