SAM
2025-08-08
这是我的 Segment Anything Model(SAM)学习笔记
参考文献:Kirillov et el.,Segment Anything,arXiv:2304.02643
1. 简介
Segment Anything Model(SAM) 是图像分割领域的一个重要突破,被设计为一个通用的基础模型(foundation model),其目标是实现 通用的、基于提示的图像分割,并具备 零样本泛化能力(zero-shot generalization),即可以在无需再训练的情况下对从未见过的对象进行分割。
SAM 引入了一个关键概念:可提示分割(promptable segmentation)。分割任务由提示(prompt) 决定,如点击点、边界框或初始掩膜,模型据此输出目标区域的掩膜。
SAM 使用一个超大规模的数据集 SA-1B 进行训练,从而具备了跨领域和任务的泛化能力。
2. 核心思想与设计原则
2.1 可提示分割(Promptable Segmentation)
SAM 将图像分割重新定义为一个条件任务。模型并不直接输出整张图的分割图,而是接受一个表示“希望分割什么”的提示,输出对应的分割掩膜。
支持的提示类型包括:
- 点(Point):前景/背景点击
- 边界框(Box)
- 掩膜(Mask):可选的粗略分割
该设计带来了如下优势:
- 支持交互式分割
- 具备良好的组合性,可嵌入下游系统
- 实现了零样本迁移能力
2.2 基础模型思路(Foundation Model Perspective)
SAM 借鉴了 NLP 中 BERT、GPT 等基础模型的训练理念:
- 在大规模、多样化数据上预训练一次
- 能够无须微调地应用于多种任务
- 模块化结构便于扩展和组合
SAM 被定位为一个通用图像分割引擎。
2.3 解耦架构(Decoupled Design)
SAM 将图像处理与提示处理解耦:
- 图像编码器负责一次性地提取图像特征
- 提示编码器独立处理提示信息
- 掩膜解码器融合图像与提示信息生成掩膜
这种结构带来以下优势:
- 支持快速推理,图像特征可重复使用
- 对同一图像的多个提示处理高效
- 有利于系统的模块化部署
3. 模型结构总览
SAM 主要由三个模块组成:
模块 | 作用 |
---|---|
图像编码器 | 提取图像的稠密特征表示 |
提示编码器 | 编码空间提示信息(点、框、掩膜等) |
掩膜解码器 | 综合图像与提示特征,生成分割掩膜 |
3.1 图像编码器(Image Encoder)
- 使用主干网络:ViT-Huge(ViT-H)
- 输入分辨率:1024×1024
- 输出为:64×64 的 patch token 网格
图像编码器仅需对输入图像执行一次前向推理,其输出特征可在多个提示条件下复用,实现高效推理。
3.2 提示编码器(Prompt Encoder)
输入:用户交互产生的提示(如点击点、边界框、掩膜)
编码方式:使用位置编码与可学习嵌入
支持:
- 前景/背景点(正/负样本)
- 边界框
- 初始掩膜(以低分辨率图形式输入)
提示编码器将所有提示转换为稀疏 token,供掩膜解码器使用。
3.3 掩膜解码器(Mask Decoder)
结构:轻量级 Transformer 解码器
输入:
- 图像特征(稠密)
- 提示 token(稀疏)
输出:
- 3 个候选掩膜
- 每个掩膜的置信度评分(表示分割质量)
该设计考虑到提示歧义性,通过输出多个备选结果支持交互式挑选和精修。
3.4 推理流程总结
给定一张图像及提示:
图像 → 图像编码器 → 图像特征
⇩
提示 → 提示编码器 → 提示 token
⇩
掩膜解码器 → 多个候选掩膜输出
4. 训练方法
SAM 使用大规模的 SA-1B 数据集进行训练,这是目前已知最大的分割数据集之一。
4.1 SA-1B 数据集
超过 11M 图像
超过 10 亿分割掩膜
使用人机协同标注工具生成:
- 初始模型生成分割候选
- 人工进行点击或修正
- 不断迭代优化分割器与数据质量
4.2 训练策略
- 基于提示-掩膜对的监督训练
- 损失函数:掩膜交叉熵 + IoU(联合训练)
- 训练中随机采样不同类型的提示(点、框、掩膜)
- 应用图像增强、提示扰动等技术提高鲁棒性
5. 泛化能力与局限性
SAM 在多种图像类型上表现出极强的零样本泛化能力:
- 自然图像、室内外场景
- 艺术作品、遥感图像、历史图像
- 医学和科学图像(如细胞图)
但其局限性包括:
- 掩膜粗糙:对小物体、细节结构效果不佳
- 没有语义信息:SAM 不输出类别标签,仅返回掩膜
- 模型庞大:ViT-H 参数量大,对硬件要求高
- 无实例 ID:不直接支持实例级分割,需后处理
6. 理论创新与影响
创新设计 | 理论与实践意义 |
---|---|
可提示分割任务形式 | 将分割任务统一为条件生成问题 |
图像与提示解耦 | 实现交互式处理与高效推理 |
多掩膜输出设计 | 捕捉提示歧义,增强用户体验 |
人机协同标注 + 自训练 | 支撑超大规模分割数据集构建 |
基础模型在视觉任务的首次实践 | 启发后续图像模型的通用化与模块化设计 |
7. 扩展与生态系统
SAM 已成为图像分割系统中的通用模块,衍生出多个变体与组合方式:
- Grounded-SAM:结合语言模型(如 CLIP)进行文本提示分割
- MedSAM:针对医学图像进行微调的版本
- MobileSAM:轻量化变体,适用于边缘设备
- SAM + DETR/Mask R-CNN:结合实例识别器实现实例分割
SAM 常被用作预处理器、辅助标注工具或作为多模态模型中的图像感知组件。
8. 总结
Segment Anything Model(SAM) 是一个引领视觉基础模型潮流的重要作品。它通过提示驱动的分割范式、模块化结构与超大规模预训练数据,实现了强大的零样本图像分割能力。
它不仅是一个模型,更是一个通用图像分割框架,为图像理解、交互式标注和多模态感知等方向提供了强大的构件基础。
推荐阅读资料
- Segment Anything 论文(arXiv:2304.02643)
- Meta AI 官方 GitHub 仓库
- SA-1B 数据集介绍与半自动标注策略
- 相关模型:GroundingDINO、CLIP、Mask2Former、MobileSAM