论文阅读笔记: Segment Anything
文章目录
- Segment Anything
- 摘要
- 引言
- 任务
- 模型
- 数据引擎
- 数据集
- 负责任的人工智能
- Segment Anything Model
- 图像编码器
- 提示编码器
- mask解码器
- 解决歧义
- 损失和训练
Segment Anything
论文地址: https://arxiv.org/abs/2304.02643
代码地址:https://github.com/facebookresearch/segment-anything
项目地址: https://segment-anything.com/
摘要
- 介绍了Segment Anthing项目: 用于图像分割的新任务、模型和数据集。
- 构建了迄今为止最大的分割数据集,其中11M张图片包含1Bmask图。
- SAM的设计和训练具有快速性,因此可以将zero-shot转移到新的图像分布和任务重。
引言
- 在网络规模上预训练的大语言模型正通过强大的zero-shot和few-shot泛化彻底改变NLP。经验趋势表明,zero-shot和few-shot随着模型训练规模、数据集大小和总计算量的增加而改善。
- 计算机视觉领域也对基础模型进行了探索,尽管程度很小。尽管在视觉和语言编码器方便取得了很大的进展,但计算机视觉还包含超出此范围的广泛问题,而且对于其中许多问题,并不存在丰富的训练数据。
- 文章的目标是构建图像分割的基础模型。即希望开发一个可提示的模型,并使用能够实现强大泛化的任务在广泛的数据集上对其进行预训练。
- 计划的成功取决于三个组成部分: 任务、模型和数据。为了解决它们,解决了以下有关图像分割的问题:
- 什么任务将实现zero-shot泛化?
- 对应的model架构是什么?
- 哪些数据可以为该任务和模型提供支持?
- 针对上面的问题,首先定义一个提示分割任务,它足够通用,可以提供强大的预训练目标并支持广泛的下游应用程序。该任务需要一个支持灵活提示的模型,并且可以在提示时实时输出分段mask以允许交互使用。
任务
- 在NLP和视觉中,基础模型是一个有前景的发展,通常可以通过使用"提示"技术对新数据集和任务执行zero-shot和few-shot。
- 提出了提示分割任务,其目标是在给任何给定分割提示的情况下返回有效分割mask。
- 提示可以包括标识对象的空间或文本信息。有效输出mask的要求意味着即便提示不明确并且可能引用多个对象,输出也应该是合理的mask至少其中一个对象。
模型
- 实时的分割任务和实际使用的目标对模型架构施加了约束。特别是模型必须支持灵活的提示,需要分摊实时计算mask以允许交互使用,并且必须是模糊性感知。
- 作者发现一个简单的设计满足了所有三个约束: 强大的图像编码器计算图像embedding, 提示编码器嵌入提示,然后将两个信息源组合在预测分割mask的轻量级mask解码器中。此模型成为分段任意模型(SAM)。
- 通过将SAM分成图像编码器和快速提示编码器/mask解码器,可以通过不同的提示重复使用相同的图像embedding(及其成本分摊)。
数据引擎
- 为了实现对新数据分布的强泛化,有必要在大量且多样化的mask上训练SAM,超出任何现有的分割数据集。
- 构建一个"数据引擎", 用于获取数据。数据引擎分为三个阶段: 辅助手动、半自动和全自动。在第一阶段,SAM协助注释者注释mask。第二阶段,SAM可以通过提示可能得对象位置来自动为对象子集生成mask,而注释器则专注于注释其余对象,从而帮助增加mask多样性。最后阶段,用前景点的规则网格提示SAM, 每个图像平均生产约100个高质量掩码。
数据集
最终数据集SA-1B包含来自11M许可和隐私保护的图像超过1B个mask。SA-1B使用数据引擎的最后阶段完全自动收集,其mask比任何现有分割数据集多400x。
负责任的人工智能
SA-1B中的图像跨域了地理和经济上不同的国家,且SAM在不同人群中表现相似。
Segment Anything Model
SAM具有三个组件: 图像编码器、灵活提示编码器和快速mask解码器。基于Transformer视觉模型构建,并针对实时性能进行了特定权衡。
图像编码器
受可扩展性和强大的预训练方法的推动,SAM使用MAE预训练的ViT最低程度地适应处理高分辨率输入。
提示编码器
考虑两组提示: 稀疏(点、框、文本)和密集(mask)。通过位置编码来表示点和框,并用CLIP中现成的文本编码器为每种提示类型和自由格式文本学习embedding求和。密集提示使用卷积进行嵌入,并与图像嵌入按元素求和。
mask解码器
mask解码器有效地将图像embedding、提示embedding和输出词符映射到mask。此设计采用了Transformer解码器块的修改,后跟动态mask预测头。修改后的解码器块在两个方向上使用实时自注意力和交叉注意力来更新所有embedding。运行两个块后,对图像embedding进行上采样,并且MLP将输出词符映射到动态现行分类器,然后计算每个图像位置的mask前景概率。
解决歧义
对于一个输出,如果给出不确定的提示,模型将对多个有效mask进行平均。为了解决这个问题,修改模型以预测单个提示的多个数超出mask。大多数情况下输出3个mask就足以。子啊训练过程中,仅反向传播mask上的最小损失。为了对mask进行排名,模型预测每个mask的置信度得分(预估的IoU)
损失和训练
使用焦点损失和骰子损失的现行组合来监督mask预测。使用几何提示的混合来训练可提示的分割任务。通过在每个mask的11轮随机采样提示来模拟交互式设置,从而使SAM能够无缝集成到数据引擎中。