写在前面: 两个path
1 Detailed Branch (在bisenetv1里面叫spatial) 宽通道 浅层 能获得低级细节生成高分辨率feature representation
2 Semantic Branch (在bisenetv1里面叫 context)窄通道 深层 的获得高级语义上下文
1 摘要
低层细节和高层语义对于语义分割任务都是至关重要的。 然而,为了加速模型推理,当前的方法几乎总是牺牲低级细节,这导致准确性大幅下降。 我们建议分别处理这些空间细节和分类语义,以实现实时语义分割的高精度和高效率。
为此,我们提出了一种高效且有效的架构,在速度和准确性之间取得了良好的权衡,称为双边分割网络(BiSeNet V2)。 该架构涉及:(i)一个细节分支,具有宽通道和浅层来捕获低级细节并生成高分辨率特征表示; (ii) 语义分支,具有狭窄的通道和深层,以获得高级语义上下文。 由于减少了通道容量和快速下采样策略,语义分支是轻量级的。 此外,我们设计了一个引导聚合层来增强相互连接并融合两种类型的特征表示。 此外,增强训练策略旨在提高分割性能,而无需任何额外的推理成本。
2 介绍
我们观察到低级细节( low-level details )和高级语义( high-level semantics)对于语义分割任务都至关重要。 在一般语义分割任务中,深度网络和广度网络同时对两种信息进行编码。 然而,在实时语义分割任务中,我们可以分别处理空间细节和分类语义,以实现准确性和推理速度之间的权衡。
为此,我们提出了一种双路径架构,称为双边分割网络(BiSeNet V2),用于实时语义分割。 一种路径旨在捕获具有宽通道和浅层的空间细节,称为细节分支。 相比之下,引入了另一种途径来提取具有狭窄通道和深层的分类语义,称为语义分支。 语义分支只需要一个大的感受野来捕获语义上下文,而详细信息可以由细节分支提供。 因此,语义分支可以变得非常轻量级,具有更少的通道和快速下采样策略。 两种类型的特征表示被合并以构建更强、更全面的特征表示。 这种概念设计带来了一种高效且有效的实时语义分割架构,如图 2 (c) 所示。
具体来说,在本研究中,我们设计了一个引导聚合层来有效地合并两种类型的特征。 为了在不增加推理复杂性的情况下进一步提高性能,我们提出了一种带有一系列辅助预测头的增强训练策略,这些辅助预测头可以在推理阶段被丢弃。 广泛的定量和定性评估表明,所提出的架构优于最先进的实时语义分割方法,如图 1 所示。
相关工作
没啥可说的 都是对前人工作的总结
3 模型框架
3.1 Detail Branch
细节分支负责空间细节,这是低级信息。 因此,该分支需要丰富的信道容量来编码丰富的空间详细信息。 同时,由于细节分支只关注底层细节,因此我们可以为该分支设计一个步幅较小的浅层结构。 总的来说,细节分支的关键概念是使用宽通道和浅层来处理空间细节。 此外,该分支中的特征表示具有较大的空间尺寸和较宽的通道。 因此,最好不要采用残留连接,这会增加内存访问成本并降低速度。
3.2 Semantic Branch
与细节分支并行,语义分支旨在捕获高级语义。 该分支的通道容量较低,而空间细节可以由细节分支提供。 相比之下,在我们的实验中,语义分支具有细节分支的 λ(λ < 1) 个通道的比率,这使得该分支是轻量级的。 实际上,语义分支可以是任何轻量级卷积模型(例如,(Chollet,2017;Iandola et al.,2016;Howard et al.,2017;Sandler et al.,2018;Zhang et al.,2018b;Ma et al.) .,2018))。 同时,语义分支采用快速下采样策略来提升特征表示的水平并快速扩大感受野。 高级语义需要大的感受野。 因此,语义分支采用全局平均池化(Liu et al., 2016)来嵌入全局上下文响应。
图 3 双边分割网络概述。 主要由三个部分组成:紫色虚线框中的双路主干、橙色虚线框中的聚合层以及黄色虚线框中的增强部分。 双路径主干有一个细节分支(蓝色立方体)和一个语义分支(绿色立方体)。 Detail Branch中的三个阶段分别有C1、C2、C3通道。 语义分支中相应阶段的通道可以通过因子 λ(λ < 1) 进行轻量化。 语义分支的最后阶段是上下文嵌入块的输出。 同时,立方体中的数字是特征图大小与输入分辨率的比率。 在聚合层部分,我们采用双边聚合层。 Down表示下采样操作,Up表示上采样操作,ψ是Sigmoid函数,表示逐元素乘积。 此外,在助推器部分,我们设计了一些辅助分割头来提高分割性能,而无需任何额外的推理成本。
3.3 Aggregation Layer
细节分支和语义分支的特征表示是互补的,其中一个分支不知道另一个分支的信息。 因此,聚合层被设计为合并两种类型的特征表示。 由于快速下采样策略,语义分支输出的空间维度小于细节分支。 我们需要对语义分支的输出特征图进行上采样,以匹配细节分支的输出。
有几种融合信息的方式,例如简单求和、串联和一些精心设计的操作。 考虑到准确性和效率,我们尝试了不同的融合方法。 最后,我们采用双向聚合方法,如图3所示。
4 双路语义分割网络
我们的 BiSeNet 的概念是通用的,可以用不同的卷积模型来实现(He et al., 2016; Huang et al., 2017; Chollet, 2017; Iandola et al., 2016; Howard et al., 2017; Sandler 等人,2018;Zhang 等人,2018b;Ma 等人,2018)以及任何具体设计。 主要有三个关键概念:(i)细节分支具有高通道容量和浅层,对空间细节的感受野较小; (ii)语义分支具有较低的通道容量和较深的层次,对分类语义具有较大的感受野。 (iii)一个高效的聚合层被设计来融合这两种类型的表示。
在本小节中,根据提出的概念设计,我们展示了整体架构的实例和其他一些具体设计,如图 3 所示。
4.1 Detail Branch
表1中细节分支的实例化包含三个阶段,每层都是一个卷积层,后面是批量归一化(Ioffe和Szegedy,2015)和激活函数(Glorot等,2011)。 每个阶段的第一层的步长 s = 2,而同一阶段的其他层具有相同的滤波器数量和输出特征图大小。 因此,该分支提取的输出特征图是原始输入的 1/8。 由于通道容量高,该细节分支编码丰富的空间细节。 由于高通道容量和大空间维度,残差结构(He et al., 2016)会增加内存访问成本(Ma et al., 2018)。 因此,该分支主要遵循 VGG 网络的哲学(Simonyan 和 Zisserman,2015)来堆叠层。
4.2 Semantic Branch
考虑到大感受野和高效计算的同时,我们设计了语义分支,受到轻量级识别模型哲学的启发,例如 Xception (Chollet, 2017)、MobileNet (Howard et al., 2017; Sandler et al. 2017)。 ,2018;Howard 等人,2019),ShuffleNet(Zhang 等人,2018b;Ma 等人,2018)。 语义分支的一些主要特征如下。
Stem Block
受到(Szegedy et al., 2017; Shen et al., 2017; Wang et al., 2018b)的启发,我们采用Stem Block作为语义分支的第一阶段,如图4所示。它使用两种不同的下采样 缩小特征表示的方式。 然后将两个分支的输出特征连接起来作为输出。 该结构具有高效的计算成本和有效的特征表达能力。
图 4
干块和上下文嵌入块的图示。 (a)是Stem Block,采用快速下采样策略。 该块有两个分支,以不同的方式对特征表示进行下采样。 然后将两个分支的特征响应连接起来作为输出。 (b) 是上下文嵌入块。 如 3.2 节所示,语义分支需要大的感受野。 因此,我们设计了一个具有全局平均池化的上下文嵌入块来嵌入全局上下文信息。 符号:Conv是卷积运算。 BN 是批量归一化。 ReLu是ReLu激活函数。 Mpooling 是最大池化。 GPooling是全局平均池化。 C表示串联。 同时,1 × 1、3 × 3 表示核大小,H × W × C 表示张量形状(高度、宽度、深度)。
Context Embedding Block
正如 3.2 节中所讨论的,语义分支需要大的感受野来捕获高级语义。 受到(Yu et al., 2018b;Liu et al., 2016;Zhao et al., 2017;Chen et al., 2017)的启发,我们设计了上下文嵌入块。 该块使用全局平均池化和残差连接(He et al., 2016)来有效地嵌入全局上下文信息,如图 4 所示。
图 5 倒置瓶颈和收集扩展层的图示。
(a)是MobileNetv2中提出的移动端倒瓶颈Conv。 当步长 = 2 时,虚线快捷路径和求和圆不存在。(b)(c) 是建议的收集和扩展层。 瓶颈结构采用:(i)3×3卷积来收集局部特征响应并扩展到更高维空间;(ii)在扩展层的每个单独输出通道上独立执行3×3深度卷积; (iii) 1×1 卷积作为投影层,将深度卷积的输出投影到低通道容量空间中。 当步幅= 2时,我们在主路径上采用两个内核大小= 3深度的卷积,并采用3×3可分离卷积作为捷径。 符号:Conv是卷积运算。 BN 是批量归一化。 ReLu是ReLu激活函数。 同时,1×1、3×3表示核大小,H×W×C表示张量形状(高度、宽度、深度)。
Gather-and-Expansion Layer
利用深度卷积的优势,我们提出了收集和扩展层,如图 5 所示。收集和扩展层包括: (i) 3×3 卷积,用于有效聚合特征响应 并扩展到更高维度的空间; (iii) 在扩展层的每个单独输出通道上独立执行 3 × 3 深度卷积; (iv) 1×1 卷积作为投影层,将深度卷积的输出投影到低通道容量空间中。 当stide = 2时,我们采用两个3×3深度卷积,进一步扩大感受野,并采用一个3×3可分离卷积作为捷径。 最近的工作(Tan et al., 2019; Howard et al., 2019)大量采用 5 × 5 可分离卷积来扩大感受野,在某些情况下比两个 3 × 3 可分离卷积具有更少的 FLOPS。 在这一层中,我们将可分离卷积中的 5 × 5 深度卷积替换为两个 3 × 3 深度卷积,这样具有更少的 FLOPS 和相同的感受野
与 MobileNetv2 中的倒置瓶颈相反,GE 层多了一个 3×3 卷积。 然而,该层对于计算成本和内存访问成本也很友好(Ma et al., 2018; Sandler et al., 2018),因为 3 × 3 卷积在 CUDNN 库中进行了专门优化(Chetlur et al., 2018)。 2014;马等人,2018)。 同时,由于这一层,GE层比倒置瓶颈具有更高的特征表达能力。
图6 双边引导聚合层的详细设计。
符号:Conv是卷积运算。 DWConv 是深度卷积。 APooling是平均池化。 BN 表示批量归一化。 上采样意味着双线性插值。 Sigmoid 是 Sigmoid 激活函数。 Sum的意思是求和。 同时,1×1、3×3表示内核大小,H×W×C表示张量形状(高度、宽度、深度),表示元素级乘积。
4.3 Bilateral Guided Aggregation
有一些不同的方式来合并两种类型的特征响应,即逐元素求和和串联。 然而,两个分支的输出具有不同级别的特征表示。 细节分支适用于低级别,而语义分支适用于高级。 因此,简单的组合忽略了两类信息的多样性,导致性能较差且难以优化。
基于观察,我们提出双边引导聚合层来融合来自两个分支的互补信息,如图6所示。该层利用语义分支的上下文信息来指导细节分支的特征响应。 通过不同尺度的指导,我们可以捕获不同尺度的特征表示,这本质上编码了多尺度信息。 同时,与简单的组合相比,这种引导方式使得两个分支之间能够进行高效的通信。
Booster Training Strategy
为了进一步提高分割精度,我们提出了增强训练策略。 顾名思义,它类似于火箭助推器:可以在训练阶段增强特征表示,在推理阶段可以丢弃。 因此,它在推理阶段增加的计算复杂度很小。 如图3所示,我们可以将辅助分割头插入到语义分支的不同位置。 在5.1节中,我们分析了不同插入位置的效果。 图 7 展示了分割头的细节。 我们可以通过控制通道维度Ct来调整辅助分割头和主分割头的计算复杂度。
5 实验
5.1 Ablative Evaluation on Cityscapes
我们首先具体探讨各个路径的影响。 表 2 中的前两行说明了仅使用一个路径的分割准确性和计算复杂性。 细节分支缺乏足够的高层语义,而语义分支则缺乏低层空间细节,导致结果不理想。 图8说明了对Detail Branch的空间细节的逐渐关注。 表2中的第二组表明,两个分支的不同组合都比单一路径模型更好。 两个分支都可以提供互补的表示以实现更好的分割性能。 仅语义分支和细节分支仅达到 64.68% 和 62.35% 的平均 IoU。 然而,通过简单的求和,语义分支可以给细节分支带来6%以上的提升,而细节分支可以为语义分支带来4%以上的提升。 这一观察表明,两个分支的表示是互补的。
聚合方法。 我们还研究了两个分支的聚合方法,如表2所示。为了有效且高效的聚合,我们设计了双边引导聚合层,它采用高层语义作为指导来聚合多尺度的低层 细节。 我们还展示了两种没有双边引导聚合层作为朴素聚合基线的变体:两个分支输出的求和和串联。 为了公平比较,求和和串联的输入分别通过一个可分离的层。 图 9 演示了详细分支、语义分支以及两个分支的聚合的可视化输出。 这说明细节分支可以提供足够的空间细节,而语义分支则捕获语义上下文。 表3说明了语义分支设计的一系列分析实验。
语义分支的通道容量。 正如 3.2 节和 4.2 节所讨论的,语义分支负责高级语义,而不关心空间细节。 因此,语义分支可以做得非常轻量级,并且信道容量较低,这通过信道容量比λ来适应。 表4a说明了不同λ的详细比较实验。
不同的 λ 会给仅细节基线带来不同程度的改进。 即使当 λ = 1/16 时,语义分支的第一层也只有 4 个通道维度,这也给基线带来了 6% (62.35% → 68.27%) 的提升。 在这里,我们使用 λ = 1/4 作为默认值。
语义分支的块设计。 继先驱工作(Sandler 等人,2018 年;Howard 等人,2019 年)之后,我们设计了一个收集和扩展层,如第 4.2 节中讨论并如图 5 所示。主要改进包括两方面: (i) 我们在 MobileNetV2 的反向瓶颈中采用一个 3 × 3 卷积作为收集层,而不是一个逐点卷积(Sandler et al., 2018); (ii) 当步幅 = 2 时,我们采用两个 3×3 深度卷积来替代 5×5 深度卷积。
表 4b 显示了我们的模块设计的改进。 收集和扩展层可以扩大感受野以有效捕获高级语义
GE层的膨胀率。 GE Layer中的第一个3×3卷积层也是一个扩展层,它可以将输入投影到高维空间。 它在内存访问成本方面具有优势(Sandler et al., 2018; Howard et al., 2019)。 的扩展比例可以控制该层的输出维度。 表 4c 研究了不同 的影响。 令人惊讶的是,即使 = 1,语义分支也可以将基线平均 IoU 提高 4% (62.35% → 67.48%),这验证了轻量级语义分支是高效且有效的
强化训练策略。 我们提出了一种增强训练策略来进一步提高分割精度,如第 4.4 节中所述。 我们在训练阶段将图7所示的分割头插入语义分支的不同位置,在推理阶段将其丢弃。 因此,它们在推理阶段增加的计算复杂度很小,类似于火箭的助推器。 表4显示了不同位置插入分割头的效果。 我们可以看到,booster训练策略可以明显提高分割精度。 我们选择表4第三行的配置,它在不牺牲推理速度的情况下,将平均IoU进一步提高了3%以上(69.67% → 73.19%)。 基于此配置,我们采用在线引导策略(Wu et al., 2016)来进一步提高性能。
5.2 Generalization Capability
在本节中,我们主要探讨我们提出的架构的泛化能力。 首先,我们研究表 5 中更宽的模型和更深的模型的性能。接下来,我们用一些其他通用的轻量级模型替换语义分支,以探索表 6 中的兼容性能力。
在本节中,我们主要探讨我们提出的架构的泛化能力。 首先,我们研究表 5 中更宽的模型和更深的模型的性能。接下来,我们用一些其他通用的轻量级模型替换语义分支,以探索表 6 中的兼容性能力。对大型模型的推广。 虽然我们的架构主要是针对轻量级任务(例如实时语义分割)而设计的,但 BiSeNet V2 也可以推广到大型模型。 我们主要从两个方面扩展架构:(i)更宽的模型,由宽度乘数α控制; (ii) 更深的模型,由深度乘数 d 控制。 表5显示了具有不同宽度乘数α和不同深度乘数d的更宽模型的分割精度和计算复杂度。 根据实验,我们选择 α = 2.0 和 d = 3.0 来构建我们的大型架构,称为 BiSeNetV2-Large,它实现了 75.8% mIoU 和 GFLOPs。
与其他型号的兼容性。 BiSeNetV2 是一个具有两个分支的通用架构。 在这项工作中,我们为语义分支设计了一些特定的块。 语义分支可以是任何轻量级卷积模型(He et al., 2016; Howard et al., 2017)。 因此,为了探索我们架构的兼容性能力,我们对不同的通用轻量级模型进行了一系列实验。 表6显示了不同模型的组合结果。
5.3 Performance Evaluation
和其他sota相比
cityscapes
Camid