实时语义分割
论文名称:Rethinking BiSeNet For Real-time Semantic Segmentation
作者:Mingyuan Fan, Shenqi Lai, Junshi Huang, Xiaoming Wei, Zhenhua Chai, Junfeng Luo, Xiaolin Wei
摘要
BiSeNet是目前流行的实时分割两流网络,但是添加额外的路径去进行编码非常耗时,并且由于任务专用设计的不足,主干可能无法有效地进行图像分割。
本文提出了STDC网络,通过消除结构冗余来实短期密集级联网络。
逐渐减小特征图维度,并将他们聚集用于图像表示,这构成了STDC网络的基本模块。在解码器中,我们通过将空间信息的学习以单流的方式集成到底层中,从而提出了一个细节集合模块。最后将底层特征和深层特征融合在一起,以预测最终的分割结果。
Short-Term Dense Concatenate Module(STDC,短期密集级联模块)

ConvX
STDC模块的基本结构如图b所示,在STDC模块中的ConvX计算可以用以下公式表示:
其中和分别表示第层的输出和输入结果
表示Conv+BN+RLU的过程,表示卷积核,
STDC结构
在第一个块中,设置其卷积核的大小为1,其他块的卷积核大小都设置成3。
设置STDC结构输出通道为N,于是在第i个块中,使用卷积核的数量为(也就是说,经过第一个块的卷积之后输出的feature map的通道数为)。唯一不同的是,最后一个块使用的卷积核数量是和他的前一个块相等的。
在通常的图像分类任务中,通常的做法是在更高的层中使用更多的通道,但是在语义分割任务中,我们专注于可拓展的接收域和多尺度信息。底层需要足够多的通道赖编码具有**较小接收场(receptive field)**的高层将更多地集中与高层信息的归纳,在底层中设置相同的通道可能会造成过多的信息冗余。
下采样只在Block2中进行。
为了获取丰富的特征信息,作者链接~的特征图,作为STDC模块的输出。在进行级联之前,通过使用的平均池化,将STDC模块中不同尺寸的feature map下采样到同样的尺寸。
STDC最终输出的结果为
其中表示STDC模块的输出,
F是融合操作(拼接)
~是来自所有n个块的feature map
优点
- 通过逐渐减小几何级数的方式来精心调整块的卷积核数量,从而显着降低了计算复杂性。
- 将每个块的feature map拼接起来,保留可变接收场和多尺度信息。
对于输入为M通道,输出为N通道的STDC模块的**参数编号(parameter number)**为:
STDC模块的参数编号由先前定义的输入和输出决定,而块的数量对参数尺寸的影响很小。特别是,如果n(块的数量)达到最大限制,则STDC的参数编号几乎保持恒定,仅通过输入和输出定义。
网络架构

网络主要结构就是6个阶段构成,在1~5的阶段中,进行的是步长为2的下采样,到第六阶段,显示使用一个ConvX,接着做一个全局平均池化,最后使用两个全链接层输出最终的预测结果。
在前两阶段中只,每个层都只使用了一个ConvX,在3,4,5阶段中使用的是STDC模块,在每个阶段的第一个STDC中使用了步长为2的下采样,其他都保持和原来的尺寸一致。
网络的详细参数为如图:

编码器的设计

ARM表示注意力细化模块,FFM表示特征融合模块,红色虚线框中的操作是STDC网络,蓝色虚线是细节信息汇总模块(Detail Aggregation Module)
分割结构
本文采用预训练的STDC网络作为编码器主干,并采用BiSeNet的内容路径(context path)去编码上下文信息。如网络图a,采用Stage3,4,5,分别生成i下采样比例为的特征图,然后我们使用全局平均池化,来提供具有**最大接收域(large receptive field)**的全局上下文信息。
部署U形结构以对来自全局的特征进行上采样,并将每个特征与我们在编码阶段的最后两个阶段(第4和第5阶段)的对应特征进行融合。使用**注意力细化模块(Attention Refine module 简称ARM)**来细化每个极端的组合特征。
对于最后的语义分割预测,我们在BiSeNet中采用特征融合模块,将编码器第3阶段的下采样特征与编码器的对应特征融合。这两个阶段特征处于,不同的特征表示级别。编码主干网络提供了丰富的细节信息特征,而解码器的功能则来自全局池化层的输入而包含了上下文信息。
在**语义头(Seg Head)中使用了一个3x3的Conv-BN-ReLU操作和一个1x1卷积去扩展特征图的通道数和类别数N相同。采用交叉熵损失与Online Hard Example Mining(不知道是什么东西)**去优化语义分割的学习任务。
低级特征的细节引导(Detail Guidance of Low-level Feature)

在上图中,b展示了BiSeNet的**空间路径(Spatial Path)**特征,与具有相同下采样率的骨干底层(阶段3)相比,空间路径可以编码更多的空间细节。为此,本文提出一个细节指导模块,以指导底层以单流的方式学习空间信息。
本文把细节预测建模成一个二分割任务,首先生成从分割的ground-truth通过拉普拉斯(Laplacian)卷积生成细节图ground-truth(编码器设计那张图的c)。在第3阶段插入细节头(Detail Head)以生成细节特征图,然后,以细节为基础,以细节特征图为指导,指导底层层次学习空间细节特征。如上图d所示,与图c相比多了更多的空间细节。最后将学习到的细节特征与来自解码器深层块的上下文特征融合在一起,以进行分割预测。
细节ground-truth生成(Detail Ground-truth Generation)
通过使用**细节信息汇总模块(Detail Aggregation Module)**从语义分割GT中生成二值化的细节GT。(编码器设计那张图的c蓝色虚线部分)可以通过使用Laplacian kernel和一个的卷积来执行此操作。
使用编码器设计那张图的e的拉普拉斯算子(Laplacian operators),使用不同的步长,获得h多尺度信息,最后生成产生细致的细节特征图。
接着将细节特征图上采样至原图的大小,并将其与可训练的卷积核融合以进行动态重新贴合。u自后采用阈值为0.1将预测的细节转换为具有边界和角点信息的最终二值化细节GT
细节损失(Detail Loss)
采用二分交叉熵(binary cross-entropy)和dice loss共图优化细节的学习。dice loss衡量了预测图和GT之间的重叠。而且,对于前景/背景像素的数量不敏感,这意味着他可以缓解分类数不平衡的问题。因此对于高度为H,宽度为W的预测细节图的细节损失可以用公式表示:
其中:表示预测细节
表示相应的细节GT
表示二分交叉熵损失
表示dice损失,其可用公式表示:
其中i表示第i个像素,是避免除0的拉普拉斯平滑项,在本文中将其设置为1
细节头(Detail Head)
在(编码器设计那张图的b)中,使用细节头(Detail Head)生成细节图,该细节图指导浅层对空间信息进行编码。
细节头包括一个的Conv-BN-ReLU运算,接着一个的卷积以获取输出详细信息图。
在实验中,细节头被证明可以有效地增强特征表示,注意:在推理的时候是不走这一个分支的。
因此,该辅助信息可以提高分割任务的精度而在推理上又不会占用开销。
实验过程
使用数据集和评估指标
数据集:IamgeNet,Cityscapes,CamVid
评估指标:Miou和FPS
实施细节
图像分类
使用batch为64,momentum为0.9,权重衰减为的SGD优化器来训练模型,采用三种训练方式,包括学习率预热(learning rate warmup),余弦学习率(cosine learning rate)策略和标签平滑(label smoothing)。总共训练300个epoch,前5个epoch采用学习率预热,学习率从0.001到0.1。在分类块前的dropout设置为0.2。不使用数据增强。
语义分割
使用momentum为0.9,权重衰减为的SGD优化器。对于Cityscapes,CamVid数据集,批次大小设置为48和24。
采用"poly"学习率策略,在初始学习率中乘以$\left(1-\frac{\text { iter }}{\text { max_iter }}\right)^{\text {power }} $
power设置为0.9,初始学习率设置为0.01
分别为Cityscapes,CamVid数据集训练了60000,10000次迭代的模型,其中在前1000次,200次迭代中采用了预热策略。






