菜单

核心组件

相关源文件

本文档概述了构成“分割任意模型”(SAM)系统的主要组件。它描述了架构、关键类以及它们如何交互以执行图像分割任务。有关如何使用这些组件的详细信息,请参阅用法示例。有关部署选项,请参阅部署

系统架构概览

分割任意模型由几个核心组件组成,它们协同工作,实现灵活强大的图像分割。该系统旨在支持带有用户提示的交互式分割以及图像中所有对象的自动分割。

核心架构图

来源:segment_anything/build_sam.py README.md21-55

数据流

为了更好地理解这些组件如何协同工作,此图说明了从输入到输出的数据流

来源:README.md21-23

核心组件详情

Sam 类

Sam 类是整合模型所有其他部分的核心组件。它负责协调数据在系统中的流动,并处理图像和掩码的预处理和后处理。

来源:segment_anything/build_sam.py66-101

图像编码器(ViT)

图像编码器使用 Vision Transformer (ViT) 架构来处理输入图像并生成密集的图像嵌入。这些嵌入捕捉了分割所需的视觉特征。

主要特性

  • 基于 Vision Transformer 架构
  • 一次处理整个图像
  • 输出与提示编码器维度匹配的嵌入

来源:segment_anything/build_sam.py67-80

提示编码器

提示编码器处理不同类型的用户输入(点、框和掩码),并将其转换为可供掩码解码器使用的嵌入。它将各种输入类型标准化为一致的表示。

来源:segment_anything/build_sam.py81-86

掩码解码器

掩码解码器接收图像嵌入和提示嵌入,并生成分割掩码。它使用 TwoWayTransformer 结合来自两个来源的信息,生成准确的掩码预测。

来源:segment_anything/build_sam.py87-98

高级接口

SAM 提供两个主要的高级用户接口

SamPredictor

SamPredictor 类为带有用户提示的交互式分割提供了一个接口。它处理

  • 设置和预处理图像
  • 计算和缓存图像嵌入(每个图像计算一次)
  • 处理提示输入
  • 根据不同提示生成掩码

来源:README.md58-62

SamAutomaticMaskGenerator

SamAutomaticMaskGenerator 类在无需用户提示的情况下,自动为图像中的所有对象生成掩码。它的工作方式是

  • 在图像上创建点网格
  • 将这些点用作模型的提示
  • 过滤和处理结果以生成高质量掩码

来源:README.md scripts/amg.py152-201

模型创建和注册表

SAM 提供辅助函数,可用于创建具有不同配置的模型

来源:segment_anything/build_sam.py47-52

模型变体

SAM 有三种不同的大小,每种都有不同的计算要求和功能

模型类型编码器类型编码器深度编码器嵌入维度头数相对大小
default/vit_hVision Transformer32128016最大
vit_lVision Transformer24102416中等
vit_bVision Transformer1276812最小

模型的选择取决于可用的计算资源和所需的准确度。较大的模型通常能提供更好的分割质量,但需要更多的内存和计算资源。

来源:segment_anything/build_sam.py README.md112-114

实际应用

使用这些核心组件通常遵循以下两种模式之一

  1. 使用 SamPredictor 进行交互式分割

    • 使用 sam_model_registry 加载模型
    • 创建 SamPredictor 实例
    • 设置图像
    • 使用不同提示生成掩码
  2. 使用 SamAutomaticMaskGenerator 进行自动分割

    • 使用 sam_model_registry 加载模型
    • 使用所需的参数创建 SamAutomaticMaskGenerator 实例
    • 自动为整个图像生成掩码

有关这些组件的详细用法示例,请参阅用法示例

来源:README.md54-80