Fast-SCNN语义分割网络详解
Posted AI 菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fast-SCNN语义分割网络详解相关的知识,希望对你有一定的参考价值。
文章目录
一、简要介绍
本文发布于BMVC2019,是由英国东芝研究院Rudra、Stephan和剑桥大学Roberto共同完成的。本文的亮点是提出了一种快速的语义分割网络 Fast-SCNN,对于高分辨率(1024×2048)图像,在 NVIDIA Titan XP GPU 上测试表明,在Cityscapes数据集上的mIOU达到68.0%,速度达到123.5帧/秒。
二、主要贡献
本文主要的贡献,有以下几个方面:
- 调整了捷径连接,提出了一个浅层的learning to downsample模块,可以快速而高效地通过multi-branch来提取低层次特征。
- 验证了大规模的预训练不是必须的,也可以通过加大训练的轮数来达到接近的效果。
- 融合了经典编解-码器框架和多分支框架的思想,提出了一个新的实时语义分割架构Fast-SCNN。
三、相关背景
语义分割通常由具有编码器-解码器框架的深度卷积神经网络(DCNN)来处理,而许多运行时高效的实现采用双分支或多分支体系结构。
通常情况下,对于设计语义分割网络架构来说,需要注意以下几个方面:
- 较大的感受野对于了解对象类之间的复杂关联(即全局上下文)非常重要
- 图像中的空间细节是保持对象边界所必需的
- 需要特定的设计来平衡速度和准确性
(1)编码器-解码器架构
编码器利用卷积和池化操作提取深度卷积网络特征,解码器从低分辨率特征上恢复空间信息,然后通过像素分类层(softmax)来预测物体标签。其中,编码器通常采用VGG、ResNet来构建,解码器则上采样模块来构建。
下面是经典的编码器-解码器架构,最开始的语义分割网络就是采用这种结构,比如FCN、SegNet、UNet等语义分割网络。
(2)多分支结构
在双分支网络中: 在低分辨率输入分支下,使用较深的CNN来捕捉全局上下文;在全分辨率输入分支下,采用较浅的分支来学习空间细节;然后,通过合并两者来提供最终的语义分割结果。通过这种设计方式,降低了网络的计算成本,使其能在一般GPU上实时运行。
下面是经典的多分支结构,采用这种的架构的语义分割网络实时性能一般都比较高,比如ICNet、ContextNet、BiSeNet 和 GUN 等一些语义分割网络。
(3)Fast-SCNN
本文提出的Fast-SCNN是一种融合了经典编解-码器框架和多分支框架的实时语义分割算法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210716132204984.png#pic_center
四、网络架构
Fast-SCNN的整体网络架构如下所示,由四部分组成:学习下采样模块、全局特征提取器、特征融合模块和标准分类器,所有模块都采用深度可分离卷积构建。
(1)学习下采样模块
在学习下采样模块中,采用了三层的结构。只使用了三层来确保低级特征共享的有效性和高效实施。第一层是标准卷积层(Conv2D),其余两层是沿深度可分离的卷积层(DSConv)。这里我们要强调的是,虽然DSConv的计算效率更高,但是在第一层仍然采用Conv2D,因为输入图像只有三个通道,这使得DSConv的计算优势在这个阶段微不足道。
学习下采样模块中的所有三层都使用了步长为2、卷积核大小为3×3的卷积层,卷积层之后是批归一化和RELU激活函数。
(2)全局特征提取器
全局特征提取器模块旨在捕获用于图像分割的全局上下文。与对输入图像的低分辨率版本进行操作的普通两分支方法相比,我们的模块直接将学习的输出带到下采样模块(它是原始输入的1/8分辨率)。
模块的详细结构如表1所示。我们使用了从 MobileNet-V2 引入的 bottleneck residual block(表2)。特别是,当输入和输出大小相同时,我们对bottleneck residual block残差连接。我们的bottleneck residual block使用了高效的深度可分离卷积,从而减少了参数和浮点运算的数量。此外,在末尾添加了一个金字塔池模块(PPM) ,以聚合基于不同区域的上下文信息。
(3)特征融合模块
与 ICNet 和 ContextNet 类似,通过简单地融合不同branch的特征以确保有效性。或者,可以以运行时性能为代价使用更复杂的特征融合模块(例如Bisenet),以达到更高的精度。特征融合模块的详细信息如表3所示:
(4)标准分类器
在分类器中,我们采用了两个深度可分离卷积(DSConv)和逐点卷积(Conv2D)。我们发现,在特征融合模块之后增加几层可以提高准确率。分类器模块的详细信息如表1所示。
在训练期间使用Softmax,因为使用了梯度下降。在推理过程中,我们可以用argmax替换昂贵的softmax计算,因为这两个函数都是单调递增的。我们将此选项表示为Fast-SCNN cls(分类)。另一方面,如果需要基于标准DCNN的概率模型,则使用SoftMax,表示为Fast-SCNN Prob(概率)。
五、实验结果
(1)实验环境与参数设定
使用Python在TensorFlow机器学习平台上进行了实验。我们的实验是在NVIDIA Titan X(Maxwell)或NVIDIA Titan XP(Pascal)GPU、CUDA 9.0和CuDNN v7的工作站上进行的。运行时评估在单个CPU线程和一个GPU中执行,以测量正向推理时间。
使用动量为0.045,批量为12的随机梯度下降(SGD)。受[4,37,10]的启发,我们使用Poly学习率,基数为0.045,幂为0.9。类似于MobileNet-V2,我们发现深度卷积不需要L2正则化,对于其他层L2正则化参数是0.00004。
由于用于语义分割的训练数据有限,实验中应用了各种数据增强技术:0.5到2之间的随机大小调整、平移/裁剪、水平翻转、颜色通道噪声和亮度。我们的模型是在交叉熵损失的情况下训练的。我们发现,学习结束时的辅助损失对下采样和具有0.4权重的全局特征提取模块是有利的。
在每个非线性函数之前使用批量归一化。Dropout仅用于最后一层,恰好在Softmax层之前。与MobileNet和ContextNet相反,我们发现Fast-SCNN使用RELU训练速度更快,精度略高于ReLU6,即使使用我们在整个模型中使用的深度可分离卷积也是如此。
(2)在 Cityscapes 上的实验效果
Cityscapes 是城市道路上最大的公开可用的数据集。该数据集包含从欧洲50个不同城市拍摄的各种高分辨率图像(1024×2048px)。它有5000张高标签质量的图像:2975张的训练集、500张的验证集和1525张的测试集。
在 Cityscapes 测试集上评估整体性能,与其他实时语义分割方法(ContextNet、BiSeNet、GUN、ENET 和 ICNet)和离线语义分割方法(PSPNet 、DeepLab-V2)的比较,平均精确度mIOU如下图所示:
分别在英伟达 Titan X 和 Titan Xp(带*号)上进行测试,测得其与不同分割网络的检测速度对比:
(3)在弱标签上测试性能
采用弱标签Coarse、预训练模型ImageNet的形式,进行了几组不同的实验,实验结果对比如下表所示:
从实验结果可以看出,在低容量DCNN上附加弱标记数据进行训练,没有对性显著的改善。
(4)大规模预训练测试结果
下图是采用弱标签Coarse、预训练模型ImageNet训练过程中的测试数据:
从图中可以看出,不管是采用弱标签Coarse,还是预训练模型ImageNet的方式,最终的准确度都趋于一样。所以,通过本实验可以反映出:弱标签Coarse,预训练模型ImageNet对于低容量的Fast SCNN作用不大,甚至,只要训练的时间足够久,不经过Coarse或ImageNet进行训练的模型可以达到相同的效果。
最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!
以上是关于Fast-SCNN语义分割网络详解的主要内容,如果未能解决你的问题,请参考以下文章