精彩介绍
做实时分割的同学一定对BiseNetv1比较熟悉,是2008年旷视提出的综合精度和速度比较好的一个网络。时隔两年,又看到这个熟悉的名字。
BiseNet2出来了!在Cityscapes可达 72.6%mIoU,速度为156 FPS!性能优于DFANet、SwiftNet等网络。
新投在了CVPR,文章放在了axiv上。
文章链接:
https://arxiv.org/abs/2004.02147
代码即将开源:
https://github.com/ycszen/BiSeNet
一、先bai huo两句 :摘个要
low-level细节和high-level语义都是语义分割任务所必需的。但是,为了加快模型推理,当前的方法几乎总是牺牲low-level细节,这会导致精度显著下降。该文提出了一种高效且有效的体系结构,在速度和准确性之间进行了很好的权衡,这被称为双边分割网络(BiSeNet V2),分别处理这些空间细节和分类语义,以实现实时语义分割的高精度和高效率。
该架构涉及:
(i)一个细节分支,具有宽通道和浅层,以捕获low-level细节并生成高分辨率特征表示;
(ii)语义分支,具有狭窄的通道和较深的层,以获取高级语义上下文。由于减少了信道容量和快速下采样策略,语义分支是轻量级的。
(iii)设计了一个引导聚合层,以增强相互连接并融合两种类型的要素表示。
(iv)还设计了一种增强训练策略来提高分割性能,而无需任何额外的推理成本。
大量的定量和定性评估表明,与几种最新的实时语义分割方法相比,所提出的体系结构具有良好的性能。具体来说,对于2048x1,024的输入,BiseNet2在Cityscapes测试集中的平均IoU达到72.6%,在一张NVIDIA GeForce GTX 1080 Ti卡上的速度为156 FPS,这比现有方法要快得多,而且可以实现更好的分割精度。
有没有流口水...
下面就来一探究竟!
二、犹抱琵琶半遮面——相关核心概念
:题目还挺押韵!
2.1 Detail Branch 细节分支
细节分支负责空间细节。
该分支需要丰富的信道容量来编码丰富的空间细节信息。同时,因为细节分支只关注底层细节,所以可以为这个分支设计一个小跨度的浅层结构。总体而言,细节分支的关键概念是使用wide宽通道和shallow浅层来处理空间细节。
此外,该分支的特征表示具有较大的空间尺寸和较宽的信道。因此,最好不要采用residual连接,这样会增加内存访问成本,降低速度。
2.2 Semantic Branch 语义分支
语义分支旨在捕获高级语义。
语义分支和细节分支的比率为λ(λ< 1),这使得这个分支量级比较轻。语义分支可以是任意一种轻量级的卷积模式,同时采用快速下采样策略,提高特征表示的层次,快速扩大感受野。高级语义需要较大的感受野,因此,语义分支使用全局平均池来嵌入全局上下文响应。
2.3 Aggregation Layer
细节分支和语义分支的特征表示是互补的,其中一个分支不知道另一个分支的信息。因此,设计了一个聚合层来合并这两种类型的特性表示。
由于快速向下采样策略,语义分支的输出空间维数小于细节分支。因此需要对语义分支的输出特征图进行上采样,以匹配细节分支的输出。
融合信息有几种方式,例如简单的求和、连接和一些精心设计的操作。在考虑精度和效率的前提下,作者采用了双向聚合的方法,如图3所示。
三、天不早了 该入正题了——BiseNet快现原形
3.1 Detail Branch
表1中细节分支的实例化包含三个阶段,每一层都是卷积层,然后是批处理归一化和激活函数。每个阶段的第一层的步长为2,而同一阶段的其他层具有相同数量的过滤器和输出特征映射大小。因此,这个分支提取的输出特征映射是原始输入的1/8。由于信道容量大,这一细节分支编码了丰富的空间细节。由于信道容量大,空间维度大,resnet结构将增加内存访问成本。因此,该分支主要遵循VGG网的原理进行分层。
每个阶段S包含一个或多个操作opr(例如,Conv2d、Stem、GE、CE)。每个操作有一个大小为k的内核,步长s和输出通道c,重复r次。扩展因子e用于扩展操作的通道数。这里的通道比λ= 1/4。在和细节分支的对应的stage,绿色字体标志着语义分支的通道更少。
注:conv2d表示卷积层,后面是一个批处理的归一化层和relu激活函数。Stem表示Stem块。GE代表采集-扩展层。CE是上下文嵌入块。
3.2 Semantic Branch
考虑到感受野大同时计算量大,作者重新设计了语义分支,其主要特征如下:
- Stem Block
采用Stem块作为语义分支的第一阶段,如图4所示。它使用两种不同的向下采样方式来缩小特征表示,然后将两个分支的输出特性串联起来作为输出。该结构具有高效的计算成本和有效的特征表达能力。
- Context Embedding Block
语义分支需要大的感受野来捕获高级语义。因此设计了上下文嵌入块。该块使用全局平均池和剩余连接有效地嵌入全局互文信息,如图4b所示。
- Gather-and-Expansion Layer
为了利用深度卷积的优点,提出了集合-扩展层,如图5所示。采集-扩展层包括:
(i) 一个3×3的卷积,有效地对特征响应进行聚合并扩展到高维空间;
(ii) 在膨胀层的每个单独的输出通道上独立进行3×3深度卷积;
(iii) 以1×1的卷积作为投影层,将深度卷积的输出投影到一个低信道容量空间。当stride=2时,采用2个3×3的深度卷积,进一步扩大了感受野,1个3×3的可分离卷积作为shortcut。
在这一层,作者用两个3×3深度卷积代替可分离变量卷积中的5×5深度卷积,这两个3×3深度卷积有更少的FLOPs,感受野相同。
3.3 Bilateral Guided Aggregation
该层利用语义分支的上下文信息来指导细节分支的特征响应。通过不同的尺度指导,可以捕获不同的尺度特征表示。同时,与简单的组合方式相比,这种引导方式可以使两个分支之间进行有效的通信。
3.4 Booster Training Strategy
为了进一步提高分割精度,提出了一种增强训练策略。顾名思义,它类似于火箭助推器:它可以在训练阶段增强特征表示,在推理阶段可以丢弃。在推理阶段增加的计算复杂度很小。如图3所示,可以将辅助分割head插入到语义分支的不同位置。图7显示了分割head的详细信息。
四、是骡子是马拉出来遛遛——实个验
- Ablative Evaluation on Cityscapes 消融实验
(1)细节分支:
图8为详细分支的不同阶段的可视化,显示了对细节分支的空间细节的逐渐关注。
(2)语义分支:
语义分支的通道容量、语义分支的Block、扩展ratio
(3)Bilateral Guided Aggregation layer
- Generalization Capability 和现有模型的比较:
(1)CITYSCAPE:
(2)CamVid:
(3)实际效果:
五、必须来个 华丽的总结
- 与BiseNetv1的比较:
(1)简化了原始结构,提出了一种高效的实时语义分割体系结构。去掉了原来版本中耗时的跨层连接,得到了更清晰、更简单的架构。
(2)重新设计了整体架构,网络结构更加紧凑,组件设计更加合理。具体来说,深化细节路径来编码更多细节,设计了基于深度卷积的轻量级语义路径组件。同时,提出了一个高效的汇聚层来增强这两条路径之间的相互连接。
- 主要贡献如下:
- 提出了一种有效的双通道结构,称为双边分割网络,用于实时语义分割,它分别处理空间细节和范畴语义。
- 在语义分支上,设计了一个新的基于深度卷积的轻量级网络来增强接受域和获取丰富的互文信息。
- 在不增加推理代价的前提下,引入了增强训练策略,进一步提高了分割性能。
- 在Cityscapes测试集上获得了72.6%的平均IoU,在一张NVIDIA GeForce GTX 1080Ti卡上获得了156 FPS的速度。