
论文链接:https://arxiv.org/abs/2203.12612
本文是对语义分割传统编解码逐像素分类范式的一种思考和改进。
之前语义分割的工作将其视作一种逐像素分类任务,主流范式是编解码结构,通过编码器和解码器学习逐像素表征后,通过对每个像素单独分类到不同的类别中从而获得预测的语义掩码结果。这篇文章选择了另一种策略,即将结构信息作为先验直接构造语义掩码然后逐步细化,而不再是按照逐像素分类的范式。
具体来看,对于给定的输入图像,模型中可学习的结构token会和图像表征进行交互,从而推理出最终的语义掩码。这一思路和最初的ViT结构中的cls token的行为颇为类似。考虑到这份工作的实现是基于ViT-L,所以可以很直观的推想出,StructToken的思路其实是将Transformer原本的形式向语义分割这样的密集预测任务的一种“直接”迁移,这其中并没有像其他工作那样,过多受到目标任务中原始的卷积神经网络设计范式的影响。
所以值得思考的几点可以由此提出:
- 本文定义的结构信息是什么?
- 提出的设计是怎样表达出这些结构信息的?
- 如何验证这些设计带来的提升与所谓的结构信息有关?
相关工作

现有的语义分割领域已经出现了大量的工作,但是目前出现的工作中基本上都可以被归类为逐像素分类范式,差别主要在于分类参数是否是动态的:
- 静态逐像素分类:延续着以分割领域早期基于卷积神经网络的经典工作的范式,例如FCN。他们主要利用上下文语义信息的增强和多尺度特征的融合,从而获得更有效的图像特征表示。并利用独立的静态分类器(典型如1x1卷积)实现逐像素的语义类别预测。然而这类工作专注于提升逐像素特征的表达能力,却并未在模型设计中考虑图像中的结构信息。
- 动态逐像素分类:最近的工作中开始引入动态结构的思想。除了模型本身特征处理结构之外,分类器也开始转变为动态形式。论文列出的典型的工作有Segmenter[Segmenter: Transformer for semantic segmentation]、MaskFormer[Per-pixel classification is not all you need for semantic segmentation]、Mask2Former[Masked-attention mask transformer for universal image segmentation]和K-Net[K-Net: Towards unified image segmentation]。他们主要是使用了一系列与语义类别相关的可学习的token,与图像自身的特征进行交互,从而实现最终mask的预测。这从形式上来看,可以认为是一种动态分类的过程。这些方法同时由没有完全抛弃上面提到的经典范式,整体上获得了更好的表现。但是从本文的角度来看,这类方法仍然没有抛开逐像素分类的范式:)。
这些工作从整体上来看, 都是在学习针对每一类的线性判别函数,要么是静态的卷积,要么动态的矩阵乘法运算。这会作用在逐像素的特征表示上,从而来为其赋予一个最相关的语义类别。
作者们认为,按照人识别物体的过程,先是捕获语义类别的结构信息(形状等),然后关注于内部细节。想要分割图像中不同语义类别的区域,通常先根据结构生成一个粗略的mask,之后在调整mask的细节。现有的两种逐像素分类范式并没有充分的体现这一过程,而更多的是,直接在模型倒数第二层的特征图上分类像素从而获得得分图。这一特性鼓励网络优化单一像素的表征,而忽略甚至破坏了最重要的结构特征。
本文中作者们提出了一种结构先验范式来解决这一问题,直接从结构token中构造得分图来分割图像,然后逐渐细化。
主要内容

文中主要研究了如何从特征图中根据结构token提取有用的信息。提出的结构整体遵循这样的过程:
- 提取特征:使用Transformer骨干网络,例如ViT,提取特征图F,大小为[C,H/16,W/16]。
- 构造结构token:随机初始化可学习的结构token S,大小为[K,N],K为数据集类别数量,N为patch数量,即[H/16,W/16]。
- 信息交互:使用交互结构来处理S。捕获特征图中的结构信息,并根据学习到的先验为每一类构建粗略的mask。
- 特征细化:独立的FFN用于结构token的细化,并处理特征图。
- 级联处理:堆叠多个基础单元(包括交互和细化)来重复处理特征。
- 预测结果:尾部使用两个卷积层和跳过链接构成的卷积块来细化最终构建的分割mask并得到最终的结果。
这些步骤中,交互式结构的设计是本文的核心。文中主要探索了三种交互式结构。其中包含两种动态结构和一种静态结构。
- 动态结构:基于Attention的思路,但是计算相关的token并非是空间patch,而是基于通道,即S中的类别token和F中的特征通道之间的交互。
- 第一种CSE基于Cross-Attention范式,经过线性变换,S生成Query,F生成Key和Value,送入Cross-Attention。这里得到的结果与S形状一致。按照图示,这里也有个拆分操作,但是论文并未明说具体如何实现。
- 第二种SSE基于Self-Attention范式,S和F沿通道拼接后经过线性变换得到Query、Key和Value,并送入Self-Attention。结果会被按照通道的原始比例进行拆分。
- 静态结构:直接使用1x1卷积处理SSE模块中的相似性注意力的计算。卷积结果即为最终对应于拆分之前的结果。这一过程使用1x1卷积直接混合不同的输入通道的信息,实现了类似于SSE的过程。
上面结构中在执行Attention操作之前,S和F会被送入投影层处理,虽然是针对通道的Attention处理,但是这里的投影层使用的是1x1卷积+3x3深度卷积+1x1卷积的形式,仍然是空间维度共享的操作。
这些模块的两个输出都会各自接一个FFN。这里的FFN使用的是FC+3x3分组卷积+FC的结构。即可以细化局部特征,也可以看作是一种隐式位置编码。
内容中包含的图片若涉及版权问题,请及时与我们联系删除


评论
沙发等你来抢