论文地址:https://arxiv.org/abs/2107.06278
代码:还没找
一、提出原因
基于mask的分类可以对于语义分割和实例分割可以采用统一的模型、loss、训练策略和优化方案吗?
基于mask的分类是否优于per-pixel的分类方法?
二、创新点
三、方法
3.1 掩码分类
(1)将图片划分(是在一张图上划分还是分多个通道呢?)成个区域,并不需要等于,用二值mask表示:
(2)将每个区域视为一个整体,与类别的分布产生联系。
i.e. 为了mask分类:定义所需输出是个概率-掩码对:
这里的概率,还存在一个不属于任何类别,即"no object"类的概率。
训练mask分类任务,真实的gt为:
这里的c是第i个区域的真实类别,并且一般设置z的个数>zgt的个数,所以用“no object”填充实现z和zgt的一对一匹配。
对于分割任务,基本的match方法是:第i个预测与带有i的真实标签的gt匹配,如果没有在gt中则与“no object”匹配。发现a bipartite matching-based的方法更好,使用class和mask预测,比如:。其中的mask loss 由cross-entropy和binary mask loss组成。
3.2 MaskFormer
整个模型有三部分:
(1)像素级模块:提取per-pixel embeddings(用于产生二值mask);
backbone将input image(h * w)提取特征 (cf * h/s * w/s),解码器逐步上采样成per-pixel embeddings (ce * h * w)。
注意:任意的per-pixel classifica-based seg模型都适用于像素级模块的设计(包括最近的各种transformer,这一步就实现了将模型无缝转换到mask classification)。
(2)trans模块:decoder的堆叠(计算个embedding);
使用特征 和 (可学习的位置embeddings:具体是啥玩意??:好像是encoder生成的。看后面有点像是之前说到的分成的n个区域的编码然后拉成token?)
生成per-segment embedding 来进一步生成 类别概率预测。
(3)分割模块:产生最后的预测。
通过带有两个隐藏层的mlp生成 mask embedings ;
与第i个 进行点乘得到二值掩码预测 。