# coding=utf-8 from keras import backend as K from keras.layers import Activation, Lambda from keras.layers.convolutional import Conv2D from keras.layers.merge import Add from ..layers.core import interp, Conv2D_BN as ConvBN def conv_block_side(x): x = ConvBN( filters=32, kernel_size=3, strides=2, padding='same', activation='relu', name='conv1_sub1')(x) x = ConvBN( filters=32, kernel_size=3, strides=2, padding='same', activation='relu', name='conv2_sub1')(x) x = ConvBN( filters=64, kernel_size=3, strides=2, padding='same', activation='relu', name='conv3_sub1')(x) x = ConvBN( filters=128, kernel_size=1, padding='same', name='conv3_sub1_proj')(x) return x def build(inp, encoder, nc, valid_shapes): side = conv_block_side(inp) x = Lambda( interp, arguments={'shape': valid_shapes[3]}, name='sub24_sum_interp')(encoder) main = ConvBN( filters=128, kernel_size=3, dilation_rate=2, padding='same', name='conv_sub2')(x) x = Add(name='sub12_sum')([main, side]) x = Activation('relu')(x) x = Lambda( interp, arguments={'shape': valid_shapes[2]}, name='sub12_sum_interp')(x) x = Conv2D( filters=nc, kernel_size=1, name='conv6_cls')(x) out = Lambda( interp, arguments={'shape': valid_shapes[0]}, name='conv6_interp')(x) return out