空洞(扩张dilated)卷积

空洞卷积

  也可以根据字面意思把dilated这个词直接翻译成膨胀卷积或者扩张卷积。这个概念就得重新回到感受野这个话题上,这里补充一些感受野的知识点。感受野可以理解为一个神经元接触到原始特征图的区域范围,感受野越大,神经网络越可以看到更加宏观的特征。这个也很好理解,如果关注一个像素,只能看到图像的颜色信息,但是关注更多像素,这样就能看到轮廓。所以增大感受野对于宏观语义特征的提取是有帮助的。
  我们之前谈到过正常的卷积,卷积核的大小对应感受野的大小,这个3×3的卷积,感受野区域也就是这么大。但是如果给一个卷积加上dilated的概念,就意味着要对这个卷积核做膨胀处理,我在转置卷积中提到了膨胀这个概念,那个时候是特征图做膨胀处理,这个时候是对卷积核做膨胀处理,操作是一样的。而卷积一旦膨胀之后,虽然是通过在卷积核中填充了一些零,但是不得不说,卷积核的感受野确实变大了,是在没有增加参数的前提上,感受野变大了。
卷积核扩张示意图
  在VGG Net的文章中提出来一种理论:一个5×5的卷积,等价于两个3×3的卷积在不同层上的堆叠(stack),而一个7×7的卷积等价于三个3×3的卷积在不同层上的堆叠。这个概念主要也是从感受野的角度去理解的,把一个7×7的特征图(感受野区域)经过三层3×3的卷积之后,得到的结果正好是1×1的,这个1×1的小区域其实就是感受到了特征图中7×7的区域。使用三个3×3的卷积在不同层上的堆叠代替一个7×7的卷积,不仅可以减少参数量( 7 × 7 > 3 × 3 × 3 7×7->3×3×3 ),而且增加了网络的层数,可以引入更多的非线性单元。
  神经网络中除了卷积可以逐渐的扩大神经元的感受野,还有一种方式是通过下采样来增大图像的感受野。如常见的池化操作,通过一个池化(最大池化、平均池化)一般都能把一个元素的感受野扩大两倍,因为一个池化结果对应着上层特征图2×2的区域。但是使用池化层会带来一些问题:
  首先是内部数据结构的丢失,池化层对数据的丢弃理由是不充分的,这样会丢失信息。其次是如果在语义分割的任务中,小物体的信息是无法重建的,假如使用了四个池化层,则感受野(的边长)经过四个池化层扩大了16倍,此时一个区域对应16×16个上层特征图区域。如果物体的尺寸小于16个像素,显然这个物体的的特征就丢失了,已经再也无法对这个物体进行重建了。而且下采样是不可学习的。
  针对以上几个问题,在语义分割的网络中,提出了扩张卷积这个概念,通过卷积来实现下采样。如上图,7×7的特征图,经过3×3的卷积核做膨胀系数为2的卷积运算,结果变成了3×3的。而且每一个1×1的区域在原来的特征图上关联区域是5×5的,直接就扩大了感受野。

空洞卷积运算
  膨胀系数,就是卷积核一个1×1小区域扩张的倍数,原本两个小区域的之间的差距是1,扩张系数是几,扩张后的距离就是几。所以两个小区域之间填充0的个数=扩张系数-1。而扩张后整个卷积核的感受野的边长=(卷积核的边长-1)×膨胀率+1。
  但是使用扩张卷积,可能会出现The Gridding Effect(网格效应)这个问题,假如多次叠加膨胀系数为2的卷积核(大小为3×3)的话,则我们最终得到的一个小区域,是对应原特征图的5×5的感受野的。
对应的5×5感受野区域
  假如这个5×5的感受野是我们通过同样尺寸同样方式的卷积得到的,我们可以将其对应到上层9×9的特征图中。
对应的9×9感受野区域
  我们可以继续往上追溯,但是每一层总会有没有用到的一些的特征图信息,造成了很严重的信息丢失和不连续。事实上,不同层级的扩张系数如果不互质的话,总会存在这样没有用到的区域。所以一般设置的时候都需要满足不同层的dilation rate互质的关系,至于这里还会有更深入的分析,这里仅给出一点点比较重要的。
  转置卷积和空洞卷积都是符合卷积的输出大小计算公式的,转置卷积中想要输出的特征图更大,就得扩大特征大,所以对特征图进行扩张,而这里想要让感受野更大,也就意味着要对卷积核做扩张。

发布了36 篇原创文章 · 获赞 4 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/m0_38065572/article/details/104846136
今日推荐