def rnet1(input_shapes, n_classes):
def conv(size, x):
x = Convolution2D(size, 3, 3, border_mode='same', init='he_normal', bias=False)(x)
x = BatchNormalization(axis=1, mode=0)(x)
x = PReLU(shared_axes=[2, 3])(x)
return x
def unet_block(sizes, inp):
x = inp
skips = []
for sz in sizes[:-1]:
x = conv(sz, x)
skips.append(x)
x = MaxPooling2D((2, 2))(x)
x = conv(sizes[-1], x)
for sz in reversed(sizes[:-1]):
x = conv(sz, merge([UpSampling2D((2, 2))(x), skips.pop()], mode='concat', concat_axis=1))
return x
def fcn_block(sizes, inp):
x = inp
for sz in sizes:
x = conv(sz, x)
return Dropout(0.2)(x)
# Build piramid of inputs
inp0 = Input(input_shapes['in'], name='in')
inp1 = AveragePooling2D((2, 2))(inp0)
inp2 = AveragePooling2D((2, 2))(inp1)
# Build outputs in resnet fashion
out2 = unet_block([32, 48], inp2)
#out2 = merge([unet_block([32, 48, 32], merge([inp2, out2], mode='concat', concat_axis=1)), out2], mode='sum')
out1 = UpSampling2D((2, 2))(out2)
#out1 = merge([unet_block([32, 32, 48], merge([inp1, out1], mode='concat', concat_axis=1)), out1], mode='sum')
out1 = merge([unet_block([32, 48, 64], merge([inp1, out1], mode='concat', concat_axis=1)), out1], mode='sum')
out0 = UpSampling2D((2, 2))(out1)
out0 = merge([unet_block([32, 48, 64], merge([inp0, out0], mode='concat', concat_axis=1)), out0], mode='sum')
out0 = merge([unet_block([32, 48, 64], merge([inp0, out0], mode='concat', concat_axis=1)), out0], mode='sum')
# Final convolution
out = Convolution2D(n_classes, 1, 1, activation='sigmoid')(out0)
return Model(input=inp0, output=out)
archs.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录