基于深度学习的图像语义分割算法:DeepLab系列
题目描述
DeepLab系列是谷歌提出的一系列基于深度学习的图像语义分割算法,其核心目标是解决语义分割中的两个关键挑战:分辨率降低和多尺度物体的有效分割。图像语义分割要求为输入图像中的每个像素分配一个语义类别标签(如“人”、“车”、“天空”)。DeepLab系列通过引入空洞卷积(Atrous Convolution) 和空间金字塔池化(ASPP) 等关键技术,在保持特征图空间分辨率的同时,能够捕获多尺度的上下文信息,从而实现了非常精确的分割效果。我们将重点剖析其最具代表性的版本:DeepLabv3+。
解题过程循序渐进讲解
第一步:理解语义分割的基本挑战
在传统的卷积神经网络(如VGG、ResNet)中,连续的池化(Pooling)和卷积步长(Stride)操作会导致特征图的空间尺寸逐渐减小,也就是分辨率降低。这对于分类任务是有利的,因为它增加了感受野并聚合了信息。但对于需要输出像素级标签的分割任务,这种分辨率的损失会导致物体边界模糊,细节丢失。同时,图像中的物体尺寸变化很大(例如,近处的汽车很大,远处的汽车很小),如何让网络能够同时很好地识别不同尺度的物体,即多尺度问题,是另一个核心挑战。
第二步:引入关键武器——空洞卷积(Atrous Convolution)
空洞卷积,也称为膨胀卷积,是DeepLab系列解决分辨率问题的核心。它在不增加参数量的情况下,能够有效扩大感受野。
- 工作原理:普通卷积核的权重是紧密相邻的。而空洞卷积在卷积核的权重之间插入“空洞”(零值)。空洞率(r)定义了插入空洞的数量。例如,一个3x3的卷积核,当空洞率r=2时,其感受野等效于一个5x5的普通卷积核(计算方式:
感受野 = (kernel_size - 1) * dilation_rate + 1),但它仍然只有9个参数。 - 核心优势:
- 保持分辨率:我们可以移除CNN末尾的某些下采样层(如池化层),直接使用较大空洞率的卷积来代替,这样可以在不缩小特征图尺寸的情况下,依然保持一个较大的感受野来捕获上下文信息。
- 捕获多尺度上下文:通过使用不同空洞率的卷积层,我们可以让网络在同一层级上感知不同范围的上下文,这为后续解决多尺度问题奠定了基础。
第三步:构建特征提取主干网络(Backbone)
DeepLabv3+通常采用在ImageNet上预训练过的经典网络(如ResNet-101、Xception)作为其特征提取主干。但会对其进行关键修改:
- 将最后几个下采样层(例如ResNet中
block4的步长)从2改为1,从而避免特征图尺寸进一步缩小。 - 将
block4及其后续的普通卷积层替换为空洞卷积层,并设置一个合适的空洞率(例如r=2)。这样,在网络的深层,我们依然能获得一个较大尺寸的特征图(通常是输入图像的1/8或1/16),保留了丰富的空间细节。
第四步:采用ASPP模块融合多尺度上下文信息
为了同时分割大小不同的物体,DeepLabv3在 backbone 提取的高级特征后面增加了一个空洞空间金字塔池化(ASPP) 模块。
- 模块结构:ASPP模块并行地使用多个(通常是4个)具有不同空洞率(例如r=1, 6, 12, 18)的3x3空洞卷积层,以及一个全局平均池化层。
- 工作流程:
- 同一个高级特征图被同时送入这5条通路。
- 不同空洞率的卷积层捕获了不同感受野范围内的上下文信息(小空洞率关注局部细节,大空洞率关注全局语境)。
- 全局平均池化层捕获图像级别的全局上下文信息,有助于识别大型物体。
- 将所有通路输出的特征图在通道维度上进行拼接(Concatenate)。
- 再通过一个1x1卷积层来融合这些多尺度信息,并减少通道数,输出一个富含多尺度上下文信息的特征图。
第五步:DeepLabv3+的编码器-解码器结构
DeepLabv3+在DeepLabv3的基础上,增加了一个简单而有效的解码器模块,形成了编码器-解码器结构,以进一步优化物体边界的分割精度。
-
编码器(Encoder):
- 输入:原始图像。
- 过程:由修改后的Backbone(如带空洞卷积的ResNet)和ASPP模块组成。
- 输出:一个低分辨率但富含高级语义信息的特征图。
-
解码器(Decoder):
- 动机:虽然编码器输出的特征图语义信息丰富,但空间细节不足。直接上采样回原图大小会导致边界粗糙。
- 结构:
- 低级特征融合:将编码器中Backbone的早期层(例如ResNet的
block1或block2)输出的特征图引入。这些低级特征虽然语义性不强,但包含丰富的边缘、纹理等空间细节。 - 特征融合:首先将编码器输出的高级特征图通过双线性插值上采样4倍。然后,将其与来自Backbone早期层的、经过1x1卷积降维后的低级特征图进行拼接。
- 细化:对拼接后的特征图再施加几个3x3卷积进行融合和细化,最后再次上采样4倍,得到与输入图像尺寸相同的最终分割图。
- 低级特征融合:将编码器中Backbone的早期层(例如ResNet的
-
优势:这种结构结合了高级语义信息(保证分类正确性)和低级空间信息(保证边界精确性),实现了“强强联合”。
第六步:输出与损失函数
- 输出:解码器的最终输出是一个三维张量,其尺寸为
[H, W, C],其中H和W是图像高宽,C是语义类别的数量。这个张量可以看作每个像素点对于所有C个类别的预测分数(Logits)。 - 损失函数:训练时,通常使用逐像素交叉熵损失(Pixel-wise Cross-Entropy Loss)。它将网络输出的每个像素的预测概率分布与真实的标签(一个
[H, W]的矩阵,每个位置是类别索引)进行比较,计算损失。通过反向传播优化网络参数,使得网络输出的分割图越来越接近真实标注。
总结
DeepLabv3+的成功在于它系统性地解决了语义分割的核心难题:通过空洞卷积在保持特征图分辨率的同时扩大感受野;通过ASPP模块高效聚合多尺度上下文信息;通过编码器-解码器结构融合高低级特征,从而在保持强语义理解的同时,恢复出细节丰富的精确分割边界。这一设计思想使其成为语义分割领域一个里程碑式的工作。