学习笔记-语义分割之编解码结构


前言

在一次刷微信公众号的推荐时看到了一篇’关于语义分割的亿点思考‘,里面写了关于编解码架构的理解,我觉得内容对于所有的图像生成类的网络都适用,也加深了我对网络特征提取的思考。以下内容大部分都是摘自CVHub微信公众号。我只是知识的搬运工~。

一、编解码架构

首先,让我们来看下编码器。众所周知,编码器一般可视为整个网络的特征提取器(a.w.a Backbone),用于压缩原始图像并逐步地提取出富含高级语义信息的特征图。这个过程中最关键的因素便是上下文信息,它是提升语义分割性能最为重要的因素之一,而有效感受野则大致决定了网络能够利用到多少上下文信息。

对于大部分网络结构来说,通常都会在编码的过程中引入池化或步长卷积来逐步降低输入特征图的空间分辨率,一方面可以降低计算资源的消耗,另一方面也能够在一定程度扩大感受野。此外,除了卷积操作本身(参数共享)所具备的平移等变性 translation equivalence 外,引入池化操作还能够为网络带来一定的平移不变性 translation invariant,使网络对目标位置不那么敏感,间接地增强了网络对未知数据的推理能力,同时又通过共享卷积核来达到控制模型复杂度的目的。

理论上,通过堆叠足够深的卷积(池化)层,网络的感受野能够覆盖到输入图像的全局区域。然而,考虑到以下三点:

  1. 网络的实际感受野远小于其理论感受野,理论上呈高斯分布

  2. 考虑到参数量激增和计算量消耗与性能之间的平衡;

  3. 频繁的下采样操作会导致小目标的细节信息丢失严重;

所以,单纯依赖堆叠一堆常规的卷积池化操作来实现覆盖原图的感受野其实是不太实际的。扯到这里,我想还有部分人没明白究竟上下文信息是个什么概念?考虑下面这张图片:

先看第一行第三列,这里模型将远处的一艘的部分误判为,这是因为它具有与汽车相似的外观,而模型由于缺乏有效的局部上下文信息容易导致分割失败局部上下文信息是分割领域中不可或缺的一部分,常用于区分具备相似特征的不同对象。

再看下第二行第三列,此处目标是一栋美丽的大厦,可惜模型未能将其完整的表示出来,这是由于传统的卷积运算一次仅能处理一个局部领域,这大概率会导致大尺寸对象分割的不完整性。因此,为了解决这个问题,我们需要思考如何设计更大的感受野来获取充足的全局上下文信息。

 下图展示了多个结直肠息肉数据集统计后的目标尺寸分布,可以明显看出,不同的息肉目标之间是存在明显的尺度差异的,这种现象也普遍存在于许多语义分割任务中。因此,如何有效的提取多尺度上下文信息以适应不同尺寸、形状变化多样的目标也是一个亟需解决的问题。

 

早期的语义分割网络大都是围绕如何在保证效率的同时尽可能的捕获有效的上下文信息开展的,而主流的方法主要有两种:扩大感受野或引入注意力机制

扩大感受野的方法主要有以下几种方式:

  • 使用大卷积核的 GCN 等方法;

  • 使用空洞卷积的 DeepLab 等方法;

  • 使用池化操作的 PSPNet 等方法;

现在,让我们再进一步思考,以上这些方法存在什么局限性?例如:

  • 使用不同大小的卷积核组合,一方面参数量过大容易导致多拟合,另一方面理论感受野远小于实际感受野;

  • 使用空洞卷积虽然可以保留完整的空间信息,然而会引入额外的计算量,容易引起局部领域的信息丢失,同时,当扩张率选取不恰当时还会造成网格(棋盘)效应

  • 使用池化操作虽然简单高效,但容易因为降采样导致小尺寸目标丢失

此外,感受野是否越大越好?实际上,感受野太小,不足以建模远距离依赖捕获大尺寸对象;感受野太大,则容易引入过多噪声和无效信息,这些最终都会影响到整体的分割性能。那么,设计合理的多尺度表征来获取丰富的等效感受野就显得尤为重要了。例如,DMNet 提出了动态多尺度的过滤器来自适应不同的目标尺寸。解决了尺度参数设计的问题,那么如何更高效的融合不同尺度的信息?CPFNet通过借鉴SK-Net的思想引入了尺度感知模块来自适应的融合来自不同尺度的特征。

另一方面,引入注意力机制的作用主要是获取足够的全局上下文信息以建立远距离依赖,主要方式有:

  • 结合通道空间双注意力的 DANet 等;

  • 借鉴自注意力机制的 NonLocal 等;

同样地,对于基于注意力机制的分割方法来说,其优化点可以考虑从不同维度去考虑如何建模,例如基于区域信息建模的PSANet以及针对不同类别信息进行像素加权的OCRNet;另一方面可以考虑从效率方面去改进注意力机制本身带来的计算资源问题,例如采用十字交叉注意力进行等效替代的CCNet、引入非对称结构的ANN、亦或是从全局上下文建模角度所实际的简化版GCNet等等。

聊完编码器部分,再来分析下长跳跃连接。

既然谈到跳跃连接,想必大家第一时间想到的是 ResNet 中的残差连接 skip connection。与原始的(短)跳跃连接操作缓解梯度弥散的动机不同,考虑到语义分割任务本身是一种密集型分类预测任务,因此 U-Net 或 FCN 中所涉及到的长跳跃连接操作本质上是为了更好的弥补编码过程中下采样导致的信息损失问题,帮助网络在解码的过程中更好的恢复对物体细节的定位。

另一方面,通过引入长跳跃连接,可以实现不同层级特征之间的信息融合,从而提取到更具有判别力的特征。因此,早期的 RefineNet 便是结合这两点,通过建模多个层级特征之间的信息交互来弥补下采样操作所带来的信息损失。那么问题来了:

  1. 如何融合更多的特征?

众所周知,不同抽象层级的特征具有不同的独特语义表征。因此,融合不同层级之间的特征是一个自然而然的想法,例如,UNet++ 中便尝试结合长、短跳跃连接来实现尽可能丰富的信息共享。

  1. 如何融合更好的特征?

首先,考虑下医学图像分割任务。不同于自然图像,医学图像在成像过程中,受采集设备或光照等因素的影响,不可避免的会引入许多背景噪声。此时,如果我们单纯的采用长跳跃连接操作,势必会引入浅层特征中一些不纯净的噪声,从而影响解码器输出特征的质量。为了解决此问题,一方面可以从数据源本身出发,进行去噪处理,例如nnUnet中设计了许多有效的预处理操作,例如CLAHEGamma增强等来更好的处理图像。另一方面可以从模型角度考虑,例如Attention-UNet中引入门控注意力来强化前景区域抑制背景区域;又或者像MultiResUNet堆叠多个1×1卷积来进行特征"提纯"。

特征融合本质上是为了获得更具有判别力的特征表示。一般而言,浅层特征注重边缘、纹理等空间细节,但缺乏高级语义;而深层特征具备精确的高级语义信息,但缺乏空间细节信息。一种自然而然的想法便是融合两者。然而,由于特征结构以及特征内容本身的限制,不同层级之间的特征融合势必会存在语义鸿沟。为了解决此问题,ExFuse提出了许多方法使网络得以在浅层特征中引入更多的语义信息,在深层特征中嵌入更多的空间信息。

解码器

解码器的作用是将编码器所提取到的高级特征上采样至固定分辨率以实现端到端的训练从而完成像素级的密集预测分类。通常来说,解码器设计的核心是如何高效的将经过压缩的高级语义特征尽可能无损的还原。这个过程中会涉及两个操作:上采样和特征输出。

如上所述,由于编码器会涉及到多次下采样操作,不可避免的会导致图像精细特征的丢失。一种解决方法是“提前止损”,正如我们上面所介绍的DeepLab,采用空洞卷积可以在无需降采样的情况下拥有更大的感受野,但这仍然会引入许多问题。另一种方法便是“直面困难”,通常将一个特征图进行上采样有两种方式,即使用线性插值和反卷积。

线性插值算法是一种与数据无关的算法,它是根据设定好的公式近似模拟出未知点的信息,这必将制约模型的表达能力。而使用反卷积由于本身自带可学习参数,一般可获得更优的分割性能,但不可避免会引入过多的参数量和计算量。因此,一种参考的解决方案便如同 DUsampleing 中基于通道重排的思路所设计的新型上采样方式,可以同时结合两者的优势。

特征输出的作为为了让网络能进行端到端的训练以更新模型参数。通常来说,大多数网络只会输出最后一层特征图,但大家思考下这一定是最优解吗?众所周知,不同层级的特征所提取到的语义是不一样的,如果能够对中间层的特征进行监督学习,是否能取得比较好的效果?这个思想早期在 GoogLeNet 中有所体现,例如该论文中所提及到的辅助损失。后续一部分语义分割网络也应用了此思路,例如 PSPNet 和 DSNDSN 中较早提出了深监督的思想,旨在为解码器中所有层级的输出特征均建立监督机制,一来可以有效的综合多个输出层的信息来学习更加鲁邦的特征;二来可以有效的缓解训练过程中梯度消失的现象,加速网络收敛。

谈完深监督的好处,那潜在的问题会出现在哪呢?这里给大家举几个栗子:

  1. 需要监督多少层特征?

  2. 需要监督哪些层特征?

  3. 如何分配合适的权重?

对于第1点,这其实并没有一个严格的定论,关键之处还是取决于训练数据本身的特性。对于第2和第3点,一个经验法则是越靠近输出层的特征理应是最重要的,因此越靠近输出层的中间特征理应分配更多的权重,这一点其实也有不少论文验证过了。

Transformer 对于底层特征的提取其实并不擅长,容易导致对小目标的错误预测,这也是后面为什么涌现出这么多 CNN + Transformer 的混合双打架构,当然还有其他的益处,例如降低计算量。其实,Transformer 发展到后期更多的是蜕变为一种类似于 CNN 的基础组件供大家选择,毕竟任何事物的成长是由于某种因素的推动和影响,使其逐渐发展壮大,但这种发展是有限度的,当它发展到一定程度时,总有其它因素限制


总结

上述内容对编解码架构有着很好的诠释和理解。也让我想起了知乎上的一个问题“为什么UNet对医学图像分割很有效”。结合上述大佬的头脑风暴其实可以很容易得出答案。总的来说,大佬话语的精髓应该是:

1. 在编码器中高效对上下文信息建模非常重要,

2.对编码器、编码器网络设计需要考虑不同设计对特征提取的影响。

这篇文章我认为无论是对在校学生在编解码结构上理解创新还是对于实际落地场景的算法优化都提供了一个很好的思维导向。再次强调上述内容来自CVHub微信公众号。我只是知识的分享者~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值