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
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
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)
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
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
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
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
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
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
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
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
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
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