![7751a848d4f6078fa1066d8a1e611213.png](https://i-blog.csdnimg.cn/blog_migrate/6313cd92325a477bef527542a7eac345.jpeg)
2017年Panqu Wang发表,空洞卷积用于语义分割,提出了HDC和DUC设计原则,取得了图像分割的好效果,Understanding Convolution for Semantic Segmentation,官方代码(MXNet)设计思想:
- 空洞卷积(扩张卷积):尽量保留内部数据结构和避免下采样,就是增大感受野的情况下保留更多信息,代替pooling
- 卷积前的下采样可以增大卷积核的感受野,作用的每一点就相当于以前的两个点。即便再上采样不行,信息无法重建。
- 反卷积:反方向卷积,完成上采样。
- HDC 混合空洞卷积设计原则,为了消除在连续使用dilation convolution时容易出现的网格影响(像素点丢失)。
- DUC 密集上采样卷积设计原则,相当于用通道数来弥补卷积/池化等操作导致的尺寸的损失。
- 语义分割的难点:
- 分类任务pooling损失可以接受,但像素级别的图像分割任务中,pooling丢失的信息对拼合能力很不利,很难准确的对像素分割。
- pixel-wise的输出,需要pooling来增大感受野,再upsampling还原尺寸
- 内部数据结构丢失、空间层级化信息丢失。
- 小物体信息无法重建。假设有四个pooling层则任何小于2^4 = 16pixel的物体信息将理论上无法重建
网络结构:
展示了有 HDC 和 DUC 层的ResNet-101网络的语义分割网络结构。HDC应用于ResNet块内,用于编码;DUC应用于网络顶部,用于解码。
![b09de1a4d51b0161002b90a6f2e35bf4.png](https://i-blog.csdnimg.cn/blog_migrate/bf9eb5e517c0de5008dbe8033c0c37f7.jpeg)
空洞卷积
- 在卷积核中间填充0,扩大感受野,但没用下采样,没用大卷积核
- (a) 1-dilated conv,等于普通3*3卷积,没有填充空洞0
- (b) 2-dilated conv,卷积核3*3,空洞1,1-dilated + 2-dilated = 7*7conv大小的感受野。只用2倍空洞卷积会忽略掉很多点,可以与1倍的结合起来用。
- (c) 4-dilated conv,卷积核3*3,空洞4, 1-dilated + 2-dilated + 4-dilated = 15*15conv。每个元素的感受野为15*15,与每个层相关联的参数的数量是相同的,感受野呈指数增长,而参数数量呈线性增长。
- 对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野(7->5->3),也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。
![7c5b534827de95211957db642e2da9f0.png](https://i-blog.csdnimg.cn/blog_migrate/e21766a3cd7452ec2e89dac2cf926c0d.jpeg)
Dilated Conv的潜在问题
- kernel 并不连续,也就是并不是所有的 pixel 会被计算到,同样会忽略掉一些点的信息。
- 只采用大 dilation rate conv 检测小体积效果不理想,很多像素点考虑不到。可以做多尺度的变换,但会增加网络复杂度。
HDC
- HDC原则 (Hybrid Dilated Convolution) - 图森组
- 混合空洞卷积,在每一层使用不同的rate,把dilatioin rate 变成锯齿形式的也就是不同层之间的dilation不断变化。目标是最后的接收野全覆盖整个区域。
- 1. 叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷,有些点永远不会被考虑
- 2. 将 dilation rate 设计成锯齿状结构。例如[1, 2, 3, 1, 2, 3] 循环结构,覆盖了所有点,如上图
- 3. 需要满足一下这个式子,M<=K:
![8d476ec7dc1672730e9a5ab2b14ea2ac.png](https://i-blog.csdnimg.cn/blog_migrate/3fb7eb255084bf4c110911a3f0f69e4e.png)
-
- dilation rate是空洞卷积率,记为 ri,就是扩张倍数;K是卷积核尺寸
- 举例:对于常见的扩张卷积核大小K=3,如果r=[1,2,5] 则
![c88d4af8c95dc02d549c886bd9ba004b.png](https://i-blog.csdnimg.cn/blog_migrate/a1ff31f93a2aad1327cfe8e974667e8f.png)
-
- 此时M2=2 ≤ K=3 满足设计要求,设计的示意图如下:
![10086bedf72f5f47b3a7f5eacbc09eba.png](https://i-blog.csdnimg.cn/blog_migrate/681611b776609e2d3088dcabc6a15f83.jpeg)
DUC
- 双线性插值问题:如果模型的d=16 d=16d=16,即输入到输出下采样了16倍。如果一个目标物的长或宽长度小于16个pixel,训练label map需要下采样到与模型输出维度相同,即下采样16倍时已经丢失了许多细节, 对应的模型预测结果双线性插值上采样是无法恢复这个信息。
- 密集上采样卷积DUC (Dense Upsampling Convolution),做的事情就是改变原本top layer输出的shape,提高了小目标物的识别率,验证了DUC可以恢复双线性插值上采样损失的信息。
- DUC模块,将所有特征图分成d^2个子集(d代表图像的降维比例)。假如原始图像大小为H*W,卷积之后变为H/d*W/d,用h*w代替,具体为:
- 先将原先的h*w*c变成h*w*(d^2*L),L为分割的类别数目
- 将此后的输出reshape为H*W*L,以此引入多个学习的参数,提升对细节的分割效果
反卷积 VS 空洞卷积
- Decon是上采样,Dilated Conv是增大感受野但不下采样
- Deconv是在像素之间填充空白的像素
- Dilated Conv是忽略掉了一些像素
- 反卷积还原图像尺寸,要下采样
空洞卷积的应用场景
- 像素级任务,属于背景还是前景,前景中的哪一种
- 如语义分割任务,明显HDC原则的空洞卷积ResNet更好实现了语义分割网络
![1e34492a4e01bee74ea4dd3d8c2fae69.png](https://i-blog.csdnimg.cn/blog_migrate/5091b89ad3e7875525dd2abe6fab0a45.jpeg)
论文实验结果
在语义分割领域的CityScapes、PASCAL VOC 2012、Kitti Road benchmark数据集取得了当时最先进的成果。
![2b938d0ef0d7573f9be3c57f76169f70.png](https://i-blog.csdnimg.cn/blog_migrate/df743a921a8bc9e995dd5659667cef4a.jpeg)
推荐阅读:
本论文解析:https://blog.csdn.net/u011974639/article/details/79460893
反卷积: https://www.zhihu.com/question/43609045/answer/132235276
ASPP网络(Atrous Spatial Pyramid Pooling)-港中文和商汤组
另外在我的主页中还能看到其他系列专栏:【OpenCV图像处理】【斯坦福CS231n笔记】