Meta正式发布并开源新一代Segment Anything Model 3(SAM 3),一个用于图像和视频中可提示分割的统一基础模型,能够通过文本提示或点、框、掩码等视觉提示来检测、分割和跟踪目标。
图像分割方向一直以来的难题是用户往往希望分割那些不在预定义列表中的概念,但传统模型通常只能分割特定目标。比如,现有模型可以轻松分割“人”这类常见对象,却难以处理如“红色条纹伞”这样更精细、更具体的视觉概念。
SAM 3 通过引入“可提示概念分割”能力,有效克服了这一局限:它能够根据文本提示或示例图像,自动识别并分割出所有符合该概念的实例。
SAM3跟踪一只毛发蓬松的金色寻回犬
SAM3跟踪穿白色球衣的球员
SAM 3 首次实现了对由简短文本短语或示例图像所定义的开放词汇概念的所有实例进行完整分割,能够处理数量远超以往的开放词汇提示。在Meta新构建的 SA-Co 基准测试中,该模型在包含 27 万个独特概念的数据集上达到了人类性能的 75%–80%,SAM3能支持的独特概念数量是现有基准的 50 倍以上。
开源地址:
ModelScope:
http://modelscope.cn/organization/facebook
GitHub:
https://github.com/facebookresearch/sam3?tab=readme-ov-file
01模型架构:可提示概念分割
SAM 3 的模型架构延续并融合了 Meta 在人工智能领域的多项前沿成果。其中文本编码器与图像编码器均源自“Meta Perception Encoder”——这是Meta于今年四月开源的一个模型,它能构建更强大的计算机视觉系统,辅助用户完成图像识别、目标检测等日常任务。相较于此前使用的编码器,采用 Meta Perception Encoder 使模型性能实现了显著跃升。检测器组件基于 DETR 模型,这是首个将 Transformer 应用于目标检测的开创性工作。SAM 2 中所采用的记忆库与记忆编码器,则构成了当前跟踪器(Tracker)模块的基础。此外,还整合了多个开源组件,包括公开数据集、基准测试集和模型改进方法,以推动本项工作的持续进步。
02基于人工智能与人工标注的新型数据引擎
为获取涵盖广泛类别与视觉领域的高质量标注图像,Meta构建了一个可扩展的数据引擎,将 SAM 3、人工标注员与 AI 模型整合为一个闭环系统,显著提升了标注效率:在处理“否定提示”(即图像/视频中不存在的概念)时,速度比纯人工快约 5 倍;即使在具有挑战性的细粒度领域,对于“肯定提示”,标注速度也比人工快 36%,通过这一人机协同系统,Meta构建一个包含超过400 万个独特概念的大规模、多样化训练数据集。
该引擎的流程如下:一个由 SAM 3 和基于 Llama 的图像字幕生成系统组成的 AI 管道,自动从海量图像和视频中挖掘内容,生成描述性字幕,解析为文本标签,并生成初始分割掩码(如上图中的“候选对象”)。
随后,人工标注员与 AI 标注员共同验证并修正这些候选结果,形成一个持续反馈的闭环机制——在快速扩展数据集覆盖范围的同时,不断优化数据质量。AI 标注员基于经过专门训练的 Llama 3.2v 模型,其在标注任务(如判断掩码质量是否达标、是否完整覆盖了图像中某一概念的所有实例)上的准确率,已达到甚至超越人类标注员水平。
03基准测试数据集
为评估模型在大词汇量下的检测与分割能力,我们构建了全新的基准测试——Segment Anything with Concepts(SA-Co),专门用于图像与视频中的可提示概念分割。与以往基准相比,SA-Co 要求模型识别的语义概念数量大幅增加。SA-Co 数据集也开源,支持研究复现,并推动开放视觉分割领域的持续创新。
04模型推理
环境安装:
# 1、创建新的conda环境 conda create -n sam3 python=3.12 conda deactivate conda activate sam3 # 2、安装pytorch-cuda pip install torch==2.7.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 # 3、克隆仓库并安装 git clone https://github.com/facebookresearch/sam3.git cd sam3 pip install -e . # 3、安装额外的依赖 # 跑notebook的example pip install -e ".[notebooks]" # 开发环境 pip install -e ".[train,dev]"
模型下载:
modelscope download --model facebook/sam3 --local_dir checkpoints
推理脚本:
import torch #################################### For Image #################################### from PIL import Image from sam3.model_builder import build_sam3_image_model from sam3.model.sam3_image_processor import Sam3Processor # Load the model model = build_sam3_image_model() processor = Sam3Processor(model) # Load an image image = Image.open("<YOUR_IMAGE_PATH.jpg>") inference_state = processor.set_image(image) # Prompt the model with text output = processor.set_text_prompt(state=inference_state, prompt="<YOUR_TEXT_PROMPT>") # Get the masks, bounding boxes, and scores masks, boxes, scores = output["masks"], output["boxes"], output["scores"] #################################### For Video #################################### from sam3.model_builder import build_sam3_video_predictor video_predictor = build_sam3_video_predictor() video_path = "<YOUR_VIDEO_PATH>" # a JPEG folder or an MP4 video file # Start a session response = video_predictor.handle_request( request=dict( type="start_session", resource_path=video_path, ) ) response = video_predictor.handle_request( request=dict( type="add_prompt", session_id=response["session_id"], frame_index=0, # Arbitrary frame index text="<YOUR_TEXT_PROMPT>", ) ) output = response["outputs"]
04更多案例