[论文阅读]BiSeNet V2: Bilateral Network with Guided Aggregation for Real-time Semantic Segmentation
前言
光看名字,看到Guided Aggreagation感觉又是一个使用attention的(全局特征指导局部特征)?
Abstract
问题的提出:
现有的加速model的方法大部分都是牺牲低等级的特征细节,这会导致精度大大下降。
所以作者提出了分开处理空间细节和语义信息(也就是用两个网络)
所以建立的网络将包括下面的结构:
-
细节分支,将会有宽通道和浅层数去捕捉低等级的特征和生成高像素的特征表示
-
语义分支,将会有窄通道和深层数去获得高等级的语义,语义分支通过减少通道数和采用快速下采样的策略,所以参数量也比较少(语义信息需要较大的感受野)
-
设计了一个Guided Aggregation Layer 去引导这两个特征图融合
-
采取了一个增强训练的策略,并且不需要任何额外的推理开销(DS)
Introduction
现有的语义分割模型:
-
Dilation Backbone 去掉了下采样和上采样(因为会损失信息),而改为用步长大于1的卷积代替,同时不断加大通道数来维持高像素特征表示
-
Encoder-Decoder 使用从上到下和跳跃连结的方式(通常用下采样和上采样,然后上采样后用对称的Encoder层中的特征图来补充损失的信息)
问题:
模型都不关心速度,只关心精度
解决方法:
-
减小图片的输入尺寸(ICNet)
-
减小通道数
作者的假设:
- 在实时检测之中,可以分别处理空间信息和语义信息,从而达到速度和精度的平衡
Core Conception of BiSeNetV2
网络的大致结构如下图
Detail Branch
-
需要用充足的空间通道去捕捉丰富的空间信息
-
因为Detail Brach 只是专注与低等级的特征,所以步长的设计要小,层数要浅
-
网络有较大的大小和宽通道,最好不要用耗时间的residual connecttions
Semantic Branch
-
Semantic Branch 捕捉高等级的语义,虽然细节捕捉能力差,但是可以由Detial Branch提供,同时作者设置
-
语义分支可以是任何轻量级的卷积模型,同时采用了快速下采样的方法
构成
观察一下,我们发现,Detail Branch和VGG差不多(把maxpool去掉换成了stride = 2的COnv)
Stem 和 CE(注意到居然还有个GE)
Stem Block:
-
采用了两个不同的减小图片的方法(stride = 2 Conv and stride = 2 maxpool),然后concentrate到一起
-
作用感觉是突出最大特征?但又不想过于极端
CE
-
采用了全局平均池化和残差连结
-
3 * 3 的GAP是什么东西?
GE(Gather and Expansion Layer)
一共有三种选择
-
第一种也就是mobilenetv2的结构,其中残差的那块在步长等于2时是没有的
-
(b)和©是作者自己提出来的Gather and Expansion Layer,从1 * 1的卷积换成了3 * 3的从而更好的聚集信息
当步长为2时,则通过图©的结构。采用两个3 * 3的深度可分离卷积的原因是为了让感受野更大(等同于5 * 5,计算量更小),同时cuda专门对3 * 3 卷积做了优化,在时间上也很优秀
Aggregation Layer
使用了bidirectional aggregation
两个特征的等级是不一样的,所以不能直接融合,我们需要把两个特征通过一些卷积操作还原到能够相加的等级,具体的操作如上图。
感觉像是相互指导?
Segmentation Head
用来输出预测的语义图,使用辅助分类器,可以有效的解决梯度消失问题。
实验设计
尝试了不同的特征融合的方法(OHEM?)
-
通道相加会比直接相加要来的高
-
语义特征图之中直接输出结果效果比细节特征图要来的高
从左到右表示
-
不同取值对结果的影响,发现的时候最好
-
- 展示了有无GE Layer 中第一个3 * 3 卷积
- 展示了用 5 * 5 的DW 和 用 两个 3 * 3 DW的区别
- 展示了GE Layer中第一个卷积用 1 * 1 和 3 * 3 的区别
-
在GE中深度可分离卷积中拓展因子的不同取值影响,最好
结论
-
最大的影响是在深度可分离卷积前使用卷积融合通道
-
使用 两层3 * 3 和一层 5 * 5卷积的区别
-
然后是使用 1 * 1 和 3 * 3 的区别
探究了不同位置的辅助分类器对于网络的影响,但并没有说明辅助分类器在最终loss中的权重占比
通过直接绘制图像,证明了两个网络确实是一个在关注细节,一个在识别语义(图像怎么绘制的?)
(感觉如果这是在加了辅助分类器之后对应的输出特征图,感觉是理所当然的…辅助分类器都在语义网络这边)
探究了将模型扩大之后的影响
- 加大Detail Network的channel wide
- 加深Semantic Network的层数
探究了Semantic Network用不同的backbone的影响
之后的实验对比了一些当年在不同数据集上的State-of-the-art的网络,表格有点大,可以从原文去找
总结
不得不说这篇论文的实验部分太充足了,从各个方面考虑了自己设计的模块的提升。
创新点:
-
双流网络处理语义和细节(让我想到了视频分类)
-
新设计的模块
- GE(mobilenetv2 改1 * 1 卷积,在步长为2的时候用两层3 * 3卷积增大感受野)
- 多层深监督(感觉不算创新点)
- 语义特征图指导细节特征图融合(使用双流融合,一个通过DWConv,一个通过Conv)
- 使用了Stem Block(又是双流) 和 CE Block