Example #1
0
    quit()

classes = [
    'i2', 'i4', 'i5', 'il100', 'il60', 'il80', 'io', 'ip', 'p10', 'p11', 'p12',
    'p19', 'p23', 'p26', 'p27', 'p3', 'p5', 'p6', 'pg', 'ph4', 'ph4.5', 'ph5',
    'pl100', 'pl120', 'pl20', 'pl30', 'pl40', 'pl5', 'pl50', 'pl60', 'pl70',
    'pl80', 'pm20', 'pm30', 'pm55', 'pn', 'pne', 'po', 'pr40', 'w13', 'w32',
    'w55', 'w57', 'w59', 'wo'
]
priors = [[0.9, 1.2], [1.05, 1.35], [2.15, 2.55], [3.25, 3.75], [5.35, 5.1]]
input_shape = (3, 320, 320)

NUM_PRIORS = len(priors)
NUM_CLASSES = len(classes)

model = build_yolo(img_shape=input_shape, n_classes=NUM_CLASSES)
model.load_weights(sys.argv[1])

test_dir = sys.argv[2]
imfiles = [
    os.path.join(test_dir, f) for f in os.listdir(test_dir)
    if os.path.isfile(os.path.join(test_dir, f)) and f.endswith('jpg')
]

if len(imfiles) == 0:
    print "ERR: path_to_images do not contain any jpg file"
    quit()

inputs = []
img_paths = []
chunk_size = 128  # we are going to process all image files in chunks
    quit()

priors = [[0.9, 1.2], [1.05, 1.35], [2.15, 2.55], [3.25, 3.75], [5.35, 5.1]]
input_shape = (3, 320, 320)

NUM_PRIORS = len(priors)
NUM_CLASSES = len(classes)

if model_name == 'tiny-yolo':
    tiny_yolo = True
else:
    tiny_yolo = False

model = build_yolo(img_shape=input_shape,
                   n_classes=NUM_CLASSES,
                   n_priors=5,
                   load_pretrained=False,
                   freeze_layers_from='base_model',
                   tiny=tiny_yolo)

model.load_weights(sys.argv[1])

test_dir = sys.argv[2]
imfiles = [
    os.path.join(test_dir, f) for f in os.listdir(test_dir)
    if os.path.isfile(os.path.join(test_dir, f)) and f.endswith('jpg')
]

if len(imfiles) == 0:
    print "ERR: path_to_images do not contain any jpg file"
    quit()
Example #3
0
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Assertions
        if 'tiramisu' in cf.model_name:
            input_rows, input_cols = cf.target_size_train[0], cf.target_size_train[1]
            multiple = 2 ** 5  # 5 transition blocks
            if input_rows is not None:
                if input_rows % multiple != 0:
                    raise ValueError('The number of rows of the input data must be a multiple of {}'.format(multiple))
            if input_cols is not None:
                if input_cols % multiple != 0:
                    raise ValueError(
                        'The number of columns of the input data must be a multiple of {}'.format(multiple))

        # Create the *Keras* model
        if cf.model_name == 'fcn8':
            model = build_fcn8(in_shape, cf.dataset.n_classes, cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               # path_weights='weights/pascal-fcn8s-dag.mat')
                               path_weights=None)
        elif cf.model_name == 'dilation':
            model = build_dilation(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                   freeze_layers_from=cf.freeze_layers_from,
                                   # path_weights='weights/pascal-fcn8s-dag.mat')
                                   path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None, basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None, basic=False)
        elif cf.model_name == 'densenetFCN':
            model = build_densenetFCN(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape, cf.dataset.n_classes, 16, cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape, cf.dataset.n_classes, 19, cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50':
            model = build_resnet50(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                   load_pretrained=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape, cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from, tiny=False)
        elif cf.model_name == 'tiny-yolo':
            model = build_yolo(in_shape, cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from, tiny=True)
        elif cf.model_name == 'ssd300':
            model = build_ssd300(in_shape, cf.dataset.n_classes + 1, cf.weight_decay,
                                 load_pretrained=cf.load_imageNet, freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'deeplabV2':
            model = build_deeplabv2(in_shape, nclasses=cf.dataset.n_classes, load_pretrained=cf.load_imageNet,
                                    freeze_layers_from=cf.freeze_layers_from, weight_decay=cf.weight_decay)
        elif cf.model_name == 'ssd300':
            model = build_ssd300(in_shape, cf.dataset.n_classes + 1, cf.weight_decay,
                                 load_pretrained=cf.load_imageNet,
                                 freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'tiramisu_fc56':
            model = build_tiramisu_fc56(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                        compression=0, dropout=0.2, nb_filter=48,
                                        freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'tiramisu_fc67':
            model = build_tiramisu_fc67(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                        compression=0, dropout=0.2, nb_filter=48,
                                        freeze_layers_from=cf.freeze_layers_from)

        elif cf.model_name == 'tiramisu_fc103':
            model = build_tiramisu_fc103(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                         compression=0, dropout=0.2, nb_filter=48,
                                         freeze_layers_from=cf.freeze_layers_from)

        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file + '...')
            model.load_weights(cf.weights_file, by_name=True)

        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print ('   Model: ' + cf.model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)
Example #4
0
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Create the *Keras* model
        if cf.model_name == 'fcn8':
            model = build_fcn8(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=cf.load_imageNet)
        elif cf.model_name == 'unet':
            model = build_unet(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=False)
        elif cf.model_name == 'resnetFCN':
            model = build_resnetFCN(in_shape,
                                    cf.dataset.n_classes,
                                    cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)
        elif cf.model_name == 'densenetFCN':
            model = build_densenetFCN(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from,
                                      path_weights=None)
        elif cf.model_name == 'lenet':
            model = build_lenet(in_shape, cf.dataset.n_classes,
                                cf.weight_decay)
        elif cf.model_name == 'alexNet':
            model = build_alexNet(in_shape, cf.dataset.n_classes,
                                  cf.weight_decay)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              16,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              19,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50':
            model = build_resnet50(in_shape,
                                   cf.dataset.n_classes,
                                   cf.weight_decay,
                                   load_pretrained=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'InceptionV3':
            model = build_inceptionV3(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      load_pretrained=cf.load_imageNet,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=False)
        elif cf.model_name == 'tiny-yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=True)
        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file + '...')
            model.load_weights(cf.weights_file, by_name=True)

        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot_model(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print('   Model: ' + cf.model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)
Example #5
0
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Create the *Keras* model
        if cf.model_name == 'fcn8':
            model = build_fcn8(in_shape, cf.dataset.n_classes, cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=cf.load_imageNet)
        elif cf.model_name == 'unet':
            model = build_unet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 basic=False)
        elif cf.model_name == 'resnetFCN':
            model = build_resnetFCN(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)
        elif cf.model_name == 'inceptionFCN':
            model = build_inceptionFCN(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)									
        elif cf.model_name == 'densenet':
            model = build_densenet(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from,
                                      path_weights=None)
        elif cf.model_name == 'lenet':
            model = build_lenet(in_shape, cf.dataset.n_classes, cf.weight_decay)
        elif cf.model_name == 'alexNet':
            model = build_alexNet(in_shape, cf.dataset.n_classes, cf.weight_decay)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape, cf.dataset.n_classes, 16, cf.weight_decay,
                              load_imageNet=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape, cf.dataset.n_classes, 19, cf.weight_decay,
                              load_imageNet=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50':
            model = build_resnet50(in_shape, cf.dataset.n_classes, cf.weight_decay,
                                   load_imageNet=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'InceptionV3':
            model = build_inceptionV3(in_shape, cf.dataset.n_classes,
                                      cf.weight_decay,
                                      load_imageNet=cf.load_imageNet,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape, cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_imageNet=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from, tiny=False)
        elif cf.model_name == 'tiny-yolo':
            model = build_yolo(in_shape, cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_imageNet=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from, tiny=True)
        elif cf.model_name == 'ssd':
            model = build_ssd(in_shape, cf.dataset.n_classes+1,
                              cf.dataset.n_priors,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'densenet_segmentation':
            model = build_densenet_segmentation(in_shape, cf.dataset.n_classes, weight_decay = cf.weight_decay,
                   freeze_layers_from = cf.freeze_layers_from, path_weights = cf.load_imageNet)
        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file + '...')
            # If the weights are from different datasets
            if cf.different_datasets:
                if cf.freeze_layers_from == 'base_model':
                    raise TypeError('Please, enter the layer id instead of "base_model"'
                          ' for the freeze_layers_from config parameter')
                croppedmodel = model_from_json(model.to_json())
                # Remove not frozen layers
                for i in range(len(model.layers[cf.freeze_layers_from:])):
                    croppedmodel.layers.pop()
                # Load weights only for the frozen layers
                croppedmodel.load_weights(cf.weights_file, by_name=True)
                model.set_weights(croppedmodel.get_weights())
            else:
                model.load_weights(cf.weights_file, by_name=True)

        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print ('   Model: ' + cf.model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)
    # Ignored classes
    if ignore_class:
        list_ignored_classes = ', '.join([classes[i] for i in ignore_class])
        print()
        print('IGNORED CLASSES: {}'.format(list_ignored_classes))
        print()

    # Plotting options
    colors = plt.cm.hsv(np.linspace(0, 1, num_classes)).tolist()
    plt.ioff()

    # Create the model
    if model_name == 'tiny-yolo':
        model = build_yolo(img_shape=input_shape,
                           n_classes=num_classes,
                           n_priors=5,
                           load_pretrained=False,
                           freeze_layers_from='base_model',
                           tiny=True)

    elif model_name == 'ssd':
        input_shape_ssd = np.roll(input_shape, -1)
        model = build_ssd300(input_shape_ssd.tolist(),
                             num_classes,
                             0,
                             load_pretrained=False,
                             freeze_layers_from='base_model')
    else:
        model = build_yolo(img_shape=input_shape,
                           n_classes=num_classes,
                           n_priors=5,
                           load_pretrained=False,
Example #7
0
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Create the *Keras* model
        if cf.model_name == 'fcn8':
            model = build_fcn8(
                in_shape,
                cf.dataset.n_classes,
                cf.weight_decay,
                freeze_layers_from=cf.freeze_layers_from,
                #path_weights='weights/pascal-fcn8s-dag.mat')
                path_weights=None)
        elif cf.model_name == 'unet':
            model = build_unet(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=False)
        elif cf.model_name == 'resnetFCN':
            model = build_resnetFCN(in_shape,
                                    cf.dataset.n_classes,
                                    cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)
        elif cf.model_name == 'densenetFCN':
            model = build_densenetFCN(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from,
                                      path_weights=None)
        elif cf.model_name == 'lenet':
            model = build_lenet(in_shape, cf.dataset.n_classes,
                                cf.weight_decay)
        elif cf.model_name == 'alexNet':
            model = build_alexNet(in_shape, cf.dataset.n_classes,
                                  cf.weight_decay)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              16,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              19,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50Keras':
            model = build_resnet50(in_shape,
                                   cf.dataset.n_classes,
                                   cf.weight_decay,
                                   load_pretrained=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet18':
            model = ResnetBuilder.build_resnet_18(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet34':
            model = ResnetBuilder.build_resnet_34(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet50':
            model = ResnetBuilder.build_resnet_50(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet101':
            model = ResnetBuilder.build_resnet_101(in_shape,
                                                   cf.dataset.n_classes)
        elif cf.model_name == 'resnet152':
            model = ResnetBuilder.build_resnet_152(in_shape,
                                                   cf.dataset.n_classes)
        elif cf.model_name == 'InceptionV3':
            model = build_inceptionV3(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      load_pretrained=cf.load_imageNet,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'densenet':
            model = build_densenet(in_shape, cf.dataset.n_classes,
                                   cf.weight_decay)

        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=False)
        elif cf.model_name == 'tiny-yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=True)
        elif cf.model_name == 'ssd':
            model = build_SSD300(in_shape, cf.dataset.n_classes)
            if cf.load_imageNet:
                # Rename last layer to not load pretrained weights
                model.layers[-1].name += '_new'
                model.load_weights('weights/weights_SSD300.hdf5', by_name=True)
        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file)
            #old_name=model.layers[-2].name
            #model.layers[-2].name=model.layers[-2].name+'_replaced'
            model.load_weights(cf.weights_file, by_name=True)
            #model.layers[-2].name=old_name
        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print('   Model: ' + cf.model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Create the *Keras* model
        model_name = cf.model_name
        if cf.model_name == 'fcn8':
            model = build_fcn8(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=cf.load_imageNet)
        elif cf.model_name == 'unet':
            model = build_unet(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=False)
        elif cf.model_name == 'resnetFCN':
            model = build_resnetFCN(in_shape,
                                    cf.dataset.n_classes,
                                    cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)
        elif cf.model_name == 'densenetFCN':
            model = build_densenetFCN(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from,
                                      path_weights=None)
        elif cf.model_name == 'densenet_fc':
            model = DenseNetFCN((224, 224, 3),
                                nb_dense_block=5,
                                growth_rate=16,
                                nb_layers_per_block=4,
                                upsampling_type='upsampling',
                                classes=cf.dataset.n_classes)
        elif cf.model_name == 'lenet':
            model = build_lenet(in_shape, cf.dataset.n_classes,
                                cf.weight_decay)
        elif cf.model_name == 'alexNet':
            model = build_alexNet(in_shape, cf.dataset.n_classes,
                                  cf.weight_decay)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              16,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              19,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50Keras':
            model = build_resnet50(in_shape,
                                   cf.dataset.n_classes,
                                   cf.weight_decay,
                                   load_pretrained=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet18':
            model = ResnetBuilder.build_resnet_18(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet34':
            model = ResnetBuilder.build_resnet_34(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet50':
            model = ResnetBuilder.build_resnet_50(in_shape,
                                                  cf.dataset.n_classes)
        elif cf.model_name == 'resnet101':
            model = ResnetBuilder.build_resnet_101(in_shape,
                                                   cf.dataset.n_classes)
        elif cf.model_name == 'resnet152':
            model = ResnetBuilder.build_resnet_152(in_shape,
                                                   cf.dataset.n_classes)
        elif cf.model_name == 'InceptionV3':
            model = build_inceptionV3(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      load_pretrained=cf.load_imageNet,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'densenet':
            model = build_densenet(in_shape, cf.dataset.n_classes,
                                   cf.weight_decay)

        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               typeNet='Regular')
        elif cf.model_name == 'tiny-yolo':
            if hasattr(cf, 'lookTwice'):
                yolt = cf.lookTwice
                if yolt:
                    model_name = 'Tiny-YOLT'
            else:
                yolt = False
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               typeNet='Tiny',
                               lookTwice=yolt)
        elif cf.model_name == 'yolt':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               typeNet='YOLT')
        elif cf.model_name == 'ssd':
            model = Build_SSD(in_shape,
                              cf.dataset.n_classes + 1,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)

        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file)
            model.load_weights(cf.weights_file, by_name=True)
        else:
            try:
                if cf.load_transferlearning:
                    print('   loading model weights from: ' + cf.weights_file)
                    old_name = model.layers[-2].name
                    model.layers[-2].name = model.layers[-2].name + '_replaced'
                    model.load_weights(cf.weights_file, by_name=True)
                    model.layers[-2].name = old_name
            except:
                pass
        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print('   Model: ' + model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)
Example #9
0
    def make_one_net_model(self, cf, in_shape, loss, metrics, optimizer):
        # Create the *Keras* model
        if cf.model_name == 'fcn8':
            model = build_fcn8(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=('weights/pascal-fcn8s-dag.mat'
                                             if cf.load_pascalVOC else None))
        elif cf.model_name == 'unet':
            model = build_unet(in_shape,
                               cf.dataset.n_classes,
                               cf.weight_decay,
                               freeze_layers_from=cf.freeze_layers_from,
                               path_weights=None)
        elif cf.model_name == 'segnet_basic':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=True)
        elif cf.model_name == 'segnet_vgg':
            model = build_segnet(in_shape,
                                 cf.dataset.n_classes,
                                 cf.weight_decay,
                                 freeze_layers_from=cf.freeze_layers_from,
                                 path_weights=None,
                                 basic=False)
        elif cf.model_name == 'resnetFCN':
            model = build_resnetFCN(in_shape,
                                    cf.dataset.n_classes,
                                    cf.weight_decay,
                                    freeze_layers_from=cf.freeze_layers_from,
                                    path_weights=None)
        elif cf.model_name == 'densenetFCN':
            model = build_densenetFCN(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      freeze_layers_from=cf.freeze_layers_from,
                                      path_weights=None)
        elif cf.model_name == 'lenet':
            model = build_lenet(in_shape, cf.dataset.n_classes,
                                cf.weight_decay)
        elif cf.model_name == 'alexNet':
            model = build_alexNet(in_shape, cf.dataset.n_classes,
                                  cf.weight_decay)
        elif cf.model_name == 'vgg16':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              16,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'vgg19':
            model = build_vgg(in_shape,
                              cf.dataset.n_classes,
                              19,
                              cf.weight_decay,
                              load_pretrained=cf.load_imageNet,
                              freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'resnet50':
            model = build_resnet50(in_shape,
                                   cf.dataset.n_classes,
                                   cf.weight_decay,
                                   load_pretrained=cf.load_imageNet,
                                   freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'InceptionV3':
            model = build_inceptionV3(in_shape,
                                      cf.dataset.n_classes,
                                      cf.weight_decay,
                                      load_pretrained=cf.load_imageNet,
                                      freeze_layers_from=cf.freeze_layers_from)
        elif cf.model_name == 'densenet':
            model = build_densenet(
                in_shape,
                cf.dataset.n_classes,
                layers_in_dense_block=cf.layers_in_dense_block,
                initial_filters=cf.initial_filters,
                growth_rate=cf.growth_rate,
                n_bottleneck=cf.n_bottleneck,
                compression=cf.compression,
                dropout=cf.dropout,
                weight_decay=cf.weight_decay)
        elif cf.model_name == 'yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=False)
        elif cf.model_name == 'tiny-yolo':
            model = build_yolo(in_shape,
                               cf.dataset.n_classes,
                               cf.dataset.n_priors,
                               load_pretrained=cf.load_imageNet,
                               freeze_layers_from=cf.freeze_layers_from,
                               tiny=True)
        elif cf.model_name == 'ssd300':
            model = build_ssd300(in_shape, cf.dataset.n_classes + 1)
            # TODO: find best parameters
            ssd_utils.initialize_module(model,
                                        in_shape,
                                        cf.dataset.n_classes + 1,
                                        overlap_threshold=0.5,
                                        nms_thresh=0.45,
                                        top_k=400)
        elif cf.model_name == 'tiramisu':
            model = build_tiramisu(
                in_shape,
                cf.dataset.n_classes,
                layers_in_dense_block=cf.layers_in_dense_block,
                initial_filters=cf.initial_filters,
                growth_rate=cf.growth_rate,
                n_bottleneck=cf.n_bottleneck,
                compression=cf.compression,
                dropout=cf.dropout,
                weight_decay=cf.weight_decay)
        elif cf.model_name == 'ssd300_pretrained':
            model = build_ssd300_pretrained(in_shape, cf.dataset.n_classes + 1)
            # TODO: find best parameters
            ssd_utils.initialize_module(model,
                                        in_shape,
                                        cf.dataset.n_classes + 1,
                                        overlap_threshold=0.5,
                                        nms_thresh=0.45,
                                        top_k=400)
        elif cf.model_name == 'ssd_resnet50':
            model = build_ssd_resnet50(in_shape, cf.dataset.n_classes + 1)
            # TODO: find best parameters
            ssd_utils.initialize_module(model,
                                        in_shape,
                                        cf.dataset.n_classes + 1,
                                        overlap_threshold=0.5,
                                        nms_thresh=0.45,
                                        top_k=400)
        else:
            raise ValueError('Unknown model')

        # Load pretrained weights
        if cf.load_pretrained:
            print('   loading model weights from: ' + cf.weights_file + '...')
            model.load_weights(cf.weights_file, by_name=True)

        # Compile model
        model.compile(loss=loss, metrics=metrics, optimizer=optimizer)

        # Show model structure
        if cf.show_model:
            model.summary()
            plot(model, to_file=os.path.join(cf.savepath, 'model.png'))

        # Output the model
        print('   Model: ' + cf.model_name)
        # model is a keras model, Model is a class wrapper so that we can have
        # other models (like GANs) made of a pair of keras models, with their
        # own ways to train, test and predict
        return One_Net_Model(model, cf, optimizer)