下面是对 DeepLabv3 的介绍,涵盖其设计背景、核心思想、网络结构、关键模块(ASPP)、训练策略、输出形式、后处理、优缺点、与系列其他版本对比,以及在主流数据集上的表现


一、背景与动机

1.1 语义分割的核心挑战

语义分割要求为图像中每个像素分配一个语义类别标签,面临两大难题:

  • 多尺度目标:图像中同时存在小目标(如行人)和大目标(如天空),单一感受野难以兼顾。
  • 上下文依赖:局部特征不足以判断语义(例如:“轮子”可能是汽车或自行车,需结合全局场景)。

1.2 DeepLab 系列的演进

  • DeepLabv1 (2015):首次引入膨胀卷积(Atrous Convolution) 扩大感受野,保留分辨率。
  • DeepLabv2 (2016):提出 ASPP(Atrous Spatial Pyramid Pooling) 捕获多尺度信息,并依赖 CRF(条件随机场) 后处理优化边界。
  • DeepLabv3 (2017)摒弃 CRF,通过增强 ASPP 和引入全局上下文,实现纯 CNN 端到端高精度分割。
  • DeepLabv3+ (2018):在 v3 基础上增加轻量级解码器(Decoder),融合浅层特征,提升边界精度。

DeepLabv3 的核心目标
构建一个无需后处理、端到端训练、高精度的语义分割模型


二、整体架构(Encoder-Only)

DeepLabv3 采用 纯编码器结构,无显式解码器或跳跃连接:

Input Image (H×W×3)
    ↓
Backbone(ResNet-101 / Xception)
    ↓
Modified Last Blocks(控制 Output Stride = 8/16)
    ↓
ASPP Module(多尺度 + 全局上下文)
    ↓
1×1 Conv → Logits (H/OS × W/OS × C)
    ↓
Bilinear Upsampling → Final Logits (H × W × C)

⚠️ 关键特点

  • 无跳跃连接(不像 U-Net);
  • 无 Decoder(不像 DeepLabv3+);
  • 所有上下文信息来自 ASPP

三、主干网络(Backbone)设计

3.1 控制 Output Stride(OS)

  • OS = 下采样总倍数。标准 ResNet-101 的 OS=32,但分割需要高分辨率特征。
  • DeepLabv3 设置 OS=16 或 8
    • OS=16:block1~3 正常下采样(stride=2),block4 stride=1 + dilation=2;
    • OS=8:block3 stride=1 + dilation=2,block4 dilation=4。

3.2 Multi-grid 策略(高级技巧)

  • 若 block4 包含多个卷积层,可分别设置膨胀率为 rate × [1, 2, 4],进一步扩大感受野。

四、核心模块:ASPP(Atrous Spatial Pyramid Pooling)

ASPP 是 DeepLabv3 的灵魂,用于捕获多尺度上下文。

4.1 为什么需要 ASPP?

  • 单一膨胀率无法覆盖所有目标尺度;
  • 全局语义对大目标(如“天空”)至关重要。

4.2 ASPP 的 5 个并行分支

分支操作膨胀率输出尺寸作用
Branch 11×1 Conv (256) + BN + ReLU1H×W×256保留原始语义
Branch 23×3 Conv (256) + BN + ReLU6H×W×256中等尺度上下文
Branch 33×3 Conv (256) + BN + ReLU12H×W×256大尺度上下文
Branch 43×3 Conv (256) + BN + ReLU18H×W×256超大尺度上下文
Branch 5全局平均池化 → 1×1 Conv (256) + BN + ReLU → 上采样H×W×256图像级全局语义

✅ 所有卷积使用 padding = dilation 保持空间尺寸;
✅ 全局池化分支先压缩为 1×1,再双线性上采样回 H×W。

4.3 特征融合

  • 拼接 5 个分支 → 1280 通道;
  • 1×1 Conv (256) + BN + ReLU + Dropout(0.1) → 输出 256 通道上下文特征。

五、分类与上采样

5.1 分类层

  • 对 ASPP 输出做 1×1 卷积,通道数 = num_classes(如 VOC=21);
  • 输出:低分辨率 logits(如 32×32×21)。

5.2 上采样

  • 使用 双线性插值(bilinear interpolation) 恢复原始分辨率;
  • 必须设置 align_corners=True,确保像素对齐;
  • 最终输出:(B, num_classes, H, W)

不是概率,而是 logits(未归一化得分)
✅ 通过 argmax(logits, dim=1) 得到预测分割图。


六、损失函数与训练

6.1 损失函数

  • 标准交叉熵损失(CrossEntropyLoss)
  • 忽略 ignore_index=255(边界或无效区域);
  • 不使用类别加权或 focal loss(原论文未采用)。

6.2 训练细节

项目设置
BackboneResNet-101 / Xception(ImageNet 预训练)
Input SizeVOC: 513×513;Cityscapes: 769×769
Data Aug随机缩放(0.5~2.0)、翻转、裁剪
OptimizerSGD + momentum=0.9
LR PolicyPoly: ( lr = base_lr \times (1 - \frac{iter}{max_iter})^{0.9} )
Batch Size16(多卡)
OS16(主实验),OS=8 用于更高精度

七、输出形式详解(以 PASCAL VOC 为例)

  • 输入1×3×512×512(RGB 图像)
  • 输出1×21×512×512(logits)
    • 21 = 20 个前景类 + 1 个背景类
    • 每个像素的 21 个值是未归一化的得分(logits)不是概率
  • 最终预测
    pred = torch.argmax(logits, dim=1)  # (1, 512, 512)
    

八、后处理策略

8.1 是否需要 CRF?

  • 不需要!原论文显示 CRF 仅提升 0.1~0.3 mIoU,甚至在 Cityscapes 上下降。
  • 原因:ASPP 已内化足够上下文,CRF 的平滑反而可能模糊边界。

8.2 实用后处理(可选)

  • 去除小连通区域:移除面积 < 阈值的噪点;
  • 多尺度测试:平均多个尺度的 logits,提升精度(+0.5~1.5% mIoU);
  • 左右翻转测试:结合原图与翻转图 logits。

九、性能表现

数据集mIoU (%)BackboneOSCRF
PASCAL VOC 2012 test86.9ResNet-1018
Cityscapes val78.5ResNet-10116
ADE20K val44.0ResNet-1018

💡 对比 DeepLabv2(+CRF):VOC mIoU ≈ 79.7 → 显著提升,且无需 CRF


十、优缺点分析

✅ 优点

  • 强大的多尺度上下文建模(ASPP + 全局池化);
  • 端到端训练,无需 CRF
  • 精度高,在多个 benchmark 上 SOTA(2017 年);
  • 结构清晰,易于实现

❌ 缺点

  • 边界模糊:无浅层特征融合,细节恢复能力弱;
  • 小目标分割不佳:高层特征分辨率低;
  • 计算开销大:ASPP 多分支 + 大 backbone。

✅ 这些缺点在 DeepLabv3+ 中通过引入 轻量级 Decoder 得到解决。


十一、DeepLab 系列对比

版本关键技术CRFDecoder多尺度策略
v1膨胀卷积单尺度
v2ASPP(无全局池化)多膨胀率
v3ASPP + 全局池化 + BN多膨胀率 + 全局语义
v3+v3 Encoder + 轻量 Decoder同 v3 + 跳跃连接

十二、总结:DeepLabv3 的历史地位

DeepLabv3 是语义分割从“依赖后处理”走向“纯端到端”的里程碑
它通过 ASPP + 全局上下文 的设计,证明了 CNN 本身足以建模复杂上下文,无需 CRF。
虽然 DeepLabv3+ 因其 Decoder 结构更常用于实际部署,但 v3 的 ASPP 思想已成为现代分割模型的标准组件


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐