0.空洞卷积是什么?HDC又是啥?
空洞卷积,说白了就是把kernel变成筛状。
两张图看明白。图源:
https://www.jianshu.com/p/f743bd9041b3
传统卷积核:
空洞卷积核:
而HDC又是对空洞卷积的一种改进,可以说他是空洞卷积的一种特殊结构
1.为何采用空洞卷积?
一句话:为了增大感受野,从而抵消一部分池化层造成的信息丢失
由此引出两个问题:
(1)什么是感受野?
(2)为什么池化层信息会丢失?
1.0.形象理解感受野
目前看网络上的一些帖子都采用的论文图,开始理解起来有一些困难,这里放上我个人的理解,如果有不对的地方欢迎大家指正。
首先,以3x3传统卷积为例,我们回顾一下图片卷积的工作模式。
正着说,就是(靠上层中的)一片3x3区域被压缩为(靠下层中的)一个点
那逆过来,就是(靠下层中的)一个点等效于(靠上层中的)一片3x3区域
那我就可以说,这片3x3区域是相对于临近靠下层feature map中某个点的感受野
那如果靠下层中有多个这样的点组成一片3x3区域呢?再往下推一层,就是这样的。其中黄色部分可以理解成上一张图的等效。
以此类推。推广到多层,就是这样的:
图源:
https://blog.csdn.net/program_developer/article/details/80958716
1.1.如何通过空洞卷积增大感受野
我们从传统卷积说起。还是回到刚才这张图:可以发现,我从第二层随便挑一个点,它的感受野都是5x5。
现在我们将第一层到第二层的卷积方式改为空洞卷积:
同时,保持输入层到第一层为普通卷积:
那最终等效出来就是一个感受野为7x7大小的区域:
综上所述,适当采用空洞卷积可以增大感受野。
1.2.通过增大感受野,抵消一部分池化层带来的信息丢失
由池化(pooling)本身的原理来看,其实就是对feature map进行了采样,采样就要损失一部分信息。如图中,粉色部分采样后除了“6”以外的数据全部丢失。如果你的网络结构采用了多个pooling层,到了FC层门口,信息丢失的也差不多了。
对于保留下来的这个“6”来说,我们假设它是第二层feature map中的一点,那么在采用传统卷积的情况下,它对应到输出图像上的感受域是5x5大小:
但如果你在第一层到第二层的过程中采用了空洞卷积,情况是这样的:
现在一共4个袋子,池化层说,你只能带走一个。如果你用了空洞卷积,你带走的袋子里就有7x7=49块糖,如果你用的是普通卷积,对不起你只能带走5x5=25块糖。
一句话:同样被池化层剥离掉一部分(而且是相当一部分)原始信息,空洞卷积允许保留下来的元素携带更多信息量。
2.为何采用HDC?
因为空洞卷积有一个致命的问题:卷积核不连续。
2.1.空洞卷积的缺陷
刚刚我们分析的情况都是只有第一层到第二层采用空洞卷积,那么如果从输入图像到第一层也采用空洞卷积呢?得到的是一个9x9的区域,重点是,感受域不连续。
如果这个9x9区域里包含的细节较少还好,我们拿猫耳朵举例,所有黄色点拼在一起没准还能凑合看出来是只猫耳朵。(实际操作上猫耳朵已经算是非常细节、非常高级的特征了,这里只是打个比方便于理解。)
但如果这个区域包含了大量细节信息,卷积核get到的特征可能是紊乱的,甚至是错误的。比如对于整只猫来说,仅仅用黄色点的信息就很难表示这真的是一只猫。
2.2.HDC结构
HDC结构,全称Hybrid Dilated Convolution,直译过来就是混合空洞卷积,就是为了避免这种情况发生。
具体定义这里不放了,直白来讲就是避免在所有层中采用相同间隔的空洞卷积。
所谓间隔,就是两个元素之间的距离,用rate表示。
下图中(a)是连续做rate=2空洞卷积的结果(你可以把左1想象成原图取点的过程),而(b)是rate分别为1/2/3空洞卷积的结果。
(b)的牛逼之处在于,它一开始就保留了完整连续的3x3区域,之后几层的rate设置又刚好保证拼起来感受域的连贯性,即使有所重叠,也密不透风。
3.实现代码
在tensorflow里已经封装好了空洞卷积专用的函数:tf.nn.atrous_conv2d
使用起来也很简单,无论你想尝试错误的空洞卷积结构还是HDC结构均可。
conv=tf.nn.atrous_conv2d(X,W,rate,padding)#空洞卷积
附上w3cschool的教程链接:
https://www.w3cschool.cn/tensorflow_python/tf_nn_atrous_conv2d.html
注意:rate=1的时候完全等效于普通卷积。
4.参考文献
https://www.jianshu.com/p/f743bd9041b3
https://blog.csdn.net/program_developer/article/details/80958716
https://blog.csdn.net/zsf10220208/article/details/93995482
初学不易,欢迎纠错,共同学习。