论文:https://arxiv.org/pdf/2107.06278.pdf
代码:MaskFormer
目录
1.背景
2.掩膜分类算法
2.1基于像素分类算法
2.2基于掩膜分类算法
2.3MaskFormer
2.3.1像素级模块
2.3.2transformer 模块
2.3.3分割模块
2.4掩膜分类推理
3.实验
3.1语义分割
整理不易,欢迎一键三连!!!
1.背景
图像语义分割问题一直以来都被当做一个像素级分类问题解决的。我们发现,把语义分割看成一个mask classification问题不仅更自然的把语义级分割(semantic-level segmentation)和实例级分割(instance-level segmentation)联系在了一起,并且在语义分割上取得了比像素级分类方法更好的方法。我们提出的MaskFormer模型在语义分割(ADE20K, 55.6 mIoU)和全景分割(COCO-panoptic, 52.7 PQ)上都取得了新的SOTA结果。
我们的一个重要发现:掩膜分类能有效解决语义分割和实例分割问题,事实上,在FCN之前,语义分割表现最好的方法是像O2P和SDS这样使用掩膜分类计算的算法。带着2个问题进入下面的学习:一个单独的掩膜分类模型能否简化语义和实例分割任务的前景呢?一个掩膜分类模型能优于现有的基于像素分类的算法吗?
为了解决这两个问题,我们提出了一种简单的MaskFormer方法,可以将现有的任意基于像素分类的算法无缝转换成掩膜分类算法。
可以从这张图上看到,左边的图中表示了 基于每个位置用相同的分类损失的像素分类的语义分割,右边的图中表示基于掩码分类预测一组二值掩码,并为每个掩码分配一个类。
2.掩膜分类算法
2.1基于像素分类算法
对于一个H*W大小的输入影像,基于像素分类算法目标是预测每个像素点被分成K个类别中的某一类,即:
?
其中K为类别数。真实label为:
loss为:
2.2基于掩膜分类算法
掩膜分类任务可以被分成2个任务:
- 将图像划分为N个区域(N不需要等于K),用二值掩膜表示。
- 对每个区域作为一个整体划分到K个类别中,注意,允许多个区域划分成相同类别,使得该算法能应用到语义和实例级分割任务中。
为了训练模型,需要计算预测值和真实值之间的匹配度,我们假设预测的结果为:
,
K+1是因为有一类是背景。
真实label为:
为第i个真实分割块的类别,所以预测的,真实的
,这两者尺寸是不同的,我们假设 ,并给真实值填充一组背景允许一对一匹配。
对语义分割来说,如果预测的区域数量 N 与类别标签的数量 K 相匹配,那么简单的固定匹配是可能的。因此,第 i 个预测与具有类别标签 i 的真实区域相匹配,如果预测区域i的类别在真实label中不存在,则与背景匹配。在我们的实验中,我们发现基于二分匹配的分配比固定匹配效果好。
计算损失,我们通过下式来表示:
2.3MaskFormer
2.3.1像素级模块
输入图像(H*W)在经过骨干网络之后,通常都会得到低分辨率的特征图(),像素级模块中的pixel decoder模块会将特征图上采样到大小,注意,任何基于像素分类的分割模型都适合像素级模块设计,包括最近的基于 Transformer 的模块。MaskFormer 将此类模型无缝转换为掩膜分类模型。
2.3.2transformer 模块
Transformer 模块使用标准的 Transformer 解码器 来计算图像特征F 和 N 个可学习的位置embedding(即query)其输出是 N 个分割embedding编码成每个分割的全局信息 MaskFormer预测。
2.3.3分割模块
在sofmax之后使用线性分类器,在每个分割embedding上,以产生每个分割的类别概率预测。对mask预测,采用2层隐层的MLP将分割embedding转换成mask embedding,最后,通过对mask embedding和pixel embedding操作计算得到经过点操作的mask的二值预测值,这里的点操作指的是sigmoid激活函数。
2.4掩膜分类推理
通常的分割推理是将图像按像素对每个像素值划分到N个类别中的某一类,划分的方式是先将每个像素计算N个类别的预测概率,然后用argmax函数求N个可能性的最大值,即此像素的分类类别。对语义分割来说,共享的几个分割块类别标签可以合并,对实例分割来说,这些分割块的标签不合并即可。每个像素的预测概率计算:
我们发现概率掩码对的边缘效果比普通分割推理的香酥鸡分类效果更好。然而,我们观察到
直接最大化每个像素类的概率会导致性能不佳。 我们假设,梯度均匀分布到每个query,但这使训练复杂化。每个像素类的概率计算:
3.实验
3.1语义分割