精彩介绍
做实时分割的同学一定对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块作为语义分支的第一阶段,如图4所示。它使用两种不同的向下采样方式来缩小特征表示,然后将两个分支的输出特性串联起来作为输出。该结构具有高效的计算成本和有效的特征表达能力。
语义分支需要大的感受野来捕获高级语义。因此设计了上下文嵌入块。该块使用全局平均池和剩余连接有效地嵌入全局互文信息,如图4b所示。
为了利用深度卷积的优点,提出了集合-扩展层,如图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的详细信息。
四、是骡子是马拉出来遛遛——实个验
(1)细节分支:
图8为详细分支的不同阶段的可视化,显示了对细节分支的空间细节的逐渐关注。
(2)语义分支:
语义分支的通道容量、语义分支的Block、扩展ratio
(3)Bilateral Guided Aggregation layer
(1)CITYSCAPE:
(2)CamVid:
(3)实际效果:
五、必须来个 华丽的总结
(1)简化了原始结构,提出了一种高效的实时语义分割体系结构。去掉了原来版本中耗时的跨层连接,得到了更清晰、更简单的架构。
(2)重新设计了整体架构,网络结构更加紧凑,组件设计更加合理。具体来说,深化细节路径来编码更多细节,设计了基于深度卷积的轻量级语义路径组件。同时,提出了一个高效的汇聚层来增强这两条路径之间的相互连接。