这里有个可视化、直观的图:https://github.com/vdumoulin/conv_arithmetic
https://zhuanlan.zhihu.com/p/50369448
https://www.zhihu.com/question/54149221/answer/192025860
https://www.zhihu.com/question/54149221/answer/323880412
https://blog.csdn.net/qq_21997625/article/details/87080576
deconved:https://www.zhihu.com/question/43609045/answer/132235276
图来自:如何理解空洞卷积(dilated convolution)? - 梁思远的回答 - 知乎 https://www.zhihu.com/question/54149221/answer/547315413
增大感受野:可以设置普通卷积的stride>1,但是stride大于1就会导致downsampling,卷积后图像尺寸减小、分辨率降低。
Dilated convolutional layer (also called as atrous convolution in DeepLab) allows for exponential increase in field of view without decrease of spatial dimensions.
注意:解决办法大概就是:使得卷积前后的每组结果能进行相互交错,相互依赖,解决空洞卷积局部信息丢失问题。或者捕获多尺度信息、获得局部信息依赖,以此解决局部信息不一致的问题。
在Deeplab_v3中对dilation rate的使用提出一个思考,当dilation rate过大时,由于图像的边缘效应导致long range information并没有被学习到。 * 个人思考:在网络的底层,不适合使用较大的dilation rate(貌似很多都是用标准卷积),因为底层网络层更多包含底维信息,如果引入大的dilation rate,会导致部分细节的底层信息被忽略掉。
1.例如[1, 2, 5, 1, 2, 5]这样的循环结构;dilated rate[1, 2, 5] with 3*3 kernel;
2.太繁琐,部分看不懂;
3.在最后生成的4组卷积结果之后,经过一层组交错层;第二种方法为在空洞卷积之前进行局部信息依赖,即增加一层分离卷积操作;
4.增加图像级特征,使用全局池化获取图像全局信息,没有仔细说明,需要补充学习;
5.ESPNet利用分解卷积的思想,先用1*1卷积将通道数降低减少计算量,后面再加上基于空洞卷积的金字塔模型,捕获多尺度信息。所有卷积后都使用BN和PReLU(PReLU(Parametric Rectified Linear Unit)。很多实时分割小网络都使用了PReLU;使用Adam训练,很多小网络使用这个;消融实验表明,在一维卷积之间加入BN+PReLU,精度会增加1.4%;
6.Kronecker convolution,参数量是不增加的,总体效果mIOU提升了1%左右。提出了一个TFA模块,利用树形分层结构进行多尺度与上下文信息整合。结构简单,但十分有效,精度提升4-5%。没有仔细说明,需要补充学习、
7.看不懂。
8.未细说。
;
目录
1. Panqu Wang,Pengfei Chen, et al.Understanding Convolution for Semantic Segmentation.//WACV 2018
2. Fisher Yu, et al. Dilated Residual Networks. //CVPR 2017
3. Zhengyang Wang,et al.Smoothed Dilated Convolutions for Improved Dense Prediction.//KDD 2018.
4. Liang-Chieh Chen,et al.Rethinking Atrous Convolution for Semantic Image Segmentation//2017
8. Efficient Smoothing of Dilated Convolutions for Image Segmentation.//2019
dilation conv
首先空洞卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用s>1的conv或者pooling,导致分辨率降低,不利于segmentation。而如果使用大卷积核来增加感受野,会引入额外的参数及计算量)。可以代替降采样(pooling或s2/conv),标准卷积可以看做空洞卷积的特殊形式。
空洞卷积(Dilated/Atrous Convolution),广泛应用于语义分割与目标检测等任务中
- 空洞卷积:在3*3卷积核中间填充0,有两种实现方式,第一,卷积核填充0,第二,输入等间隔采样。
而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。
空洞卷积的作用
- 扩大感受野:(不影响微调的,也就是改了之后之前的模型可以继续训练)
- 捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是跳过或者same采样时在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。
空洞卷积可以任意扩大感受野,且不需要引入额外参数,但如果把分辨率增加了,算法整体计算量肯定会增加。
空洞卷积实际卷积核大小:
d为空洞卷积参数空洞率dilation rate;(d - 1) 的值则为塞入的空格数,假定原来的卷积核大小为 k,那么塞入了 (d - 1) 个空格后的卷积核大小 n 为:
因此输出feature map尺寸是
感受野从k*k变为[k+(r-1)*(k+1)]*[k+(r-1)*(k+1)]
same的话需要pad的像素点是(new_width-1)*S + k - W_ori
以三个r=2的3*3/s1空洞卷积为例计算感受野:
K=k+(k-1)(r-1)=3+2*1=5
R=1+4+4+4=13