Пример #1
0
def AlexNet(weights_path=None, heatmap=False):
    if heatmap:
        inputs = Input(shape=(3,None,None))
    else:
        inputs = Input(shape=(3,227,227))
    
    conv_1 = Convolution2D(96, 11, 11,subsample=(4,4),activation='relu',
                           name='conv_1')(inputs)
    
    conv_2 = MaxPooling2D((3, 3), strides=(2,2))(conv_1)
    conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2,2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,5,5,activation="relu",name='conv_2_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_2)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1,1))(conv_3)
    conv_3 = Convolution2D(384,3,3,activation='relu',name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1,1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,3,3,activation="relu",name='conv_4_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_4)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_4")

    conv_5 = ZeroPadding2D((1,1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,3,3,activation="relu",name='conv_5_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_5)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_5")
    
    dense_1 = MaxPooling2D((3, 3), strides=(2,2),name="convpool_5")(conv_5)

    if heatmap:
        dense_1 = Convolution2D(4096,6,6,activation="relu",name="dense_1")(dense_1)
        dense_2 = Convolution2D(4096,1,1,activation="relu",name="dense_2")(dense_1)
        dense_3 = Convolution2D(1000, 1,1,name="dense_3")(dense_2)
        prediction = Softmax4D(axis=1,name="softmax")(dense_3)
    else:
        dense_1 = Flatten(name="flatten")(dense_1)
        dense_1 = Dense(4096, activation='relu',name='dense_1')(dense_1)
        dense_2 = Dropout(0.5)(dense_1)
        dense_2 = Dense(4096, activation='relu',name='dense_2')(dense_2)
        dense_3 = Dropout(0.5)(dense_2)  
        dense_3 = Dense(1000,name='dense_3')(dense_3)
        prediction = Activation("softmax",name="softmax")(dense_3)

    
    model = Model(input=inputs, output=prediction)

    if weights_path:
        model.load_weights(weights_path)

    return model
Пример #2
0
def AlexNet(weights_path=None, heatmap=False, classes = 1000):
    if heatmap:
        inputs = Input(shape=(3,None,None))
    else:
        inputs = Input(shape=(3,227,227))

    conv_1 = Convolution2D(96, (11, 11),strides=(4,4),activation='relu',
                           name='conv_1')(inputs)

    conv_2 = MaxPooling2D((3, 3), strides=(2,2))(conv_1)
    conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2,2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,(5,5),activation="relu",name='conv_2_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_2)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1,1))(conv_3)
    conv_3 = Convolution2D(384,(3,3),activation='relu',name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1,1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,(3,3),activation="relu",name='conv_4_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_4)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_4")

    conv_5 = ZeroPadding2D((1,1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,(3,3),activation="relu",name='conv_5_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_5)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2,2),name="convpool_5")(conv_5)
    dense_1 = Flatten(name="flatten")(dense_1)
    dense_1 = Dense(4096, activation='relu',name='dense_1')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu',name='dense_2')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)   
    dense_3 = Dense(classes, name='dense_3a')(dense_3)
    prediction = Activation("softmax",name="softmaxa")(dense_3)


    model = Model(input=inputs, output=prediction, name='alexnet')

    if weights_path:
        model.load_weights(weights_path, by_name=True)

    # Learning rate is changed to 0.0001
    sgd = SGD(lr=1e-4, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])


    return model
Пример #3
0
def AlexNet(weights_path=None, heatmap=False):
    if heatmap:
        inputs = Input(shape=(3,None,None))
    else:
        inputs = Input(shape=(1,227,227))

    conv_1 = Convolution2D(96, 11, 11,subsample=(4,4),activation='relu',
                           name='conv_1')(inputs)

    conv_2 = MaxPooling2D((3, 3), strides=(2,2))(conv_1)
    conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2,2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,5,5,activation="relu",name='conv_2_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_2)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1,1))(conv_3)
    conv_3 = Convolution2D(384,3,3,activation='relu',name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1,1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,3,3,activation="relu",name='conv_4_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_4)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_4")

    conv_5 = ZeroPadding2D((1,1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,3,3,activation="relu",name='conv_5_'+str(i+1))(
            splittensor(ratio_split=2,id_split=i)(conv_5)
        ) for i in range(2)], mode='concat',concat_axis=1,name="conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2,2),name="convpool_5")(conv_5)

    if heatmap:
        dense_1 = Convolution2D(4096,6,6,activation="relu",name="dense_1")(dense_1)
        dense_2 = Convolution2D(4096,1,1,activation="relu",name="dense_2")(dense_1)
        dense_3 = Convolution2D(1000, 1,1,name="dense_3")(dense_2)
        prediction = Softmax4D(axis=1,name="softmax")(dense_3)
    else:
        dense_1 = Flatten(name="flatten")(dense_1)
        dense_1 = Dense(4096, activation='relu',name='dense_1')(dense_1)
        dense_2 = Dropout(0.5)(dense_1)
        dense_2 = Dense(4096, activation='relu',name='dense_2')(dense_2)
        dense_3 = Dropout(0.5)(dense_2)
        dense_3 = Dense(2,name='dense_3')(dense_3)
        prediction = Activation("softmax",name="softmax")(dense_3)


    model = Model(input=inputs, output=prediction)
Пример #4
0
def my_model_def(input_dim=(3, 128, 128), nb_classes=3):
    # MOdel Definition
    inputs = Input(shape=input_dim)

    norma1 = BatchNormalization(axis=1)(inputs)
    conv1 = Conv2D(96, (7, 7),
                   padding='same',
                   activation='relu',
                   strides=(4, 4),
                   kernel_initializer='he_normal')(norma1)
    pool1 = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding='same')(conv1)

    conv2 = Concatenate(axis=1)([
        Conv2D(128, (5, 5),
               activation="relu",
               strides=(2, 2),
               padding='same',
               kernel_initializer='he_normal',
               name='conv2_' + str(i + 1))(splittensor(ratio_split=2,
                                                       id_split=i)(pool1))
        for i in range(2)
    ])

    norma2 = BatchNormalization(axis=1)(conv2)
    conv2 = Conv2D(128, (5, 5),
                   activation="relu",
                   padding='same',
                   strides=(2, 2),
                   kernel_initializer='he_normal')(norma2)
    pool2 = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding='same')(conv2)

    norma3 = BatchNormalization(axis=1)(pool2)
    conv3 = Conv2D(256, (3, 3),
                   strides=(2, 2),
                   padding='same',
                   activation='relu',
                   kernel_initializer='he_normal')(norma3)
    conv3 = Dropout(rate=0.5, seed=10)(conv3)
    conv3 = MaxPool2D(pool_size=(3, 3), strides=(2, 2), padding='same')(conv3)

    dense1 = Flatten(name="flatten")(conv3)
    dense1 = Dense(4096, activation='relu',
                   kernel_initializer='he_normal')(dense1)
    dense1 = Dropout(0.5)(dense1)

    dense2 = Dense(4096, activation='relu',
                   kernel_initializer='he_normal')(dense1)
    dense2 = Dropout(rate=0.5)(dense2)

    dense3 = Dense(nb_classes,
                   name='dense3_new',
                   kernel_initializer='he_normal')(dense2)
    prediction = Activation("softmax")(dense3)

    model = Model(inputs=inputs, outputs=prediction)

    return model
Пример #5
0
def AlexNet(weights_path=None,
            inputs1=None,
            inputs2=None,
            id='',
            trainable=True):

    conv_1_op = Convolution2D(96,
                              11,
                              11,
                              subsample=(4, 4),
                              activation='relu',
                              name=id + 'conv_1',
                              trainable=trainable)

    conv_1 = conv_1_op(inputs1)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name=id + "convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)

    conv_2_op_a = Convolution2D(128,
                                5,
                                5,
                                activation="relu",
                                name=id + 'conv_2_1',
                                trainable=trainable)
    conv_2_op_b = Convolution2D(128,
                                5,
                                5,
                                activation="relu",
                                name=id + 'conv_2_2',
                                trainable=trainable)
    conv_2 = merge([
        conv_2_op_a(splittensor(ratio_split=2, id_split=0)(conv_2)),
        conv_2_op_b(splittensor(ratio_split=2, id_split=1)(conv_2))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)

    conv_3_op = Convolution2D(384,
                              3,
                              3,
                              activation='relu',
                              name=id + 'conv_3',
                              trainable=trainable)
    conv_3 = conv_3_op(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)

    conv_4_op_a = Convolution2D(192,
                                3,
                                3,
                                activation="relu",
                                name=id + 'conv_4_1',
                                trainable=trainable)
    conv_4_op_b = Convolution2D(192,
                                3,
                                3,
                                activation="relu",
                                name=id + 'conv_4_2',
                                trainable=trainable)

    conv_4 = merge([
        conv_4_op_a(splittensor(ratio_split=2, id_split=0)(conv_4)),
        conv_4_op_b(splittensor(ratio_split=2, id_split=1)(conv_4))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)

    conv_5_op_a = Convolution2D(128,
                                3,
                                3,
                                activation="relu",
                                name=id + 'conv_5_1',
                                trainable=trainable)
    conv_5_op_b = Convolution2D(128,
                                3,
                                3,
                                activation="relu",
                                name=id + 'conv_5_2',
                                trainable=trainable)
    conv_5 = merge([
        conv_5_op_a(splittensor(ratio_split=2, id_split=0)(conv_5)),
        conv_5_op_b(splittensor(ratio_split=2, id_split=1)(conv_5))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_5")

    dense_1 = MaxPooling2D((3, 3),
                           strides=(2, 2),
                           name=id + "convpool_5",
                           trainable=trainable)(conv_5)
    dense_1 = Flatten(name=id + "flatten")(dense_1)

    dense_1_op = Dense(4096,
                       activation='relu',
                       name=id + 'dense_1',
                       trainable=trainable)
    dense_1_a = dense_1_op(dense_1)

    dense_2_op = Dense(4096,
                       activation='relu',
                       name=id + 'dense_2_gel',
                       trainable=True)
    dense_2 = dense_2_op(dense_1_a)

    dense_3_op = Dense(1000,
                       name=id + 'dense_3_100',
                       activation='sigmoid',
                       trainable=trainable)
    dense_3 = dense_3_op(dense_2)

    model = Model(input=inputs1, output=dense_3)

    if weights_path:
        model.load_weights(weights_path, by_name=True)
        print "model loaded"
        #model.save_weights('../../data/weights/alexnet_weights_finetune.h5')

    super_op = Dense(8, name=id + 'supervision', activation='softmax')
    dense_4_1 = dense_2
    supervision_1 = super_op(dense_4_1)

    # FOR INPUTS2
    id = '2'

    conv_1 = conv_1_op(inputs2)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name=id + "convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)

    conv_2 = merge([
        conv_2_op_a(splittensor(ratio_split=2, id_split=0)(conv_2)),
        conv_2_op_b(splittensor(ratio_split=2, id_split=1)(conv_2))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)

    conv_3 = conv_3_op(conv_3)
    conv_4 = ZeroPadding2D((1, 1))(conv_3)

    conv_4 = merge([
        conv_4_op_a(splittensor(ratio_split=2, id_split=0)(conv_4)),
        conv_4_op_b(splittensor(ratio_split=2, id_split=1)(conv_4))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        conv_5_op_a(splittensor(ratio_split=2, id_split=0)(conv_5)),
        conv_5_op_b(splittensor(ratio_split=2, id_split=1)(conv_5))
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2),
                           name=id + "convpool_5")(conv_5)
    dense_1 = Flatten(name=id + "flatten")(dense_1)
    dense_1_1 = dense_1_op(dense_1)
    dense_2 = dense_2_op(dense_1_1)

    dense_4_2 = dense_2
    super_op = Dense(8, name=id + 'supervision', activation='softmax')
    supervision_2 = super_op(dense_4_2)

    single_model = Model(input=inputs1, output=dense_4_1)
    return dense_4_1, dense_4_2, supervision_1, supervision_2
Пример #6
0
def get_alex(params, weights=None):

    #inputs = Input(shape=(params['nb_channels'], params['im_size'], params['im_size']))

    inputs = Input(shape=(3, params['im_size'], params['im_size']))

    #model.add(Convolution2D(96, (3, 3), activation='relu', padding='same', name='conv2', strides=(1, 1)))

    conv_1 = Convolution2D(96, (11, 11),
                           strides=(4, 4),
                           activation='relu',
                           name='conv_1')(inputs)

    conv_2 = MaxPooling2D(pool_size=(3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name='convpool_1')(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(
            128, 5, 5, activation='relu', name='conv_2_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_2))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_2')

    conv_3 = MaxPooling2D(pool_size=(3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384, 3, 3, activation='relu', name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(
            192, 3, 3, activation='relu', name='conv_4_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_4))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_4')

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(
            128, 3, 3, activation='relu', name='conv_5_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_5))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_5')

    dense_1 = MaxPooling2D(pool_size=(3, 3), strides=(2, 2),
                           name='convpool_5')(conv_5)

    dense_1 = Flatten(name='flatten')(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(1000, name='dense_3')(dense_3)
    prediction = Activation('softmax', name='softmax')(dense_3)

    model = Model(input=inputs, output=prediction)

    if weights:
        model.load_weights(weights)

    return model
def get_alexnet(input_shape, nb_classes, mean_flag):
    # code adapted from https://github.com/heuritech/convnets-keras

    inputs = Input(shape=input_shape)

    if mean_flag:
        mean_subtraction = Lambda(mean_subtract,
                                  name='mean_subtraction')(inputs)
        conv_1 = Convolution2D(96,
                               11,
                               11,
                               subsample=(4, 4),
                               activation='relu',
                               name='conv_1',
                               init='he_normal')(mean_subtraction)
    else:
        conv_1 = Convolution2D(96,
                               11,
                               11,
                               subsample=(4, 4),
                               activation='relu',
                               name='conv_1',
                               init='he_normal')(inputs)

    conv_2 = crosschannelnormalization(name="convpool_1")(conv_1)
    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,
                      5,
                      5,
                      activation="relu",
                      init='he_normal',
                      name='conv_2_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_2)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_2")

    conv_3 = crosschannelnormalization()(conv_2)
    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384,
                           3,
                           3,
                           activation='relu',
                           name='conv_3',
                           init='he_normal')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,
                      3,
                      3,
                      activation="relu",
                      init='he_normal',
                      name='conv_4_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_4)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,
                      3,
                      3,
                      activation="relu",
                      init='he_normal',
                      name='conv_5_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_5)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name="convpool_5")(conv_5)

    dense_1 = Flatten(name="flatten")(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1',
                    init='he_normal')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2',
                    init='he_normal')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(nb_classes, name='dense_3_new', init='he_normal')(dense_3)

    prediction = Activation("softmax", name="softmax")(dense_3)

    alexnet = Model(input=inputs, output=prediction)

    return alexnet
Пример #8
0
def alexnet_model(img_rows, img_cols, channels=1, num_classes=None, use_pretraining=True,
                  pretrained_weights_path=None, fine_tuning_method=END_TO_END_FINE_TUNING, optimizer=None, loss=None,
                  weights_path=None):
    inputs = Input(shape=(channels, img_rows, img_cols))
    conv_1 = Convolution2D(96, 11, 11, subsample=(4, 4), activation='relu',
                           name='conv_1')(inputs)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name='convpool_1')(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(128, 5, 5, activation='relu', name='conv_2_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_2)
        ) for i in range(2)], mode='concat', concat_axis=1, name='conv_2')

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384, 3, 3, activation='relu', name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(192, 3, 3, activation='relu', name='conv_4_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_4)
        ) for i in range(2)], mode='concat', concat_axis=1, name='conv_4')

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(128, 3, 3, activation='relu', name='conv_5_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_5)
        ) for i in range(2)], mode='concat', concat_axis=1, name='conv_5')

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name='convpool_5')(conv_5)
    dense_1 = Flatten(name='flatten')(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(1000, name='dense_3')(dense_3)
    prediction = Activation('softmax', name='softmax')(dense_3)

    model = Model(input=inputs, output=prediction)

    # Load from ImageNet pretrained weights only if creating a new model
    if weights_path is None:
        if use_pretraining:
            if pretrained_weights_path:
                model.load_weights(pretrained_weights_path)
            else:
                raise Exception('use_pretraining is true but pretrained_weights_path is not specified!')

    # Removing the final dense_3 layer and adding the layers with correct classification size
    model.layers.pop()
    model.layers.pop()

    last = model.layers[-1].output
    last = Dense(num_classes, name='dense_3')(last)
    prediction = Activation('softmax', name='softmax')(last)

    model = Model(model.input, prediction)

    if fine_tuning_method == FREEZE_INITIAL_LAYERS:
        print(get_time_string() + 'Freezing initial 20 layers of the network..')
        for layer in model.layers[:20]:
            layer.trainable = False

    # Load from previously saved weights
    if weights_path is not None:
        model.load_weights(weights_path)

    if optimizer == 'sgd':
        optimizer = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True)
    if loss == 'l1':
        loss = get_l1_loss

    print(get_time_string() + 'Compiling the model..')
    model.compile(optimizer=optimizer, loss=loss)

    print('Number of layers: ' + str(len(model.layers)))
    print(model.summary())

    return model
Пример #9
0
    def alexnet_branches(self, train=True):
        p = 0.6

        if not train:
            p = 0.0

        inputs = Input(shape=(3, 227, 227))
        self.inputs = inputs
        conv_1 = Convolution2D(96,
                               11,
                               11,
                               subsample=(4, 4),
                               activation='relu',
                               name='conv_1')(inputs)

        conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
        conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
        conv_2 = ZeroPadding2D((2, 2))(conv_2)
        conv_2 = merge([
            Convolution2D(
                128, 5, 5, activation="relu", name='conv_2_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_2))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_2")

        conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
        conv_3 = crosschannelnormalization()(conv_3)
        conv_3 = ZeroPadding2D((1, 1))(conv_3)
        conv_3 = Convolution2D(384, 3, 3, activation='relu',
                               name='conv_3')(conv_3)

        conv_4_0 = ZeroPadding2D((1, 1))(conv_3)
        conv_4 = merge([
            Convolution2D(
                192, 3, 3, activation="relu", name='conv_4_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_4_0))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_4")

        conv_5_0 = ZeroPadding2D((1, 1))(conv_4)
        conv_5 = merge([
            Convolution2D(
                128, 3, 3, activation="relu", name='conv_5_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_5_0))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_5")

        finalmax = MaxPooling2D((3, 3), strides=(2, 2),
                                name="convpool_5")(conv_5)

        dense_1_1 = Flatten(name="flatten")(finalmax)
        dense_1 = Dense(4096, activation='relu')(dense_1_1)
        dense_2 = Dropout(p)(dense_1)
        dense_2 = Dense(4096, activation='relu')(dense_2)
        dense_3 = Dropout(p)(dense_2)
        dense_4 = Dense(1000)(dense_3)
        prediction = Activation("softmax", name="softmax")(dense_4)

        model = Model(input=inputs, output=prediction)

        if train:
            model.load_weights('weights/alexnet_weights.h5')

        for i in range(9):
            model.layers.pop()

        #up1 = UpSampling2D((15,15),dim_ordering='th')(conv_5_0)
        branches = []
        for i in range(21):
            branches.append(self.branchout(conv_5_0, 'uniform'))

        prediction = merge(branches, mode='concat', concat_axis=1)
        #prediction = Activation('softmax')(prediction)
        prediction = Lambda(self.maxnorm,
                            output_shape=self.maxnormshape)(prediction)

        model = Model(input=inputs, output=prediction)

        if not train:
            model.load_weights('newweights/alexvoc_branchavg.h5')

        self.model = model

        print(model.summary())
        self.model.compile(loss='categorical_crossentropy',
                           optimizer=sgd,
                           metrics=['mse'])
        return self.model
Пример #10
0
    def alexnetcam(self, train=True):
        p = 0.6

        if not train:
            p = 0.0

        inputs = Input(shape=(3, 227, 227))
        self.inputs = inputs
        conv_1 = Convolution2D(96,
                               11,
                               11,
                               subsample=(4, 4),
                               activation='relu',
                               name='conv_1')(inputs)

        conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
        conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
        conv_2 = ZeroPadding2D((2, 2))(conv_2)
        conv_2 = merge([
            Convolution2D(
                128, 5, 5, activation="relu", name='conv_2_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_2))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_2")

        conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
        conv_3 = crosschannelnormalization()(conv_3)
        conv_3 = ZeroPadding2D((1, 1))(conv_3)
        conv_3 = Convolution2D(384, 3, 3, activation='relu',
                               name='conv_3')(conv_3)

        conv_4_0 = ZeroPadding2D((1, 1))(conv_3)
        conv_4 = merge([
            Convolution2D(
                192, 3, 3, activation="relu", name='conv_4_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_4_0))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_4")

        conv_5_0 = ZeroPadding2D((1, 1))(conv_4)
        conv_5 = merge([
            Convolution2D(
                128, 3, 3, activation="relu", name='conv_5_' + str(i + 1))(
                    splittensor(ratio_split=2, id_split=i)(conv_5_0))
            for i in range(2)
        ],
                       mode='concat',
                       concat_axis=1,
                       name="conv_5")

        finalmax = MaxPooling2D((3, 3), strides=(2, 2),
                                name="convpool_5")(conv_5)

        dense_1_1 = Flatten(name="flatten")(finalmax)
        dense_1 = Dense(4096, activation='relu')(dense_1_1)
        dense_2 = Dropout(p)(dense_1)
        dense_2 = Dense(4096, activation='relu')(dense_2)
        dense_3 = Dropout(p)(dense_2)
        dense_4 = Dense(1000)(dense_3)
        prediction = Activation("softmax", name="softmax")(dense_4)

        model = Model(input=inputs, output=prediction)

        if train:
            model.load_weights('weights/alexnet_weights.h5')

        for i in range(9):
            model.layers.pop()

        for layer in model.layers:
            layer.trainable = False

        conv_5 = Convolution2D(256,
                               3,
                               3,
                               activation="relu",
                               border_mode='same',
                               init='glorot_uniform')(conv_5_0)
        #conv_5 = Convolution2D(32,3,3,activation="relu",border_mode='same',init='glorot_uniform')(conv_5_0)
        finalmax = AveragePooling2D((15, 15))(conv_5)
        dense_3 = Flatten()(finalmax)
        dense_4 = Dense(20, init='glorot_uniform')(dense_3)

        prediction = Activation("sigmoid", name="softmax")(dense_4)

        model = Model(input=inputs, output=prediction)

        if not train:
            model.load_weights('newweights/alexvoc_cam.h5')

        self.model = model

        print(model.summary())
        self.model.compile(loss='categorical_crossentropy',
                           optimizer=sgd,
                           metrics=['mse'])
        return self.model
Пример #11
0
def AlexNet_100(weights_path=None, heatmap=False):
    if heatmap:
        inputs = Input(shape=(None, None, 3))
    else:
        inputs = Input(shape=(100, 100, 3))

    conv_1 = Conv2D(96, (11, 11),
                    strides=(4, 4),
                    activation='relu',
                    name='conv_1')(inputs)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name='convpool_1')(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Conv2D(128, (5, 5), activation='relu', name='conv_2_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_2)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=-1,
                   name='conv_2')

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Conv2D(384, (3, 3), activation='relu', name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Conv2D(192, (3, 3), activation='relu', name='conv_4_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_4)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=-1,
                   name='conv_4')

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Conv2D(128, (3, 3), activation='relu', name='conv_5_' + str(i + 1))(
            splittensor(ratio_split=2, id_split=i)(conv_5)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=-1,
                   name='conv_5')

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name='convpool_5')(conv_5)

    if heatmap:
        dense_1 = Conv2D(4096, (6, 6), activation='relu',
                         name='dense_1')(dense_1)
        dense_2 = Conv2D(4096, (1, 1), activation='relu',
                         name='dense_2')(dense_1)
        dense_3 = Conv2D(1000, (1, 1), name='dense_3')(dense_2)
        prediction = Softmax4D(axis=1, name='softmax')(dense_3)
    else:
        dense_1 = Flatten(name='flatten')(dense_1)
        dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
        dense_2 = Dropout(0.5)(dense_1)
        dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_2)
        dense_3 = Dropout(0.5)(dense_2)
        dense_3 = Dense(1000, name='dense_3')(dense_3)
        prediction = Activation('softmax', name='softmax')(dense_3)

    model = Model(input=inputs, output=prediction)

    if weights_path:
        model.load_weights(weights_path)

    lastlayer = model.layers[-3].output
    if heatmap:
        dense_3 = Conv2D(1000, (1, 1), activation='relu',
                         name='dense_3')(lastlayer)
        dense_4 = Conv2D(2, (1, 1), name='dense_4')(dense_3)
        prediction = Softmax4D(axis=1, name='softmax')(dense_4)
    else:
        dense_3 = Dense(1000, activation='relu', name='dense_3')(lastlayer)
        dense_4 = Dropout(0.5)(dense_3)
        dense_4 = Dense(2, name='dense_4')(dense_4)
        prediction = Activation('softmax', name='softmax')(dense_4)

    model = Model(inputs=inputs, outputs=prediction)

    return model
Пример #12
0
def AlexNet(weights_path=None,
            inputs=None,
            id='1',
            trainable=True,
            finetune=False,
            last_layer=None):
    if inputs == None:
        inputs = Input(shape=(3, 227, 227))

    conv_1 = Convolution2D(96,
                           11,
                           11,
                           subsample=(4, 4),
                           activation='relu',
                           name=id + 'conv_1',
                           trainable=trainable)(inputs)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name=id + "convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,
                      5,
                      5,
                      activation="relu",
                      name=id + 'conv_2_' + str(i + 1),
                      trainable=trainable)(splittensor(ratio_split=2,
                                                       id_split=i)(conv_2))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384,
                           3,
                           3,
                           activation='relu',
                           name=id + 'conv_3',
                           trainable=trainable)(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,
                      3,
                      3,
                      activation="relu",
                      name=id + 'conv_4_' + str(i + 1),
                      trainable=trainable)(splittensor(ratio_split=2,
                                                       id_split=i)(conv_4))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,
                      3,
                      3,
                      activation="relu",
                      name=id + 'conv_5_' + str(i + 1),
                      trainable=trainable)(splittensor(ratio_split=2,
                                                       id_split=i)(conv_5))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name=id + "conv_5")

    dense_1 = MaxPooling2D((3, 3),
                           strides=(2, 2),
                           name=id + "convpool_5",
                           trainable=trainable)(conv_5)

    dense_1 = Flatten(name=id + "flatten")(dense_1)
    dense_1 = Dense(4096,
                    activation='relu',
                    name=id + 'dense_1',
                    trainable=trainable)(dense_1)
    dense_2 = Dense(4096, name=id + 'dense_4', trainable=True)(dense_1)
    dense_2_act = Activation('relu')(dense_2)

    dense_2_alex = Dense(4096,
                         name=id + 'dense_4',
                         trainable=True,
                         W_regularizer=l2(0))(dense_1)
    dense_2_alex_act = Activation('relu',
                                  name=id + 'dense_4_embedding')(dense_2_alex)
    dense_3_alex = Dense(1000,
                         name=id + 'dense_3_100',
                         activation='sigmoid',
                         trainable=trainable)(dense_2_alex_act)

    if last_layer == None:
        last_layer = Dense(8,
                           name=id + 'dense_3_100',
                           activation='softmax',
                           trainable=True,
                           W_regularizer=l2(0))
        dense_3 = last_layer(dense_2_alex_act)
    else:
        dense_3 = last_layer(dense_2_alex_act)

    if finetune:
        model_classification = Model(input=inputs, output=dense_3)
        output = dense_2
    else:
        model_classification = Model(input=inputs, output=dense_3_alex)
        output = dense_2_alex

    if weights_path:
        model_classification.load_weights(weights_path)  #, by_name=True)
        print "model loaded"
        #model.save_weights('../../data/weights/alexnet_weights_finetune.h5')

    return dense_3, dense_2_alex_act, last_layer
def AlexNet_base(weights_path=None, input_tensor=None):
    if input_tensor is not None:
        inputs = input_tensor
    else:
        inputs = Input(shape=(3, 227, 227))

    mean_subtraction = Lambda(mean_subtract, name='mean_subtraction')(inputs)

    conv_1 = Convolution2D(96,
                           11,
                           11,
                           subsample=(4, 4),
                           activation='relu',
                           name='conv_1')(mean_subtraction)

    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(
            128, 5, 5, activation="relu", name='conv_2_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_2))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384, 3, 3, activation='relu', name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(
            192, 3, 3, activation="relu", name='conv_4_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_4))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(
            128, 3, 3, activation="relu", name='conv_5_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_5))
        for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name="conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name="convpool_5")(conv_5)

    dense_1 = Flatten(name="flatten")(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
    # dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_1)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(1000, name='dense_3')(dense_3)
    prediction = Activation("softmax", name="softmax")(dense_3)

    model = Model(inputs=inputs, outputs=prediction)

    if weights_path:
        model.load_weights(weights_path)

    x = model.layers[29].output

    new_model = Model(inputs=inputs, outputs=x)

    return new_model
def my_model_def(input_dim=(3, 128, 128),
                 nb_classes=3,
                 drop_out=0.5,
                 fmap_size=[128, 500, 4096]):
    # MOdel Definition
    inputs = Input(shape=input_dim, name='input')

    conv1 = Conv2D(96, (7, 7),
                   padding='same',
                   activation='relu',
                   strides=(1, 1),
                   kernel_initializer='he_normal',
                   name='conv1')(inputs)
    pool1 = MaxPool2D(pool_size=(3, 3),
                      strides=(2, 2),
                      padding='same',
                      name='pool1')(conv1)

    concat2 = Concatenate(axis=1, name='concat1')([
        Conv2D(48, (5, 5),
               activation="relu",
               strides=(2, 2),
               padding='same',
               kernel_initializer='he_normal',
               name='conv2_' + str(i + 1))(splittensor(ratio_split=2,
                                                       id_split=i)(pool1))
        for i in range(2)
    ])
    pool2_1 = MaxPool2D(pool_size=(3, 3),
                        strides=(2, 2),
                        padding='same',
                        name='pool2_1')(concat2)

    conv2 = Conv2D(384, (5, 5),
                   activation="relu",
                   padding='same',
                   strides=(2, 2),
                   kernel_initializer='he_normal',
                   name='conv2_3')(pool2_1)
    pool2_2 = MaxPool2D(pool_size=(3, 3),
                        strides=(2, 2),
                        padding='same',
                        name='pool2_2')(conv2)

    concat3 = Concatenate(axis=1, name='concat3')([
        Conv2D(fmap_size[0], (5, 5),
               activation="relu",
               strides=(2, 2),
               padding='same',
               kernel_initializer='he_normal',
               name='conv3_' + str(i + 1))(splittensor(ratio_split=2,
                                                       id_split=i)(pool2_2))
        for i in range(2)
    ])
    pool3 = MaxPool2D(pool_size=(3, 3),
                      strides=(2, 2),
                      padding='same',
                      name='pool3')(concat3)

    #    conv3 = Conv2D(250, (3, 3), strides=(2, 2), padding='same', activation='relu',
    #                   kernel_initializer='he_normal', name='conv3_1')(pool2_2)
    #    pool3 = MaxPool2D(pool_size=(3, 3), strides=(1, 1), padding='same', name='conv3_2')(conv3)

    conv4 = Conv2D(fmap_size[1], (3, 3),
                   strides=(2, 2),
                   padding='same',
                   activation='relu',
                   kernel_initializer='he_normal',
                   name='conv4_1')(pool3)
    pool4 = MaxPool2D(pool_size=(3, 3),
                      strides=(1, 1),
                      padding='same',
                      name='pool4')(conv4)
    drop4 = Dropout(rate=drop_out, seed=10, name='drop4')(pool4)

    flatten5 = Flatten(name="flatten")(drop4)
    dense5 = Dense(fmap_size[2],
                   activation='relu',
                   kernel_initializer='he_normal',
                   name='dense5')(flatten5)
    drop5 = Dropout(rate=drop_out - 0.3)(dense5)

    dense6 = Dense(fmap_size[2],
                   activation='relu',
                   kernel_initializer='he_normal',
                   name='dense6_1')(drop5)
    dense6 = Dense(nb_classes, kernel_initializer='he_normal',
                   name='dense6_2')(dense6)
    prediction = Activation("softmax", name='softmax_act')(dense6)

    model = Model(inputs=inputs, outputs=prediction)

    return model
Пример #15
0
def AlexNet():
    inputs = Input(shape=(3, 200, 200))

    conv_1 = Convolution2D(96,
                           11,
                           11,
                           subsample=(4, 4),
                           activation='relu',
                           name='conv_1')(inputs)

    conv_2 = LRN2D(name='convpool_1')(conv_1)
    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = merge([
        Convolution2D(128,
                      5,
                      5,
                      activation='relu',
                      init='glorot_uniform',
                      bias=True,
                      name='conv_2_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_2)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_2')

    conv_3 = LRN2D()(conv_2)
    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384,
                           3,
                           3,
                           activation='relu',
                           init='glorot_uniform',
                           bias=True,
                           name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = merge([
        Convolution2D(192,
                      3,
                      3,
                      activation='relu',
                      bias=True,
                      init='glorot_uniform',
                      name='conv_4_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_4)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_4')

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = merge([
        Convolution2D(128,
                      3,
                      3,
                      activation='relu',
                      init='glorot_uniform',
                      bias=True,
                      name='conv_5_' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_5)) for i in range(2)
    ],
                   mode='concat',
                   concat_axis=1,
                   name='conv_5')

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name='convpool_5')(conv_5)

    dense_1 = Flatten(name='flatten')(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(16000, name='dense_3')(dense_3)
    reshape = Reshape((400, 40))(dense_3)
    prediction = Activation('softmax', name='softmax')(reshape)

    model = Model(input=inputs, output=prediction)

    return model
Пример #16
0
def ZFNet(weights_path=None, classes=1000):

    inputs = Input(shape=(3, 227, 227))

    conv_1 = Convolution2D(96, (7, 7),
                           strides=(2, 2),
                           kernel_initializer='random_uniform',
                           bias_initializer='zeros',
                           activation='relu',
                           name='conv_1a')(inputs)
    conv_2 = MaxPooling2D((3, 3), strides=(2, 2))(conv_1)
    conv_2 = crosschannelnormalization(name="convpool_1")(conv_2)
    conv_2 = ZeroPadding2D((2, 2))(conv_2)
    conv_2 = concatenate([
        Convolution2D(128, (5, 5),
                      strides=(2, 2),
                      activation="relu",
                      name='conv_2' + str(i + 1))(splittensor(
                          ratio_split=2, id_split=i)(conv_2)) for i in range(2)
    ],
                         axis=1,
                         name="conv_2")

    conv_3 = MaxPooling2D((3, 3), strides=(2, 2))(conv_2)
    conv_3 = crosschannelnormalization()(conv_3)
    conv_3 = ZeroPadding2D((1, 1))(conv_3)
    conv_3 = Convolution2D(384, (3, 3), activation='relu',
                           name='conv_3')(conv_3)

    conv_4 = ZeroPadding2D((1, 1))(conv_3)
    conv_4 = concatenate([
        Convolution2D(
            192, (3, 3), activation="relu", name='conv_4_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_4))
        for i in range(2)
    ],
                         axis=1,
                         name="conv_4")

    conv_5 = ZeroPadding2D((1, 1))(conv_4)
    conv_5 = concatenate([
        Convolution2D(
            128, (3, 3), activation="relu", name='conv_5_' + str(i + 1))(
                splittensor(ratio_split=2, id_split=i)(conv_5))
        for i in range(2)
    ],
                         axis=1,
                         name="conv_5")

    dense_1 = MaxPooling2D((3, 3), strides=(2, 2), name="convpool_5")(conv_5)

    dense_1 = Flatten(name="flatten")(dense_1)
    dense_1 = Dense(4096, activation='relu', name='dense_1')(dense_1)
    dense_2 = Dropout(0.5)(dense_1)
    dense_2 = Dense(4096, activation='relu', name='dense_2')(dense_2)
    dense_3 = Dropout(0.5)(dense_2)
    dense_3 = Dense(classes,
                    kernel_initializer='random_uniform',
                    bias_initializer='zeros',
                    name='dense_3a')(dense_3)
    prediction = Activation("softmax", name="softmaxa")(dense_3)

    model = Model(input=inputs, output=prediction, name='zfnet')

    if weights_path:
        model.load_weights(weights_path, by_name=True)

    sgd = SGD(lr=1e-4, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(optimizer=sgd,
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])

    return model