文章目录
v1论文地址:BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
v2论文地址:BiSeNet V2: Bilateral Network with Guided Aggregation for Real-time Semantic Segmentation
一、背景
低水平的细节特征(spatial information 空间信息)和高水平的语义特征(semantics )是语义分割的两个重要的特征。比如熟悉的Unet网络,横向的空间信息用来判断细节,纵向通过下采样,扩大感受野,来提取高水平的语义特征,但高分辨率图的计算意味着高额的计算量,远达不到实时的效果。
现有的语义分割加速方法通常有几种:
- 1、通过限制输入尺寸(resize、crop等),来降低计算复杂度。尽管这种方法简单而有效,空间细节的损失还是让预测打了折扣,尤其是边界部分,导致度量和可视化的精度下降;
- 2、通道裁剪,但是这会弱化空间信息,丢失精度
- 3、追求极其紧凑的框架而丢弃模型的最后阶段(比如ENet)。该方法的缺点也很明显:由于抛弃了最后阶段的下采样,模型的感受野不足以涵盖大物体,导致判别能力较差。
这些提速的方法会丢失很多 空间信息 或者牺牲 感受野,从而导致精度大幅下降。为了弥补空间信息的丢失,有些算法会采用 U-shape 的方式恢复空间信息。但是,U-shape 会降低速度,同时很多丢失的信息并不能简单地通过融合浅层特征来恢复。
论文中提出了一种新的双向分割网络BiSeNet。
简而言之:一条路负责编码空间信息,来收集细节(detail); 另一条路负责扩大感受野,来获取语义信息,提高判别能力。
二、BiSeNetV1
BiSeNetV1为了在不影响速度的情况下,同时收集到空间信息和语义信息,设计了两条路:
- Spatial Path: 用了三层stride为 2 的卷积,卷积+BN+RELU模块。最后提取了相当于原图像 1/8 的输出特征图。由于它利用了较大尺度的特征图,所以可以编码比较丰富的空间信息,并生成高分辨率特征图。
- Contex Path: 上下文路径的backbone可以替换成任意的轻量网络,比如 Xception,ShuffleNet 系列,MobileNet 系列。可以看到,为了准确率考虑,Context Path 这边使用了类似 U-shape 结构的设计,最终进行了32倍下采样。不过,不同于普通的 U-shape,此处只结合了最后两个 Stage,这样设计的原因主要是考虑速度。值得注意的是,Context Path 依然在最后使用了 Global Average Pooling 来聚合特征、降维、减计算量,看下图中的ARM模块,通过全局池化+卷积+BN+sigmoid模块,设计了一个注意力机制(类似SENet),来学习每个通道特征的重要性。
- Feature Fusion Module(特征融合) 在特征的不同层级给定的情况下,每层输出特征都有各自的重要性。特征融合模块首先连接 S p a t i a l P a t h Spatial Path SpatialPath 和 C o n t e x t P a t h Context Path ContextPath 的输出特征,接着,通过批归一化平衡特征的尺度。下一步,像 SENet 一样,把相连接的特征池化为一个特征向量,并计算一个权重向量。这一权重向量可以重新加权特征,起到特征选择和结合的作用。
如下图C部分所示,将两个部分特征图通过concate方式叠加,然后使用类似SE模块的方式计算加权特征,起到特征选择和结合的作用。
- 训练方式 通过辅助损失函数超强监督模型的训练,主损失函数监督整个 BiSeNet 的输出。另外,还通过添加两个特殊的辅助损失函数监督 Context Path 的输出,就像多层监督一样。上述所有损失函数都是 Softmax。最后借助参数 α 以平衡主损失函数与辅助损失函数的权重,论文中α =1,也就是每个损失都很重要。
三、BiSeNetV2
双边引导聚合网络。重点在 Guided Aggregation上。
论文中重新简述了语义分割的的一些发展。
如下图
a
a
a中,利用空洞卷积可以扩大感受野的能力,来替换下采样和上采样操作。
B
B
B中还是熟悉的Unet网络结构
C
C
C中就是BiSeNet中双端网络,一条路提取空间细节信息,另一条路提取语义抽象信息。
3.1 BiSetNetv2网络结构
还是标准的双边网络,一条路负责细节信息,另一条路负责语义信息。
- Detail Branch 三次下采样,最终下采用8倍,设计是遵循 宽而短 的原则。文中解释,这条路是为了获取细节信息,所有网络需要宽,也就意味着有更多的卷积核来提取细节特征。
- Semantic Branch 4次下采样,最终下采样 16倍, 设计是遵循 窄而长的原则。原因是这条路为了提取深层次的语义特征,对网络深度有要求,为了效率速度,可以牺牲网络的宽度。
3.2 网络参数
如下表。
- Detai Branch包含 三次下采样 S 1 、 S 2 、 S 3 S1、S2、S3 S1、S2、S3,每个 S S S 都包含了一个或多个卷积操作;
- Semantic Branch 包含一个
S
t
e
m
Stem
Stem 和6个
G
E
GE
GE 和 1个
C
E
CE
CE 多个模块。
3.3 S t e m 和 G E 以 及 C E 模 块 Stem和GE以及CE模块 Stem和GE以及CE模块
-
S
t
e
m
Stem
Stem 模块:如下图
(
a
)
(a)
(a), 最终下采样四倍。 先采用
3
∗
3
3*3
3∗3 卷积核,步长为2;然后左边分支是
1
∗
1
的
c
o
n
v
+
B
N
+
R
E
L
U
1*1 的conv+BN+RELU
1∗1的conv+BN+RELU 两倍下采样,再接一个步长为2的
3
∗
3
3 * 3
3∗3的卷积,再下采样两倍。 右边分支直接是步长为2的
3
∗
3
3*3
3∗3的 maxPool,最后再contact后,接一个
3
∗
3
3*3
3∗3的卷积+BN+Relu,融合特征。
- C E CE CE 模块:从命名上看,是一个上下文编码模块。从网络结构上看,是为了融合 输入特征图中不同通道,可以看作对同一层不同通道间增加了一个注意力机制,全局池化提取全局信息,接 1 ∗ 1 1*1 1∗1卷积后,与输入特征图相加,最后3*3卷积输出
3.4 Detailed design of Bilateral Guided Aggregation Layer
终于和标题相对应了,双边聚合引导。
这层主要是为了把 双边网络的语义路和细节路融合起来。
但有的目标重视边缘信息、有的目标重视语义全局信息,所以作者认为设计一个网络,来引导特征的聚合。
总的来说,就是
D
e
t
a
i
l
Detail
Detail 路和
S
e
m
a
n
t
i
c
Semantic
Semantic 路,每个路都有两个分支相互统合,Sigmoid和APooling还能起到加权引导的作用。
3.5 实验
作者做了相当多的实验来验证自己的设计思路,这里只列举一点,聚合时尝试了
S
u
m
、
C
o
n
c
a
t
e
、
B
G
A
Sum、Concate、BGA
Sum、Concate、BGA,训练时尝试了 难样本在线增强,训练时尝试了 多路分支训练等等。
其中 多路分支训练即 booster training strategy是非常重要的策略,和v1一样,在
S
e
m
a
n
t
i
c
Semantic
Semantic 这条分支,下采样的过程中,生成一些独立的头,并计算损失,因为推理并不处理这部分。
最终效果惊人,速度与精度都得到很好的平衡。
3.6 其他注意事项
为了减少计算量,作者在 cityscape数据集上,做推理时,将
2048
∗
1024
2048*1024
2048∗1024大小的图像,先Resize到
1024
∗
512
1024*512
1024∗512大小,这大概也是对细小目标的边缘,处理不太好的原因吧,如下图箭头处,交通灯牌的边缘分割不是太完美。