轻量级分割网络:Bisenet & stdc

学长推荐 (13-14/20)

BiSeNet

img

BiSenet 的想法是,把一个分辨率的图片从两个路径去考虑:一部分是空间路径,这部分负责保留空间位置的信息,留着的是高分辨率的分辨图,就是通过三个简单的卷积层把图像划分到 $\frac{1}{8}$ 的大小;另一部分是语义路径,这部分通过把图片进行下采样,然后得到 $\frac{1}{16}$ 和 $\frac{1}{32}$ 的高级语义信息之后通过 ARM 和 FFM 进行融合,来达到好的分割效果。

里面比较有用的module 是 ARM,这个 module 其实本质上是在做通道自注意力,因为他先进行了一个全局池化,然后是逐点卷积,这个意思就是获取全局的语义信息,至于这边为什么叫 attention 我的理解是:这里通过 1x1 conv 和 BN 和 sigmoid 得到了一个 attention 向量(对应的是 attention 机制中的 $\text{softmax}(QK^{T})$)然后这里因为是逐点卷积,所以是做的通道的注意力。

接下来是 FFM,顾名思义这个模块是负责把两部分的信息融合在一起。首先先把两部分的信息 concat 到一起,然后做一个 conv 合并信息,接下来做的工作和 ARM 基本上一样,其实也是在做一个通道注意力,然后相乘。做完注意力之后再 shortcut 一下。

这个网络轻量化的点在于,右边语义路径可以直接用轻量级网络,比如 mobilenet,然后两个注意力模块计算量其实都不大,因为只是对通道进行注意力,所以计算量相对小。左边也是只用了三个 conv 层,也没用到残差链接结构,反正计算量还挺小的。论文后面说如果你语义这部分换上大一点的模型,那么效果还能更好,我觉得就是因为很显性引入了 spatial path 这部分。

stdc

image-20250924144338954

motivation:由于添加额外的路径获取底层特征会耗费大量时间,并且辅助路径通常很缺乏低层信息的引导。作者设计了一种叫做 STDC 模块的结构,用较小参数获得可变 & 可拓展的感受野。然后通过把模块引入到 U-net 架构里来形成 STDC 网络。设计高效分割方法的两种思路:轻量化主干网络 / 多分支架构,本文就属于第一种。

网络架构图:image-20250924145134675

(b) 就代表的是 STDC 模块,其中 ConvX 代表的是 Conv-BN-RELU 的合并,M 是输入通道数,N 是输出通道数。在阶段 1 ~ 4 里面,第 $i$ 个区块卷积层的通道数为 $\frac{N}{2^i}$ ,最后一个和倒数第二个保持一致。

我们注意到这里的通道数其实是递减的,因为作者觉得,在分类任务里高维需要保留比较多的通道;但是在语义分割任务里,更关注可扩展的感受野和多尺度信息,低维反而需要更多通道来编码更多细粒度的信息吗,高维如果保留相同通道数会导致信息冗余。最后通过一个跳连吧所有信息整合到一起。

注意一下当 stride不等于1 的时候,会通过一个平均池化层下采样到同样的尺寸。

在整个网络的设计中,在 stage 1 & 2 的时候仅仅使用一个卷积快,经验说明这是足够的。每个阶段第一个卷积块下采样,后续则是保证分辨率不变。image-20250924152030840

对于 Decoder 的设计,以 STDC 网络作为骨干,同时使用 BiSenet 的上下文路径来编码上下文信息:

image-20250924152142127

这里的想法其实和 Bisenet 差不多,首先 context info 这边同样是在 stage 4,5(对应 $\frac{1}{16},\frac{1}{32}$ ) 经历两个 ARM之后传入 FFM,并且对于 Stage5,利用一个avg pool得到全局语义信息。至于 spatial info,直接采用 stage 3 $\frac{1}{8}$ 的空间信息传进去。最后 8x 上采样。得到的特征图被送进 seg head里面进行分割。seg head 是一个 3x3 卷积 + Bn + ReLU + 1x1 conv 组成的。

论文引入了一个关键模块:细节指导模块,从分割头得到的图,这里通过一个拉普拉斯算子处理分割图,这个东西我猜是提取边缘信息的?但是我不知道为什么

和舍友夜聊的时候大概搞懂了拉普拉斯算子:把图像看成函数,然后 Δx 是像素,对二维变量求导的话只需要利用到xy轴相邻四个点求x,y二阶导,如果从灰度值角度去考虑,那么边缘之间会有几种情况:斜坡、孤立点、线和台阶。一阶导数只能刻画粗边缘,二阶导数才能反应出精细细节,![6f39bde07568552a388289f05d717a42](C:\Users\B1359\Documents\Tencent Files\1359446223\nt_qq\nt_data\Pic\2025-09\Ori\6f39bde07568552a388289f05d717a42.png)

通过这个我们可以知道,那么对应矩阵就是:

010
1-41
010
但是实际上应用我们会考虑周围八个像素,也就是卷积核:
111
1-81
111

然后由于边缘进入退出二阶导方向相反,所以把拉普拉斯卷积核之后的结果取绝对值归一化做法就是对的

接下来通过不同步幅的卷积求出来不同尺度的细节信息,并且用一个 1x1 卷积核融合,实现动态权重分配。最后因为边界检测是需要一个阈值的,这里取 0.1

关于细节这部分loss的计算,因为像素稀少不能使用交叉熵,用的是二元交叉熵和 dice loss 一起训。

实验的话,(分类)这里除了关注 mIoU,还额外关注了 fps 这个指标。但是这里用的是 SGD 而不是 adam🤔

作者也进行了消融实验证明四个 STDC 模块是最好的,并且测了一下有细节指导在不降低速度的情况下提升 mIoU.

轻量级分割网络:Bisenet & stdc

https://doubeecat.cn/post/stdc/

作者

Doubeecat

发布于

2025-09-17

更新于

2025-11-10

许可协议