一、参考文献
https://blog.youkuaiyun.com/mao_xiao_feng/article/details/78003730
https://blog.youkuaiyun.com/davincil/article/details/80902366
二、概念
空洞卷积的基本概念则是扩大卷积核,例如下图(作图为标准卷积核,有图为空洞卷积核):
这里使用空洞卷积的时候padding一定要注意,因为卷积核可能比输入还要打,所以尽量使用padding=‘SAME’
这篇博客中对空洞卷积有一个详细的流程图解释:https://blog.youkuaiyun.com/mao_xiao_feng/article/details/78003730
上图中输入是一个4*4的一个双通道的图片,在padding=same中,卷积核相乘的时候进行了填充,相反valid是不对输出进行天填充,所以最后的输出的维度是偏小的
上图的卷积就是空洞卷积,原本3*3*2的卷积核在空洞步长rate=2的情况下变成了5*5*2的卷积核,这就是为什么要使用padding=same的原因了,因为卷积核5*5已经大于4*4的输入了,不然会报错!!
三、Tensorflow中的空洞卷积
函数的调用为:
atrous_conv2d(value, filters, rate, padding, name=None)
value:
指需要做卷积的输入图像,要求是一个4维Tensor,具有[batch, height, width, channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]
filters:
相当于CNN中的卷积核,要求是一个4维Tensor,具有[filter_height, filter_width, channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],同理这里第三维channels,就是参数value的第四维
rate:
要求是一个int型的正数,正常的卷积操作应该会有stride(即卷积核的滑动步长),但是空洞卷积是没有stride参数的,这一点尤其要注意。取而代之,它使用了新的rate参数,那么ra