Dilated convolution空洞卷积的理解以及Pytorch实现

Dilated convolution空洞卷积的理解以及Pytorch实现,第1张

       DilatedDilated convolution:空洞卷积或者扩张卷积(同 Atrous convolutionconvolution)

       Dialted convolution最先在使用图像分割领域,图像输入到CNN中提取特征(如FCN),FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积 *** 作,deconv可参见知乎答案 如何理解深度学习中的deconvolution networks? )总结来说:包括pooling *** 作增加感受野和Upsampling扩大至原图尺寸。但是此过程中会由于Pooling *** 作产生信息的损失,不利于分割或者目标检测。Dilated convolution就是为了在不是用pooling *** 作损失信息也能增加感受野。

        Dilated 示意图如下:

        概念介绍:空洞卷积的rate,代表传统卷积核的相邻之间插入rate-1个空洞数。当rate=1时,相当于传统的卷积核。

       从两个角度考虑空洞卷积:

     (1)从kernel(卷积核)角度:相当于在标准概念的kernel(卷积核)中,相邻点之间添加rate-1个0,然后使用扩张后的kernel(卷积核)与原图进行卷积。如下图rate=2,相当于标准的3*3卷积核变为5*5卷积核,每一行中间添加2-1个0

     (2)从原图角度:使用标准概念的kernel(卷积核)在原图中每隔rate-1进行像素点卷积采样。如下图rate=2,在原图中每隔rate-1进行卷积。

        F*F的Feature map经过kernel size(k),padding(p), stride(s), rate(r) Dilated convolution卷积输出的大小:

        使用标准卷积的计算为:

        使用Dilated卷积的计算公式为:

        例子:7*7的feature map,kernel size = 3, padding = 0,stride = 1,rate =2

        标准卷积后大小F为(7-3+0)/1+1 = 5,Dilated卷积后大小F为[7-(3+2*1)+0]/1+1=3

        在Pytorch中可以在torch.nn.Conv2D(,,,,,,,dilated=rate)实现。

        上述例子使用Pytorch实现过程如下:

         知乎:如何理解空洞卷积(dilated convolution)?

        https://blog.csdn.net/silence2015/article/details/79748729

我们知道正常的卷积已经能够提取特征了,那么空洞卷积又是做什么的呢?

空洞卷积(atrous convolutions),又称扩张卷积(dilated convolutions),向卷积层引入了一个成为“扩张率(dilated rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。下图是正常卷积核空洞卷积的动态图对比:

下图为卷积核为3x3,步长为1的普通卷积:

下图为卷积核为3x3,步长为1,扩张率为1的空洞卷积:

对比上两动图,先感受下区别。

空洞卷积有什么用呢?

在深度网络中为了增加感受野且降低计算量,总要进行降采样池化等,这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测时,一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。另外,还可以通过调整扩张率来获得多尺度信息。

所以总的来说,空洞卷积主要作用:

不丢失分辨率的情况下扩大感受野

调整扩张率获得多尺度信息

不丢失分辨率的情况下扩大感受野:

我们通过图例来看下空洞卷积是如何发挥作用的?首先空洞卷积是怎么在不丢失特征分辨率的情况下扩大感受野,看下图:

上图左侧为对0-9共10颗像素的正常3x3卷积,padding为same,stride=1的情况下,我们知道其卷积后共得到10个特征,每个特征的感受野均为3x3,如左侧红色的那个特征覆盖3,4,5三颗像素(想象二维情况下应该是3x3)。

上图右侧为对0-9共10颗像素的空洞3x3卷积,这里的3x3是指有效区域,在padding为same,stride=1的情况下,也得到了10个特征,但是每个特征的感受野为5x5,如右侧蓝色的那个特征覆盖2,3,4,5,6五颗像素(想象二维情况下应该是5x5)。

这就在不丢失特征分辨率的情况下扩大了感受野,进而对检测大物体有比较好的效果。

调整扩张率获得多尺度信息:

那么如何通过调整扩张率来获得多尺度信息呢?我们一起看下图:

上图右侧为对0-9共10颗像素的空洞3x3卷积,这里的3x3是指有效区域,在padding为same,stride=1,dilated rate=1的情况下,也得到了10个特征,但是每个特征的感受野为5x5,如右侧蓝色的那个特征覆盖2,3,4,5,6五颗像素(想象二维情况下应该是5x5)。

而左侧为为3x3空洞卷积,padding为same,stride=1, dilated rate=2的情况下,我们可以看到卷积后的特征的感受野为7x7,如红色特征的感受野为1,2,3,4,5,6,7。

所以,我们可以通过调整dilated rate大小,来调整卷积层的感受野,不同的感受野可以感受不同尺度信息的物体。

So, 你Get到了吗?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8095676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存