def dnet1_mi(input_shapes, n_classes):
def concat(xs):
if len(xs) == 1:
return xs[0]
return merge(xs, mode='concat', concat_axis=1)
def conv(k, s, x):
return Convolution2D(k, s, s, border_mode='same', init='he_normal')(x)
def dense_block(k, n, inp, append=False):
outputs = [inp] if append else []
for i in xrange(n):
x = Convolution2D(k, 3, 3, border_mode='same', init='he_normal')(inp)
x = BatchNormalization(axis=1, mode=0)(x)
x = PReLU(shared_axes=[2, 3])(x)
outputs.append(x)
inp = concat([inp, x])
return concat(outputs)
def down_block(x):
return MaxPooling2D((2, 2))(x)
def up_block(x):
return UpSampling2D(size=(2, 2))(x)
inputs = dict([(name, Input(shape, name=name)) for name, shape in input_shapes.items()])
# Downpath
d0 = conv(32, 1, concat([inputs['in_I'], inputs['in_IF']]))
c1 = dense_block(16, 2, d0, append=True)
d1 = down_block(c1)
c2 = dense_block(16, 3, d1, append=True)
d2 = down_block(c2)
c3 = dense_block(16, 4, concat([d2, inputs['in_M'], inputs['in_MI']]), append=True)
d3 = down_block(c3)
c4 = dense_block(16, 5, d3, append=True)
d4 = down_block(c4)
# Bottleneck
c5 = dense_block(16, 6, d4, append=True)
# Uppath
u4 = dense_block(16, 10, concat([c4, up_block(c5)]))
u3 = dense_block(16, 8, concat([c3, up_block(u4)]))
u2 = dense_block(16, 6, concat([c2, up_block(u3)]))
u1 = dense_block(16, 4, concat([c1, up_block(u2)]))
out = Activation('sigmoid')(conv(n_classes, 1, u1))
return Model(input=inputs.values(), output=out)
archs.py 文件源码
python
阅读 23
收藏 0
点赞 0
评论 0
评论列表
文章目录