(STDCnetwork)Rethinking BiSeNet For Real-time Semantic Segmentation重新思考 BiSeNet 的实时语义分割
BiSeNet [28, 27] 已被证明是一种流行的用于实时分割的双流网络。 然而,其添加额外路径来编码空间信息的原理是耗时的,并且由于任务特定设计的不足,从预训练任务(例如图像分类)中借用的主干可能对图像分割效率低下。 为了解决这些问题,我们通过去除结构冗余,提出了一种名为 Short-Term Dense Concatenate network (STDC network) 的新颖高效的结构。 具体来说,我们逐渐降低特征图的维数,并将它们的聚合用于图像表示,这形成了 STDC 网络的基本模块。 在解码器中,我们提出了一个细节聚合模块,将空间信息的学习以单流的方式集成到低层。 最后,融合低层特征和深层特征来预测最终的分割结果。 在 Cityscapes 和 CamVid 数据集上的广泛实验证明了我们方法的有效性,通过在分割精度和推理速度之间实现有希望的权衡。 在 Cityscapes 上,我们在 NVIDIA GTX 1080Ti 上以 250.4 FPS 的速度在测试集上实现了 71.9% 的 mIoU,比最新方法快 45.2%,在推断更高分辨率的图像时以 97.0 FPS 的速度实现了 76.8% 的 mIoU。 代码可在 https://github.com/MichaelFan01/STDC-Seg 获得。
前言
语义分割是计算机视觉中一个经典的基础主题,旨在为图像分配像素级标签。 深度学习的繁荣通过各种突破极大地提升了语义分割的性能[18,27,22,4],伴随着许多应用的快速增长需求,例如自动驾驶、视频监控、机器人传感等 . 这些应用激励研究人员探索有效和高效的分割网络,特别是在移动领域。
为了满足这些需求,许多研究人员建议设计具有令人满意的分割精度的低延迟、高效的 CNN 模型。 这些实时语义分割方法在各种基准测试中取得了可喜的性能。 对于实时推理,一些工作,例如 DFANet [18] 和 BiSeNetV1 [28] 选择轻量级骨干网,并研究特征融合或聚合模块的方法以补偿精度下降。 然而,由于任务特定设计的不足,这些从图像分类任务中借来的轻量级主干可能并不完美地解决图像分割问题。 除了轻量级主干的选择外,限制输入图像大小是提高推理速度的另一种常用方法。 较小的输入分辨率似乎是有效的,但它很容易忽略边界和小物体周围的细节外观。 为了解决这个问题,如图 2(a) 所示,BiSeNet [28, 27] 采用多路径框架来结合低级细节和高级语义。 添加额外的路径来获取低级特征是耗时的,而辅助路径总是缺乏低级信息引导。
为此,我们提出了一种新颖的手工网络,目的是为了更快的推理速度、可解释的结构和与现有方法相比具有竞争力的性能。
首先,我们设计了一种新颖的结构,称为 Short-Term Dense Concatenate 模块(STDC 模块),以获得具有几个参数的变体可扩展感受野。 然后,将 STDC 模块无缝集成到 U-net 架构中,形成 STDC 网络,极大地提升了语义分割任务中的网络性能。
具体来说,如图 3 所示,我们将来自多个连续层的响应图连接起来,每个层都对不同尺度和各自领域的输入图像/特征进行编码,从而实现多尺度特征表示。 为了加快速度,层的过滤器大小逐渐减小,分割性能的损失可以忽略不计。 STDC网络的详细结构见表2。
在解码阶段,如图2(b)所示,不是使用额外耗时的路径,而是采用细节引导来引导低层学习空间细节。 我们首先利用 Detail Aggregation 模块来生成详细的 ground-truth。 然后,使用二元交叉熵损失和骰子损失来优化细节信息的学习任务,这被认为是边信息学习的一种。 应该注意的是,推理时不需要这个辅助信息。 最后,融合来自低层的空间细节和来自深层的语义信息来预测语义分割结果。 我们方法的整体架构如图 4 所示。
图 2. BiSeNet [28] 的架构说明和我们提出的方法。 (a) 提出了双边分割网络 (BiSeNet [28]),它使用额外的空间路径来编码空间信息。 (b) 展示了我们提出的方法,该方法使用 Detail Guidance 模块对低级特征中的空间信息进行编码,而无需额外的耗时路径。
图 3. (a) 通用 STDC 网络架构。 ConvX 操作是指 Conv-BN-ReLU。 (b) 我们网络中使用的短期密集连接模块(STDC 模块)。 M 表示输入通道的维度,N 表示输出通道的维度。 每个块都是具有不同内核大小的 ConvX 操作。 © 步长 = 2 的 STDC 模块。
(注 CONV-cnn bn-batchnorm relu)
我们的主要贡献可以总结如下: • 我们设计了一个短期密集连接模块(STDC 模块)来提取具有可扩展感受野和多尺度信息的深层特征。 该模块以可承受的计算成本提高了我们的 STDC 网络的性能。
• 我们建议使用细节聚合模块来学习解码器,从而在低层中更精确地保存空间细节,而无需在推理时间增加额外的计算成本。
• 我们进行了广泛的实验来展示我们方法的有效性。 实验结果表明,STDC 网络在 ImageNet、Cityscapes 和 CamVid 上取得了新的最先进的结果。
具体来说,我们的 STDC1-Seg50 在一张 NVIDIA GTX 1080Ti 卡上以 250.4 FPS 的速度在 Cityscapes 测试集上实现了 71.9% 的 mIoU。 在相同的实验设置下,我们的 STDC2-Seg75 在 97.0 FPS 的速度下达到 76.8% mIoU。
相关工作
2.1. 高效的网络设计
模型设计在计算机视觉任务中起着重要作用。 SqueezeNet [16] 使用了 fire 模块和某些策略来减少模型参数。 MobileNet V1 [13] 利用深度可分离卷积来减少推理阶段的 FLOP。 ResNet [9] [10] 采用残差构建层来实现出色的性能。 MobileNet V2 [25] 和 ShuffleNet [29] 使用组卷积来降低计算成本,同时保持相当的精度。 这些工作是专门为图像分类任务设计的,它们对语义分割应用的扩展应该仔细调整。
2.2. 通用语义分割
传统的分割算法,例如阈值选择、超像素,利用手工制作的特征在图像中分配像素级标签。 随着卷积神经网络的发展,基于 FCN [23] 的方法 [3、1、32、14] 在各种基准测试中取得了令人瞩目的性能。 Deeplabv3 [3] 采用了一个多孔的空间金字塔池化模块来捕获多尺度上下文。
SegNet [1] 利用编码器-解码器结构来恢复高分辨率特征图。 PSPNet [32] 设计了一个金字塔池来捕获扩张主干上的局部和全局上下文信息。 扩张主干和编码器-解码器结构都可以同时学习低级细节和高级语义。 然而,由于高分辨率特征和复杂的网络连接,大多数方法需要大量的计算成本。 在本文中,我们提出了一种高效且有效的架构,该架构在速度和准确性之间取得了良好的平衡。
2.3. 实时语义分割
最近,实时语义分割的实际应用快速增长。 在这种情况下,有两种主流来设计有效的分割方法。 (i) 轻量级骨干。 DFANet [18] 采用轻量级主干来降低计算成本,并设计了一个跨级特征聚合模块来提高性能。 DFNet [21] 利用“Partial Order Pruning”算法获得轻量级骨干网和高效解码器。 (ii) 多分支架构。 ICNet [31] 设计了多尺度图像级联以实现良好的速度精度权衡。 BiSeNetV1 [28] 和 BiSeNetV2 [27] 分别提出了低级细节和高级上下文信息的双流路径。 在本文中,我们提出了一种高效的轻量级骨干网来提供可扩展的感受野。 此外,我们设置了一个单路径解码器,它使用细节信息引导来学习低级细节。
方法
BiSeNetV1 [28] 利用轻量级骨干网,例如 ResNet18 和空间路径作为编码网络,形成两流分割架构。 然而,由于结构冗余,分类主干和双流架构可能效率低下。 在本节中,我们首先介绍我们提出的 STDC 网络的细节。
然后,我们将详细介绍单流方法的整个架构。
3.1 编码网络的设计
3.1.1 短期密集连接模块
我们提出的网络的关键组件是短期密集连接模块(STDC 模块)。 图 3(b) 和 © 说明了 STDC 模块的布局。
具体来说,每个模块被分成几个块,我们使用ConvXi来表示第i个块的操作。
因此,第 i 个块的输出计算如下:
其中 xi−1 和 xi 分别是第 i 个块的输入和输出。 ConvX 包括一个卷积层、一个批量归一化层和 ReLU 激活层,ki 是卷积层的核大小。
在 STDC 模块中,第一个块的内核大小为 1,其余的简单设置为 3。给定 STDC 模块输出的通道数 N,第 i 个块中卷积层的滤波器数为 N/2i, 除了最后一个卷积层的过滤器,其数量与前一个卷积层的过滤器相同。 在图像分类任务中,在较高层使用更多通道是一种常见做法。 但在语义分割任务中,我们专注于可扩展的感受野和多尺度信息。
低层需要足够多的通道来编码更细粒度的小感受野信息,而大感受野的高层更侧重于高层信息的归纳,与低层设置相同的通道可能会导致信息冗余 .
下采样仅发生在 Block2 中。 为了丰富特征信息,我们通过跳过路径将 x1 到 xn 特征映射作为 STDC 模块的输出。 在连接之前,STDC模块中不同块的响应图通过3×3池化大小的平均池化操作下采样到相同的空间大小,如图3(c)所示。 在我们的设置中,STDC 模块的最终输出是:
其中 xoutput 表示 STDC 模块输出,F 是我们方法中的融合操作,而 x1, x2, …, xn 是来自所有 n 个块的特征图。 考虑到效率,我们采用串联作为我们的融合操作。 在我们的方法中,我们在 4 个块中使用 STDC 模块。
表 1 给出了 STDC 模块中块的感受野,因此 xoutput 收集了所有块的多尺度信息,我们声称我们的 STDC 模块有两个优点:(1)我们通过几何逐渐减小来精心调整块的过滤器大小 递进方式,导致计算复杂度显着降低。
(2) STDC 模块的最终输出由所有块级联而成,保留了可扩展的各个字段和多尺度信息。
给定输入通道维度M和输出通道维度N,STDC模块的参数个数为:
如公式 3 所示,STDC 模块的参数数量主要由预定义的输入和输出通道维度决定,而块的数量对参数大小的影响较小。 特别是当n达到最大值时,STDC模块的参数个数几乎保持不变,仅由M和N定义
3.1.2 网络架构
我们在图 3(a) 中展示了我们的网络架构。 它由 6 个阶段组成,除了输入层和预测层。
通常,Stage 1∼5 分别以 2 的步幅对输入的空间分辨率进行下采样,Stage 6 通过一个 ConvX、一个全局平均池化层和两个全连接层输出预测 logits。
Stage 1&2 通常被认为是外观特征提取的低层。 为了追求效率,我们在 Stage 1 和 Stage 2 中只使用了一个卷积块,根据我们的经验证明这是足够的。 第 3、4、5 阶段的 STDC 模块的数量在我们的网络中进行了仔细调整。 在这些阶段中,每个阶段中的第一个 STDC 模块以 2 的步幅对空间分辨率进行下采样。每个阶段中的以下 STDC 模块保持空间分辨率不变。
我们将阶段的输出通道数表示为 Nl,其中 l 是阶段的索引。 在实践中,我们根据经验将 N6 设置为 1024,并仔细调整休息阶段的通道数,直到在准确性和效率之间取得良好的折衷。 由于我们的网络主要由 Short-Term Dense Concatenate 模块组成,我们将我们的网络称为 STDC 网络。 表 2 显示了我们的 STDC 网络的详细结构。
3.2. 解码器设计
3.2.1 分割架构
我们使用预训练的 STDC 网络作为编码器的主干,并采用 BiSeNet [28] 的上下文路径对上下文信息进行编码。 如图 4(a) 所示,我们使用 Stage 3、4、5 来生成下采样率分别为 1/8、1/16、1/32 的特征图。 然后我们使用全局平均池来提供具有大感受野的全局上下文信息。 U 形结构被部署来对来自全局特征的特征进行上采样,并将它们中的每一个与我们编码阶段的最后两个阶段(第 4 阶段和第 5 阶段)的对应项结合起来。 在 BiSeNet [28] 之后,我们使用 Attention Refine 模块来细化每两个阶段的组合特征。 对于最终的语义分割预测,我们采用 BiSeNet [28] 中的特征融合模块来融合编码器中第 3 阶段的 1/8 下采样特征和解码器中的对应特征。 我们声称这两个阶段的特征处于不同的特征表示级别。 来自编码骨干的特征保留了丰富的细节信息,而来自解码器的特征由于来自全局池化层的输入而包含上下文信息。
具体来说,Seg Head 包括一个 3×3 Conv-BN-ReLU 算子,然后是一个 1×1 卷积以获得输出维度 N,它被设置为类的数量。 我们采用交叉输入损失和OHEM算法( Online Hard Example Mining)来优化语义分割学习任务。
3.2.2 低级特征引导流
我们在图 5(b) 中可视化了 BiSeNet 的空间路径的特征。 与相同下采样率的主干低层(Stage 3)相比,空间路径可以编码更多的空间细节,例如边界、角点。 基于这一观察,我们提出了一个细节指导模块来指导低层以单流方式学习空间信息。 我们将细节预测建模为二进制分割任务。 我们首先通过拉普拉斯算子从分割的ground-truth生成细节图ground-truth,如图4(c)所示。 如图 4(a) 所示,我们在第 3 阶段插入细节头以生成细节特征图。 然后我们使用细节ground-truth作为细节特征图的指导,引导低层学习空间细节的特征。 如图 5(d) 所示,具有细节引导的特征图可以编码比图 5© 中呈现的上述结果更多的空间细节。 最后,将学习到的细节特征与来自解码器深度块的上下文特征融合起来进行分割预测。
细节label的生成:
我们通过细节聚合模块从语义分割地面实况生成二进制细节地面实况,如图 4© 的蓝色虚线框所示。 该操作可以通过称为拉普拉斯核的二维卷积核和可训练的 1×1 卷积来执行。 我们使用图 4(e) 所示的拉普拉斯算子来生成具有不同步幅的软细细节特征图,以获得多尺度细节信息。 然后我们将细节特征图上采样到原始大小,并将其与可训练的 1×1 卷积融合以进行动态重新加权。 最后,我们采用阈值 0.1 将预测的细节转换为具有边界和角点信息的最终二进制细节地面实况。
细节损失:由于细节像素的数量远少于非细节像素,细节预测是一个类平衡问题。 因为加权交叉熵总是导致粗糙的结果,所以在[7]之后,我们采用二元交叉熵和骰子损失来联合优化细节学习。 骰子损失测量预测图和地面实况之间的重叠。 此外,它对前景/背景像素的数量不敏感,这意味着它可以缓解类不平衡问题。 因此对于高度为 H 和宽度为 W 的预测细节图,细节损失 Ldetail 公式如下:
其中 pd ∈ RH×W 表示预测的细节,gd ∈ RH×W 表示相应的细节ground-truth。 Lbce 表示二元交叉熵损失,而 Ldice 表示骰子损失,如下所示:
其中 i 表示第 i 个像素,ε 是拉普拉斯平滑项,以避免零除。 在本文中,我们设置 ǫ = 1。
如图 4(b) 所示,我们使用 Detail Head 来生成细节图,引导浅层对空间信息进行编码。 细节头包括一个 3 × 3Conv-BN-ReLU 算子后跟 1 × 1 卷积得到输出细节图。 在实验中,细节头被证明是有效的增强特征表示。 请注意,此分支在推理阶段被丢弃。 因此,这种辅助信息可以轻松提高分割任务的准确性,而无需任何推理成本。