文章目录

  • 前言
  • 一、膨胀卷积
  • 二、gridding effect
  • 三、使用多个膨胀卷积的时候,怎样设置膨胀系数?
  • 四、膨胀系数设置建议
  • 五、是否应用HDC设计准则的分割效果对比
  • 六、总结
  • 参考资料

前言

这篇博文主要来介绍一下膨胀卷积的知识,膨胀卷积(Dilated convolution)也叫做空洞卷积(Atrous convolution)。我第一次接触到这个词实在看deeplabv3+的论文的时候碰见的这个词,在这里进行详细的介绍。

一、膨胀卷积

下图为普通卷积:k=3,r=1,p=0,s=1

下图为膨胀卷积:k=3,r=2,p=0,s=1
我们可以发现这两种卷积同样使用3*3的kernel,但是在膨胀卷积中,kernel存在间隙,我们称为膨胀因子r

膨胀卷积有什么用呢?

  • 增大感受野
  • 保持原输入特征图的W,H(如上图,实际使用时候将padding设置为1这样就可以保证特征图大小不变)

为什么要使用膨胀卷积呢?

我们在图像分类网络中一般要进行多次多倍数的下采样,比如下采样32倍,之后还要通过上采样还原会原图的大小,但是过多的下采样对我们还原回原图是有很大影响的。拿VGG16网络来举例子,在VGG16网络中通过maxpooling操作对图片进行下采样降低长宽,但是这样做会丢失一部分细节信息和特别小的目标。并且无法通过上采样还原回来。
有人会说,那我们将maxpooling层去掉可以吗?去掉maxpooling层也不是一个好方法,这样会降低感受野。
所以膨胀卷积就解决了这个问题,既可以增大感受野,还能保证输入输出特征图的高和宽不会变换。

二、gridding effect

Understanding Convolution for Semantic Segmentation

下图有四个卷积层:layer1到Layer4进行了3次膨胀卷积的操作卷积核为 3 ∗ 3 3*3 3∗3,膨胀系数为r2

详细的我们看一下layer2上我们用到了Layer1上的哪些数据呢?
我们看到layer2上一个像素它会使用到如下图9个layer1位置上的参数

再看一下layer3上我们用到了Layer1上的哪些数据呢?
我们看到layer3上一个像素它会使用到如下图25个layer1位置上的参数

再看一下layer4上我们用到了Layer1上的哪些数据呢?
我们看到layer4上一个像素它会使用到如下图49个layer1位置上的参数

这时我们可以观察到,通过膨胀卷积我们利用到的底层图像像素并不是连续的,在每个非零元素间都是有间隔的,这样势必导致特征信息的丢失,这个就是gridding effect问题,我们也要想办法尽量避免gridding effect问题。

如果我们将上图的三次膨胀卷积操作的膨胀因子设计r1,r2,r3的形式:




这样设置膨胀系数后,我们所利用到的底层的信息就是连续的啦!
我们再来看一组实验,如果用普通卷积的话:




很明显我们可以看出来在参数相同的情况下普通卷积的感受野要比使用膨胀卷积的感受野要小。

三、使用多个膨胀卷积的时候,怎样设置膨胀系数?

Understanding Convolution for Semantic Segmentation这篇论文中给出了方法。
我们在刚刚的实验中就可以看到,使用膨胀系数分别是1,2,3的膨胀卷积进行连续的卷积操作时候的效果要比使用相同膨胀系数的卷积的效果要好。那么具体该怎么设计系数呢?作者提出了HDC设计准则:

我们用实际代码来测试一下论文中这两组设置膨胀卷积系数的例子:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormapdef dilated_conv_one_pixel(center: (int, int),feature_map: np.ndarray,k: int = 3,r: int = 1,v: int = 1):"""膨胀卷积核中心在指定坐标center处时,统计哪些像素被利用到,并在利用到的像素位置处加上增量vArgs:center: 膨胀卷积核中心的坐标feature_map: 记录每个像素使用次数的特征图k: 膨胀卷积核的kernel大小r: 膨胀卷积的dilation ratev: 使用次数增量"""assert divmod(3, 2)[1] == 1# left-top: (x, y)left_top = (center[0] - ((k - 1) // 2) * r, center[1] - ((k - 1) // 2) * r)for i in range(k):for j in range(k):feature_map[left_top[1] + i * r][left_top[0] + j * r] += vdef dilated_conv_all_map(dilated_map: np.ndarray,k: int = 3,r: int = 1):"""根据输出特征矩阵中哪些像素被使用以及使用次数,配合膨胀卷积k和r计算输入特征矩阵哪些像素被使用以及使用次数Args:dilated_map: 记录输出特征矩阵中每个像素被使用次数的特征图k: 膨胀卷积核的kernel大小r: 膨胀卷积的dilation rate"""new_map = np.zeros_like(dilated_map)for i in range(dilated_map.shape[0]):for j in range(dilated_map.shape[1]):if dilated_map[i][j] > 0:dilated_conv_one_pixel((j, i), new_map, k=k, r=r, v=dilated_map[i][j])return new_mapdef plot_map(matrix: np.ndarray):plt.figure()c_list = ['white', 'blue', 'red']new_cmp = LinearSegmentedColormap.from_list('chaos', c_list)plt.imshow(matrix, cmap=new_cmp)ax = plt.gca()ax.set_xticks(np.arange(-0.5, matrix.shape[1], 1), minor=True)ax.set_yticks(np.arange(-0.5, matrix.shape[0], 1), minor=True)# 显示color barplt.colorbar()# 在图中标注数量thresh = 5for x in range(matrix.shape[1]):for y in range(matrix.shape[0]):# 注意这里的matrix[y, x]不是matrix[x, y]info = int(matrix[y, x])ax.text(x, y, info,verticalalignment='center',horizontalalignment='center',color="white" if info > thresh else "black")ax.grid(which='minor', color='black', linestyle='-', linewidth=1.5)plt.show()plt.close()def main():# bottom to topdilated_rates = [1, 2, 3]# init feature mapsize = 31m = np.zeros(shape=(size, size), dtype=np.int32)center = size // 2m[center][center] = 1# print(m)# plot_map(m)for index, dilated_r in enumerate(dilated_rates[::-1]):new_map = dilated_conv_all_map(m, r=dilated_r)m = new_mapprint(m)plot_map(m)if __name__ == '__main__':main()

r=[1,2,3]:

r=[1,2,5]

r=[1,2,9]

四、膨胀系数设置建议

  • 建议是将dilation rates设置为锯齿结构,例如[1,2,3,1,2,3]
  • 膨胀系数的公约数不大于1
    例如r=[2,4,8]:

    如果这样设置膨胀系数,我们得到的特征图非零像素也不是连续的。

五、是否应用HDC设计准则的分割效果对比


第一行是GT,第二行是ResNet-DUC model,第三行是应用HDC设计准则,很明显可以看出科学的设置膨胀系数对分割效果带来的正面影响。

六、总结

  • 介绍了什么是膨胀卷积
  • 膨胀卷积的作用
  • 为什么要使用膨胀卷积
  • 膨胀卷积膨胀系数的确定方法和影响

参考资料

up主霹雳吧啦Wz原视频
程序源码出处
Understanding Convolution for Semantic Segmentation

语义分割|学习记录(4)膨胀卷积(空洞卷积 )相关推荐

  1. 语义分割学习笔记(四)膨胀卷积

    推荐课程: 1.膨胀卷积_哔哩哔哩_bilibili(膨胀卷积原理讲的很清楚) 2.膨胀卷积(Dilated convolution)详解_哔哩哔哩_bilibili(gradding effect问 ...

  2. 使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记

    使用Pytorch搭建U-Net网络并基于DRIVE数据集训练(语义分割)学习笔记 https://www.bilibili.com/video/BV1rq4y1w7xM?spm_id_from=33 ...

  3. 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/

    文章目录 1. 常规卷积 2. 分组卷积 3. 转置卷积 4. 空洞卷积 5. 可变形卷积 6. 深度可分离卷积(Separable Convolution) 6.1 Depthwise Convol ...

  4. 【Pytorch神经网络理论篇】 32 PNASNet模型:深层可分离卷积+组卷积+空洞卷积

    1 PNASNet模型简介 PNASNet模型是Google公司的AutoML架构自动搜索所产生的模型,它使用渐进式网络架构搜索技术,并通过迭代自学习的方式,来寻找最优网络结构.即用机器来设计机器学习 ...

  5. 膨胀卷积(空洞卷积)学习篇

    文章目录 提出背景 感受野 膨胀卷积是什么 膨胀卷积的设计原理 膨胀卷积的优缺点 膨胀卷积的改进 膨胀卷积基于Pytorch的代码实现 总结 原论文链接: 2016ICLR<Multi-Scal ...

  6. 霹雳吧啦Wz语义分割学习笔记P6

    P6.DeepLabV1网络简介 1.前言 semantic image segmentation with deep convolutional nets and fully connected C ...

  7. 语义分割之FCN网络详解 全卷积网络

    1. FCN网络结构图 原论文链接:https://paperswithcode.com/paper/fully-convolutional-networks-for-semantic 参考B站视频: ...

  8. 膨胀卷积 / 空洞卷积(Dilated convolution)

    视频学习链接:[https://www.bilibili.com/video/BV1Bf4y1g7j8] 1. 认识膨胀卷积 r 为间隙,r = 1 时,就是普通卷积 2. 为什么要使用空洞卷积 提出 ...

  9. 联合目标检测和语义分割——学习笔记

    联合目标检测和语义分割 目标检测 目标检测是一种与计算机视觉和图像处理相关的计算机技术,用于检测数字图像和视频中特定类别的语义对象(例如人,建筑物或汽车)的实例.然而现实中物体的尺寸.姿态.位置都有很 ...

  10. 霹雳吧啦Wz语义分割学习笔记P2

    P2.转置卷积Transposed Convolution 1.作用:上采样 转置卷积不是卷积的逆运算 转置卷积也是卷积 2.转置卷积运算步骤 在输入特征图元素间填充s-1行.列0 在输入特征图四周填 ...

最新文章

  1. python类的私有属性_Python 的私有属性和‘受保护的’属性
  2. 你认识的世界与客观世界间差了N光年
  3. 美国发布《评估和强化制造与国防工业基础及供应链弹性》报告
  4. android view控件的显示和隐藏动画效果
  5. Ubuntu中重启ssh服务时提示:Job for ssh.service failed because the control process exited with error code. See
  6. mysql bytessent_如何对DSQLSERVER、MySQL、Orache语句性能分析
  7. 董明珠炮轰国产车的创始人不开自己生产的车,事实果真如此吗?
  8. 蚂蚁金服疯了吗?大动作,非裁员,年底全员涨薪又涨假期!!!
  9. ADS-B显示终端5.9
  10. 239. Sliding Window Maximum
  11. html中设置负边距的意义,css负边距之详解
  12. 机器学习笔记(十六)——EM算法概述
  13. WebAPI和Node
  14. php天津旅游设计网站作品
  15. 软件架构——设计原则
  16. JavaScript之全局函数详解
  17. GB/T 8567-2006《计算机软件文档编制规范》中与需求有关的文档包
  18. 用P3P header解决iframe跨域访问cookie
  19. 长生诀手游源码服务端
  20. 重磅!《中华人民共和国个人信息保护法》今日起施行!

热门文章

  1. 万邦微信公众号根据关键词取文章列表 API 返回值说明
  2. 女人为什么喜欢抱着男人睡觉,一定…
  3. 每日一道题,划水有意义,看我不卷死你们(评论送书)
  4. 47、建筑设置避难间时,对避难间的要求
  5. 用Python处理EXCEL表格(Openpyxl)
  6. 2021年保育员(中级)考试题及保育员(中级)考试报名
  7. 现在网络安全员工资一般多少(网络安全员平均工资)
  8. 分享一个自动刷抖音的代码
  9. 2008年胡润中国富豪榜榜单(401-500名)
  10. 苹果账号被盗用户:支付宝、微信被盗刷追偿难