ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SAM 3 概念分割深度拆解:一句话如何把图里所有实例都切出来

SAM 3 概念分割深度拆解:一句话如何把图里所有实例都切出来

SAM 3 概念分割深度拆解:一句话如何把图里所有实例都切出来

【免费下载链接】sam3The repository provides code for running inference and finetuning with the Meta Segment Anything Model 3 (SAM 3), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/gh_mirrors/sam/sam3

想在一张图里把所有"黄色衬衫"都框出来,却只能逐个点击?SAM 3 是 Meta 开源的概念分割基础模型:给一句话或一次点选,它就能找出并分割全部实例,图像和视频用的是同一套接口。

它到底解决了什么问题?

SAM 3 的核心能力可以概括为一句话:对文本指定的概念做穷尽式分割——不是"点哪切哪",而是"匹配的都切出来"。看三个具体场景就明白了:

  • 逐个点选太慢。一张图里有 40 只企鹅,用旧的交互式分割模型要点 40 次;SAM 3 只需把 "a penguin" 作为 prompt,检测器一次性给出全部实例。
  • 相似词汇容易串味。"a player in white" 和 "a player in red" 这种提示,传统文本模型很容易张冠李戴。SAM 3 在解码器里引入了presence token,先判断"这个概念到底在不在画面里",再让各 query 去定位,细粒度提示的区分度明显更稳。
  • 视频里跟踪会飘。遮挡、形变、重新出现,逐帧人工重选目标非常痛苦。SAM 3 的 tracker 把上一帧的 mask 延续下去,检测器周期性重新检测做"再校准",长视频也不容易跑偏。

一句话总结:检测器负责"一次全找出来",跟踪器负责"一路追下去",两者共享同一个图像编码器。

核心机制是怎么跑起来的?

整个模型 848M 参数,顺着数据流看,其实不难理解:

  1. 输入:一个文本 prompt(名词短语),或者点、框、掩码这类视觉 prompt,再加上当前帧图像。
  2. 编码:文本编码器把句子变成语义向量;ViT 图像编码器把画面变成特征图,窗口注意力搭配若干层全局注意力(第 8、16、24、32 层),小目标和整场景都不落下。
  3. 定位:检测器基于 DETR 结构,200 个可学习 query 在融合好的视觉-语言特征里"找对象",有点像拿着清单在仓库里找货——每个 query 竞争锁定一个实例,经过多轮框精化后输出每个目标的 mask、框和置信度。
  4. 延续:tracker 读取memory bank(默认最多缓存 7 份 mask 记忆),在两次检测之间把目标往前推;每 16 帧让检测器重新跑一遍,防止误差累积。
  5. 输出:当前帧的检测结果和上一帧的跟踪结果合并输出,同时写回 memory bank 供下一帧使用。

这里最值得称道的是一个工程决策:检测器与跟踪器解耦。两者分开训练、互不干扰,还能各自随数据量放大——只关心单图任务的话,检测器单独用就够。

图中数据从左到右走:文本和图像并行编码,上方 Detector 负责"在当前帧找新目标",下方 Tracker 负责"从历史继承",两路结果合并后得到该帧输出,Memory Bank 则是串联前后帧的枢纽。

训练数据从哪来、质量怎么保证?

分割模型的上限,很大程度上由数据决定。项目方用自研的data engine自动标注了 400 万+ 唯一概念,构成 SA-CO 基准:27 万唯一概念,比已有公开评测集多出一个数量级。

标注策略分成黄金-白银两级,原因很直接:

  • 黄金(人工):专业标注员手绘,用于最关键的金标准评测集(SA-Co/Gold),保证"尺子"可靠;
  • 白银(模型辅助):规模化自动标注,用于训练,把覆盖面做大;
  • 评测集还拆出图像与视频(SA-Co/VEval)两套,每个"图像 + 名词短语"都带实例 mask 和唯一 ID;没有匹配对象时的负样本(negative prompt)也保留在数据里——模型因此学会了"什么时候该什么都不画"。

效果是:在金标准集上,模型达到了人类标注一致性 75-80% 的水平,这个量级过去基本只有人工才能达到。

拿它实际能干什么?

场景一:单图文本穷尽分割。给一张购物照片,一句话把所有袋子切出来:

model = build_sam3_image_model() processor = Sam3Processor(model) state = processor.set_image(Image.open("groceries.jpg")) out = processor.set_text_prompt(state=state, prompt="a bag") masks, boxes, scores = out["masks"], out["boxes"], out["scores"]

不用点选,直接拿到每个袋子的 mask、框和置信度;想换成 "a bottle of water" 时只需替换文本。

场景二:视频一句话跟踪。输入 JPEG 帧目录或 mp4,开启会话并给目标"起个名字":

vp = build_sam3_video_predictor() r = vp.handle_request(request=dict(type="start_session", resource_path="video.mp4")) r = vp.handle_request(request=dict(type="add_prompt", session_id=r["session_id"], frame_index=0, text="a dog"))

目标会在整个视频里被持续跟踪,发现漂移还能追加点击点来修正,完整流程见 examples/sam3_video_predictor_example.ipynb。

场景三:复杂描述 + Agent 精修。长句或带逻辑的描述,可以交给 examples/sam3_agent.ipynb:让 LLM 拆解描述、反复调用 SAM 3 并自我检查,适合把分割当作更大多模体 agent 的一个工具环节。

5分钟跑起来:从克隆到第一次推理

  1. git clone https://gitcode.com/gh_mirrors/sam/sam3,进入目录
  2. 准备 Python 3.12 + CUDA 12.6 以上环境,装 PyTorch:pip install torch==2.10.0 torchvision --index-url https://download.pytorch.org/whl/cu128
  3. pip install -e ".[notebooks]"
  4. 模型权重需先在 Hugging Face 上申请访问,通过后执行hf auth login
  5. 打开 examples/sam3_image_predictor_example.ipynb,从头运行,第一组 mask 就出来了

写在最后

SAM 3 把视觉分割从"指哪切哪"推进到了"一句话切一批",视频跟踪只是顺带的能力。如果你在做开放词表检测、商品标注,或者想给多模体 agent 配一个分割后端,它值得纳入候选。仓库里已经能看到 SAM 3.1 的 multiplex 版本——共享记忆做多目标联合跟踪,更快且不掉精度,同屏追更多目标这条路,大概率是接下来值得盯的方向。

【免费下载链接】sam3The repository provides code for running inference and finetuning with the Meta Segment Anything Model 3 (SAM 3), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/gh_mirrors/sam/sam3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表