论文地址:https://arxiv.org/pdf/2206.02066.pdf
源码地址:https://github.com/XuJiacong/PIDNet
概述
针对双分支模型在语义分割任务上直接融合高分辨率的细节信息与低频的上下文信息过程中细节特征会被上下文信息掩盖的问题,提出了一种新的网络架构PIDNet,该模型受启发于PID控制器并包含:空间细节分支、上下文分支与边界注意力分支。通过使用边界注意力来引导空间细节与上下文信息融合。实验结果表明该模型的精度超过了具有相似推理速度的所有模型,在Cityscapes和CamVid数据集上取得了最佳的推理速度和精确度的平衡。文章的主要贡献为:
- 将PID控制器与CNN相结合,提出一个三分支的网络结构 。
- 提出Bag fusion模块来权衡空间细节与上下文信息,提高了PIDNet的性能。
- PIDNet与现有的方法相比,在推理速度与准确度之间取得了最佳的表现:在Cityscapes测试数据集上取得了78.6%的mIOU与93.2 FPS,且PIDNet-L 取得了80.6% 的mIOU的优异表现。
方法
PIDNet: A Novel Three-branch Network
PID控制器包含三个部分:比例控制器P,积分控制器I,微分控制器D,如图3所示,PI控制器表达式为:
c
o
u
t
[
n
]
=
k
p
e
[
n
]
+
k
i
∑
i
=
0
n
e
[
i
]
(1)
c_{out}[n] = k_pe[n]+ k_i\sum_{i=0}^ne[i]\tag{1}
cout[n]=kpe[n]+kii=0∑ne[i](1)
其中 P 控制器关注当前的误差信号, I 控制器关注误差信号的历史累积。由于积分控制器的惯性效应,当误差信号出现相负的变化时,会给系统引入超调量。为此引入D控制器来作为阻尼器用于减少超调量,PI控制器关注于输入信号的低频信息,而对信号的高频信息不敏感,而D控制器关注于输入信号的微分,对信号的高频信息较为敏感,可以减少模型的超调量,双分支网络与之类似,如图3所示,上下文分支通过级联跨步卷积或者池化层来不断从局部到全局聚合语义信息,用于获取像素之间的长距离依赖关系,而空间细节分支保持高分辨率的特征图,用于保存每个像素的语义与位置信息。因此空间细节和上下文分支等价于空间域中的比例和积分控制器。
为了解决上述问题,本文提出一种辅助的微分分支ADB用于对细节和上下文分支进行补充,在空域上模拟PID控制器,并突出高频语义信息,其中考虑到每个物体内部的语义是一致的,只有边界上的微分非0,所以ADB分支的目标是边界检测。因此,本文简历一种新的三分支实时语义分割框架 PIDNet,模型包含三个分支,如图4所示:
- 比例分支:用于解析保存高分辨率特征图中的细节信息
- 积分分支:用于聚合局部与全局之间的长程依赖关系信息——上下文信息。
- 微分分支:用于提高高频特征以预测边界区域。
整个模型和DDRNet保持也一直,采用级联残差块作为骨干网络以便以硬件部署。考虑到任务的复杂性,将PID分支的网络深度分别设计为中等、深、浅,以便于高效运行。此外,通过模型架构缩放来得到PIDNet-S,PIDNet-M,PIDNet-L。
Pag: Learning High-level Semantics Selectively
pixel attention guided fusion(Pag) 为像素级注意力引导模块,用于将比例分支与微分分支的特征融合,受益于lateral connection技术,不同分支之间的特征图可以进行传递,提高了特征的表达能力。在PIDNet中,积分分支旨在提取精确且丰富的语义信息,对于比例分支和微分分支的的细节解析与边界检测至关重要。因此,将 I 分支作为其余两个分支的补充,为两个分支引入更丰富的信息。此外,与直接将P分支直接提供特征图的方式不一样,作者为P分支引入了Pag来选择性学习任务有关的语义特征,如图5所示:
Pag 是基于注意力机制的特征选择模块,将P分支与I分支提供的特征图中对应像素的特征向量分别定义为
v
p
⃗
\vec{v_p}
vp 与
v
i
⃗
\vec{v_i}
vi,则sigmoid函数的输出为:
σ
=
sigmoid
(
f
p
(
v
p
⃗
)
⋅
f
i
(
v
i
⃗
)
)
(2)
\sigma = \operatorname{sigmoid}(f_p(\vec{v_p})\cdot f_i (\vec{v_i}))\tag{2}
σ=sigmoid(fp(vp)⋅fi(vi))(2)
其中,
σ
\sigma
σ 表示这两个像素属于同一个对象的可能性,如果
σ
\sigma
σ 越高,表示
v
i
⃗
\vec{v_i}
vi 的置信度更好,因为在 I 分支在语义上是准确的,反之亦然。因此,Pag模块的输出为:
O
u
t
p
a
g
=
σ
v
i
⃗
+
(
1
−
σ
)
v
p
⃗
(3)
\operatorname{Out_{pag}}=\sigma \vec{v_i} + (1-\sigma) \vec{v_p}\tag{3}
Outpag=σvi+(1−σ)vp(3)
PAPPM: Fast Aggregation of Contexts
为了更好地构建全局场景的先验信息,本文提出PAPPM模块用于提取多尺度的特征信息。虽然PPM(pyramid poling module)模块可以很好嵌入上下文信息,但该模块无法并行化,导致模型的计算效率受到限制。为此,本文在PPM模块的基础上进行改进,提出可以并行计算的PPM模块,称之为PAPPM(parallel aggregation PPM)模块,并将其应用于PIDNet-M和PIDNet-S中,提高模型的运行速度。对于PIDNet-L,仍然使用原始的PPM模块,但通道数进行缩减以提高运行速度。
Bag: Balancing the Details and Contexts
考虑到ADB所提取的边界特征,文中使用边界注意力机制来引导空间细节信息与上下文信息的融合,实现更好地语义分割效果。尽管上下文分支具有语义精度,但它在边界区域与小物体上的几何细节信息与空间信息丢失。因此,PIDNet使用细节分支来提供空间细节信息,并监督模型在边界区域更加信任细节分支,同时利用上下文特征来填充对象的内部区域,如图7所示:P、I、D分支输出中对应像素为
v
p
⃗
、
v
i
⃗
\vec{v_p}、\vec{v_i}
vp、vi 和
v
d
⃗
\vec{v_d}
vd:
σ
=
Sigmoid
(
v
d
→
)
(4)
\sigma=\operatorname{Sigmoid}\left(\overrightarrow{v_{d}}\right)\tag{4}
σ=Sigmoid(vd)(4)
Out
bag
=
f
out
(
(
1
−
σ
)
⊗
v
i
→
+
σ
⊗
v
p
→
)
(5)
\text { Out }_{\text {bag }}=f_{\text {out }}\left((1-\sigma) \otimes \overrightarrow{v_{i}}+\sigma \otimes \overrightarrow{v_{p}}\right) \tag{5}
Out bag =fout ((1−σ)⊗vi+σ⊗vp)(5)
Out
light
=
f
p
(
(
1
−
σ
)
⊗
v
i
→
+
v
p
→
)
+
f
i
(
σ
⊗
v
p
→
+
v
i
→
)
(6)
\text { Out }_{\text {light }}=f_{p}\left((1-\sigma) \otimes \overrightarrow{v_{i}}+\overrightarrow{v_{p}}\right)+f_{i}\left(\sigma \otimes \overrightarrow{v_{p}}+\overrightarrow{v_{i}}\right)\tag{6}
Out light =fp((1−σ)⊗vi+vp)+fi(σ⊗vp+vi)(6)
其中
f
f
f 表示卷积、BN 与ReLU的组合,当
σ
>
0.5
\sigma >0.5
σ>0.5 时,模型更加依赖于细节特征,否则更加关注于上下文信息。
损失函数
损失函数由4个部分组成,在第一个Pag模块的输出添加了语义头生成额外的语义损失
l
0
l_0
l0 用于更好地对整个模型调优。采用加权的二元交叉熵损失
l
1
l_1
l1 来代替 dice loss, 用于处理边界 检测的不平衡问题,使得模型更倾向于使用粗糙的边界来突出边界区域,并增强小对象的特征。
l
2
l_2
l2 与
l
3
l_3
l3 表示交叉熵损失,本文使用输出的边界头来协调语义分割和边界检测任务,并增强Bag模块的功能,在
l
3
l_3
l3 中使用带有边界感知的CE损失:
L
o
s
s
=
λ
0
l
0
+
λ
1
l
1
+
λ
2
l
2
+
λ
3
l
3
Loss=\lambda_0l_0 + \lambda_1l_1 + \lambda_2l_2 + \lambda_3l_3
Loss=λ0l0+λ1l1+λ2l2+λ3l3
实验结果