Rethinking BiSeNet For Real-time Semantic Segmentation 论文阅读

date
Mar 20, 2023
Last edited time
Mar 27, 2023 08:22 AM
status
Published
slug
Rethinking_BiSeNet_For_Real-time_Semantic_Segmentation论文阅读
tags
DL
CV
summary
用处不大
type
Post
Field
Plat

1 Background

语义分割是计算机视觉上比较经典和基础的问题,它旨在为像素分配类别标签。
因为题目是重新思考 BiSeNet, 那么首先理解一下 BiseNet:

Why BiSeNet

  • 在语义分割领域,由于需要对输入图片进行逐像素的分类,运算量很大,如何在语义分割任务中应用轻量级模型,兼顾实时性和精度性能具有相当大的挑战性
  • 之前的实时性语义分割算法主要有三种加速方法:(1)通过剪裁或缩放来限制输入大小,以降低计算复杂度(见图a的第一个图)。优点:简单而有效。缺点:丢失空间细节,特别是边界部分,导致度量和可视化的精度下降;(2)减少网络通道数量以加快处理速度,即使用轻量级网络。缺点:会削弱空间信息(见图a的第二个图);(3)为了追求紧凑的框架,丢弃模型的最后阶段(例如ENet)。缺点:由于ENet放弃了最后阶段的下采样,模型的感受野不能覆盖大物体,导致判别能力较差。
  • 为了弥补空间信息的丢失,有些算法会使用 U 型结构(图 b),但是这种结构速度比较慢,而且丢失的信息不可能仅仅通过 low-level 信息的融合来恢复
为了解决上述的问题,提出了 BiSeNet(图 c),它有两个路径:context path 和 spatial path
notion image

BiSeNet

notion image
整体很简单,就是两个路径,一个 Context path 来编码不同感受野和不同尺度的高级语义信息(即 high-level feature),一个 Spatial path 来编码丰富的细节空间信息(即 low-level feature),最后把两个信息融合得到最后的准确的预测结果。
  • Context path:首先使用轻量级网络(如 ResNet18 或者 Xception)来得到下采样 32x 的图像特征,最后再通过一个全局平均池化操作(上图中 32x down 下面的灰色小块)来得到丰富的 Context 信息和最大的感受野。为了精细化 16x down 阶段和 32x down 阶段的输出特征,提出了一个 ARM 模块,即通过一个全局池化来得到一个全局上下文信息,后边在通过卷积、relu 和 sigmoid 函数得到一个 attention 向量,最后把这个向量和原先的特征图进行一个通道 attention(相乘)来达到一个细化的目的。之后把 16x down、32x down 和平均全局池化操作的三个输出全部上采样原图的 1/8 进行 concat,来和 Spatial path 的输出进行融合。
  • Spatial path:仅有三层。每层是都 conv、bn 和 relu。步长都是 2,最终得到下采样 8x 的结果。
  • FFM:把两个路径的输出先 concat 到一起,在进行一个 1*1 的卷积,后边的操作和 ARM 操作一样的目的。为了得到更精确的结果,还使用了残差结构(文中 add 部分)。

Rethinking BiSeNet

  • BiSeNet 中的 lightweight backbones 都是从图像分类任务中借来的,无法有效地进行图像分割。
  • BiSeNet 中添加额外 path 以对空间信息进行编码的原理很耗时,并且额外 path 总是缺乏低层次的信息指导。
因此,针对上述两个问题,作者进行了改进。具体而言,作者改进了 Context path 的 backbone,而其它部分保持不变。同时,作者还将 BiSeNet 中的 Spatial path 换成了作者提出的 Detail Guidance。
notion image
即本文提出了一种新颖且有效的结构,目的是更快的推理速度,可解释的结构和更好的性能:
notion image

2 Motivation

  • 实时分割方法中使用的轻量化的 Backbone 主要是针对图像分类的设计,可能针对特定的语义分割任务性能并不是那么的好,作者改进了 backbone
  • BiSeNet 添加一条额外的 path 来获取 low-level 特征是很费时的,同时 Auxiliary path 也往往缺乏 low-level 信息的引导,作者改进了这个耗时的 Spatial path

3 Method

notion image
  • 针对 BiSeNet 中的 Context path ,本文改进了它的 backbone,即 encoder 部分
  • 针对 BiSeNet 中的 Spatial path,本文提出了了 Detial guidance 来替代它
下面具体看看每部分是怎么设计的:

3.1. Design of Encoding Network

这部分就是针对针对 BiSeNet 中的 Context path 中 backbone 的改进,本文作者设计了自己的 backbone 即 STDC 网络,它是有 STDC 模块组成的。
(1)Short-Term Dense Concatenate Module (STDC module): 通过少量参数来获得 Variant Scalable Receptive Fields
notion image
个 block 的输出为:
  • 表示第 个 block 的操作,包括一个卷积层、一个 BN 层和一个 ReLU 激活层
  • 分别表示第 个 block 的输入和输出
  • 表示第 个 block 的卷积层的卷积核的大小,STDC 模块中第一个 block 卷积核大小为 1,其它的大小为 3
  • 如果 STDC 模块中的输出通道数为 ,则第 个 block 的卷积层的卷积核个数为 ,只有最后一个 block 和倒数第二个个数相同。因为(低层需要足够的通道来编码具有小感受野的更细粒度信息,而具有大感受野的高层更注重高层信息诱导,将通道数与低层设置为相同可能会导致信息冗余)
  • 的 STDC 模块在 block2 的 ,block1 的分辨率要通过 avg pool 操作下采样到和 block2、block3、block4 一样的大小才进行融合
  • Fusion 为
notion image
了解了 STDC 模块后,后边就是使用 STDC 模块来形成 STDC 网络,即 backbone(encoder 部分)
(2)Network Architecture(STDC Network): 将 STDC 模块集成到 U-net 体系结构中,形成 STDC Network,这一操作极大地提高了语义分割任务网络的性能。
notion image
上边是 STDC 的分类网络,stage6 是分类网络一般使用的地方。具体的细节可以看下表。
notion image
表格就很清晰,stage1 和 2 就是步长 s=2 的卷积层。表格中我们可以看出来,stgae3、4、5 都是有 STDC 模块组成的,具体每个 stage 由多少个 STDC 模块组成就可以根据效果来细调。我们可以注意到,
stgae3、4、5 的第一个 STDC 模块都是步长为 2,其余都是步长为 1,这就保证了不同的 stage 的分辨率不同,同一个 stage 分辨率相同。STDC1 和 STDC2 表示不同的网路,即它们两个 stgae3、4、5 的 STDC 模块数量不同。表中出现了 R(重复次数),比如 STDC1 的 stage3 是 1,1,这就是表明 STDC1 网络的 stage3 阶段的 STDC 模块有两个,一个步长为 2,一个步长为 1。STDC2 的 stage3 是 1,3,这就是表明 STDC1 网络的 stage3 阶段的 STDC 模块有四个,一个步长为 2,三个个步长为 1

3.2. Design of Decoder

这部分就是针对针对 BiSeNet 中的 Spatial path 的改进,本文作者设计了自己设计了 detial guidance 来替代 BiSeNet 中的 Spatial path。
(1)Segmentation Architecture: 使用预训练 STDC 网络作为编码器的 Backbone,并采用 BiSeNet 的 context path 对 context information 进行编码。
notion image
即把 BiseNet 中的 Context path 中 backbone 换成了 STDC 网络,就是上边红色虚线框部分,其它的部分是不变的。Seg head 是在 8x 之前的,即 FFM(Feature Fusion Module) 出来的结果,先通过分割头,然后在进行 8x 上采样,因此这里的 seg gt 是原图的 1/8 大小,Seg loss 也是在这种情况下来计算的,这样可以减少计算量。Seg loss 是带有 OHEM 的交叉熵损失。
(2)Detail Guidance of Low-level Features: 使用预训练 STDC 网络作为编码器的 Backbone,并采用 BiSeNet 的 context path 对 context information 进行编码。
首先来看一个可视化图来表明 Detail Guidance 的优点:
notion image
(a) 为输入图像,(b)为本文中 stage 3 输出结果再通过 Detail head 后的结果,(d)是本文中 stage 3 输出结果,(d)为本文中 stage 3 输出结果再通过 Detail head 后的结果,并且还由 Detail GT 监督指导的情况下的结果,这就是为了表明 Detail Guidance 的优点和重要性。
下面具体看一下这一块是怎么进行 Detail Guidance 的:
  • Detail Ground-truth Generation :通过 detail Aggregation 模块从语义分割 ground truth 中生成 binary detail ground-truth
    • notion image
      Detail GT 是由 Seg GT 通过 detail Aggregation 模块生成的,detail Aggregation 模块位于上述蓝色虚线处。Seg GT 通过使用不同步长的拉普拉斯卷积(拉普拉斯金字塔)获得不同尺度的细节特征图,然后使用步长为 2 和 4 的上采样操作将它们还原到原始大小,并将它们三个连接起来输入到一个 的卷积中,得到 的结果。最后,通过阈值为 0.1 的转换(比如大于 0.1 的为白色,小于 0.1 的为黑色),得到最终的二值 Detail GT。
      💡
      就是边缘信息喽?
  • Detail Loss:由于 detail pixels 的数量远少于非 detail pixels,很明显 detail 预测是一个类不平衡问题。由于加权交叉熵总是导致粗糙的结果,于是本文采用 binary cross-entropy 和 dice loss 联合优化细节学习。

4 Experiments

4.1 Ablation Study

  • Effectiveness of STDC Module n 表示 block,n=4 的最好
notion image
  • Effectiveness of Our backbone
notion image
  • Effectiveness of Detail Guidance
notion image
notion image

4.2 Compare with State-of-the-arts

  • Results on ImageNet
notion image
  • Results on Cityscapes
notion image
  • Results on CamVid
notion image

5 Conclusion

本文提出了一种新颖且有效的结构,即通过消除结构冗余来缓解 BiSeNet 中的耗时问题(Short-Term Dense Concatenate network)。具体来说,首先将特征图的维数逐渐降低,并将特征图聚合起来进行图像表征,形成了 STDC 网络的基本模块。在 decoder 中,提出了一个 Detail Aggregation module 将空间信息的学习以 single-stream 方式集成到 low-level layers 中。最后,将 low-level features 和 deep features 融合以预测最终的分割结果。
 

© Lazurite 2021 - 2024