我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用keras.layers.ZeroPadding2D()。
def test_keras_import(self): # Pad 1D model = Sequential() model.add(ZeroPadding1D(2, input_shape=(224, 3))) model.add(Conv1D(32, 7, strides=2)) model.build() self.pad_test(model, 'pad_w', 2) # Pad 2D model = Sequential() model.add(ZeroPadding2D(2, input_shape=(224, 224, 3))) model.add(Conv2D(32, 7, strides=2)) model.build() self.pad_test(model, 'pad_w', 2) # Pad 3D model = Sequential() model.add(ZeroPadding3D(2, input_shape=(224, 224, 224, 3))) model.add(Conv3D(32, 7, strides=2)) model.build() self.pad_test(model, 'pad_w', 2) # ********** Export json tests ********** # ********** Data Layers Test **********
def build_model(self): initializer = initializers.random_normal(stddev=0.02) model = Sequential() if self.padding: model.add(ZeroPadding2D(padding=(1, 0), data_format="channels_first", input_shape=(self.layers, self.rows, self.columns))) model.add(Conv2D(32, (8, 8), activation="relu", data_format="channels_first", strides=(4, 4), kernel_initializer=initializer, padding='same', input_shape=(self.layers, self.rows, self.columns))) model.add(Conv2D(64, (4, 4), activation="relu", data_format="channels_first", strides=(2, 2), kernel_initializer=initializer, padding='same')) model.add(Conv2D(64, (3, 3), activation="relu", data_format="channels_first", strides=(1, 1), kernel_initializer=initializer, padding='same')) model.add(Flatten()) model.add(Dense(512, activation="relu", kernel_initializer=initializer)) model.add(Dense(self.actions_num, kernel_initializer=initializer)) adam = Adam(lr=1e-6) model.compile(loss='mse', optimizer=adam) return model
def conv_block(x, stage, branch, nb_filter, dropout_rate=None, weight_decay=1e-4): '''Apply BatchNorm, Relu, bottleneck 1x1 Conv2D, 3x3 Conv2D, and option dropout # Arguments x: input tensor stage: index for dense block branch: layer index within each dense block nb_filter: number of filters dropout_rate: dropout rate weight_decay: weight decay factor ''' eps = 1.1e-5 conv_name_base = 'conv' + str(stage) + '_' + str(branch) relu_name_base = 'relu' + str(stage) + '_' + str(branch) # 1x1 Convolution (Bottleneck layer) inter_channel = nb_filter * 4 x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x1_bn')(x) x = Scale(axis=concat_axis, name=conv_name_base+'_x1_scale')(x) x = Activation('relu', name=relu_name_base+'_x1')(x) x = Convolution2D(inter_channel, 1, 1, name=conv_name_base+'_x1', bias=False)(x) if dropout_rate: x = Dropout(dropout_rate)(x) # 3x3 Convolution x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x2_bn')(x) x = Scale(axis=concat_axis, name=conv_name_base+'_x2_scale')(x) x = Activation('relu', name=relu_name_base+'_x2')(x) x = ZeroPadding2D((1, 1), name=conv_name_base+'_x2_zeropadding')(x) x = Convolution2D(nb_filter, 3, 3, name=conv_name_base+'_x2', bias=False)(x) if dropout_rate: x = Dropout(dropout_rate)(x) return x
def residual_conv(prev, level, pad=1, lvl=1, sub_lvl=1, modify_stride=False): lvl = str(lvl) sub_lvl = str(sub_lvl) names = ["conv"+lvl+"_" + sub_lvl + "_1x1_reduce", "conv"+lvl+"_" + sub_lvl + "_1x1_reduce_bn", "conv"+lvl+"_" + sub_lvl + "_3x3", "conv"+lvl+"_" + sub_lvl + "_3x3_bn", "conv"+lvl+"_" + sub_lvl + "_1x1_increase", "conv"+lvl+"_" + sub_lvl + "_1x1_increase_bn"] if modify_stride is False: prev = Conv2D(64 * level, (1, 1), strides=(1, 1), name=names[0], use_bias=False)(prev) elif modify_stride is True: prev = Conv2D(64 * level, (1, 1), strides=(2, 2), name=names[0], use_bias=False)(prev) prev = BN(name=names[1])(prev) prev = Activation('relu')(prev) prev = ZeroPadding2D(padding=(pad, pad))(prev) prev = Conv2D(64 * level, (3, 3), strides=(1, 1), dilation_rate=pad, name=names[2], use_bias=False)(prev) prev = BN(name=names[3])(prev) prev = Activation('relu')(prev) prev = Conv2D(256 * level, (1, 1), strides=(1, 1), name=names[4], use_bias=False)(prev) prev = BN(name=names[5])(prev) return prev
def createModel(self): model = Sequential() model.add(Conv2D(16, (3, 3), strides=(2, 2), input_shape=(self.img_rows, self.img_cols, self.img_channels))) model.add(Activation('relu')) model.add(ZeroPadding2D((1, 1))) model.add(Conv2D(16, (3, 3), strides=(2, 2))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2),strides=(2, 2))) model.add(Flatten()) model.add(Dense(256)) model.add(Activation('relu')) # model.add(Dropout(0.5)) model.add(Dense(self.output_size)) # model.add(Activation('softmax')) # model.compile(RMSprop(lr=self.learningRate), 'MSE') # sgd = SGD(lr=self.learningRate) adam = Adam(lr=self.learningRate) model.compile(loss='mse', optimizer=adam) model.summary() return model
def ShiftDown(model): shape = K.int_shape(model)[1] model = ZeroPadding2D(padding=(1,0,0,0))(model) model = Lambda(lambda x: x[:,:shape,:,:])(model) return model
def __call__(self, model): if self.stack == 'vertical': model = ZeroPadding2D(padding=(self.filter_size[0]//2, 0, self.filter_size[1]//2, self.filter_size[1]//2))(model) model = Convolution2D(2*self.filters, self.filter_size[0]//2+1, self.filter_size[1], border_mode='valid')(model) elif self.stack == 'horizontal': model = ZeroPadding2D(padding=(0, 0, self.filter_size[1]//2, 0))(model) if self.mask == 'A': model = Convolution2D(2*self.filters, 1, self.filter_size[1]//2, border_mode='valid')(model) else: model = Convolution2D(2*self.filters, 1, self.filter_size[1]//2+1, border_mode='valid')(model) return model
def deconvolution(layer, layer_in, layerId): out = {} padding = get_padding(layer) k_h, k_w = layer['params']['kernel_h'], layer['params']['kernel_w'] s_h, s_w = layer['params']['stride_h'], layer['params']['stride_w'] d_h, d_w = layer['params']['dilation_h'], layer['params']['dilation_w'] if (layer['params']['weight_filler'] in fillerMap): kernel_initializer = fillerMap[layer['params']['weight_filler']] else: kernel_initializer = layer['params']['weight_filler'] if (layer['params']['bias_filler'] in fillerMap): bias_initializer = fillerMap[layer['params']['bias_filler']] else: bias_initializer = layer['params']['bias_filler'] filters = layer['params']['num_output'] if (padding == 'custom'): p_h, p_w = layer['params']['pad_h'], layer['params']['pad_w'] out[layerId + 'Pad'] = ZeroPadding2D(padding=(p_h, p_w))(*layer_in) padding = 'valid' layer_in = [out[layerId + 'Pad']] kernel_regularizer = regularizerMap[layer['params']['kernel_regularizer']] bias_regularizer = regularizerMap[layer['params']['bias_regularizer']] activity_regularizer = regularizerMap[layer['params']['activity_regularizer']] kernel_constraint = constraintMap[layer['params']['kernel_constraint']] bias_constraint = constraintMap[layer['params']['bias_constraint']] use_bias = layer['params']['use_bias'] out[layerId] = Conv2DTranspose(filters, [k_h, k_w], strides=(s_h, s_w), padding=padding, dilation_rate=(d_h, d_w), kernel_initializer=kernel_initializer, bias_initializer=bias_initializer, kernel_regularizer=kernel_regularizer, bias_regularizer=bias_regularizer, activity_regularizer=activity_regularizer, use_bias=use_bias, bias_constraint=bias_constraint, kernel_constraint=kernel_constraint)(*layer_in) return out
def identity_block(input_tensor, kernel_size, filters, stage, block): """The identity_block is the block that has no conv layer at shortcut Keyword arguments input_tensor -- input tensor kernel_size -- defualt 3, the kernel size of middle conv layer at main path filters -- list of integers, the nb_filters of 3 conv layer at main path stage -- integer, current stage label, used for generating layer names block -- 'a','b'..., current block label, used for generating layer names """ eps = 1.1e-5 if K.image_dim_ordering() == 'tf': bn_axis = 3 else: bn_axis = 1 nb_filter1, nb_filter2, nb_filter3 = filters conv_name_base = 'res' + str(stage) + block + '_branch' bn_name_base = 'bn' + str(stage) + block + '_branch' scale_name_base = 'scale' + str(stage) + block + '_branch' x = Conv2D(nb_filter1, (1, 1), name=conv_name_base + '2a', use_bias=False)(input_tensor) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2a')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2a')(x) x = Activation('relu', name=conv_name_base + '2a_relu')(x) x = ZeroPadding2D((1, 1), name=conv_name_base + '2b_zeropadding')(x) x = Conv2D(nb_filter2, (kernel_size, kernel_size), name=conv_name_base + '2b', use_bias=False)(x) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2b')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2b')(x) x = Activation('relu', name=conv_name_base + '2b_relu')(x) x = Conv2D(nb_filter3, (1, 1), name=conv_name_base + '2c', use_bias=False)(x) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2c')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2c')(x) x = add([x, input_tensor], name='res' + str(stage) + block) x = Activation('relu', name='res' + str(stage) + block + '_relu')(x) return x
def build_model(self): initializer = initializers.random_normal(stddev=0.02) input_img = Input(shape=(self.layers, 22, 80)) input_2 = Lambda(lambda x: x[:, :2, :, :], output_shape=lambda x: (None, 2, 22, 80))(input_img) # no map channel # whole map 10x1 tower_1 = ZeroPadding2D(padding=(1, 0), data_format="channels_first")(input_2) tower_1 = Conv2D(32, (10, 1), data_format="channels_first", strides=(7, 1), kernel_initializer=initializer, padding="valid")(tower_1) tower_1 = Flatten()(tower_1) # whole map 1x10 tower_2 = Conv2D(32, (1, 10), data_format="channels_first", strides=(1, 7), kernel_initializer=initializer, padding="valid")(input_2) tower_2 = Flatten()(tower_2) # whole map 3x3 then maxpool 22x80 tower_3 = Conv2D(32, (3, 3), data_format="channels_first", strides=(1, 1), kernel_initializer=initializer, padding="same")(input_2) tower_3 = MaxPooling2D(pool_size=(22, 80), data_format="channels_first")(tower_3) tower_3 = Flatten()(tower_3) merged_layers = concatenate([tower_1, tower_2, tower_3], axis=1) predictions = Dense(4, kernel_initializer=initializer)(merged_layers) model = Model(inputs=input_img, outputs=predictions) adam = Adam(lr=1e-6) model.compile(loss='mse', optimizer=adam) return model
def build_discriminator(self): img_shape = (self.img_rows, self.img_cols, self.channels) model = Sequential() model.add(Conv2D(16, kernel_size=3, strides=2, input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(32, kernel_size=3, strides=2, padding="same")) model.add(ZeroPadding2D(padding=((0,1),(0,1)))) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(64, kernel_size=3, strides=2, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(128, kernel_size=3, strides=1, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.summary() img = Input(shape=img_shape) features = model(img) valid = Dense(1, activation="linear")(features) return Model(img, valid)
def build_discriminator(self): img_shape = (self.img_rows, self.img_cols, self.channels) model = Sequential() model.add(Conv2D(32, kernel_size=3, strides=2, input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(64, kernel_size=3, strides=2, padding="same")) model.add(ZeroPadding2D(padding=((0,1),(0,1)))) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(128, kernel_size=3, strides=2, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(256, kernel_size=3, strides=1, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.summary() img = Input(shape=img_shape) features = model(img) valid = Dense(1, activation="sigmoid")(features) label = Dense(self.num_classes+1, activation="softmax")(features) return Model(img, [valid, label])
def build_discriminator(self): img_shape = (self.img_rows, self.img_cols, self.channels) model = Sequential() model.add(Conv2D(32, kernel_size=3, strides=2, input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(64, kernel_size=3, strides=2, padding="same")) model.add(ZeroPadding2D(padding=((0,1),(0,1)))) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(128, kernel_size=3, strides=2, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(256, kernel_size=3, strides=1, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) model.summary() img = Input(shape=img_shape) validity = model(img) return Model(img, validity)
def build_discriminator(self): img_shape = (self.img_rows, self.img_cols, self.channels) model = Sequential() model.add(Conv2D(16, kernel_size=3, strides=2, input_shape=img_shape, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Conv2D(32, kernel_size=3, strides=2, padding="same")) model.add(ZeroPadding2D(padding=((0,1),(0,1)))) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(64, kernel_size=3, strides=2, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(BatchNormalization(momentum=0.8)) model.add(Conv2D(128, kernel_size=3, strides=1, padding="same")) model.add(LeakyReLU(alpha=0.2)) model.add(Dropout(0.25)) model.add(Flatten()) model.summary() img = Input(shape=img_shape) features = model(img) validity = Dense(1, activation="sigmoid")(features) label = Dense(self.num_classes+1, activation="softmax")(features) return Model(img, [validity, label])
def test_delete_channels_zeropadding2d(channel_index, data_format): layer = ZeroPadding2D([2, 3], data_format=data_format) layer_test_helper_flatten_2d(layer, channel_index, data_format)
def test_zeropad_simple(self): input_shape = (48, 48, 3) model = Sequential() model.add(ZeroPadding2D((1,1),input_shape=input_shape)) # Set some random weights model.set_weights([np.random.rand(*w.shape) for w in model.get_weights()]) # Get the coreml model self._test_keras_model(model)
def test_zeropad_fancy(self): input_shape = (48, 48, 3) model = Sequential() model.add(ZeroPadding2D(((2,5),(3,4)),input_shape=input_shape)) # Set some random weights model.set_weights([np.random.rand(*w.shape) for w in model.get_weights()]) # Get the coreml model self._test_keras_model(model)
def test_tiny_spatial_bn(self): np.random.seed(1988) x_in = Input(shape=(7,7,2)) x = ZeroPadding2D(padding=(1, 1))(x_in) x = BatchNormalization(axis=2)(x) model = Model(x_in, x) self._test_keras_model(model, input_blob = 'data', output_blob = 'output', delta=1e-2)
def get_frontend(input_width, input_height) -> Sequential: model = Sequential() # model.add(ZeroPadding2D((1, 1), input_shape=(input_width, input_height, 3))) model.add(Convolution2D(64, 3, 3, activation='relu', name='conv1_1', input_shape=(input_width, input_height, 3))) model.add(Convolution2D(64, 3, 3, activation='relu', name='conv1_2')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Convolution2D(128, 3, 3, activation='relu', name='conv2_1')) model.add(Convolution2D(128, 3, 3, activation='relu', name='conv2_2')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_1')) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_2')) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv3_3')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_1')) model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_2')) model.add(Convolution2D(512, 3, 3, activation='relu', name='conv4_3')) # Compared to the original VGG16, we skip the next 2 MaxPool layers, # and go ahead with dilated convolutional layers instead model.add(AtrousConvolution2D(512, 3, 3, atrous_rate=(2, 2), activation='relu', name='conv5_1')) model.add(AtrousConvolution2D(512, 3, 3, atrous_rate=(2, 2), activation='relu', name='conv5_2')) model.add(AtrousConvolution2D(512, 3, 3, atrous_rate=(2, 2), activation='relu', name='conv5_3')) # Compared to the VGG16, we replace the FC layer with a convolution model.add(AtrousConvolution2D(4096, 7, 7, atrous_rate=(4, 4), activation='relu', name='fc6')) model.add(Dropout(0.5)) model.add(Convolution2D(4096, 1, 1, activation='relu', name='fc7')) model.add(Dropout(0.5)) # Note: this layer has linear activations, not ReLU model.add(Convolution2D(21, 1, 1, activation='linear', name='fc-final')) # model.layers[-1].output_shape == (None, 16, 16, 21) return model
def add_context(model: Sequential) -> Sequential: """ Append the context layers to the frontend. """ model.add(ZeroPadding2D(padding=(33, 33))) model.add(Convolution2D(42, 3, 3, activation='relu', name='ct_conv1_1')) model.add(Convolution2D(42, 3, 3, activation='relu', name='ct_conv1_2')) model.add(AtrousConvolution2D(84, 3, 3, atrous_rate=(2, 2), activation='relu', name='ct_conv2_1')) model.add(AtrousConvolution2D(168, 3, 3, atrous_rate=(4, 4), activation='relu', name='ct_conv3_1')) model.add(AtrousConvolution2D(336, 3, 3, atrous_rate=(8, 8), activation='relu', name='ct_conv4_1')) model.add(AtrousConvolution2D(672, 3, 3, atrous_rate=(16, 16), activation='relu', name='ct_conv5_1')) model.add(Convolution2D(672, 3, 3, activation='relu', name='ct_fc1')) model.add(Convolution2D(21, 1, 1, name='ct_final')) return model
def build_model(): model = Sequential() # ???????4???? model.add(ZeroPadding2D((1, 1), dim_ordering='th', input_shape=(1, 20, 20))) model.add(Convolution2D(32, 3, 3, activation='relu'), dim_ordering='th') model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(32, 3, 3, activation='relu', dim_ordering='th')) model.add(MaxPooling2D((2, 2), dim_ordering='th')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(64, 3, 3, activation='relu', dim_ordering='th')) model.add(MaxPooling2D((2, 2), dim_ordering='th')) model.add(Flatten()) model.add(Dense(64, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(64, activation='softmax')) start = time.time() # ??SGD + momentum # model.compile????loss??????(????) sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) model.compile(optimizer=sgd, loss='categorical_crossentropy') # model.compile(loss="mse", optimizer="rmsprop") # mse kld # Nadam rmsprop print "Compilation Time : ", time.time() - start return model
def identity_block(input_tensor, kernel_size, filters, stage, block): '''The identity_block is the block that has no conv layer at shortcut # Arguments input_tensor: input tensor kernel_size: defualt 3, the kernel size of middle conv layer at main path filters: list of integers, the nb_filters of 3 conv layer at main path stage: integer, current stage label, used for generating layer names block: 'a','b'..., current block label, used for generating layer names ''' eps = 1.1e-5 nb_filter1, nb_filter2, nb_filter3 = filters conv_name_base = 'res' + str(stage) + block + '_branch' bn_name_base = 'bn' + str(stage) + block + '_branch' scale_name_base = 'scale' + str(stage) + block + '_branch' x = Convolution2D(nb_filter1, 1, 1, name=conv_name_base + '2a', bias=False)(input_tensor) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2a')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2a')(x) x = Activation('relu', name=conv_name_base + '2a_relu')(x) x = ZeroPadding2D((1, 1), name=conv_name_base + '2b_zeropadding')(x) x = Convolution2D(nb_filter2, kernel_size, kernel_size, name=conv_name_base + '2b', bias=False)(x) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2b')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2b')(x) x = Activation('relu', name=conv_name_base + '2b_relu')(x) x = Convolution2D(nb_filter3, 1, 1, name=conv_name_base + '2c', bias=False)(x) x = BatchNormalization(epsilon=eps, axis=bn_axis, name=bn_name_base + '2c')(x) x = Scale(axis=bn_axis, name=scale_name_base + '2c')(x) x = merge([x, input_tensor], mode='sum', name='res' + str(stage) + block) x = Activation('relu', name='res' + str(stage) + block + '_relu')(x) return x
def CaffeNet(weights=None, input_shape=(3, 227, 227), classes=1000): inputs = Input(shape=input_shape) x = Conv2D(96, (11, 11), strides=(4, 4), activation='relu', name='conv1')(inputs) x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x) x = LRN2D(name='norm1')(x) x = ZeroPadding2D((2, 2))(x) x = Conv2D(256, (5, 5), activation='relu', name='conv2')(x) x = MaxPooling2D((3, 3), strides=(2, 2), name='pool2')(x) x = LRN2D(name='norm2')(x) x = ZeroPadding2D((1, 1))(x) x = Conv2D(384, (3, 3), activation='relu', name='conv3')(x) x = ZeroPadding2D((1, 1))(x) x = Conv2D(384, (3, 3), activation='relu', name='conv4')(x) x = ZeroPadding2D((1, 1))(x) x = Conv2D(256, (3, 3), activation='relu', name='conv5')(x) x = MaxPooling2D((3, 3), strides=(2, 2), name='pool5')(x) x = Flatten(name='flatten')(x) x = Dense(4096, activation='relu', name='fc6')(x) x = Dropout(0.5, name='drop6')(x) x = Dense(4096, activation='relu', name='fc7')(x) x = Dropout(0.5, name='drop7')(x) x = Dense(classes, name='fc8')(x) x = Activation('softmax', name='loss')(x) model = Model(inputs, x, name='caffenet') model.load_weights(weights) return model
def VGG16(nb_classes, nb_rows, nb_cols): print("Compiling model...") model = Sequential() model.add(ZeroPadding2D((1,1), input_shape=(1, nb_rows, nb_cols))) model.add(Convolution2D(64, 3, 3, activation='relu', name='conv2_1')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(64, 3, 3, activation='relu', name='conv2_2')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, 3, 3, activation='relu', name='conv3_1')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, 3, 3, activation='relu', name='conv3_2')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, 3, 3, activation='relu', name='conv3_3')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv4_1')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv4_2')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(256, 3, 3, activation='relu', name='conv4_3')) model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Flatten()) model.add(Dense(1024, activation='relu', name='fc1')) model.add(Dropout(0.5)) model.add(Dense(1024, activation='relu', name='fc2')) model.add(Dropout(0.5)) model.add(Dense(nb_classes, activation='softmax', name='prediction')) sgd = SGD(lr=0.01, decay=0, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) return model
def create_bi_cnn(): model = Sequential() # 1 model.add(Conv2D(86, (5, 5), strides=3, activation = 'relu', input_shape=(260, 260, 1))) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 2 model.add(ZeroPadding2D(1)) model.add(Conv2D(233, (5, 5), strides=2, activation = 'relu')) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 3 model.add(ZeroPadding2D(1)) model.add(Conv2D(332, (3, 3), activation = 'relu')) # 4 model.add(ZeroPadding2D(1)) model.add(Conv2D(332, (3, 3), activation = 'relu')) # 5 model.add(Conv2D(256, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 6 model.add(Conv2D(256, (4, 4), activation='relu')) model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) # 7 model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(2, activation='softmax')) sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) return model
def create_bi_cnn(): model = Sequential() # 1 model.add(Conv2D(86, (5, 5), strides=3, activation = 'relu', input_shape=(260, 260, 1))) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 2 model.add(ZeroPadding2D(1)) model.add(Conv2D(233, (5, 5), strides=2, activation = 'relu')) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 3 model.add(ZeroPadding2D(1)) model.add(Conv2D(332, (3, 3), activation = 'relu')) # 4 model.add(ZeroPadding2D(1)) model.add(Conv2D(332, (3, 3), activation = 'relu')) # 5 model.add(Conv2D(256, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2), strides=2)) # 6 model.add(Conv2D(256, (4, 4), activation='relu')) model.add(Flatten()) model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) # 7 model.add(Dense(fea_dim, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(2, activation='softmax')) sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) return model
def SmallNetwork(input_shape): model = Sequential() # 2 CNNs blocks comprised of 32 filters of size 3x3. model.add(ZeroPadding2D((1, 1), input_shape=(img_width, img_height, 3))) model.add(Convolution2D(32, 3, 3, activation='elu')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(32, 3, 3, activation='elu')) # Maxpooling model.add(MaxPooling2D((2, 2), strides=(2, 2))) # 2 CNNs blocks comprised of 64 filters of size 3x3. model.add(ZeroPadding2D((1, 1), input_shape=(img_width, img_height, 3))) model.add(Convolution2D(64, 3, 3, activation='elu')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(64, 3, 3, activation='elu')) # Maxpooling + Dropout to avoid overfitting model.add(MaxPooling2D((2, 2), strides=(2, 2))) model.add(Dropout(0.5)) # 2 CNNs blocks comprised of 128 filters of size 3x3. model.add(ZeroPadding2D((1, 1), input_shape=(img_width, img_height, 3))) model.add(Convolution2D(128, 3, 3, activation='elu')) model.add(ZeroPadding2D((1, 1))) model.add(Convolution2D(128, 3, 3, activation='elu')) # Last Maxpooling. We went from an image (64, 64, 3), to an array of shape (8, 8, 128) model.add(MaxPooling2D((2, 2), strides=(2, 2))) # Fully connected layers part. model.add(Flatten(input_shape=input_shape)) model.add(Dense(256, activation='elu')) # Dropout here to avoid overfitting model.add(Dropout(0.5)) model.add(Dense(64, activation='elu')) # Last Dropout to avoid overfitting model.add(Dropout(0.5)) model.add(Dense(16, activation='elu')) model.add(Dense(1)) return model
def convolutional(nbfilters,fsize1,fsize2,inp,pad = True,subsample = (1,1),batchnorm = True,other_activation = None): # fsize1 and fsize2 must be the same, and must be odd numbers if pad and fsize1 > 1: # double check inp = layers.ZeroPadding2D(padding=(int((fsize1-1)/2), int((fsize2-1)/2)))(inp) conv = layers.Convolution2D(nbfilters,fsize1,fsize2,border_mode = 'valid',subsample=subsample)(inp) if batchnorm: conv = layers.BatchNormalization(mode = 0,axis = 1)(conv) if other_activation is not None: conv = activation(other_activation)(conv) else: conv = activation()(conv) return conv
def local(nbfilters,fsize1,fsize2,inp,pad = True,subsample = (1,1), batchnorm =True, fast = True): if pad: inp = layers.ZeroPadding2D(padding=(int((fsize1-1)/2), int((fsize2-1)/2)))(inp) if not fast: lconv = layers.LocallyConnected2D(nbfilters,fsize1,fsize2,border_mode = 'valid',subsample=subsample) else: lconv = layers_perso.LocallyConnected2D_fast(nbfilters,fsize1,fsize2,border_mode = 'valid',subsample=subsample) conv = lconv((inp)) if batchnorm: conv = layers_perso.BatchNormalization_local(lconv,conv) return activation()(conv)
def fcn_vggbase(input_shape=(None,None,3)): img_input = Input(shape=input_shape) x = ZeroPadding2D(padding=(100, 100), name='pad1')(img_input) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(x) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x) x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same', name='block1_pool')(x) # Block 2 x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x) x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block2_pool')(x) # Block 3 x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block3_pool')(x) # Block 4 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block4_pool')(x) # Block 5 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same',name='block5_pool')(x) x = Conv2D(filters=4096, kernel_size=(7, 7), W_regularizer=l2(0.00005), activation='relu', padding='valid', name='fc6_lsun')(x) x = Dropout(0.85)(x) x = Conv2D(filters=4096, kernel_size=(1, 1), W_regularizer=l2(0.00005), activation='relu', padding='valid', name='fc7_lsun')(x) x = Dropout(0.85)(x) x = Conv2D(filters=5, kernel_size=(1, 1), strides=(1,1), kernel_initializer='he_normal', padding='valid', name='lsun_score')(x) x = Conv2DTranspose(filters=5, kernel_initializer='he_normal', kernel_size=(64, 64), strides=(32, 32), padding='valid',use_bias=False, name='lsun_upscore2')(x) output = _crop(img_input,offset=(32,32), name='score')(x) model = Model(img_input, output) weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', VGG_WEIGHTS_PATH_NO_TOP, cache_subdir='models') model.load_weights(weights_path, by_name=True) return model
def fcn16s_vggbase(input_shape=None, nb_class=None): img_input = Input(shape=input_shape) x = ZeroPadding2D(padding=(100, 100), name='pad1')(img_input) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(x) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x) x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same', name='block1_pool')(x) # Block 2 x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x) x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block2_pool')(x) # Block 3 x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block3_pool')(x) # Block 4 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block4_pool')(x) pool4 = x # Block 5 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same',name='block5_pool')(x) x = Conv2D(filters=4096, kernel_size=(7, 7), W_regularizer=l2(0.00005), activation='relu', padding='valid', name='fc6')(x) x = Dropout(0.85)(x) x = Conv2D(filters=4096, kernel_size=(1, 1), W_regularizer=l2(0.00005), activation='relu', padding='valid', name='fc7')(x) x = Dropout(0.85)(x) x = Conv2D(filters=nb_class, kernel_size=(1, 1), strides=(1,1), kernel_initializer='he_normal', padding='valid', name='p5score')(x) x = Conv2DTranspose(filters=nb_class, kernel_size=(4,4), strides=(2,2), kernel_initializer='he_normal', padding='valid', name='p5upscore')(x) pool4 = Conv2D(filters=nb_class, kernel_size=(1,1), kernel_initializer='he_normal', padding='valid', name='pool4_score')(pool4) pool4_score = _crop(x, offset=(5,5), name='pool4_score2')(pool4) m = merge([pool4_score,x], mode='sum') upscore = Conv2DTranspose(filters=nb_class, kernel_size=(32,32), strides=(16,16), padding='valid', name='merged_score')(m) score = _crop(img_input, offset=(27,27), name='output_score')(upscore) weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', VGG_WEIGHTS_PATH_NO_TOP, cache_subdir='models') mdl = Model(img_input, score, name='fcn16s') mdl.load_weights(weights_path, by_name=True) return mdl
def dilated_FCN_addmodule(input_shape=None): img_input = Input(shape=input_shape) x = ZeroPadding2D(padding=(100, 100), name='pad1')(img_input) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(x) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x) x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same', name='block1_pool')(x) # Block 2 x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x) x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block2_pool')(x) # Block 3 x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block3_pool')(x) # Block 4 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block4_pool')(x) # Block 5 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same',name='block5_pool')(x) x = Conv2D(filters=4096, kernel_initializer='he_normal', kernel_size=(7, 7), activation='relu', padding='valid', name='fc6')(x) x = Dropout(0.85)(x) x = Conv2D(filters=4096, kernel_initializer='he_normal', kernel_size=(1, 1), activation='relu', padding='valid', name='fc7')(x) x = Dropout(0.85)(x) x = Conv2D(filters=40,kernel_size=(1, 1), strides=(1,1), kernel_initializer='he_normal', padding='valid', name='score_fr')(x) #x = Cropping2D(cropping=((19, 36),(19, 29)), name='score')(x) x = ZeroPadding2D(padding=(33,33))(x) x = Conv2D(2*40, (3,3), kernel_initializer='he_normal',activation='relu', name='dl_conv1')(x) x = Conv2D(2*40, (3,3), kernel_initializer='he_normal',activation='relu', name='dl_conv2')(x) x = Conv2D(4*40, (3,3), kernel_initializer='he_normal',dilation_rate=(2,2), activation='relu', name='dl_conv3')(x) x = Conv2D(8*40, (3,3), kernel_initializer='he_normal',dilation_rate=(4,4), activation='relu', name='dl_conv4')(x) x = Conv2D(16*40, (3,3), kernel_initializer='he_normal',dilation_rate=(8,8), activation='relu', name='dl_conv5')(x) x = Conv2D(32*40, (3,3), kernel_initializer='he_normal',dilation_rate=(16,16), activation='relu', name='dl_conv6')(x) x = Conv2D(32*40, (1,1), kernel_initializer='he_normal',name='dl_conv7')(x) x = Conv2D(1*40, (1,1), kernel_initializer='he_normal',name='dl_final')(x) x = Conv2DTranspose(filters=40, kernel_initializer='he_normal', kernel_size=(64, 64), strides=(32, 32), padding='valid',use_bias=False, name='upscore2')(x) x = CroppingLike2D(img_input, offset='centered', name='score')(x) mdl = Model(img_input, x, name='dilatedmoduleFCN') #weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', VGG_WEIGHTS_PATH_NO_TOP, cache_subdir='models') mdl.load_weights('logs/model_June13_sgd_60kitr.h5', by_name=True) return mdl
def dilated_FCN_frontended(input_shape=None, weight_decay=None, nb_classes=40): img_input = Input(shape=input_shape) #x = ZeroPadding2D(padding=(100, 100), name='pad1')(img_input) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1')(img_input) x = Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2')(x) x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same', name='block1_pool')(x) # Block 2 x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1')(x) x = Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block2_pool')(x) # Block 3 x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2')(x) x = Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3')(x) x = MaxPooling2D((2, 2), strides=(2, 2), padding='same', name='block3_pool')(x) # Block 4 x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2')(x) x = Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3')(x) x = Conv2D(512, (3,3), dilation_rate=(2,2), activation='relu', name='block5_conv1')(x) x = Conv2D(512, (3,3), dilation_rate=(2,2), activation='relu', name='block5_conv2')(x) x = Conv2D(512, (3,3), dilation_rate=(2,2), activation='relu', name='block5_conv3')(x) x = Conv2D(4096, (3,3), kernel_initializer='he_normal', dilation_rate=(4,4), activation='relu', name='fc6')(x) x = Dropout(0.5, name='drop6')(x) x = Conv2D(4096, (1,1), kernel_initializer='he_normal', activation='relu', name='fc7')(x) x = Dropout(0.5, name='drop7')(x) x = Conv2D(nb_classes, (1,1), kernel_initializer='he_normal', activation='relu', name='fc_final')(x) #x = Conv2DTranspose(nb_classes, kernel_size=(64,64), strides=(32,32), padding='valid', name='upscore2')(x) x = ZeroPadding2D(padding=(33,33))(x) x = Conv2D(2*nb_classes, (3,3), kernel_initializer='he_normal',activation='relu', name='dl_conv1')(x) x = Conv2D(2*nb_classes, (3,3), kernel_initializer='he_normal',activation='relu', name='dl_conv2')(x) x = Conv2D(4*nb_classes, (3,3), kernel_initializer='he_normal',dilation_rate=(2,2), activation='relu', name='dl_conv3')(x) x = Conv2D(8*nb_classes, (3,3), kernel_initializer='he_normal',dilation_rate=(4,4), activation='relu', name='dl_conv4')(x) x = Conv2D(16*nb_classes, (3,3), kernel_initializer='he_normal',dilation_rate=(8,8), activation='relu', name='dl_conv5')(x) x = Conv2D(32*nb_classes, (3,3), kernel_initializer='he_normal',dilation_rate=(16,16), activation='relu', name='dl_conv6')(x) x = Conv2D(32*nb_classes, (1,1), kernel_initializer='he_normal',name='dl_conv7')(x) x = Conv2D(1*nb_classes, (1,1), kernel_initializer='he_normal',name='dl_final')(x) x = Conv2DTranspose(nb_classes, kernel_initializer='he_normal', kernel_size=(64,64), strides=(8,8), padding='valid', name='upscore2')(x) x = CroppingLike2D(img_input, offset='centered', name='score')(x) #x = Cropping2D(cropping=((19,36), (19,29)), name='score')(x) mdl = Model(input=img_input, output=x, name='dilated_fcn') weights_path = get_file('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5', VGG_WEIGHTS_PATH_NO_TOP, cache_subdir='models') mdl.load_weights(weights_path, by_name=True) return mdl
def dilat_fets(input_shape=None, classes=40): model_in = Input(shape=input_shape) h = Convolution2D(64, 3, 3, activation='relu', name='conv1_1')(model_in) h = Convolution2D(64, 3, 3, activation='relu', name='conv1_2')(h) h = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='pool1')(h) h = Convolution2D(128, 3, 3, activation='relu', name='conv2_1')(h) h = Convolution2D(128, 3, 3, activation='relu', name='conv2_2')(h) h = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='pool2')(h) h = Convolution2D(256, 3, 3, activation='relu', name='conv3_1')(h) h = Convolution2D(256, 3, 3, activation='relu', name='conv3_2')(h) h = Convolution2D(256, 3, 3, activation='relu', name='conv3_3')(h) h = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='pool3')(h) h = Convolution2D(512, 3, 3, activation='relu', name='conv4_1')(h) h = Convolution2D(512, 3, 3, activation='relu', name='conv4_2')(h) h = Convolution2D(512, 3, 3, activation='relu', name='conv4_3')(h) h = AtrousConvolution2D(512, 3, 3, dilation_rate=(2, 2), activation='relu', name='conv5_1')(h) h = AtrousConvolution2D(512, 3, 3, dilation_rate=(2, 2), activation='relu', name='conv5_2')(h) h = AtrousConvolution2D(512, 3, 3, dilation_rate=(2, 2), activation='relu', name='conv5_3')(h) h = AtrousConvolution2D(4096, 7, 7, dilation_rate=(4, 4), activation='relu', name='fc6')(h) h = Dropout(0.5, name='drop6')(h) h = Convolution2D(4096, 1, 1, activation='relu', name='fc7')(h) h = Dropout(0.5, name='drop7')(h) h = Convolution2D(classes, 1, 1, activation='relu', name='fc-final')(h) h = ZeroPadding2D(padding=(33, 33))(h) h = Convolution2D(2 * classes, 3, 3, activation='relu', name='ct_conv1_1')(h) h = Convolution2D(2 * classes, 3, 3, activation='relu', name='ct_conv1_2')(h) h = AtrousConvolution2D(4 * classes, 3, 3, dilation_rate=(2, 2), activation='relu', name='ct_conv2_1')(h) h = AtrousConvolution2D(8 * classes, 3, 3, dilation_rate=(4, 4), activation='relu', name='ct_conv3_1')(h) h = AtrousConvolution2D(16 * classes, 3, 3, dilation_rate=(8, 8), activation='relu', name='ct_conv4_1')(h) h = AtrousConvolution2D(32 * classes, 3, 3, dilation_rate=(16, 16), activation='relu', name='ct_conv5_1')(h) h = Convolution2D(32 * classes, 3, 3, activation='relu', name='ct_fc1')(h) h = Convolution2D(classes, 1, 1, name='ct_final')(h) model = Model(input=model_in, output=logits, name='dilation_voc12') return model