视觉感知的新纪元:Meta SAM 系列从图像分割到视频追踪再到开放词汇分割的技术演进
视觉感知的新纪元Meta SAM 系列从图像分割到视频追踪再到开放词汇分割的技术演进一、图像分割的开山之作SAM1 的核心原理2023年Meta 发布的 SAM1facebookresearch/segment-anything54K⭐彻底改变了计算机视觉领域的游戏规则。当整个行业还在为特定任务训练专用模型时SAM1 以Segment Anything为核心理念提出了一个开创性的问题能否构建一个能够分割任意图像中任意物体的通用模型SAM1 的技术架构建立在三个核心组件之上图像编码器Image Encoder、提示编码器Prompt Encoder和掩码解码器Mask Decoder。图像编码器采用预训练的 ViTVision Transformer作为 backbone将输入图像转换为高维特征图。SAM1 提供了 ViT-H、ViT-L、ViT-B 三种规格的模型其中 ViT-H 在 SA-1B 数据集包含 11M 张图像和 1.1B 个掩码上训练具有最强的特征提取能力。提示编码器的设计尤为精妙。SAM1 支持三种类型的提示输入点提示Point、边界框提示Box和文本提示Text。点提示和边界框提示通过位置编码Positional Encoding直接映射到特征空间而文本提示则通过 Clip 的文本编码器提取语义特征。这种多模态提示机制使得用户可以用极其灵活的方式与模型交互——无论是点击某个像素指定分割目标还是框选一片区域甚至用自然语言描述目标物体。掩码解码器采用 Transformer 架构将图像特征与提示特征进行交叉注意力Cross-Attention运算逐步精化分割掩码。值得注意的是SAM1 的解码器采用两阶段设计第一个阶段生成三个不同分辨率的掩码候选第二个阶段根据提示信息选择最合适的掩码并进一步细化。这种设计在推理速度和分割精度之间取得了良好的平衡。SAM1 的 zero-shot 能力是其最具革命性的特性。传统深度学习模型需要大量标注数据才能适应新任务而 SAM1 通过海量数据训练获得的分割先验使其能够泛化到训练集之外的新类别和新场景。这意味着研究者和开发者无需为每个新任务重新训练模型只需通过合适的提示就能实现高质量分割。# SAM1 代码使用示例fromsegment_anythingimportsam_model_registry,SamPredictor# 加载 SAM1 模型samsam_model_registry[vit_h](/path/to/sam_vit_h.pth)predictorSamPredictor(sam)# 设置图像imagecv2.imread(/path/to/image.jpg)image_rgbcv2.cvtColor(image,cv2.COLOR_BGR2RGB)predictor.set_image(image_rgb)# 点提示分割input_pointnp.array([[450,600]])# 目标中心点input_labelnp.array([1])# 1 表示前景masks,scores,logitspredictor.predict(point_coordsinput_point,point_labelsinput_label,multimask_outputTrue)# 文本提示分割fromsegment_anythingimportSamAutomaticMaskGenerator mask_generatorSamAutomaticMaskGenerator(sam)masksmask_generator.generate(image_rgb)二、迈向时序感知SAM2 的架构创新如果说 SAM1 解决了分割什么的问题那么 2024 年发布的 SAM2facebookresearch/sam219K⭐则进一步回答了如何追踪分割目标的问题。SAM2 的核心洞察是将图像视为单帧视频从而实现图像分割与视频追踪的统一。这一看似简单的设计哲学实际上带来了架构层面的根本性变革。SAM2 引入的核心概念是流式记忆机制Streaming Memory。在视频处理中模型需要记住之前帧中看到的目标并在后续帧中持续追踪。SAM2 设计了一个 Memory Bank 结构用于存储历史帧的目标信息。当处理新帧时模型会从 Memory Bank 中检索相关记忆通过注意力机制将历史信息融入当前帧的分割决策。这种设计使得 SAM2 能够在长视频中保持目标身份的一致性避免跟踪漂移问题。SAM2 的图像编码器在 SAM1 的基础上进行了时序增强。编码器不仅提取空间特征还生成用于记忆编码的上下文向量。这个上下文向量会被压缩后存入 Memory Bank供后续帧使用。在解码阶段SAM2 采用了两条路径空间路径直接处理当前帧的空间特征时间路径则整合来自 Memory Bank 的时序信息。两条路径的特征通过融合模块进行组合最终生成当前帧的分割掩码。SAM2 的另一个重要创新是统一分割范式。传统的视频分割任务如 VOS、VIS需要针对视频专门设计的算法而 SAM2 将单帧图像也视为只有一帧的视频从而用一个模型同时处理图像分割和视频分割任务。这种统一性大大简化了实际部署的复杂度——同一个模型既能处理静态图像也能处理动态视频。训练数据方面SAM2 基于 SA-V 数据集构建这是目前规模最大的视频分割数据集。SA-V 包含大量真实场景视频涵盖人物、动物、物体等多种类别并且标注了目标在视频中的完整运动轨迹。丰富的训练数据使得 SAM2 能够学习到目标的运动模式和外观变化规律从而在各种复杂场景下保持稳定的追踪性能。# SAM2 代码使用示例fromsam2.build_samimportbuild_sam2_video_predictor# 加载 SAM2 模型predictorbuild_sam2_video_predictor(sam2_hiera_small.yaml,/path/to/sam2_hiera_small.pt)# 初始化视频分割withSegmentingState(predictor,/path/to/video_frames)assegmenting_state:# 第一帧指定分割目标segmenting_state.add_new_mask(frame_idx0,object_id1,pointnp.array([450,600]),# 点击位置label1# 前景)# 追踪后续帧forframe_idxinrange(1,num_frames):segmenting_state.track_next_frame()# 获取当前帧的分割结果maskssegmenting_state.get_masks(frame_idx)三、语义理解的新高度SAM3 的开放词汇能力2026 年初发布的 SAM3facebookresearch/sam39K⭐代表了 Meta 在视觉-语言融合方面的最新探索。与前两代专注于分割本身不同SAM3 将目光投向了更高级的语义理解层次——开放词汇分割Open-Vocabulary Segmentation。这意味着用户可以用任意自然语言描述来指定分割目标而不再局限于预设的类别或简单的点框提示。SAM3 的技术架构进行了重大升级。它采用双分支设计视觉分支沿用 SAM 系列的 Transformer 架构提取空间特征语言分支则引入大语言模型LLM的文本编码器提取语义特征。关键创新在于跨模态特征对齐模块它通过对比学习将视觉特征和文本特征映射到统一的高维空间使得模型能够理解穿白色球衣的球员这样复杂的文本描述。2026年3月27日发布的 SAM 3.1 版本带来了更多技术突破。多目标联合追踪共享内存方法是其核心亮点。在现实场景中视频中往往存在多个需要同时追踪的目标这些目标之间可能存在交互、重叠或外观相似的情况。SAM 3.1 设计了一个共享记忆库Shared Memory Bank所有目标共享全局上下文信息同时通过目标 ID 机制维护各自的身份。这种设计既保证了信息的高效利用又避免了目标之间的干扰。SAM 3.1 还引入了presence token 机制来解决相似文本提示的区分问题。传统的多模态模型在处理左边的人和右边的人这类描述时容易混淆因为人这个概念的视觉特征在两种情况下非常相似。Presence token 通过显式建模某个概念是否存在于当前场景中帮助模型更准确地定位和分割目标。当用户输入文本提示时模型首先生成对应的 presence token判断该描述所指代的目标是否存在、位于什么位置然后再进行精确分割。SAM3 提出的SA-CO 基准是另一项重要贡献。SA-CO 包含 270K 个概念规模是现有基准的 50 倍涵盖日常物品、抽象概念、动作状态等方方面面。这个基准的构建为评估开放词汇分割模型提供了更全面、更具挑战性的测试平台。SAM3 采用的解耦检测-追踪架构也值得关注。将检测任务判断是什么和追踪任务判断在哪里、如何变化解耦使得模型能够更专注于各自的任务目标。检测分支负责理解语义内容追踪分支负责维护时序一致性两者通过特征交互实现协同。# SAM3 代码使用示例fromsam3importSAM3OpenVocabPredictor# 加载 SAM3 模型predictorSAM3OpenVocabPredictor.from_pretrained(sam3_vit_l)# 开放词汇文本提示text_prompts[a player wearing white jersey,the basketball on the left,audience members in the background]# 对图像进行分割resultspredictor.predict(image_rgb,text_prompts)# 获取分割掩码和置信度fortext,mask,scoreinzip(text_prompts,results[masks],results[scores]):print(fText:{text}, Score:{score:.3f})# SAM 3.1 多目标联合追踪fromsam3.videoimportJointTracker trackerJointTracker(predictor)tracker.init_video(/path/to/video_frames)# 初始化多个追踪目标tracker.add_target(frame_idx0,object_id1,textred car)tracker.add_target(frame_idx0,object_id2,textblue car)# 联合追踪所有目标forframe_idxinrange(1,num_frames):tracker.track_frame(frame_idx)maskstracker.get_all_masks()# 返回所有目标的掩码四、架构演进的技术分析纵观 SAM 系列的三代演进我们可以清晰地看到一条技术演进的脉络以及背后蕴含的设计哲学。特性SAM1SAM2SAM3核心任务图像分割视频分割与追踪开放词汇分割提示类型点/框/文本点/框/文本自由文本描述时序处理无流式记忆共享内存追踪BackboneViTHierarchical ViT大规模 ViT LLM模态融合后融合后融合深度融合从架构层面分析SAM1 采用的是典型的**后融合Late Fusion**策略。视觉特征和文本特征在各自的编码器中独立提取仅在解码阶段进行交互。这种设计简单有效但语义理解能力受限于文本编码器的容量。SAM2 在此基础上增加了时序维度通过 Memory Bank 实现跨帧信息传递但其文本处理能力并未显著提升。SAM3 则迈向了**深度融合Deep Fusion**阶段。视觉分支和语言分支在编码阶段就保持深层交互通过跨模态注意力机制实现语义对齐。这使得 SAM3 能够理解复杂、细粒度的文本描述如前景中正在跳跃的人或背景里模糊的建筑。SAM 3.1 的 presence token 机制进一步增强了模型对语义微妙差异的感知能力。