1. 模型结构
DeepLabv3+是在DeepLabv3的基础上扩展出的一个编解码器结构。
1.1 编码器
编码器是Deeplabv3模型的logits前的部分。
1.2 解码器
让空洞卷积提取更稠密的特征有助于恢复边界细节,但计算量会剧增,所以需要解码器。单纯使用上采样的解码器不一定能恢复物体边界细节,所以重新设计了解码器。图中21是指PASCAL VOC 2012数据集包括背景共21类标签。
v3+的表1说明解码器中1×1的卷积通道应为48,表2说明上采样前应该使用两个[3×3×256]的卷积。
2. 卷积
几种卷积的介绍在这里。
2.1 空洞卷积在语义分割中的作用
空洞卷积有利于深层网络的性能提升。全卷积网络FCN一般用于结构化任务(输出尺寸和输入尺寸相等,如分割、检测、识别、重建)。不像分类任务只需要深层的抽象特征,浅层的具体特征对结构化任务非常重要,所以FCN一般不使用池化层。
对分类任务来说,只需要知道有哪些特征就可以区分类别。但对分割任务来说,不仅要知道有哪些特征,还要知道特征在哪,所以结构信息不能丢失。
使用常规卷积的FCN为了得到不同尺度的特征,需要使用步长大于1的卷积改变特征图尺寸,特征图尺寸的变化意味着结构信息的丢失。而使用不同空洞率的空洞卷积可以提取不同尺度的特征而不改变特征图的尺寸。如下图,空洞卷积使后6层特征图尺寸没有减小。
2.2 特征尺寸变化对语义分割的影响
定义
o
u
t
p
u
t
_
s
t
r
i
d
e
=
原
图
与
特
征
图
的
边
长
比
output\_stride=原图与特征图的边长比
output_stride=原图与特征图的边长比。下表说明
m
I
O
U
mIOU
mIOU随着特征图尺寸的减小而降低。
虽然
o
u
t
p
u
t
_
s
t
r
i
d
e
=
8
output\_stride=8
output_stride=8时效果更好,但大特征图需要更多的内存和计算资源。所以DeepLab的
o
u
t
p
u
t
_
s
t
r
i
d
e
=
16
output\_stride=16
output_stride=16。
3.空洞空间金字塔池化
4. 参考
- DeepLabv3+基于TF的github地址,论文发布于2018年。代码运行指导。
- 论文:DeepLabv1、DeepLabv2、DeepLabv3、DeepLabv3+。
- 一个pytorch实现的易读的DeepLabv3+。