前言
MaskFormer系列论文发展的大致脉络如下图所示。
2017年Transformer的提出为图像检测、分类和分割任务提供了新思路。
2020年DETR将Transformer引入到目标检测领域,提出了Query Based的端到端目标检测算法,去除了NMS / anchor等人工先验,把目标检测看作一个集合预测问题。
2021年MaskFormer借鉴DETR的思路,将语义分割和实例分割的问题统一定义为mask分类问题,去除NMS / anchor等人工先验,把实例分割看作一个集合预测问题。
2021年底,mask2former的提出对maskformer进一步改进。
mask2former在maskformer的基础上主要做了3个方面的改进。
- 在Transformer Decoder中交换自注意力(self-attention)和交叉注意力(cross-attention)的顺序(称为“masked attention"),加速模型的收敛并提高性能
- 使用多尺度高分辨率特征,把pixel decoder的不同层作特征金字塔分别输入到transformer decoder的不同层中,帮助模型分割小目标 / 区域
- 在K个采样随机点而非全图上计算mask loss,在不影响性能的前提下,将训练内存节省了3倍,从每张图像18GB到6GB。
1. 模型整体结构
模型整体结构与MaskFormer大体一致,由三个部分组成:
- backbone特征提取器
- pixel decoder
- Transformer decoder
如下图所示,左侧是MaskFormer结构图,右侧是Mask2Former结构图。Mask2Former主要针对Transformer decoder部分进行了改进。
2. Transformer decoder模块的改进
如下图所示,左侧图是DETR论文中提出的标准Transformer decoder,右侧图是Mask2former中提出的改进后的Transformer decoder。
主要在标准Transformer decoder上做了4个修改:
-
输入到第一个自注意力层的Query的初始化与图像特征无关,对其进行自注意力操作并不会产生任何有意义的特征。所以,交换了self-attention和cross-attention的顺序,先让Query与图像特征做交叉注意力操作。
-
除了query和image feature外,将mask也输入到decoder中。原本是每个像素和整张图做attention,现在这个像素只和都是query的像素做attention,也就是只要前景目标间做attetion背景不需要参与。
-
使Query特征 X 0 X_0 X0也是可学习的,并且直接受到mask loss的监督。类似于Faster RCNN和Mask RCNN中的区域建议网络RPN,可学习的Query预测能够生成mask proposal。
-
decoder中不使用dropout。因为dropout没有必要,还会降低性能。(在小数据集上是否会导致过拟合?)
3. 加入多尺度特征
使用pixel decoder生成的分辨率分别为1/32、1/16和1/8的不同尺度的特征层,输入到不同的Transformer decoder层中。每层中添加一个正弦位置embedding(借鉴DETR)和一个可学习的尺度级embedding(借鉴Deformable DETR)。作为特征金字塔,提升小目标的识别效果。
4. 随机采样计算loss
借鉴PointRend和Implicit PointRend,在二分图匹配损失和最终损失计算中使用采样点计算mask 损失。文中设置 K = 112 × 112 = 12544 K = 112 \times 112 = 12544 K=112×112=12544。
- 在构建二分匹配成本矩阵的匹配损失中,对于所有预测掩码和GT掩码,使用均匀采样抽取相同的K个点。
- 计算最终loss时,对于不同的预测和GT,使用重要性采样抽取不同的K个点
不在整张图上计算loss,而是使用随机采样的方法在少量采样点上计算mask loss可以提升训练效率、加快速度。