MaskFormer
Mask classification formulation
用mask classfication的方法
step1: 把图像分为K个区域(k不一定需要等于类别数),这个region可以用mask(取值0-1)来表示。被遮住的不算这个区域内,没有被遮住的图像部分就是这个region
step2:将每个区域作为一个整体与 K +1个类别上的某种分布相关联(其实就是softmax求概率),K+1是为了添加一个no-object类,表示某个region不属于class中的任何一类
step3:定义出gd类(根据gd得出的,mask and label)
然后我们的目标就是把output
跟gd Z做出一一对应,表示属于某个类以及其mask,然后最小化这个损失
loss函数:由两部分组成 1是cls loss 2是这一类的mask的loss
MaskFormer
模型显著性的分成了3部分:
pixel module
简单的downsampling,用backbone提特得特征图
transformer module
从feature 和 query(N个可学习的位置EMB)来获取最后的输出Q
Q的维度是CQ* N , N是query的数目,CQ是特征维度,也就是所谓的global infor about each segment Maskformer predict
seg module
从transformer decoder出来之后,我们可以视Q为集合了很多特征的结果(类似于卷积里的特征图,有了特征图就能对其进行GAP然后预测什么的)
第一个操作就是过一个linear,然后接一个softmax做类别预测
这个网络用cls loss去约束
第二个操作是过一个2个隐藏层的mlp,然后把特征转换为mask的特征(CQ->CE)
通过和upsamping出来的特征做内积,用sigmoid激活,得到一个N H W的mask预测 (N是region数,HW是高宽),用binary mask loss去约束
这个2维和3维在通道数上相乘可以视为通道融合(1*1卷积)
Infer()
没有gd了现在,挑最大的
经过两个linear,我现在得到了
cls N * (K+1)
mask N H W
这样我就得到我理想的output Z (pi , mi) (i=1,2,....,N)
现在我们要做的就是,把每一个点分进某个Z里面,然后这个Z的类别就是argmax Pi
General infer
取每一个Z中 argmax P的 label Cj scorei = Pi(cj)* mi【h,w】 (pixel level)
然后我有N个Z,我取其中的score max的pair i,把这个像素点分到这个(pair)中,这个pair的类别(cls)就是argmax pi对应的 label