图像分割——DeepLabv3
·
下面是对 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 1 | 1×1 Conv (256) + BN + ReLU | 1 | H×W×256 | 保留原始语义 |
| Branch 2 | 3×3 Conv (256) + BN + ReLU | 6 | H×W×256 | 中等尺度上下文 |
| Branch 3 | 3×3 Conv (256) + BN + ReLU | 12 | H×W×256 | 大尺度上下文 |
| Branch 4 | 3×3 Conv (256) + BN + ReLU | 18 | H×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 训练细节
| 项目 | 设置 |
|---|---|
| Backbone | ResNet-101 / Xception(ImageNet 预训练) |
| Input Size | VOC: 513×513;Cityscapes: 769×769 |
| Data Aug | 随机缩放(0.5~2.0)、翻转、裁剪 |
| Optimizer | SGD + momentum=0.9 |
| LR Policy | Poly: ( lr = base_lr \times (1 - \frac{iter}{max_iter})^{0.9} ) |
| Batch Size | 16(多卡) |
| OS | 16(主实验),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 (%) | Backbone | OS | CRF |
|---|---|---|---|---|
| PASCAL VOC 2012 test | 86.9 | ResNet-101 | 8 | ❌ |
| Cityscapes val | 78.5 | ResNet-101 | 16 | ❌ |
| ADE20K val | 44.0 | ResNet-101 | 8 | ❌ |
💡 对比 DeepLabv2(+CRF):VOC mIoU ≈ 79.7 → 显著提升,且无需 CRF。
十、优缺点分析
✅ 优点
- 强大的多尺度上下文建模(ASPP + 全局池化);
- 端到端训练,无需 CRF;
- 精度高,在多个 benchmark 上 SOTA(2017 年);
- 结构清晰,易于实现。
❌ 缺点
- 边界模糊:无浅层特征融合,细节恢复能力弱;
- 小目标分割不佳:高层特征分辨率低;
- 计算开销大:ASPP 多分支 + 大 backbone。
✅ 这些缺点在 DeepLabv3+ 中通过引入 轻量级 Decoder 得到解决。
十一、DeepLab 系列对比
| 版本 | 关键技术 | CRF | Decoder | 多尺度策略 |
|---|---|---|---|---|
| v1 | 膨胀卷积 | ✅ | ❌ | 单尺度 |
| v2 | ASPP(无全局池化) | ✅ | ❌ | 多膨胀率 |
| v3 | ASPP + 全局池化 + BN | ❌ | ❌ | 多膨胀率 + 全局语义 |
| v3+ | v3 Encoder + 轻量 Decoder | ❌ | ✅ | 同 v3 + 跳跃连接 |
十二、总结:DeepLabv3 的历史地位
DeepLabv3 是语义分割从“依赖后处理”走向“纯端到端”的里程碑。
它通过 ASPP + 全局上下文 的设计,证明了 CNN 本身足以建模复杂上下文,无需 CRF。
虽然 DeepLabv3+ 因其 Decoder 结构更常用于实际部署,但 v3 的 ASPP 思想已成为现代分割模型的标准组件。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)