SAM(2023)-分割万物


论文: 《Segment Anything》
github: https://github.com/facebookresearch/segment-anything

摘要

作者构建到目前为止最大分割数据集,包括1billion mask及11M image,该模型训练过程是可提示的,所有可以进行zero-shot任务,甚至超越之前全监督结果。

算法

在这里插入图片描述

SAM结构如图4,包括:图像编码器、灵活的prompt编码器、mask解码器
Image encoder:
使用MAE预训练的ViT

Prompt encoder:
prompt分为两种:sparse (points, boxes, text) and dense (masks)。使用位置编码与可学习embedding相加表征points及boxes,使用clip中文本编码器编码text;对于稠密prompt(masks),使用卷积embedding并与image embedding逐像素相加。

Mask decoder:
映射image embedding、prompt embedding、output token至mask。Transformer decoder跟随一个动态mask预测头,decoder block使用prompt self-attention及cross-attention(prompt2img、img2prompt)更新所有embedding。两个block结束后上采样image embedding,通过MLP映射output token至动态线性分类器,计算每个像素前景概率。

Resolving ambiguity:
仅有一个输出,对于模棱两可prompt,模型将平均多个有效mask。为解决此问题,对于一个prompt,作者进行预测多个输出,如图3.分为三个层级:whole、part、subpart。训练过程中仅反向传播最小loss。为了对mask排序,模型对每个mask预测置信度得分(比如估计IoU)
在这里插入图片描述

Efficiency:
给出处理过的image embedding,在web浏览器prompt encoder及mask encoder运行在50ms内,达到实时交互。

Losses and training:
作者使用focal loss与dice loss的线性结合监督预测mask。作者使用混合prompt训练提示性分割任务,每个mask中随机采样11轮prompt来模拟交互,使 SAM能够无缝集成到数据引擎中。

数据引擎

数据引擎有三个阶段:
1、模型辅助的人工标注;
2、自动化预测mask及模型辅助标注;
3、模型生成mask,无需人工;

Assisted-manual stage
借助基于SAM的交互分割工具,人工点击前景或背景目标点进行标注mask。仅标注能够命名及描述的目标,无需收集这些文本信息,按照重要性进行顺序标定目标。
该阶段的SAM使用开源分割数据集训练,当收集足够多数据后,使用新标注数据训练。锁着数据的收集,image encoder逐渐扩大,作者训练了6次模型,每个mask标注耗时从34秒下降到14秒**。该过程收集了4.3M mask及120k image**。

Semi-automatic stage
为了增加模型分割万物的能力,让标注者关注不太重要目标,即模型未预测mask。该阶段收集5.9M mask及180k image

Fully automatic stage
该阶段标注可完全自动化,归因于模型的两个强化点:收集足够多的mask改进模型;关注模棱两可目标的模型,使用32*32个网格点,每个点预测一系列有效目标相关的mask。

实验

7.1 零样本单点生成mask

在这里插入图片描述

真值mask在所有数据集上并未全部标注,因此原始评估结果不可信,作者补充标准mIoU评估方案,其中标注者对mask质量进行打分。
在23个数据集上,使用常规评估方案mIoU,SAM与RITM结果对比如图9a,SAM在16个数据集超越RITM,如果选用最相关的3个mask,而不是置信度最高的mask,性能够将全部超越RITM,如图9a中圆点所示,说明模棱两可目标对评估方案影响。
图9b展示标注人员对mask人工评分结果
图9c展示选取目标中心点,SimpleClick、FocalClick、RITM及SAM结果。
图9d展示随机选取点生成mask效果。

7.2 零样本边缘检测

使用16*16个规则网格前景点提示SAM生成768个预测mask,通过NMS除去多余mask,利用Soble算子计算边缘map。可视化结果如图10,
在这里插入图片描述
在BSDS500数据集实验结果如表3。
在这里插入图片描述

7.3. 零样本目标Proposals

以SAM输出mask作为proposal,最大1000个进行评估,实验结果如表4,ViTDet-H整体效果最佳,但是其在LVIS数据集训练过
在这里插入图片描述

7.4. 零样本实例分割

通过目标检测器(ViTDet)生成预测框,以此提示SAM输出mask。实验结果如表5,SAM比ViTDet效果略差,但SAM未在该数据集训练
在这里插入图片描述

7.5. 零样本文本生成Mask

SAM训练过程作者进行更改使其关注文本。具体地:对于100*100以上mask,使用CLIP提取image embedding,训练过程中使其提示SAM,因此推理时可使用CLIP文本embedding进行提示SAM生成mask。【个人认为不合理,image embedding与text embedding之间存在gap,因此效果不佳】
实验结果如图12,对于一些prompt难以分割正确目标,需要增加point辅助。
在这里插入图片描述

7.6. 消融实验

在这里插入图片描述
图13左展示仅使用自动标注数据比三阶段逐步训练效果低0.5,但训练复杂度降低
图13中展示数据规模影响,使用SA-1B数据集10%数据训练与全量训练效果相当;
图13右展示图像编码器使用VIT-H改善明显。

讨论

基础模型新范式:在大规模数据集训练,自适应小规模数据集下游任务;

限制:

  1. SAM泛化性不足;
  2. 由于复杂image encoder原因SAM无法做到实时;
  3. 文本引导mask仅进行初步探索,不够鲁棒;
  4. 目前还不清楚如何设计简单提示实现语义及全景分割;

结论:

SAM是语义分割基础模型时代的一次尝试;
本文贡献主要为:

  1. 一个新任务:提示性分割;
  2. 模型:SAM
  3. 数据集:SA-1B

猜你喜欢

转载自blog.csdn.net/qq_41994006/article/details/130392992