Abstract
【BiSeNet的存在问题】
BiSeNet[28,27]已被证明是一种流行的用于实时分割的双流网络。其添加额外路径来编码空间信息的原理非常耗时,并且由于任务特定设计的不足,从预训练任务(例如图像分类)借用的主干对于图像分割可能效率低下。
【STDC网络的提出】
设计了一个短期密集连接模块(STDC模块),通过消除结构冗余而高效,用于提取具有可扩展感受野和多尺度信息的深层特征。该模块以可承受的计算成本 提升了STDC网络的性能。
具体地说,我们逐步降低特征映射的维数,并使用它们的聚合来表示图像,这形成了STDC网络的基本模块。在解码器中,我们提出了一个细节聚合模块,该模块以单流方式将空间信息的学习集成到低层。从而在低层中更精确地保存空间细节,而不会在推理时间中产生额外的计算成本。最后,融合低层特征和深层特征,预测最终分割结果。
【效果与速度】
在城市景观和CamVid数据集上的大量实验证明了该方法的有效性,在分割精度和推理速度之间取得了令人满意的平衡。具体而言,我们的STDC1-Seg50在一张NVIDIA GTX 1080Ti卡上以250.4 FPS的速度在Cityscapes测试集上实现71.9%的mIoU。在相同的实验设置下,我们的STDC2-Seg75以97.0 FPS的速度实现76.8%的mIoU。
代码可在https://github.com/MichaelFan01/STDC Seg。
1 Introduction
略
2 相关工作
- 【高效网络设计】
以下工作是专门为图像分类任务设计的,它们对语义分割应用程序的扩展应该仔细调整。
- SqueezeNet使用fire模块和某些策略来减少模型参数。
MobileNet V1利用深度可分离卷积来减少推断阶段的失败。
ResNet采用了残差模块,以实现卓越的性能。
MobileNet V2[25]和ShuffleNet[29]使用组卷积来降低计算成本,同时保持可比的精度。- 【通用语义分割】
分割算法的方法:传统的分割算法,如阈值选择、超级像素,利用手工制作的特征在图像中指定像素级标签。随着卷积神经网络的发展,基于FCN[23]的方法[3,1,32,14]在各种基准上取得了令人印象深刻的性能。
神经网络的操作:扩展主干(具有空洞卷积) 和 编解码结构 都可以同时学习底层细节和高层语义。然而,由于高分辨率的特点和复杂的网络连接,大多数方法需要大量的计算量。在本文中,我们提出了一种高效的体系结构,在速度和精度之间实现了良好的平衡。
- Deeplabv3[3]采用了一个Atrus空间金字塔池模块来捕获多尺度上下文。
SegNet[1]利用编码器-解码器结构恢复高分辨率特征映射。
PSPNet[32]设计了一个金字塔池,以捕获扩展主干(空洞卷积)上的本地和全局上下文信息。- 【实时语义分割】
近年来,实时语义分割的实际应用迅速增长。在这种情况下,设计有效的分割方法有两个主流。
- i) 轻量级主干。
DFANet[18]采用轻量级主干网来降低计算成本,并设计了一个跨级别的特征聚合模块来提高性能。DFNet[21]利用“偏序剪枝”算法获得轻量级主干和高效解码器。- ii)多分支架构。
ICNet[31]设计了多尺度图像级联,以实现良好的速度精度权衡。
BiSeNetV1[28]和BiSeNetV2[27]分别为低级细节和高级上下文信息提出了两种流路径。- 在本文中,我们提出了一种高效的轻量级主干网来提供可伸缩的接收场 (因此模型可以输入任意尺寸的图片)。此外,我们还设置了一个使用细节信息引导的单路径解码器来学习底层细节。
3 拟议方法
BiSeNetV1[28]利用轻量级主干网,例如ResNet18和空间路径作为编码网络,形成两个steam分段架构。然而,由于结构冗余,分类主干和双边体系结构可能效率低下。在本节中,我们首先介绍我们提议的STDC网络的细节。然后,我们给出了单流方法的整个体系结构,并提供了详细的指导。
3.1 编码网络的设计
3.1.1 短期密集级联模块
图3. (a) 通用STDC网络架构。ConvX操作指的是Conv BN ReLU。(b) 我们网络中使用的短期密集级联模块(STDC模块)。M表示输入通道的尺寸,N表示输出通道的尺寸。每个块都是具有不同内核大小的ConvX操作。(c)步幅为2的STDC模块。
【STDC模块结构】
我们提出的网络的关键组件是短期密集级联模块(STDC模块)。图3(b)和(c)显示了STDC模块的布局。具体来说,每个模块被分成几个块,我们使用 C o n v X i ConvX_i ConvXi 表示第 i i i 块的操作。因此,第 i i i 块的输出计算如下: x i = C o n v X i ( x i − 1 , k i ) ( 1 ) x_i = ConvX_i(x_{i-1,\,k_i})\,\,\,\,\,\,\,\,\,(1) xi=ConvXi(xi−1,ki)(1) 这里 x i − 1 x_{i-1} xi−1 和 x i x_i xi 分别是第 i i i 个block的输入和输出。ConvX包括一个卷积层、一个批处理规范化层和ReLU激活层, k i k_i ki 是卷积核的大小。
在STDC模块中,第一个块的内核大小为1,其余块的内核大小仅设置为3。给定STDC模块输出N的通道数,第i块中卷积层的滤波器数为 N / 2 i N/2^i N/2i,但最后一个卷积层的滤波器数与前一个卷积层的滤波器数相同。
【STDC模块感受野】
在图像分类任务中,通常在较高的层中使用更多通道。但在语义分割任务中,我们主要关注可伸缩的感受野和多尺度信息。低层需要足够的通道来编码具有较小感受野的更细粒度信息,而具有较大感受野的高层则更关注高层信息的表达,将同一通道设置为低层可能会导致信息冗余。Down-sample仅发生在Block2中。为了丰富特征信息,我们通过跳过路径将 x 1 x_1 x1 到 x n x_n xn 特征拼接起来,作为STDC模块的输出。在级联之前,通过3×3池大小的平均池操作,将STDC模块中不同块的响应映射下采样到相同的空间大小,如图3(c) 所示。在我们的设置中,STDC模块的最终输出为: x o u t p u t = F ( x 1 , x 2 , . . . , x n ) x_{output} = F(x_1,x_2,...,x_n) xoutput=F(x1,x2,...,xn)其中 x o u t p u t x_{output} xoutput 表示STDC模块输出,F表示我们方法中的融合操作,而 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn 是所有n个块的特征图。考虑到效率,我们采用级联作为融合操作。在我们的方法中,我们在4个块中使用STDC模块。
表1. STDC模块中模块的感受野。RF表示感受野,S表示步幅.注意,如果步幅=2,则Block1的1×1 RF通过平均池操作变成3×3 RF
表1显示了STDC模块中块的感受野, x o u t p u t x_{output} xoutput 因此从所有块收集多尺度信息,我们声称我们的STDC模块有两个优点:
1)我们通过以几何级数方式逐渐减小来精心调整块的滤波器大小,从而显著降低计算复杂度。
2) STDC模块的最终输出由所有块连接而成,保留了可伸缩的各个字段和多尺度信息。
【STDC模块参数量】
给定输入通道尺寸M和输出通道尺寸N,STDC模块的参数数量为:
S p a r a m = M ∗ 1 ∗ 1 ∗ N 2 1 + ∑ i = 2 n − 1 N 2 i − 1 ∗ 3 ∗ 3 ∗ N 2 i + N 2 n − 1 ∗ 3 ∗ 3 ∗ N 2 n − 1 S_{param}=M*1*1*\frac{N}{2_1}+\sum_{i=2}^{n-1}\frac{N}{2^{i-1}}*3*3*\frac{N}{2^i}+\frac{N}{2^{n-1}}*3*3*\frac{N}{2^{n-1}} Sparam=M∗1∗1∗21N+i=2∑n−12i−1N∗3∗3∗2iN+2n−1N∗3∗3∗2n−1N = N M 2 + 9 N 2 2 3 ∗ ∑ i = 0 n − 3 1 2 2 i + 9 N 2 2 2 n − 2 =\frac{NM}{2}+\frac{9N^2}{2^3}*\sum_{i=0}^{n-3}\frac{1}{2^{2i}}+\frac{9N^2}{2^{2n-2}} =2NM+239N2∗i=0∑n−322i1+22n−29N2 N M 2 + 3 N 2 2 ∗ ( 1 + 1 2 2 n − 3 ) \frac{NM}{2}+\frac{3N^2}{2}*(1+\frac{1}{2^{2n-3}}) 2NM+23N2∗(1+22n−31)
如等式3所示,STDC模块的参数数量由预定义的输入和输出通道尺寸决定,而块的数量对参数大小影响不大。特别是,当n达到最大值时,STDC模块的参数个数几乎保持不变,仅由M和N定义。
3.1.2网络架构
我们在图3(a) 中展示了我们的网络架构。除输入层和预测层外,它由6个阶段组成。
- 第1∼5阶段分别以2的步长对输入的空间分辨率进行下采样,阶段6通过一个ConvX、一个全局平均池层和两个完全连接层输出预测逻辑。
- 阶段1和阶段2通常被视为外观特征提取的低层。为了追求效率,我们在第一阶段和第二阶段的每个阶段只使用一个卷积块,根据我们的经验证明这是足够的。
- 第3、4、5阶段的STDC模块数量在我们的网络中进行了仔细调整。在这些阶段中,每个阶段中的第一个STDC模块以2的步长向下采样空间分辨率。每个阶段中的以下STDC模块保持空间分辨率不变。
我们将阶段的输出通道数表示为 N l N_l Nl,其中 l 是级的索引。在实践中,我们根据经验将 N 6 N_6 N6 设置为1024,并仔细调整rest阶段的通道数,直到在精度和效率之间达到良好的平衡。由于我们的网络主要由短期密集级联模块组成,我们称我们的网络为STDC网络。表2显示了我们的STDC网络的详细结构。
表2. STDC网络的详细架构。请注意,表中所示的ConvX指的是Conv BN ReLU。第3、4和5阶段的基本模块是STDC模块。KSize表示内核大小。S、 R,C分别表示步幅、重复次数和输出通道
3.2. 解码器的设计
3.2.1.分割结构
主干: 我们认为,这两个阶段的特征在不同的特征表示级别: 来自编码主干的特征保留了丰富的细节信息,而来自解码器的特征包含来自全局池层的输入的上下文信息。
头部: [Seg head] 包括一个3×3 Conv BN ReLU运算符,然后是一个1×1卷积,以获得输出维度N,该维度被设置为类数。
损失: 我们采用交叉熵损失和 Online Hard Example Mining 来优化语义分段学习任务。
图4.STDC细分网络概述。ARM表示注意细化模块,FFM表示特征融合模块。红色虚线框中的操作是我们的STDC网络。蓝色虚线框中的操作是细节信息(边界信息)聚合模块。
我们使用预训练的STDC网络作为编码器的主干,并采用BiSeNet[28]的上下文路径对上下文信息进行编码。
- 如图4(a) 所示,我们使用阶段3、4、5分别以下采样率1/8、1/16、1/32生成特征映射。然后,我们使用全局平均池来提供具有大接受域的全局上下文信息 。
- 采用U形结构对来自全局特征的特征进行上采样,并将每个特征与编码阶段最后两个阶段(第4阶段和第5阶段)的对应特征相结合。
- 遵循BiSeNet[28],我们使用[ARM 注意细化模块]细化每两个阶段的组合特征。对于最终的语义分割预测,我们采用BiSeNet[28]中的 [特征融合模块] 来融合编码器第3阶段的1/8下采样特征和解码器的对应特征。
3.2.2低层的细节指导
图5. 在没有或有详细指导的情况下,对空间路径和第3阶段中的特征有无细节指导 的视觉解释。带有下标D的列表示带有细节指导的结果。可视化显示,与主干的底层相比,空间路径可以编码更多的空间细节,例如边界、角点,而我们的细节引导模块可以在不增加额外计算成本的情况下完成同样的工作。
【细节引导模块】
我们在图5(b)中可视化了BiSeNet的空间路径特征。与相同下采样率的主干低层(第3阶段)相比,空间路径可以编码更多的空间细节,例如边界、角点。
基于这一观察,我们提出了一个细节引导模块,引导低层作为二元分割任务来学习空间信息:
- 如图4(c)所示,我们首先通过拉普拉斯算子从 [Seg GT] 中生成 [Detail GT]。
- 如图4(a)所示,我们在阶段3中插入 [Detail Head] 生成细节特征图。然后以 [Detail GT] 作为细节特征图的引导,引导底层学习空间细节特征。如图5(d)所示,与图5(c)所示的结果相比,具有细节指导的特征地图可以编码更多的空间细节。
- 最后,将学习到的细节特征与解码器深层块的上下文特征进行融合,进行分割预测。
【细节标签生成】:
我们通过我们的细节聚合模块从语义分割标签生成二进制细节标签,如图4(c)的蓝色虚线框所示。该运算可由二维卷积核(称为拉普拉斯核)和可训练的1×1卷积来实现。我们使用图4(e) 中所示的拉普拉斯算子生成具有不同步幅的粗细程度的细节特征图,以获得多尺度细节信息。然后,我们将细节特征映射向上采样到原始大小,并将其与可训练的1×1卷积进行融合,以进行动态重新绘制。最后,我们采用阈值0.1将预测细节转换为具有边界和角点信息的二元细节标签。
【细节头[Detail Head]生成】:
如图4(b) 所示,我们使用一个细节头来生成细节图,它引导浅层对空间信息进行编码。细节头包括一个3×3 Conv BN ReLU操作符,然后是一个1×1卷积,以获得输出细节图。在实验中,细节头被证明能够有效地增强特征表示。请注意,此分支在推断阶段被丢弃。因此,该边信息可以很容易地提高分割任务的准确性,而不需要任何推理代价。
【Detail Loss】
由于细节像素的数量远少于非细节像素,因此细节预测是一个经典平衡问题。由于加权交叉熵总是导致结果粗糙,在[7]之后,我们采用二元交叉熵和dice loss 联合优化细节学习。dice loss 测量预测图和真实标签之间的重叠。此外,它对前景/背景像素数不敏感,这意味着它可以缓解类不平衡问题。因此,对于高度为H、宽度为W的预测细节图,细节损失 L d e t a i l L_{detail} Ldetail公式如下: L d e t a i l ( p d , g d ) = L d i c t ( p d , g d ) + L b c e ( p d , g d ) ( 4 ) L_{detail}(p_d,g_d)=L_{dict}(p_d,g_d)+L{bce}(p_d,g_d)\,\,\,\,\,\,\,\,\,\,\,\,(4) Ldetail(pd,gd)=Ldict(pd,gd)+Lbce(pd,gd)(4)其中 p d ∈ R H ∗ W p_d \in \mathbb{R}^{H*W} pd∈RH∗W指的是预测的内容; g d ∈ R H ∗ W g_d \in \mathbb{R}^{H*W} gd∈RH∗W指的是细节标签。 L b c e L_bce Lbce指的是二元交叉熵损失; L d i c t L_{dict} Ldict值得是dict loss,其公式为 L d i c t ( p d , g d ) = 1 − 2 ∑ i H ∗ W p d i g d i + ϵ ∑ i H ∗ W ( p d i ) 2 + ∑ i H ∗ W ( g d i ) 2 + ϵ L_{dict}(p_d,g_d) = 1 - \frac{2 \sum_i^{H*W}p_d^ig_d^i + \epsilon }{\sum_i^{H*W}(p_d^i)^2+\sum_i^{H*W}(g_d^i)^2 + \epsilon} Ldict(pd,gd)=1−∑iH∗W(pdi)2+∑iH∗W(gdi)2+ϵ2∑iH∗Wpdigdi+ϵ
其中 i i i 表示第 i i i 个像素, ϵ \epsilon ϵ是拉普拉斯平滑项,以避免零分割。本文将 ϵ \epsilon ϵ 设为1。
4 实验结果
我们在三个数据集上实现了我们的方法:ImageNet[6]、Cityscapes[5]和CamVid[2],分别评估我们提出的主干网和分段网络的有效性。我们首先介绍数据集和实现细节。然后,我们报告了与其他算法相比,我们在不同基准上的精度和速度结果。最后,我们讨论了我们提出的方法中组件的影响。
4.1 基准和评价指标
- ImageNet。ILSVRC[6]2012是最流行的图像分类数据集。它包含120万张用于训练的图像,50000张用于1000个类别的验证。它还广泛用于为下游任务(如目标检测或语义分割)训练预训练模型。
- Cityscapes。Cityscapes[5]是一个语义场景解析数据集,它是从汽车的角度获取的。它包含5000幅精细注释图像,并分为训练集、验证集和测试集,分别有2975幅、500幅和1525幅图像。注释包括30个类,其中19个用于语义切分任务。图像的分辨率高达2048×1024,对实时语义分割提出了挑战。为了公平比较,我们在实验中只使用精细的注释图像。
- CamVid。Cambridge driving Labeled Video Database(Camvid)[2]是一个道路场景数据集,从驾驶汽车的角度获取。该数据集包含从视频序列中提取的701个带注释的图像,其中367个用于训练,101个用于验证,233个用于测试。图像分辨率为960×720,语义类别为32个,其中11个类别的子集用于分割实验。
- 评价指标。对于分类评估,我们使用评估top-1准确性作为评估指标,如下[9]。对于分割评估,我们采用基于并集的类相交平均值(mIoU)和每秒帧数(FPS)作为评估指标。
4.2.实施细节
- 图像分类。
我们使用小批量随机梯度下降法(SGD),批量大小64,动量0.9,重量衰减1e−4.训练模型。采用了[11]中的三种训练方法,包括学习率预热、余弦学习率策略和标签平滑。在前5个阶段,采用预热策略的总阶段数为300,其中学习率从0.001开始到0.1。分类块之前的辍学设置为0.2。我们不使用其他特殊的数据扩充,它们都与[9]相同。- 语义分割
我们使用动量为0.9,重量衰减为5e的小批量随机梯度下降(SGD)−4.Cityscapes和CamVid数据集的批量大小分别设置为48和24。作为常见配置,我们使用初始速率乘以 ( 1 − i t e r i t e r m a x p o w e r ) (1-\frac{iter}{iter_{max}}^{power}) (1−itermaxiterpower) 的"poly"学习速率策略。功率设置为0.9,初始学习率设置为0.01。此外,我们分别为Cityscapes和CamVid数据集对模型进行60000和10000次迭代训练,其中我们在前1000200次迭代中采用预热策略。- 数据增强
包括颜色抖动、随机水平翻转、随机裁剪和随机调整大小。比例范围为[0.125,1.5],裁剪分辨率为1024×512,用于城市景观的训练。对于训练CamVid,刻度范围为[0.5,2.5],裁剪分辨率为960×720。
在所有实验中,我们在docker上基于pytorch-1.1进行实验。我们在CUDA 10.0和CUDNN 7.6、TensorRT 5.0.1.5下执行所有实验,在批量为1的NVIDIA GTX 1080Ti GPU上测试我们方法的计算能力。
4.3 消融研究
本节介绍消融实验,以验证我们方法中每个组件的有效性。
- STDC模块的有效性
我们在STDC2中调整了STDC模块的块号,结果如图7所示。根据我们的方程3,随着组数的增加,FLOPs明显减少。最好的表现是在4个模块。更多块的好处变得非常小,更深的网络不利于并行计算和FPS。因此,在本文中,我们将STDC1和STDC2中的块号设置为4。- 骨干网络的有效性
为了验证我们为实时分割设计的主干网的有效性,我们采用了最新的轻量级主干网,其分类性能与STDC2相当,并用我们的解码器构建了语义分割网络。如表3所示,我们的STDC2与其他轻量级主干相比,在速度精度方面取得了最佳的平衡。
表3. 城市景观验证集上的轻量级主干比较。所有体验者使用相同的解码器和相同的实验设置。- 细节指导的有效性
我们首先可视化第3阶段特征图的热图,如图6所示。与没有详细指导的阶段3相比,具有详细指导的阶段3的特征编码了更多的空间信息。因此,小对象和边界的最终预测更精确。我们在表4中显示了一些定量结果。为了验证详细指导的有效性,我们在Cityscapes val数据集上比较了STDC2 Seg的不同详细指导策略。
为了进一步证明细节引导的能力,我们首先使用BISENTV1[28]中的空间路径对空间信息进行编码,然后使用空间路径生成的特征替换Stage 3D中的特征。空间路径实验的设置与其他实验完全相同。如表4所示,STDC2 Seg中的详细指导可以在不影响推理速度的情况下提高mIoU。添加空间路径编码空间信息也可以提高精度,但同时增加了计算成本。此外,我们发现我们的细节聚合模块对丰富的细节信息进行编码,并通过1x、2x、4x细节特征的聚合产生最高的mIoU。
图6. 视觉对比我们对城市景观验证集的详细指导。带有下标D的列表示带有详细指导的结果。第一行(a)显示输入图像。(b)/(c)[没有]/[有] 详细指导的情况下第3阶段的热量图。(d)/(e) 在[没有]/[有]详细指导的情况下演示预测。(f) 是输入图像的真实标签。
表4. 城市景观验证集的详细信息比较。SP表示具有空间路径的方法,DG表示细节引导,其中1x、2x、4x表示细节聚合模块中具有不同下采样步长的细节特征。
4.4 与最新技术相比
在这一部分中,我们将在ImageNet、Cityscapes和CamVid三个基准上,将我们的方法与其他现有的最先进的方法进行比较。
- ImageNet上的结果
- 城市景观的结果。
按照前面的方法[27,22],我们使用训练集和验证集来训练我们的模型,然后再提交给Cityscapes online server。
在测试阶段,我们首先将图像大小调整为固定大小512×1024或768×1536以进行推断,然后将结果采样到1024×2048。我们在方法名称后使用50和75分别表示输入大小512×1024和768×1536。例如,对于STDC1主干和512×1024输入大小,我们将方法命名为STDC1-Seg50。
- 在CamVid上的结果。
我们也在CamVid数据集上评估了我们的方法。表7显示了与其他方法的比较结果。输入尺寸为720×960时,STDC1 Seg以197.6 FPS的速度实现73.0%的mIoU,这是性能和速度之间最先进的折衷。这进一步证明了我们方法的优越性能。