图像分割DeepLab系列算法思路分析
1.DeepLab概述
DeepLab是由谷歌提出的专用于语义分割任务的系列模型,核心目标是为图像中的每个像素分配一个语义类别标签。它在图像分割领域有很不错效果,曾在PASCAL VOC-2012数据集上达到当时最高水平(mIOU 79.7%) ,并在Cityscapes、PASCAL-Context等数据集上广泛使用。DeepLab的优势在于能够在保持高精度的同时还能结合上下文信息,对物体边界进行精确定位。
1.U-Net 与 DeepLab
同样是做分割任务U-Net和DeepLab有啥区别呢?
U-Net更适合在生物医学图像分割(细胞、器官、病变区域等)、小目标分割、需要精确边界轮廓的应用,其优势边界分割极其精细、在小样本数据集(尤其是医学影像)上表现卓越、架构相对也简单清晰、易于实现和改进。
DeepLab (V3+)适合对自动驾驶场景理解(Cityscapes 等)、可以用在通用场景分割(PASCAL VOC, ADE20K)、街景分割、实时分割等,它对多尺度物体识别鲁棒性强、擅长处理复杂场景和背景、在利用强大的骨干网络预训练时优势明显、并且在大规模自然场景数据集上能有不错的精度(尤其对大型物体)、推理速度(尤其使用轻量骨干时)也有优势。
U-Net适用的任务有个显著特点是目标较小,我们可以将这些小目标看作是在整张图像中的局部区域,在此类任务中,仅依赖图像的局部特征往往就足以完成分割任务。而DeepLab 所面向的多为真实世界中的语义分割任务,在这些任务中,目标往往尺寸较大(如整个人体、一辆汽车),同时,这些目标还可能存在复杂的背景干扰、遮挡关系等,因此,仅凭局部特征已难以获得准确的分割结果,而这其中的实现原理不得不提一个概念感受野(Receptive Field)。
2.感受野(Receptive Field)
感受野(Receptive Field,RF) 描述的是网络中某一层某个特征图上的一个点所“看到”或“感受”到的输入图像上的区域大小。简单来说就是特征图上的一个点,是由输入图像上多大范围的像素计算出来的?这个输入图像上的范围就是感受野。
为什么感受野重要?
因为感受野决定了神经元能够捕获信息的空间范围,小的感受野关注局部细节(如边缘、纹理),大的感受野能理解更广阔的区域甚至全局结构(如物体、场景)。通过堆叠卷积层(或池化层),网络可以在较深的层获得更大的感受野,从而整合更大范围内的信息,但深度越深计算开销也会越大。
3.深层网络的局限性
增大感受野,常见的做法是加深网络结构,堆叠更多的卷积层,同时再辅以池化(Pooling)操作。然而这种方式虽然扩大了感受野,却还会带来其它副作用:特征图的空间分辨率逐渐降低,导致部分精细信息的丢失,这在语义分割等任务中是一个非常需要关注的问题,因为准确的像素级定位对于分割质量至关重要。
以 U-Net 为例,其采用下采样—上采样结构,试图在恢复高分辨率的同时保留上下文语义信息,但这种方法在处理大目标、复杂结构时仍有不足,尤其是在更深层次的特征图中,细节信息容易丢失。为了解决这个问题,DeepLab 系列算法引入了一个关键技术:空洞卷积(Dilated Convolution)。
2.空洞卷积(Dilated Convolution)
空洞卷积(Dilated Convolution),也称为膨胀卷积或扩张卷积,是卷积神经网络中一种在不增加参数量或计算量的前提下,显著扩大感受野(Receptive Field)的关键技术,它通过在标准卷积核的权重之间插入“空洞”(零值)来实现的。
1.标准卷积(Standard Convolution)
标准卷积是最基础的卷积操作,其核心特点是卷积核在输入特征图上连续滑动进行计算。具体而言,每个输出像素是通过卷积核与输入特征图中对应的连续局部区域(例如3×3的相邻像素块)进行逐元素相乘并求和得到的。
1.特点与适用场景
- 连续采样:卷积核的权重作用于相邻像素,能够有效捕捉局部细节特征
- 有限感受野:每个特征点仅能感知输入图像中的小范围区域(如3×3的局部窗口)
- 适用场景:在需要精细局部特征的任务中有不错的表现,例如小目标检测(如医学图像中的细胞、显微结构)或局部特征提取
- 局限性:由于感受野较小,在处理大尺度目标或复杂场景时,难以捕获足够的上下文信息,这会限制模型的全局建模能力
2.小卷积核VS大卷积核
既然3×3的感受野偏小,为什么我们倾向于堆叠多个小卷积核而非使用大卷积核?
主要原因有:
1.参数效率更高:三层3×3卷积(27C²参数)相比单个7×7卷积(49C²参数),在实现同样7×7感受野的情况下,参数量减少45%,可以显著降低模型复杂度,有效控制过拟合风险。
2.表达能力更强:每个小卷积层后都包含BN和ReLU等非线性操作,三层3×3卷积提供三次非线性变换,而单个7×7卷积仅有一次,这样可以使模型具备更强的特征抽象能力。
3.训练更稳定:小卷积核更容易初始化,梯度传播更稳定,收敛过程更平滑,当然这种设计也更灵活,便于集成到残差连接、注意力机制等各种模块中。
4.计算更高效:虽然总计算量相近,但小卷积核更利于并行计算,更适合现代GPU架构,在实际部署中往往具有更优的推理速度。
这种设计理念已在VGGNet、ResNet等经典网络中得到验证,体现了”分解大问题为多个小问题”的核心思想。虽然在早期网络层或特殊任务中,大卷积核仍有一定优势,但小卷积核堆叠已成为大多数场景的更优选择。
2.空洞卷积(Dilated Convolution)
空洞卷积是对标准卷积的改进,通过引入膨胀率(dilation rate)参数,在卷积核元素之间插入固定间隔的空洞,使得采样位置变为非连续。这一设计能够在不增加参数量的前提下,显著扩大感受野。
1.核心机制
- 感受野扩展:例如,一个3×3的卷积核在设置
dilation rate=2
时,其等效感受野可扩大至5×5(相当于在核元素之间插入1个空洞)。若进一步增大dilation rate=4
,感受野可扩展至9×9 - 参数效率:空洞卷积仍使用原始卷积核的权重(如3×3的9个参数),计算复杂度与标准卷积相同,仅通过调整采样间隔来扩大感受野
- 稀疏采样:随着
dilation rate
增大,实际参与计算的特征点数量减少,但覆盖的物理范围可以更广
2.优势
- 大感受野与低计算开销:无需通过堆叠更多卷积层或下采样操作(如池化)来扩大感受野,从而避免了信息损失和分辨率下降的问题。这一特性使其特别适合以下场景:
- 大尺度目标识别(如建筑物、自然场景中的大型物体)
- 复杂结构分割(如场景解析、医学图像中的器官分割)
- 存在遮挡时的特征判别
- 分辨率保持:空洞卷积能够在不降低特征图分辨率的情况下捕获全局上下文信息,这对密集预测任务(如语义分割)至关重要
- 实现简单:仅需在标准卷积中设置
dilation_rate
参数即可(例如PyTorch的nn.Conv2d(dilation=2)
),因此被广泛应用于图像分类、目标检测、人体姿态估计等任务。
3.局限性
- 特征稀疏性:过大的
dilation rate
会导致卷积核采样点过于稀疏,可能无法充分捕捉局部细节信息 - 语义连续性假设:空洞卷积依赖于输入特征的局部相关性,若目标区域的细节密集(如高频纹理),稀疏采样可能导致关键信息丢失
3.SPP层:空间金字塔池化
在 DeepLab 的 Home 版本中,模型引入了一个关键结构——SPP(Spatial Pyramid Pooling)层,用来增强模型对不同输入尺寸和多尺度信息的处理能力。要理解它的设计初衷,我们先从一个经典概念说起:图像金字塔(Image Pyramid)。
1.图像金字塔
图像金字塔是一种模拟人类多尺度视觉观察的方法。举个例子,当你看一幅画时,凑近能看到画笔细节,站远些能看到整体构图。图像金字塔正是通过生成同一图像的多个不同分辨率版本(从清晰的原图到逐渐模糊的小图),构建一个类似金字塔的多层结构,从而帮助算法同时理解细节与全局。
1.核心原理
从原始图像开始,每进行一步,都做高斯模糊,轻微模糊图像(抑制噪声和细节),再降采样:缩小图像尺寸(如长宽各减半),重复这一过程,得到一系列越来越小的图像(原始图:1000×1000 → 第1层:500×500 → 第2层:250×250 → 第3层:125×125…)。在这个过程中还需要记录相邻层之间的差异信息(高分辨率图像减去低分辨率图像上采样后的结果),用于后续重建图像细节。
2.优势
可以解决目标尺度变化问题,对于小目标(如蚂蚁)在高分辨率层(底层)清晰可见,对于大目标(如建筑)在低分辨率层(高层)更易识别整体结构。
3.问题点
然而,在实际中,我们往往受限于网络结构,尤其是全连接层。这类层通常要求输入尺寸固定,否则会导致参数无法匹配。而卷积层虽然本身支持任意输入大小,但在需要将特征图汇聚成固定维度表示(如用于分类)时,仍然会受到限制。
2.SPP 层(Spatial Pyramid Pooling)
SPP 层的设计目标有两个:让模型支持任意尺寸的输入图像和强化多尺度特征的表达能力。
其核心思想是:将特征图划分为多个尺度的网格区域,分别进行池化(如最大池化),然后将所有池化结果拼接起来,形成一个固定维度的向量。
如上图是SPP 层嵌入在 CNN 模型中的位置和处理流程,核心包含以下几个步骤:
1. 输入图像 → 卷积层提取特征
图的底部是输入图像,经过一系列卷积层(如图中的 conv₅)之后,得到一组大小为任意尺寸的特征图,这组特征图的尺寸可能因输入图像的大小不同而不同。而SPP 层的设计正是为了适应这种“尺寸不固定”的特征图输入。
2. SPP 层:空间金字塔划分 + 池化
在“spatial pyramid pooling layer”部分,特征图被按照不同粒度划分为多个子区域,分别进行池化(通常是最大池化 Max Pooling),每层划分如下:
- 第一层(蓝色):将特征图划分为 4×4 网格 → 16 个子区域,每个区域进行池化,得到
16 × 256-d
的特征向量 - 第二层(绿色):划分为 2×2 网格 → 4 个区域,输出
4 × 256-d
- 第三层(灰色):全局池化(即 1×1) → 输出
1 × 256-d
注意:每个子区域输出的都是 256-d(即 256 维)特征向量,因为池化操作只作用在空间维度,不改变通道数。
3. 特征拼接成固定长度表示
将三层输出的所有特征拼接在一起,得到一个长度为:
$(16 + 4 + 1) \times 256 = 21 \times 256$
这个向量作为固定长度的特征表示(fixed-length representation),传递给后续的全连接层(如 fc₆, fc₇)进行分类等任务。这样就可以不依赖于输入图像的原始尺寸,因此具备良好的通用性
4. 多尺度特征融合的优势
通过以上操作,SPP 层不仅实现了输入尺寸无关的特征表达,还融合了不同尺度的上下文信息:
- 局部细节(4×4 子区域)
- 中等尺度结构(2×2)
- 全局语义(1×1 全局池化)
这种方式不仅显著提升了模型在复杂场景下的表现能力,而且还被后续许多模型广泛借鉴和作为改进的基础结构。
4.ASPP特征融合策略
在 DeepLab 系列的发展过程中,第二代模型(DeepLab v2)又引入了一项重要改进:ASPP(Atrous Spatial Pyramid Pooling)结构。
1. 传统的多尺度特征提取策略
为了更好地理解 ASPP 的动机和结构,我们先回顾论文中所展示的一张对比图,该图总结了几种不同的多尺度特征提取方法:
图像金字塔(Image Pyramid )
如上面讲的,图像金字塔是将原始图像缩放成多个尺度(比如原图、小一半、再小一半),然后分别送入同一个模型进行特征提取。其核心思想是用多种分辨率的输入图像,让模型在多个尺度上提取特征,最后再将这些特征合并。
- 优点:显式地建模不同物体尺度
- 缺点:计算成本高,因为每个尺度都要跑一遍模型
编码器–解码器结构(Encoder–Decoder )
编码器–解码器结构是先下采样图像提取深层特征,再通过上采样逐步恢复空间信息。其核心思想是在编码阶段提取抽象语义信息,再在解码阶段恢复空间细节。
- 优点:结构灵活,适用于需要空间分辨率输出的任务,如语义分割
- 缺点:可能导致细节丢失,需注意特征融合方式
空洞卷积加深网络(Atrous Convolution )
空洞卷积是在不增加参数和计算量的前提下,通过引入“空洞”(即膨胀)卷积扩大感受野。其核心思想是通过设置不同的膨胀率,让卷积核在多个尺度上捕捉上下文信息。
- 优点:提升感受野、保持特征图大小,这是 DeepLab 系列的核心技术之一
- 缺点:空洞卷积在小目标上效果可能不如标准卷积
空间金字塔池化(Spatial Pyramid Pooling )
空间金字塔池化是对同一张特征图,采用不同尺度的池化窗口提取信息(如 1×1、2×2、4×4),然后拼接结果。其核心思想是通过多尺度的池化操作融合局部和全局特征,获得多尺度上下文。
- 优点:输入尺寸灵活,能够高效建模多尺度语义信息
- 缺点:不像空洞卷积那样直接在卷积层扩展感受野
2.ASPP:融合空洞卷积与 SPP 的改进结构
基于上述方法,DeepLab v2 提出了一种更高效的方案——ASPP(Atrous Spatial Pyramid Pooling)。该结构结合了空洞卷积和 SPP 的思想,其核心目标是:在保持计算效率的同时,进一步提升模型的多尺度感知能力。
1.输入图像(左侧猫咪图)
首先进入一系列卷积和池化操作,逐步提取特征并降低分辨率。图中标注了输出特征图的空间步幅(output stride),先后为 4、8、16,表示图像被缩小的倍数。
2. 主干网络
由多个 block 组成(如 Block1、Block2 等),每个 block 提取越来越抽象的语义特征。在 Block3 之后,使用了一个 空洞率为 2 的卷积,扩大感受野,同时保持分辨率不变。
3. ASPP 模块(右侧黄色框)
这是图中的重点部分,也就是所谓的空洞空间金字塔池化结构,它包含多个分支,每个分支采用不同的卷积感受野。
ASPP 用多个不同扩张率(dilation rate)的卷积并行处理同一张特征图,从而获取不同尺度的上下文信息:
a. Atrous Convolution 分支:
- 1x1 卷积:相当于不考虑邻域,仅用于压缩通道或增加非线性
- 3x3 空洞卷积 rate=6:感受野较小,适合提取中等区域信息
- 3x3 空洞卷积 rate=12:感受野更大,可以看到更远的上下文
- 3x3 空洞卷积 rate=18:感受野最大,有利于理解全局语义
b. Image Pooling 分支: - 对整张特征图做全局平均池化,提取全局语义,再通过上采样还原回特征图大小,这样主要是为了引入图像整体场景的信息
4.融合输出:
将上述五个分支的输出进行拼接(Concat),然后接一个 1x1 卷积 用于融合特征。得到的是融合了多个尺度信息的统一特征图,其空间尺寸不变(仍是 output stride 16 对应的大小)。
这种结构的优势在于:
- 可同时具备局部精细信息与全局上下文信息
- 利用空洞卷积实现更大感受野,避免了图像金字塔带来的重复计算
- 与 SPP 相比,ASPP 通过引入可调膨胀率的卷积操作,进一步增强了特征的多样性与表达力
虽然 DeepLab 系列在不断演进,但每一代之间的改进幅度并不总是显著。例如,在 DeepLab v3 之后,作者并未直接发布 “v4”,而是采用了“DeepLab v3+”这样的命名。这种命名方式反映了在一定程度上,后续改进更侧重于细节优化,而非架构。
因此,对于DeepLab 系列模型,理解 空洞卷积 与 ASPP/SPP 结构 的本质与用法是关键。这些组件在语义分割及其他下游任务中具有广泛的适用性和借鉴价值。
5.DeepLab v3+网络架构
通过如上网络结构图即可很好地理解其设计核心,DeepLab v3+ 的整体结构可以概括为两个主要部分, 编码器(蓝色虚线框),负责特征提取和压缩,解码器(红色虚线框),负责重建细节并输出结果。
1.Encoder模块
在输入图像进入主干网络(Backbone)进行初步特征提取之后,DeepLab v3+ 在编码器部分引入了 ASPP(Atrous Spatial Pyramid Pooling)模块,用于捕捉不同尺度的上下文信息。
ASPP 的设计核心包括以下几条并行路径:
- 1×1 卷积分支:获取局部精细特征
- 三个不同空洞率(rate)的空洞卷积分支:空洞卷积可以在不增加参数量的前提下扩大感受野,捕捉更丰富的上下文信息,不同的空洞率表示不同的采样间距,从而实现多尺度感知
- 全局平均池化分支:对整张特征图做平均池化,再通过 1×1 卷积和上采样恢复到原尺寸,作为全局语义信息的补充。
这五个分支的输出特征图在尺寸一致的前提下拼接在一起,随后通过 1×1 卷积进一步融合,形成更具语义表达力的特征表示。
注:不同空洞率下的空洞卷积通过适当的 padding 来保证输出特征图尺寸一致。
2.Decoder模块
为了提升分割结果的边缘细节与空间定位精度,DeepLab v3+ 引入了 Decoder 结构,将编码器提取的高级语义特征与浅层的低级特征进行融合。
具体流程如下:
- 浅层特征提取:从主干网络中提取一个较浅层次(如第一个 Block)的输出,作为低级特征(Low-Level Features),用于补充边缘与细节信息
- 上采样高层特征:将 ASPP 输出的高层语义特征上采样,使其尺寸与低层特征一致
- 通道对齐与拼接:对低层特征先通过 1×1 卷积降维,减少通道数,以匹配高层特征。将两者在通道维度上拼接
- 融合与预测:拼接后的特征再经过若干个 3×3 卷积进行融合,最后上采样至输入图像的大小,输出逐像素的语义预测结果
3.网络设计总结与扩展性
DeepLab v3+ 的设计虽然不复杂,但融合了多种关键思想:
- 编码器-解码器结构(Encoder-Decoder):提取高语义与低空间分辨率的特征后,通过解码器恢复空间信息
- ASPP 模块:利用空洞卷积实现多尺度感受野的构建
- 特征融合机制:结合浅层的局部细节与深层的全局语义,提高分割精度
6.DeepLab算法演进总结
1. 核心问题定位
针对语义分割任务中大尺度目标识别与复杂场景理解的挑战,传统方案(如U-Net)依赖局部特征和逐步下采样,易丢失全局信息。DeepLab提出空洞卷积(Dilated Convolution)。
2. 关键技术:空洞卷积
在标准卷积核中插入”空洞”(零值间距),通过调整膨胀率(dilation rate) 控制采样间隔。
优势:
- 同等参数量下显著扩大感受野(如3×3卷积在dilation=6时等效13×13感受野)
- 保持特征图分辨率,避免池化导致的信息损失
- 支持多尺度语义捕获(不同膨胀率对应不同感受野)
3. 多尺度特征融合机制
ASPP结构(Atrous Spatial Pyramid Pooling):并行多分支结构,1×1卷积 + 多个不同膨胀率的3×3空洞卷积(如rate=6,12,18) + 全局平均池化。拼接各分支输出,通过1×1卷积融合多尺度特征
效果:
- 同时捕获局部细节(小膨胀率)与全局上下文(大膨胀率)
- 提升模型对尺度变化和遮挡的鲁棒性
4. DeepLab v3+架构创新
编码器-解码器设计:
- 编码器:骨干网络(如ResNet)+ ASPP模块 → 提取高语义特征
- 解码器:
- 对深层特征上采样
- 与浅层高分辨率特征拼接(经1×1卷积对齐通道)
- 3×3卷积融合 → 恢复细节边界
技术融合:
空洞卷积(扩大感受野) + ASPP(多尺度融合) + 跳连(补充细节)
7.备注
- DeepLab v1 论文地址:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》
- DeepLab v2 论文地址:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》
- DeepLab v3 论文地址:Rethinking Atrous Convolution for Semantic Image Segmentation
- DeepLab v3+ 论文地址:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》