Deeplab系列网络是由Geogle所提出,V2以后主要是引入了atrous spatial pyramid pooling(ASPP),利用不同膨胀因子的空洞卷积融合多尺度信息。其实就是利用空洞卷积(带孔卷积)用不同的rate来对图像特征进行操作的。
其具体结构如图所示:特征经过pooling5以后,分别采用了33卷积,rate不同,进行多尺度特征融合,后两层都用11卷积,最后相加。
代码实现总的来说ASPP的代码架构还是非常好实现的
#################ASPPimport tensorflow as tfx = tf.placeholder(tf.float32,[None, 500, 500, 3])#输入图片大小def ASPP(x, rate1, rate2, rate3, rate4, channel): ##第一层 layer1_1=tf.layers.conv2d(x,channel,3,strides=1, padding='same',dilation_rate=rate1) layer1_2=tf.layers.conv2d(x,channel,3,strides=1, padding='same',dilation_rate=rate2) layer1_3=tf.layers.conv2d(x,channel,3,strides=1, padding='same',dilation_rate=rate3) layer1_4=tf.layers.conv2d(x,channel,3,strides=1, padding='same',dilation_rate=rate4) ##第二层 layer1_1=tf.layers.conv2d(layer1_1,channel,1,strides=1, padding='same') layer1_2=tf.layers.conv2d(layer1_2,channel,1,strides=1, padding='same') layer1_3=tf.layers.conv2d(layer1_3,channel,1,strides=1, padding='same') layer1_4=tf.layers.conv2d(layer1_4,channel,1,strides=1, padding='same') #第三层 layer1_1=tf.layers.conv2d(layer1_1,channel,1,strides=1, padding='same') layer1_2=tf.layers.conv2d(layer1_2,channel,1,strides=1, padding='same') layer1_3=tf.layers.conv2d(layer1_3,channel,1,strides=1, padding='same') layer1_4=tf.layers.conv2d(layer1_4,channel,1,strides=1, padding='same') output=layer1_1+layer1_2+layer1_3+layer1_4 return output layer1=tf.layers.conv2d(x,256,3,strides=1, padding='same')layer1=tf.nn.relu(layer1)layer2=ASPP(layer1,2,4,6,8,256)print(layer2)