前言
Deeplab系列网络是由Geogle所提出,V2以后主要是引入了atrous spatial pyramid pooling(ASPP),利用不同膨胀因子的空洞卷积融合多尺度信息。其实就是利用空洞卷积(带孔卷积)用不同的rate来对图像特征进行操作的。
其具体结构如图所示:特征经过pooling5以后,分别采用了33卷积,rate不同,进行多尺度特征融合,后两层都用11卷积,最后相加。
代码实现
总的来说ASPP的代码架构还是非常好实现的
#################ASPP
import tensorflow as tf
x = 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)