【语义分割】11、Rethinking BiSeNet For Real-time Semantic Segmentation

论文: https://arxiv.org/abs/2104.13188

代码: https://github.com/MichaelFan01/STDC-Seg

出处:CVPR2021
在这里插入图片描述

一、背景

现有的语义分割方法,如 Deeplabv3、psp、Segnet等,虽然都取得了较好的效果,但都需要很大的计算开销。

在轻量化语义分割方面,有两个主要方向:

  • lightweight backbone

    DFANet,DFNet等

  • multi-branch architecture

    ICNet、BiSeNetv1、BiSeNetv2

二、动机

BiSeNet V1 虽然使用multi-path的结构,将低层的detail和高层的semantic进行了组合,但获得低层信息的分支非常耗时,辅助path经常缺乏低层信息的指导。

三、方法

本文作者提出了一个手工网络来提升推理速度、提升网络可解释性。

STDC module(Fig3(b)):首先提出了一个 STDC 模块,来使用很少的参数获取多尺度和感受野信息

STDC networks:将 STDC module 嵌入U-net里边来得到

3.1 Design of Encoding Network

3.1.1 STDC module

特点:

  • 只有第一个block的卷积核大小为1x1,其余都为3x3

  • 浅层通道多,深层通道少

    原因:

    • 分类任务中,深层的通道比浅层多,深层的高级语义信息对分类任务更加重要;
    • 分割任务中,需要同时关注深层和浅层信息。浅层(小感受野)需要足够多的通道来提取更多精细的信息,高层(大感受野)通道如果和浅层一样多的话,会造成冗余,所以高层通道越来越少。
  • 只有 Block2 进行了下采样

  • 为了丰富特征,作者使用了跳连(skip-path)将 x1 到 xn 的特征进行了concat,concat之前会使用 3x3 的average pooling 将特征图下采样到相同大小。

STDC module 的两个优势:

  • 作者以几何级数的方式来降低滤波器的大小,显著降低了计算复杂度
  • 最后使用concat的方式融合了所有block的输出,保留了多尺度感受野和多尺度信息。

3.1.2 Network Architecture:

network 结构图如图 3(a) 所示,由 6 个 stage 组成,stage1~stage5 都进行了下采样,stage6进行全连接。每个stage里边的第一个STDC会进行二倍下采样,其他STDC将会保持分辨率不变。

STDC network 如表2所示:

3.2 Decoder

3.2.1 Segmentation Architecture

在这里插入图片描述
如图4(a)所示,作者使用stage 3、4、5来生成下采样比率分别为 1/8、1/16、1/32的特征图。然后使用全局平均池化来得到语义信息。之后,使用U-shape结构来对全局特征进行上采样,并且和stage4、stage5的进行结合(在encoder阶段)。

context info 和 spatial info 的结合使用:

在最后的语义分割预测阶段,作者使用了 Feature Fusion Module (bisenetv1),来融合来自encoder 的 stage3 (1/8大小) 和 decoder 的stage3的特征,作者认为来自这两个 stage 的特征其实是代表了不同尺度的特征。encoding 的特征有更多的细节信息,decoding的特征有更多的语义信息(由于其来自于 global average pooling)。

Seg Head 的构成:一个 3x3 conv+bn+relu,再跟一个 1x1 卷积,输出维度为类别数量

Loss:cross entropy loss

4、Detail Guidance of Low-level Features

BiSeNet 的spatial path 的特征如图5(b)所示,对比 backbone 的低层特征(如 stage3),spatial path包含了更多细节信息,如边缘、角点。

因为本文是 single-stream 的,所以作者提出了一个 Detail Guidance Module 来引导低层学习空间信息。

方法:将细节预测建模为一个二值分割任务

  • 使用 Laplacian operator 从 segmentation gt 生成 detail gt(Fig4©)
  • 在 stage3 中插入 Detail Head,来生成 detail feature map(Fig4(a))
  • 将detail gt 作为真值,指导低层来学习空间细节信息,学习后的可视化效果图如 Fig5(d),可以看出其已经学到了很多类似于Fig5(b) 的细节
  • 最后,将学习到了detail features 和来自于 decoder 的 deep block 的context 特征进行融合。

Detail gt generation: 如 Fig4© 所示,作者使用 Detail Aggregation module 生成细节真值图:

  • 首先使用不同stride的2D卷积(named laplacian kernel,Fig4(e)),产生不同尺度的soft thin detail 特征图
  • 然后将这三个特征图上采样到原始尺寸,并使用一个 1x1 卷积来进行动态融合
  • 最后,使用阈值0.1来将预测结果转化为二值gt图

Detail loss:

已知细节图像中,detail pixel 远远少于 non-detail pixel,所以 detail 的预测是一个类别不均衡问题,由于weighted cross-entropy loss 是比较粗糙的,所以我们使用binary cross-entropy & dice loss联合学习。

Dice loss 度量预测和真值的重合率,且该 loss 对前景/背景的个数不敏感,可以缓解类别不均衡问题

Detail Head:如 Fig4(b) 所示,Detail Head 产生 detail map,detail map 可以指导浅层对空间信息编码

  • 组成:一个 3x3 conv-BN-Relu,后接一个1x1cov
  • 使用:只在 train 阶段使用,test 阶段不使用,所以测试阶段不会带来另外的耗时

四、实验

4.1 消融实验

1、Effectiveness of STDC module

作者通过实验验证了在 STDC 中使用4个 block 是最优的,多的话 FPS 会急剧下降。

2、Effectiveness of backbone

3、Effectiveness of Detail Guidance

stage 3 的 heatmap feature map 如 Fig6 所示,可以明显的看出有 Detail guidance 的(c)列,比(b)列包含了更多的空间细节信息,定量的分析如 Table 4 所示。
在这里插入图片描述

4.2 和 SOTA 方法对比

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Vision Transformer被用于语义分割是通过结合SETR(Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers)方法来实现的。SETR是基于Transformer的语义分割模型,它采用了Vision Transformer来对图像进行编码和特征提取,然后使用Transformer的解码器来生成语义分割结果。 在Vision Transformer中,图像被分割成固定大小的图块,每个图块被表示为一个向量序列。通过将图块的向量序列输入到Transformer的编码器中,Vision Transformer能够捕捉到图像中的全局和局部的特征信息。 使用Transformer的解码器来生成语义分割结果的过程是,在编码器输出的基础上,通过自注意力机制(Self-Attention)和多头自注意力机制(Multi-Head Self-Attention)对特征进行融合和调整,然后将调整后的特征映射到语义分割结果的空间中。这样,Vision Transformer可以将图像的不同区域和像素之间的语义关系进行建模,从而实现语义分割的目标。 总结起来,Vision Transformer用于语义分割的过程是通过将图像分块并使用编码器提取特征,然后使用Transformer的解码器对特征进行调整和融合,最后生成语义分割结果。这种方法结合了Transformer在序列建模方面的优势和Vision Transformer在图像编码方面的优势,能够在语义分割任务中取得较好的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [语义分割系列26-VIT+SETR——Transformer结构如何在语义分割中大放异彩](https://blog.csdn.net/yumaomi/article/details/125676811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值