def preforward(): # input inputs1 = l = Input((9, 9, 3), name='inputs1') # conv1 l_offset = ConvOffset2D(3, name='conv1_offset')(l) l = Conv2D(128, (3, 3), padding='same', strides=(2, 2), name='conv1', trainable=train)(l_offset) l = Activation('relu', name='conv1_relu')(l) l = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None, name='max_pool_1')(l) # conv2 l_offset = ConvOffset2D(128, name='conv2_offset')(l) l = Conv2D(256, (3, 3), padding='same', name='conv2', trainable=train)(l_offset) l = Activation('relu', name='conv2_relu')(l) l = MaxPooling2D(pool_size=(2, 2), strides=None, padding='valid', data_format=None, name='max_pool_2')(l) l = Flatten()(l) l = Dense(256, name='fc1', trainable=train)(l) # *************************************************** # output # *************************************************** l = Dense(256, activation='sigmoid')(l) outputs = Dense(2, activation='softmax')(l) #输出类型要改!!! model = Model(inputs=inputs1, outputs=outputs) optim = Adam() # optim = SGD(1e-3, momentum=0.99, nesterov=True) loss = categorical_crossentropy model.compile(optim, loss, metrics=['accuracy']) return model
def __init__(self, ninput, dilated, k=40, dropprob=0.02): super(EDABlock, self).__init__() #k: growthrate #dropprob:a dropout layer between the last ReLU and the concatenation of each module self.conv1x1 = nn.Conv2d(ninput, k, kernel_size=1) self.bn0 = nn.BatchNorm2d(k) self.offset1 = ConvOffset2D(filters=k) #kernel_size=(1, 1) self.conv3x1_1 = nn.Conv2d(k, k, kernel_size=(3, 1), padding=(1, 0)) self.conv1x3_1 = nn.Conv2d(k, k, kernel_size=(1, 3), padding=(0, 1)) self.bn1 = nn.BatchNorm2d(k) self.offset2 = ConvOffset2D( filters=k ) #kernel_size=(3, 1),stride=1, padding=(dilated,0), dilation = dilated self.conv3x1_2 = nn.Conv2d(k, k, (3, 1), stride=1, padding=(dilated, 0), dilation=dilated) self.conv1x3_2 = nn.Conv2d(k, k, (1, 3), stride=1, padding=(0, dilated), dilation=dilated) self.bn2 = nn.BatchNorm2d(k) self.dropout = nn.Dropout2d(dropprob)
def get_deform_cnn(trainable): inputs = l = Input((28, 28, 1), name='input') # conv11 l = Conv2D(32, (3, 3), padding='same', name='conv11', trainable=trainable)(l) l = Activation('relu', name='conv11_relu')(l) l = BatchNormalization(name='conv11_bn')(l) # conv12 l_offset = ConvOffset2D(32, name='conv12_offset')(l) l = Conv2D(64, (3, 3), padding='same', strides=(2, 2), name='conv12', trainable=trainable)(l_offset) l = Activation('relu', name='conv12_relu')(l) l = BatchNormalization(name='conv12_bn')(l) # conv21 l_offset = ConvOffset2D(64, name='conv21_offset')(l) l = Conv2D(128, (3, 3), padding='same', name='conv21', trainable=trainable)(l_offset) l = Activation('relu', name='conv21_relu')(l) l = BatchNormalization(name='conv21_bn')(l) # conv22 l_offset = ConvOffset2D(128, name='conv22_offset')(l) l = Conv2D(128, (3, 3), padding='same', strides=(2, 2), name='conv22', trainable=trainable)(l_offset) l = Activation('relu', name='conv22_relu')(l) l = BatchNormalization(name='conv22_bn')(l) # out l = GlobalAvgPool2D(name='avg_pool')(l) l = Dense(10, name='fc1', trainable=trainable)(l) outputs = l = Activation('softmax', name='out')(l) return inputs, outputs
def __init__(self): super(DeformConvNet, self).__init__() # conv11 self.conv11 = nn.Conv2d(3, 32, 3, padding=1) self.bn11 = nn.BatchNorm2d(32) # conv12 self.offset12 = ConvOffset2D(32) self.conv12 = nn.Conv2d(32, 64, 3, padding=1, stride=2) self.bn12 = nn.BatchNorm2d(64) # conv21 self.offset21 = ConvOffset2D(64) self.conv21 = nn.Conv2d(64, 128, 3, padding=1) self.bn21 = nn.BatchNorm2d(128) # conv22 self.offset22 = ConvOffset2D(128) self.conv22 = nn.Conv2d(128, 128, 3, padding=1, stride=2) self.bn22 = nn.BatchNorm2d(128) # out self.fc = nn.Linear(128, 128)
def InceptionV3_deform_model(nb_classes): if K.image_data_format() == 'channels_first': channel_axis = 1 else: channel_axis = 3 img_input = InceptionV3().input x = conv2d_bn(img_input, 32, 3, 3, strides=(2, 2), padding='valid') x = ConvOffset2D(32, name='conv1_offset')(x) x = conv2d_bn(x, 32, 3, 3, padding='valid') x = ConvOffset2D(32, name='conv2_offset')(x) x = conv2d_bn(x, 64, 3, 3) x = MaxPooling2D((3, 3), strides=(2, 2))(x) x = conv2d_bn(x, 80, 1, 1, padding='valid') x = ConvOffset2D(80, name='conv3_offset')(x) x = conv2d_bn(x, 192, 3, 3, padding='valid') x = MaxPooling2D((3, 3), strides=(2, 2))(x) # mixed 0, 1, 2: 35 x 35 x 256 branch1x1 = conv2d_bn(x, 64, 1, 1) branch5x5 = conv2d_bn(x, 48, 1, 1) branch5x5 = conv2d_bn(branch5x5, 64, 5, 5) branch3x3dbl = conv2d_bn(x, 64, 1, 1) branch3x3dbl = ConvOffset2D(64, name='conv4_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch3x3dbl = ConvOffset2D(96, name='conv5_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 32, 1, 1) x = concatenate([branch1x1, branch5x5, branch3x3dbl, branch_pool], axis=channel_axis, name='mixed0') # mixed 1: 35 x 35 x 256 branch1x1 = conv2d_bn(x, 64, 1, 1) branch5x5 = conv2d_bn(x, 48, 1, 1) branch5x5 = conv2d_bn(branch5x5, 64, 5, 5) branch3x3dbl = conv2d_bn(x, 64, 1, 1) branch3x3dbl = ConvOffset2D(64, name='conv6_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch3x3dbl = ConvOffset2D(96, name='conv7_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 64, 1, 1) x = concatenate([branch1x1, branch5x5, branch3x3dbl, branch_pool], axis=channel_axis, name='mixed1') # mixed 2: 35 x 35 x 256 branch1x1 = conv2d_bn(x, 64, 1, 1) branch5x5 = conv2d_bn(x, 48, 1, 1) branch5x5 = conv2d_bn(branch5x5, 64, 5, 5) branch3x3dbl = conv2d_bn(x, 64, 1, 1) branch3x3dbl = ConvOffset2D(64, name='conv8_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch3x3dbl = ConvOffset2D(96, name='conv9_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 64, 1, 1) x = concatenate([branch1x1, branch5x5, branch3x3dbl, branch_pool], axis=channel_axis, name='mixed2') # mixed 3: 17 x 17 x 768 x = ConvOffset2D(288, name='conv10_offset')(x) branch3x3 = conv2d_bn(x, 384, 3, 3, strides=(2, 2), padding='valid') branch3x3dbl = conv2d_bn(x, 64, 1, 1) branch3x3dbl = ConvOffset2D(64, name='conv11_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3) branch3x3dbl = ConvOffset2D(96, name='conv12_offset')(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 96, 3, 3, strides=(2, 2), padding='valid') branch_pool = MaxPooling2D((3, 3), strides=(2, 2))(x) x = concatenate([branch3x3, branch3x3dbl, branch_pool], axis=channel_axis, name='mixed3') # mixed 4: 17 x 17 x 768 branch1x1 = conv2d_bn(x, 192, 1, 1) branch7x7 = conv2d_bn(x, 128, 1, 1) branch7x7 = conv2d_bn(branch7x7, 128, 1, 7) branch7x7 = conv2d_bn(branch7x7, 192, 7, 1) branch7x7dbl = conv2d_bn(x, 128, 1, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 128, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 128, 1, 7) branch7x7dbl = conv2d_bn(branch7x7dbl, 128, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 1, 7) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 192, 1, 1) x = concatenate([branch1x1, branch7x7, branch7x7dbl, branch_pool], axis=channel_axis, name='mixed4') # mixed 5, 6: 17 x 17 x 768 for i in range(2): branch1x1 = conv2d_bn(x, 192, 1, 1) branch7x7 = conv2d_bn(x, 160, 1, 1) branch7x7 = conv2d_bn(branch7x7, 160, 1, 7) branch7x7 = conv2d_bn(branch7x7, 192, 7, 1) branch7x7dbl = conv2d_bn(x, 160, 1, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 160, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 160, 1, 7) branch7x7dbl = conv2d_bn(branch7x7dbl, 160, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 1, 7) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 192, 1, 1) x = concatenate([branch1x1, branch7x7, branch7x7dbl, branch_pool], axis=channel_axis, name='mixed' + str(5 + i)) # mixed 7: 17 x 17 x 768 branch1x1 = conv2d_bn(x, 192, 1, 1) branch7x7 = conv2d_bn(x, 192, 1, 1) branch7x7 = conv2d_bn(branch7x7, 192, 1, 7) branch7x7 = conv2d_bn(branch7x7, 192, 7, 1) branch7x7dbl = conv2d_bn(x, 192, 1, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 1, 7) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 7, 1) branch7x7dbl = conv2d_bn(branch7x7dbl, 192, 1, 7) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 192, 1, 1) x = concatenate([branch1x1, branch7x7, branch7x7dbl, branch_pool], axis=channel_axis, name='mixed7') # mixed 8: 8 x 8 x 1280 branch3x3 = conv2d_bn(x, 192, 1, 1) branch3x3 = ConvOffset2D(192, name='conv13_offset')(branch3x3) branch3x3 = conv2d_bn(branch3x3, 320, 3, 3, strides=(2, 2), padding='valid') branch7x7x3 = conv2d_bn(x, 192, 1, 1) branch7x7x3 = conv2d_bn(branch7x7x3, 192, 1, 7) branch7x7x3 = conv2d_bn(branch7x7x3, 192, 7, 1) branch7x7x3 = ConvOffset2D(192, name='conv14_offset')(branch7x7x3) branch7x7x3 = conv2d_bn(branch7x7x3, 192, 3, 3, strides=(2, 2), padding='valid') branch_pool = MaxPooling2D((3, 3), strides=(2, 2))(x) x = concatenate([branch3x3, branch7x7x3, branch_pool], axis=channel_axis, name='mixed8') # mixed 9: 8 x 8 x 2048 for i in range(2): branch1x1 = conv2d_bn(x, 320, 1, 1) branch3x3 = conv2d_bn(x, 384, 1, 1) branch3x3_1 = conv2d_bn(branch3x3, 384, 1, 3) branch3x3_2 = conv2d_bn(branch3x3, 384, 3, 1) branch3x3 = concatenate([branch3x3_1, branch3x3_2], axis=channel_axis, name='mixed9_' + str(i)) branch3x3dbl = conv2d_bn(x, 448, 1, 1) branch3x3dbl = ConvOffset2D(448, name='conv15_%d_offset' % (i))(branch3x3dbl) branch3x3dbl = conv2d_bn(branch3x3dbl, 384, 3, 3) branch3x3dbl_1 = conv2d_bn(branch3x3dbl, 384, 1, 3) branch3x3dbl_2 = conv2d_bn(branch3x3dbl, 384, 3, 1) branch3x3dbl = concatenate([branch3x3dbl_1, branch3x3dbl_2], axis=channel_axis) branch_pool = AveragePooling2D((3, 3), strides=(1, 1), padding='same')(x) branch_pool = conv2d_bn(branch_pool, 192, 1, 1) x = concatenate([branch1x1, branch3x3, branch3x3dbl, branch_pool], axis=channel_axis, name='mixed' + str(9 + i)) # Classification block x = GlobalAveragePooling2D(name='avg_pool')(x) x = Dense(nb_classes, activation='softmax', name='predictions')(x) # Ensure that the model takes into account # any potential predecessors of `input_tensor`. inputs = img_input # Create model. model = Model(inputs, x, name='inception_v3_deform') return model
def deform_cnn(input_tensor=None, input_shape=None, classes=10, trainable=True): if K.image_data_format() == 'channels_first': input_shape = (1, img_rows, img_cols) bn_axis = 1 else: input_shape = (img_rows, img_cols, 1) bn_axis = 3 if input_tensor is None: inputs = Input(shape=input_shape) else: if not K.is_keras_tensor(input_tensor): inputs = Input(tensor=input_tensor, shape=input_shape) else: inputs = input_tensor #Conv_1 layer x = Conv2D(32, (3, 3), padding='same', name='conv_1', trainable=trainable)(inputs) x = BatchNormalization(axis=bn_axis)(x) x = Activation('relu')(x) #Conv_2 layer x_offset = ConvOffset2D(32, name='conv_2_offset')(x) x = Conv2D(64, (3, 3), strides=(2, 2), padding='same', name='conv_2', trainable=trainable)(x_offset) x = BatchNormalization(axis=bn_axis)(x) x = Activation('relu')(x) #Conv_3 layer x_offset = ConvOffset2D(64, name='conv_3_offset')(x) x = Conv2D(128, (3, 3), strides=(2, 2), padding='same', name='conv_3', trainable=trainable)(x_offset) x = BatchNormalization(axis=bn_axis)(x) x = Activation('relu')(x) #Conv_4 layer x_offset = ConvOffset2D(128, name='conv_4_offset')(x) x = Conv2D(128, (3, 3), padding='same', name='conv_4', trainable=trainable)(x_offset) x = BatchNormalization(axis=bn_axis)(x) x = Activation('relu')(x) #Pooling layer x = GlobalAveragePooling2D()(x) #fc layer outputs = Dense(classes, activation='softmax', name='fc', trainable=trainable)(x) return inputs, outputs
def build_deformable_bn(width, height, n_classes, weights_path=None, train=False): inp = Input(shape=(height, width, 3)) #regularized x = Lambda(lambda x: (x - 127.5)/255.0)(inp) # (1/2) y = Lambda(lambda x: tf.image.resize_bilinear(x, size=(int(x.shape[1])//2, int(x.shape[2])//2)), name='data_sub2')(x) y = Conv2D(32, 3, strides=2, padding='same', activation='relu', name='conv1_1_3x3_s2')(y) y = BatchNormalization(name='conv1_1_3x3_s2_bn')(y) y = ConvOffset2D(32, name="conv1_1_offset")(y) y = Conv2D(32, 3, padding='same', activation='relu', name='conv1_2_3x3')(y) y = BatchNormalization(name='conv1_2_3x3_s2_bn')(y) y = ConvOffset2D(32, name="conv1_2_offset")(y) y = Conv2D(64, 3, padding='same', activation='relu', name='conv1_3_3x3')(y) y = BatchNormalization(name='conv1_3_3x3_bn')(y) y_ = MaxPooling2D(pool_size=3, strides=2, name='pool1_3x3_s2')(y) y = Conv2D(128, 1, name='conv2_1_1x1_proj')(y_) y = BatchNormalization(name='conv2_1_1x1_proj_bn')(y) y_ = Conv2D(32, 1, activation='relu', name='conv2_1_1x1_reduce')(y_) y_ = BatchNormalization(name='conv2_1_1x1_reduce_bn')(y_) y_ = ZeroPadding2D(name='padding1')(y_) y_ = Conv2D(32, 3, activation='relu', name='conv2_1_3x3')(y_) y_ = BatchNormalization(name='conv2_1_3x3_bn')(y_) y_ = Conv2D(128, 1, name='conv2_1_1x1_increase')(y_) y_ = BatchNormalization(name='conv2_1_1x1_increase_bn')(y_) y = Add(name='conv2_1')([y,y_]) y_ = Activation('relu', name='conv2_1/relu')(y) y = Conv2D(32, 1, activation='relu', name='conv2_2_1x1_reduce')(y_) y = BatchNormalization(name='conv2_2_1x1_reduce_bn')(y) y = ZeroPadding2D(name='padding2')(y) y = Conv2D(32, 3, activation='relu', name='conv2_2_3x3')(y) y = BatchNormalization(name='conv2_2_3x3_bn')(y) y = Conv2D(128, 1, name='conv2_2_1x1_increase')(y) y = BatchNormalization(name='conv2_2_1x1_increase_bn')(y) y = Add(name='conv2_2')([y,y_]) y_ = Activation('relu', name='conv2_2/relu')(y) y = Conv2D(32, 1, activation='relu', name='conv2_3_1x1_reduce')(y_) y = BatchNormalization(name='conv2_3_1x1_reduce_bn')(y) y = ZeroPadding2D(name='padding3')(y) y = Conv2D(32, 3, activation='relu', name='conv2_3_3x3')(y) y = BatchNormalization(name='conv2_3_3x3_bn')(y) y = Conv2D(128, 1, name='conv2_3_1x1_increase')(y) y = BatchNormalization(name='conv2_3_1x1_increase_bn')(y) y = Add(name='conv2_3')([y,y_]) y_ = Activation('relu', name='conv2_3/relu')(y) y = Conv2D(256, 1, strides=2, name='conv3_1_1x1_proj')(y_) y = BatchNormalization(name='conv3_1_1x1_proj_bn')(y) y_ = Conv2D(64, 1, strides=2, activation='relu', name='conv3_1_1x1_reduce')(y_) y_ = BatchNormalization(name='conv3_1_1x1_reduce_bn')(y_) y_ = ZeroPadding2D(name='padding4')(y_) y_ = Conv2D(64, 3, activation='relu', name='conv3_1_3x3')(y_) y_ = BatchNormalization(name='conv3_1_3x3_bn')(y_) y_ = Conv2D(256, 1, name='conv3_1_1x1_increase')(y_) y_ = BatchNormalization(name='conv3_1_1x1_increase_bn')(y_) y = Add(name='conv3_1')([y,y_]) z = Activation('relu', name='conv3_1/relu')(y) # (1/4) y_ = Lambda(lambda x: tf.image.resize_bilinear(x, size=(int(x.shape[1])//2, int(x.shape[2])//2)), name='conv3_1_sub4')(z) y = Conv2D(64, 1, activation='relu', name='conv3_2_1x1_reduce')(y_) y = BatchNormalization(name='conv3_2_1x1_reduce_bn')(y) y = ZeroPadding2D(name='padding5')(y) y = ConvOffset2D(64, name="conv3_2_1_Offset")(y) y = Conv2D(64, 3, activation='relu', name='conv3_2_3x3')(y) y = BatchNormalization(name='conv3_2_3x3_bn')(y) y = Conv2D(256, 1, name='conv3_2_1x1_increase')(y) y = BatchNormalization(name='conv3_2_1x1_increase_bn')(y) y = Add(name='conv3_2')([y,y_]) y_ = Activation('relu', name='conv3_2/relu')(y) y = Conv2D(64, 1, activation='relu', name='conv3_3_1x1_reduce')(y_) y = BatchNormalization(name='conv3_3_1x1_reduce_bn')(y) y = ZeroPadding2D(name='padding6')(y) y = Conv2D(64, 3, activation='relu', name='conv3_3_3x3')(y) y = BatchNormalization(name='conv3_3_3x3_bn')(y) y = Conv2D(256, 1, name='conv3_3_1x1_increase')(y) y = BatchNormalization(name='conv3_3_1x1_increase_bn')(y) y = Add(name='conv3_3')([y,y_]) y_ = Activation('relu', name='conv3_3/relu')(y) y = Conv2D(64, 1, activation='relu', name='conv3_4_1x1_reduce')(y_) y = BatchNormalization(name='conv3_4_1x1_reduce_bn')(y) y = ZeroPadding2D(name='padding7')(y) y = Conv2D(64, 3, activation='relu', name='conv3_4_3x3')(y) y = BatchNormalization(name='conv3_4_3x3_bn')(y) y = Conv2D(256, 1, name='conv3_4_1x1_increase')(y) y = BatchNormalization(name='conv3_4_1x1_increase_bn')(y) y = Add(name='conv3_4')([y,y_]) y_ = Activation('relu', name='conv3_4/relu')(y) y = Conv2D(512, 1, name='conv4_1_1x1_proj')(y_) y = BatchNormalization(name='conv4_1_1x1_proj_bn')(y) y_ = Conv2D(128, 1, activation='relu', name='conv4_1_1x1_reduce')(y_) y_ = BatchNormalization(name='conv4_1_1x1_reduce_bn')(y_) y_ = ZeroPadding2D(padding=2, name='padding8')(y_) y_ = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_1_3x3')(y_) y_ = BatchNormalization(name='conv4_1_3x3_bn')(y_) y_ = Conv2D(512, 1, name='conv4_1_1x1_increase')(y_) y_ = BatchNormalization(name='conv4_1_1x1_increase_bn')(y_) y = Add(name='conv4_1')([y,y_]) y_ = Activation('relu', name='conv4_1/relu')(y) y = Conv2D(128, 1, activation='relu', name='conv4_2_1x1_reduce')(y_) y = BatchNormalization(name='conv4_2_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=2, name='padding9')(y) y = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_2_3x3')(y) y = BatchNormalization(name='conv4_2_3x3_bn')(y) y = Conv2D(512, 1, name='conv4_2_1x1_increase')(y) y = BatchNormalization(name='conv4_2_1x1_increase_bn')(y) y = Add(name='conv4_2')([y,y_]) y_ = Activation('relu', name='conv4_2/relu')(y) y = Conv2D(128, 1, activation='relu', name='conv4_3_1x1_reduce')(y_) y = BatchNormalization(name='conv4_3_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=2, name='padding10')(y) y = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_3_3x3')(y) y = BatchNormalization(name='conv4_3_3x3_bn')(y) y = Conv2D(512, 1, name='conv4_3_1x1_increase')(y) y = BatchNormalization(name='conv4_3_1x1_increase_bn')(y) y = Add(name='conv4_3')([y,y_]) y_ = Activation('relu', name='conv4_3/relu')(y) y = Conv2D(128, 1, activation='relu', name='conv4_4_1x1_reduce')(y_) y = BatchNormalization(name='conv4_4_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=2, name='padding11')(y) y = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_4_3x3')(y) y = BatchNormalization(name='conv4_4_3x3_bn')(y) y = Conv2D(512, 1, name='conv4_4_1x1_increase')(y) y = BatchNormalization(name='conv4_4_1x1_increase_bn')(y) y = Add(name='conv4_4')([y,y_]) y_ = Activation('relu', name='conv4_4/relu')(y) y = Conv2D(128, 1, activation='relu', name='conv4_5_1x1_reduce')(y_) y = BatchNormalization(name='conv4_5_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=2, name='padding12')(y) y = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_5_3x3')(y) y = BatchNormalization(name='conv4_5_3x3_bn')(y) y = Conv2D(512, 1, name='conv4_5_1x1_increase')(y) y = BatchNormalization(name='conv4_5_1x1_increase_bn')(y) y = Add(name='conv4_5')([y,y_]) y_ = Activation('relu', name='conv4_5/relu')(y) y = Conv2D(128, 1, activation='relu', name='conv4_6_1x1_reduce')(y_) y = BatchNormalization(name='conv4_6_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=2, name='padding13')(y) y = Conv2D(128, 3, dilation_rate=2, activation='relu', name='conv4_6_3x3')(y) y = BatchNormalization(name='conv4_6_3x3_bn')(y) y = Conv2D(512, 1, name='conv4_6_1x1_increase')(y) y = BatchNormalization(name='conv4_6_1x1_increase_bn')(y) y = Add(name='conv4_6')([y,y_]) y = Activation('relu', name='conv4_6/relu')(y) y_ = Conv2D(1024, 1, name='conv5_1_1x1_proj')(y) y_ = BatchNormalization(name='conv5_1_1x1_proj_bn')(y_) y = Conv2D(256, 1, activation='relu', name='conv5_1_1x1_reduce')(y) y = BatchNormalization(name='conv5_1_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=4, name='padding14')(y) y = Conv2D(256, 3, dilation_rate=4, activation='relu', name='conv5_1_3x3')(y) y = BatchNormalization(name='conv5_1_3x3_bn')(y) y = Conv2D(1024, 1, name='conv5_1_1x1_increase')(y) y = BatchNormalization(name='conv5_1_1x1_increase_bn')(y) y = Add(name='conv5_1')([y,y_]) y_ = Activation('relu', name='conv5_1/relu')(y) y = Conv2D(256, 1, activation='relu', name='conv5_2_1x1_reduce')(y_) y = BatchNormalization(name='conv5_2_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=4, name='padding15')(y) y = Conv2D(256, 3, dilation_rate=4, activation='relu', name='conv5_2_3x3')(y) y = BatchNormalization(name='conv5_2_3x3_bn')(y) y = Conv2D(1024, 1, name='conv5_2_1x1_increase')(y) y = BatchNormalization(name='conv5_2_1x1_increase_bn')(y) y = Add(name='conv5_2')([y,y_]) y_ = Activation('relu', name='conv5_2/relu')(y) y = Conv2D(256, 1, activation='relu', name='conv5_3_1x1_reduce')(y_) y = BatchNormalization(name='conv5_3_1x1_reduce_bn')(y) y = ZeroPadding2D(padding=4, name='padding16')(y) y = Conv2D(256, 3, dilation_rate=4, activation='relu', name='conv5_3_3x3')(y) y = BatchNormalization(name='conv5_3_3x3_bn')(y) y = Conv2D(1024, 1, name='conv5_3_1x1_increase')(y) y = BatchNormalization(name='conv5_3_1x1_increase_bn')(y) y = Add(name='conv5_3')([y,y_]) y = Activation('relu', name='conv5_3/relu')(y) h, w = y.shape[1:3].as_list() pool1 = AveragePooling2D(pool_size=(h,w), strides=(h,w), name='conv5_3_pool1')(y) pool1 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(h,w)), name='conv5_3_pool1_interp')(pool1) pool2 = AveragePooling2D(pool_size=(h/2,w/2), strides=(h//2,w//2), name='conv5_3_pool2')(y) pool2 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(h,w)), name='conv5_3_pool2_interp')(pool2) pool3 = AveragePooling2D(pool_size=(h/3,w/3), strides=(h//3,w//3), name='conv5_3_pool3')(y) pool3 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(h,w)), name='conv5_3_pool3_interp')(pool3) pool6 = AveragePooling2D(pool_size=(h/4,w/4), strides=(h//4,w//4), name='conv5_3_pool6')(y) pool6 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(h,w)), name='conv5_3_pool6_interp')(pool6) y = Add(name='conv5_3_sum')([y, pool1, pool2, pool3, pool6]) y = Conv2D(256, 1, activation='relu', name='conv5_4_k1')(y) y = BatchNormalization(name='conv5_4_k1_bn')(y) aux_1 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(int(x.shape[1])*2, int(x.shape[2])*2)), name='conv5_4_interp')(y) y = ZeroPadding2D(padding=2, name='padding17')(aux_1) y = Conv2D(128, 3, dilation_rate=2, name='conv_sub4')(y) y = BatchNormalization(name='conv_sub4_bn')(y) y_ = Conv2D(128, 1, name='conv3_1_sub2_proj')(z) y_ = BatchNormalization(name='conv3_1_sub2_proj_bn')(y_) y = Add(name='sub24_sum')([y,y_]) y = Activation('relu', name='sub24_sum/relu')(y) aux_2 = Lambda(lambda x: tf.image.resize_bilinear(x, size=(int(x.shape[1])*2, int(x.shape[2])*2)), name='sub24_sum_interp')(y) y = ZeroPadding2D(padding=2, name='padding18')(aux_2) y_ = Conv2D(128, 3, dilation_rate=2, name='conv_sub2')(y) y_ = BatchNormalization(name='conv_sub2_bn')(y_) # (1) y = Conv2D(32, 3, strides=2, padding='same', activation='relu', name='conv1_sub1')(x) y = BatchNormalization(name='conv1_sub1_bn')(y) y = ConvOffset2D(32, name = "conv1_sub1_Offset")(y) y = Conv2D(32, 3, strides=2, padding='same', activation='relu', name='conv2_sub1')(y) y = BatchNormalization(name='conv2_sub1_bn')(y) y = ConvOffset2D(32, name = "conv2_sub1_Offset")(y) y = Conv2D(64, 3, strides=2, padding='same', activation='relu', name='conv3_sub1')(y) y = BatchNormalization(name='conv3_sub1_bn')(y) y = ConvOffset2D(64, name = "conv3_sub1_Offset")(y) y = Conv2D(128, 1, name='conv3_sub1_proj')(y) y = BatchNormalization(name='conv3_sub1_proj_bn')(y) y = Add(name='sub12_sum')([y,y_]) y = Activation('relu', name='sub12_sum/relu')(y) y = Lambda(lambda x: tf.image.resize_bilinear(x, size=(int(x.shape[1])*2, int(x.shape[2])*2)), name='sub12_sum_interp')(y) out = Conv2D(n_classes, 1, activation='softmax', name='conv6_cls')(y) if train: aux_1 = Conv2D(n_classes, 1, activation='softmax', name='sub4_out')(aux_1) aux_2 = Conv2D(n_classes, 1, activation='softmax', name='sub24_out')(aux_2) model = Model(inputs=inp, outputs=[out, aux_2, aux_1]) else: model = Model(inputs=inp, outputs=out) if weights_path is not None: model.load_weights(weights_path, by_name=True) return model
def get_deform_unet(img_rows, img_cols, flt=8, pool_size=(2, 2, 2), init_lr=1.0e-5): print("start building NN") inputs = Input((img_rows, img_cols, 1)) conv1 = Conv2D(flt, (3, 3), padding='same')(inputs) conv1 = ConvOffset2D(flt)(conv1) conv1 = BatchNormalization()(conv1) conv1 = Activation('relu')(conv1) conv1 = Conv2D(flt, (3, 3), padding='same')(conv1) conv1 = ConvOffset2D(flt)(conv1) conv1 = BatchNormalization()(conv1) conv1 = Activation('relu')(conv1) pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) conv2 = Conv2D(flt * 2, (3, 3), padding='same')(pool1) conv2 = ConvOffset2D(flt * 2)(conv2) conv2 = BatchNormalization()(conv2) conv2 = Activation('relu')(conv2) conv2 = Conv2D(flt * 2, (3, 3), padding='same')(conv2) conv2 = ConvOffset2D(flt * 2)(conv2) conv2 = BatchNormalization()(conv2) conv2 = Activation('relu')(conv2) pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) conv3 = Conv2D(flt * 4, (3, 3), padding='same')(pool2) conv3 = ConvOffset2D(flt * 4)(conv3) conv3 = BatchNormalization()(conv3) conv3 = Activation('relu')(conv3) conv3 = Conv2D(flt * 4, (3, 3), padding='same')(conv3) conv3 = ConvOffset2D(flt * 4)(conv3) conv3 = BatchNormalization()(conv3) conv3 = Activation('relu')(conv3) pool3 = MaxPooling2D(pool_size=(2, 2))(conv3) conv4 = Conv2D(flt * 8, (3, 3), padding='same')(pool3) conv4 = ConvOffset2D(flt * 8)(conv4) conv4 = BatchNormalization()(conv4) conv4 = Activation('relu')(conv4) conv4 = Conv2D(flt * 8, (3, 3), padding='same')(conv4) conv4 = ConvOffset2D(flt * 8)(conv4) conv4 = BatchNormalization()(conv4) conv4 = Activation('relu')(conv4) pool4 = MaxPooling2D(pool_size=(2, 2))(conv4) conv5 = Conv2D(flt * 16, (3, 3), padding='same')(pool4) conv5 = ConvOffset2D(flt * 16)(conv5) conv5 = BatchNormalization()(conv5) conv5 = Activation('relu')(conv5) conv5 = Conv2D(flt * 16, (3, 3), padding='same')(conv5) conv5 = ConvOffset2D(flt * 16)(conv5) conv5 = BatchNormalization()(conv5) conv5 = Activation('relu')(conv5) up6 = concatenate([ Conv2DTranspose(flt * 16, (2, 2), strides=(2, 2), padding='same')(conv5), conv4 ], axis=3) conv6 = Conv2D(flt * 8, (3, 3), padding='same')(up6) conv6 = ConvOffset2D(flt * 8)(conv6) conv6 = BatchNormalization()(conv6) conv6 = Activation('relu')(conv6) conv6 = Conv2D(flt * 8, (3, 3), padding='same')(conv6) conv6 = ConvOffset2D(flt * 8)(conv6) conv6 = BatchNormalization()(conv6) conv6 = Activation('relu')(conv6) up7 = concatenate([ Conv2DTranspose(flt * 8, (2, 2), strides=(2, 2), padding='same')(conv6), conv3 ], axis=3) conv7 = Conv2D(flt * 4, (3, 3), padding='same')(up7) conv7 = ConvOffset2D(flt * 4)(conv7) conv7 = BatchNormalization()(conv7) conv7 = Activation('relu')(conv7) conv7 = Conv2D(flt * 4, (3, 3), padding='same')(conv7) conv7 = ConvOffset2D(flt * 4)(conv7) conv7 = BatchNormalization()(conv7) conv7 = Activation('relu')(conv7) up8 = concatenate([ Conv2DTranspose(flt * 4, (2, 2), strides=(2, 2), padding='same')(conv7), conv2 ], axis=3) conv8 = Conv2D(flt * 2, (3, 3), padding='same')(up8) conv8 = ConvOffset2D(flt * 2)(conv8) conv8 = BatchNormalization()(conv8) conv8 = Activation('relu')(conv8) conv8 = Conv2D(flt * 2, (3, 3), padding='same')(conv8) conv8 = ConvOffset2D(flt * 2)(conv8) conv8 = BatchNormalization()(conv8) conv8 = Activation('relu')(conv8) up9 = concatenate([ Conv2DTranspose(flt * 2, (2, 2), strides=(2, 2), padding='same')(conv8), conv1 ], axis=3) conv9 = Conv2D(flt, (3, 3), padding='same')(up9) conv9 = ConvOffset2D(flt)(conv9) conv9 = BatchNormalization()(conv9) conv9 = Activation('relu')(conv9) conv9 = Conv2D(flt, (3, 3), padding='same')(conv9) conv9 = ConvOffset2D(flt)(conv9) conv9 = BatchNormalization()(conv9) conv9 = Activation('relu')(conv9) conv10 = Conv2D(1, (1, 1), activation='sigmoid')(conv9) model = Model(inputs=[inputs], outputs=[conv10]) model.compile(optimizer=Adam(lr=init_lr), loss=dice_coef_loss, metrics=[dice_coef]) return model