【分割模型解读】感受野与分辨率的控制术—空洞卷积

本文深入探讨了空洞卷积在图像分割领域的应用,解析其如何在维持空间分辨率的同时扩大感受野,实现多尺度上下文信息的获取。通过对比上采样和反卷积,展示了空洞卷积在控制分辨率和感受野方面的优势。

这是专栏《分割模型解读》的第3篇文章。在这里,我们将共同探索解决分割问题的主流网络结构和设计思想。

前两篇文章介绍了编解码分割结构,今天具体聊聊解码器中涉及到的空间分辨率恢复问题。

作者 | 孙叔桥

编辑 | 言有三

1 绪论

通过前两篇文章,我们了解到分割任务是一个像素级别的任务,因此需要在输入的空间尺寸下对每个像素都有分割的结果。换句话说,如果输入的空间尺寸是HxW,那么输出也需要是HxW的。

然而,为了提高网络性能,许多结构采用了池化或striding操作来增加感受野,同时提升远程信息的获取能力。但是这样的结构也带来了空间分辨率的下降。

比如之前提到的编解码结构中的编码器。

640?wx_fmt=png


在空洞卷积提出以前,大部分的空间尺寸恢复工作都是由上采样或反卷积实现的。前者通常是通过线性或双线性变换进行插值,虽然计算量小,但是效果有时不能满足要求;后者则是通过卷积实现,虽然精度高,但是参数计算量增加了。


640?wx_fmt=png

(复制方法上采样示意图)

640?wx_fmt=gif

(反卷积方法上采样示意图)

基于此,DeepLab就提出了“空洞卷积”(atrous convolution)的概念。

2 空洞卷积

一句话概括空洞卷积:调整感受野(多尺度信息)的同时控制分辨率的神器。

(1) 控制感受野

下图是空洞卷积结构的示意图,从左到右比率(rate)分别为1、6和24,比率可以粗暴理解为卷积核内相邻两个权重之间的距离。从图中可以看出,当比率为1的时候,空洞卷积退化为常见的卷积。

640?wx_fmt=png

很明显,应用空洞卷积后,卷积核中心像素的感受野(也就是一个卷积核能看见的区域)增大了,但是在步长为1的情况下,特征图的空间分辨率却可以保持不变。

(2) 控制分辨率

除了维持空间分辨率,空洞卷积也可以像标准卷积一样通过设置输出步长(output_stride)实现输出特征图分辨率的控制。

3 网络结构

(1) 网络结构介绍


在目标检测、图像分割等计算机视觉任务中,图片中可能出现如下图情况中的不同大小的目标。为了应对一个目标在不同尺度下的识别或分割造成的困难,研究者们想出了许多方法获取同一位置上不同尺度的上下文信息,从而保证算法对于尺度变化具有一定鲁棒性。

640?wx_fmt=png

在图像分割领域中,主要存在下面四种网络结构能够实现多尺度上下文的获取。从左到右分别是金字塔结构、编解码结构、空洞卷积结构和空间金字塔池化结构。


640?wx_fmt=png

前两种结构是通过输出步长的设置,逐步缩小输出特征图的分辨率,从而使得每层特征上所对应的感受野的尺寸变化;第三种结构是通过直接改变每个卷积核的可见区域实现感受野变化;最后一个结构是通过对特征层进行不同尺度的池化,实现感受野的遍历。


(2) 空洞卷积结构1


下图(b)是基于上面第三种结构的空洞卷积分割网络结构图,(a)是对应的第三种结构的网络结构图。

640?wx_fmt=png

可以看到从block4到block7,通过应用不同比率的空洞卷积,该网络结构实现了在维持空间分辨率的前提下的感受野(尺度)变化。

(3) 空洞卷积结构2


下图是基于最后一种结构的空洞卷积网络结构,也称为ASPP(Atrous Spatial Pyramid Pooling),也是前两个DeepLab版本中所使用的网络结构。

这种结构将上个结构的串联空洞卷积变成了并联的空洞卷积运算,基于同一级特征结构提取不同尺度下的卷积结果。

640?wx_fmt=png

4 实验及分析

(1) 卷积核的有效权重

通过前面的了解,我们可以发现一个问题。那就是,当空洞卷积的区域与特征图实际空间尺寸相近的时候,实际有效的卷积核权重是非常有限的。

比如,对一个65x65的特征图应用不同比率的3x3滤波器,我们可以得到下图的结果。

640?wx_fmt=png

可见,在极端条件下,当空洞卷积的比率接近特征图空间尺寸时,一个3x3的卷积核就退化成了1x1的卷积核。

为了克服这个问题,DeepLabv3中采用的做法是对最后一层特征图应用全局池化(global pooling),再将其送入一个1x1的卷积层中,最后,通过双线性上采样实现希望的空间分辨率。

(2) 实验总结

DeepLabv3给出了诸多条件下的剥离实验,首先给出整体结论:

  • 输出步长为8时效果比更大的步长要好;

  • 基于ResNet-101的结构比基于ResNet-50的要好;

  • 用变化的比率比1:1:1的比率要好;

  • 加上多尺度输入和左右翻折数据效果更好;

  • 用MS COCO下预训练的模型效果更好。


具体结果看下面表格:

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

表格均来源于DeepLabv3论文:

《Rethinking Atrous Convolution for Semantic Image Segmentation》

5 更多结果

640?wx_fmt=png

总结

经过DeepLab和空洞卷积的学习,我们一起从之前的编解码结构共同迈入了第二大分割问题的处理方法:上下文信息整合。从这篇文章开始,我们将一起探索多种不同的上下文信息整合方法。

下篇文章将介绍空洞卷积的实时网络结构。下回见!

下次直播预告


【直播预告】计算机视觉中数据增强原理和实践


640?wx_fmt=png

转载文章请后台联系

侵权必究

技术交流请移步知识星球

640?wx_fmt=jpeg

更多精彩内容请关注知乎专栏《有三AI学院》

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

往期精选

### 空洞卷积的工作原理 空洞卷积(Dilated Convolution),也被称为膨胀卷积,是一种特殊的卷积操作。标准卷积不同,空洞卷积通过在卷积核中插入“空洞”或间隔来扩展感受野,而无需增加参数数量或计算量。这种技可以通过调整卷积核中的采样间隔来控制感受野大小[^1]。 具体来说,空洞卷积的卷积核并不是连续地对输入特征图进行采样,而是通过一个称为“膨胀率”(dilation rate)的参数来决定采样的间隔。例如,当膨胀率为1时,空洞卷积退化为标准卷积;当膨胀率为2时,卷积核会跳过一个像素进行采样[^2]。 ### 控制感受野的方法 通过调整空洞卷积的膨胀率,可以灵活地控制神经网络的感受野感受野是指网络中某个输出单元能够感知到的输入图像区域大小。随着膨胀率的增加,卷积核的有效覆盖范围增大,从而使得网络能够在不增加额外参数的情况下捕获更大的上下文信息[^3]。 例如,在深度学习框架如TensorFlow或PyTorch中,可以通过设置`dilation_rate`或`dilation`参数来实现这一目标。以下是一个简单的代码示例,展示了如何在PyTorch中使用空洞卷积: ```python import torch import torch.nn as nn # 定义一个带有空洞卷积的层 class DilatedConvLayer(nn.Module): def __init__(self, in_channels, out_channels, kernel_size, dilation): super(DilatedConvLayer, self).__init__() self.dilated_conv = nn.Conv2d( in_channels=in_channels, out_channels=out_channels, kernel_size=kernel_size, dilation=dilation, padding=(kernel_size - 1) * dilation // 2 # 保持输出尺寸不变 ) def forward(self, x): return self.dilated_conv(x) # 示例:创建一个膨胀率为2的空洞卷积层 layer = DilatedConvLayer(in_channels=3, out_channels=64, kernel_size=3, dilation=2) input_tensor = torch.randn(1, 3, 32, 32) # 输入张量 output = layer(input_tensor) ``` 在这个例子中,`dilation=2`表示卷积核将以2个像素的间隔进行采样,从而显著扩大其感受野[^4]。 ### 感受野的计算公式 对于空洞卷积感受野的计算公式可以表示为: \[ \text{Receptive Field} = (k - 1) \times (\text{dilation rate}) + 1 \] 其中,\( k \) 是卷积核的大小,\(\text{dilation rate}\) 是膨胀率[^5]。 通过上述公式,可以精确地计算出每个空洞卷积层的感受野,并根据任务需求调整网络结构以适应不同的应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言有三

三人行必有AI

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值