社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【深度学习】吃透空洞卷积(Dilated Convolutions)

机器学习初学者 • 5 月前 • 125 次点击  

空洞卷积的提出


空洞卷积中文名也叫膨胀卷积或者扩张卷积,英文名也叫Atrous Convolution
空洞卷积最初的提出是为了解决图像分割的问题而提出的,常见的图像分割算法通常使用池化层和卷积层来增加感受野(Receptive Filed),同时也缩小了特征图尺寸(resolution),然后再利用上采样还原图像尺寸,特征图缩小再放大的过程造成了精度上的损失,因此需要一种操作可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样操作,在这种需求下,空洞卷积就诞生了(略有修改,引自[4])
玖零猴:感受野(Receptive Field)的理解与计算@玖零猴
https://zhuanlan.zhihu.com/p/113487374
当然,如果不用空洞卷积这种方案,那怎么去弥补经过下采样而造成信息损失呢?其实,这是另一个思路了,于是才有了我们熟知的skip connection,它可以为上采样弥补信息,像FCN、U-Net这种典型的拓扑网络,如下图所示,其实我个人认为,如果一个问题如果从不同的思路去想的话,就会出现不同的解决方案
图1 FCN、U-Net典型的分割拓扑结构:下采样、上采样、skip connection(图来自[6])
空洞卷积自2016在ICLR(International Conference on Learning Representation)上才被提出后,本身是用在图像分割领域,但立马被deepmind拿来应用到语音(WaveNet)和NLP领域,它在物体检测也发挥了重要的作用,虽然不要求逐个像素检测,但对于小物体的检测也是十分重要的


二、空洞卷积的原理


与正常的卷积不同的是,空洞卷积引入了一个称为 “扩张率(dilation rate)”的超参数(hyper-parameter),该参数定义了卷积核处理数据时各值的间距。扩张率中文也叫空洞数(Hole Size)。
在此以卷积为例,展示普通卷积和空洞卷积之间的区别,如图2所示
图2 普通卷积和空洞卷积的对比(来自[4])
图2中从左到右分别为a、b、c子图,三幅图是相互独立进行卷积的(区别于下面图4),大框表示输入图像(感受野默认为1),黑色的圆点表示的卷积核,灰色地带表示卷积后的感受野(后面有相关计算公式,这里都是一层卷积的,直接可以看出来)


  • a是普通的卷积过程(dilation rate = 1),卷积后的感受野为3
  • b是dilation rate = 2的空洞卷积,卷积后的感受野为5
  • c是dilation rate = 3的空洞卷积,卷积后的感受野为8


可以这么说,普通卷积是空洞卷积的一种特殊情况
另外,空洞卷积可以增大感受野,但是可以不改变图像输出特征图的尺寸(分辨率,resolution),这句话怎么理解?
为了更好地理解这一点,我们从一维去分析容易理解点
图3 一维版的普通卷积(a、b)和空洞卷积(c),黑色的圆表示填充部分,a、b、c它们相互独立进行卷积 (来自[8])
从b和c可以看出,有无空洞卷积,并不影响输出特征图的尺寸,也就是说输出特征图的尺和空洞数无关,因此可以利用空洞卷积增大感受野,而输出特征图的尺寸可以保持不变
影响输出特征图尺寸的因素有输入特征图的尺寸  ,卷积核的大小  ,填充  ,步长  ,计算公式如下:
由于保持特征图尺寸不变,所以导致了计算过程的计算量比较大
保持住特征图不变,那怎么能利用多尺度信息?
在解答这个问题之前,先补充两点知识
知识一:我们知道,神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。
知识二:在赢得其中一届ImageNet比赛里VGG网络的文章中,他最大的贡献并不是VGG网络本身,而是他对于卷积叠加的一个巧妙观察。1个 7 x 7 的卷积层的正则等效于 3 个 3 x 3 的卷积层的叠加。而这样的设计可以大幅度的减少参数,有正则化的效果,参数少了就没那么容易发生过拟合。这也是现在绝大部分基于卷积的深层网络都在用小卷积核的原因,常常使用3 x 3的卷积核
一般每一层的卷积核都是用3 x 3大小的,而每一层只要设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息,当然这样操作并不影响特征图的尺寸,这样一来,又避免下采样那样造成信息损失,同时也利用到多尺度信息,真是一举两得啊
获取多尺度信息在视觉任务中相当重要,尤其是在Dense prediction(对每个像素进行分类)问题上,它能够提高准确性的,如语义分割


dense prediction problems such as semantic segmentation ... to increase the performance of dense prediction architectures by aggregating multi-scale contextual information(来自[1])

三、感受野的计算


为了好看,我们把图2放下来
图2 普通卷积和空洞卷积的对比(来自[4])
从图2可以看出,同样一个  的卷积,却可以起到   、  等卷积的效果,空洞卷积在不增加参数量的前提下(参数量=卷积核大小+偏置),却可以增大感受野,假设空洞卷积的卷积核大小为  ,空洞数为  ,则其等效卷积核大小  ,例如  的卷积核,则  ,公式如下(来自[4])

当前层的感受野计算公式如下,其中,  表示当前层的感受野,  表示上一层的感受野,  表示卷积核的大小
表示之前所有层的步长的乘积(不包括本层),公式如下:
同样的,当前层的步长并不影响当前层的感受野,感受野和填补(padding)没有关系
下面举个例子练练手,此图4和上面的图2有区别,图2的三幅图是独立的,而图4是从左到右连续进行卷积,它们属于top-bottom关系
图4 三个不同的空洞卷积,卷积核的kernel size=3, stride=1, 但是空洞卷积的dilation rate分别是1,2,4。默认初始化感受野是1。(来自[1])
感受野的计算
输入图像: 1
第一层卷积:3
第二层卷积:

综上,得



第三层卷积:
综上,得

四、潜在的问题及解决方法


潜在问题 1:The Gridding Effect
假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:
由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。这对 pixel-level dense prediction 的任务来说是致命的。
潜在问题 2 :Long-ranged information might be not relevant.
远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。
解决方案
具体可参考[5,9]


  • Panqu Wang,Pengfei Chen,et al**.Understanding Convolution for Semantic Segmentation.//**WACV 2018
  • Fisher Yu,et al.Dilated Residual Networks.//CVPR 2017
  • Zhengyang Wang,et al.**Smoothed Dilated Convolutions for Improved Dense Prediction.//**KDD 2018.
  • Liang-Chieh Chen,et al.Rethinking Atrous Convolution for Semantic Image Segmentation//2017
  • Sachin Mehta,et al.ESPNet: Efficient Spatial Pyramid of DilatedConvolutions for Semantic Segmentation.//ECCV 2018
  • Tianyi Wu**,et al.Tree-structured Kronecker Convolutional Networks for Semantic Segmentation.//AAAI2019**
  • Hyojin Park,et al.Concentrated-Comprehensive Convolutionsfor lightweight semantic segmentation.//2018
  • Efficient Smoothing of Dilated Convolutions for Image Segmentation.//2019


reference
1、Yu, Fisher, and Vladlen Koltun. "Multi-scale context aggregation by dilated convolutions." arXiv preprint arXiv:1511.07122 (2015).(https://arxiv.org/abs/1511.071220)
2、Understanding Convolution for Semantic Segmentation(https://arxiv.org/abs/1702.08502)
3、Rethinking Atrous Convolution for Semantic Image Segmentation(https://arxiv.org/abs/1706.05587)
4、书籍《深度学习之PyTorch物体检测实战》
5、如何理解空洞卷积(dilated convolution)?(https://www.zhihu.com/question/54149221
6、U-Net++作者对U-Net的分析(https://zhuanlan.zhihu.com/p/44958351
7、GIF动图,加深普通卷积和空洞卷积的区别:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md
8、如何理解Dilated Convolutions(空洞卷积)
9、yyfyan:总结-空洞卷积(Dilated/Atrous Convolution)(https://zhuanlan.zhihu.com/p/50369448



    
往期精彩回顾




  • 交流群

欢迎加入机器学习爱好者微信群一起和同行交流,目前有机器学习交流群、博士群、博士申报交流、CV、NLP等微信群,请扫描下面的微信号加群,备注:”昵称-学校/公司-研究方向“,例如:”张小明-浙大-CV“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~(也可以加入机器学习交流qq群772479961



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/171443
 
125 次点击