本文档概述了构成“分割任意模型”(SAM)系统的主要组件。它描述了架构、关键类以及它们如何交互以执行图像分割任务。有关如何使用这些组件的详细信息,请参阅用法示例。有关部署选项,请参阅部署。
分割任意模型由几个核心组件组成,它们协同工作,实现灵活强大的图像分割。该系统旨在支持带有用户提示的交互式分割以及图像中所有对象的自动分割。
来源:segment_anything/build_sam.py README.md21-55
为了更好地理解这些组件如何协同工作,此图说明了从输入到输出的数据流
Sam 类是整合模型所有其他部分的核心组件。它负责协调数据在系统中的流动,并处理图像和掩码的预处理和后处理。
来源:segment_anything/build_sam.py66-101
图像编码器使用 Vision Transformer (ViT) 架构来处理输入图像并生成密集的图像嵌入。这些嵌入捕捉了分割所需的视觉特征。
主要特性
来源:segment_anything/build_sam.py67-80
提示编码器处理不同类型的用户输入(点、框和掩码),并将其转换为可供掩码解码器使用的嵌入。它将各种输入类型标准化为一致的表示。
来源:segment_anything/build_sam.py81-86
掩码解码器接收图像嵌入和提示嵌入,并生成分割掩码。它使用 TwoWayTransformer 结合来自两个来源的信息,生成准确的掩码预测。
来源:segment_anything/build_sam.py87-98
SAM 提供两个主要的高级用户接口
SamPredictor 类为带有用户提示的交互式分割提供了一个接口。它处理
SamAutomaticMaskGenerator 类在无需用户提示的情况下,自动为图像中的所有对象生成掩码。它的工作方式是
来源:README.md scripts/amg.py152-201
SAM 提供辅助函数,可用于创建具有不同配置的模型
来源:segment_anything/build_sam.py47-52
SAM 有三种不同的大小,每种都有不同的计算要求和功能
| 模型类型 | 编码器类型 | 编码器深度 | 编码器嵌入维度 | 头数 | 相对大小 |
|---|---|---|---|---|---|
default/vit_h | Vision Transformer | 32 | 1280 | 16 | 最大 |
vit_l | Vision Transformer | 24 | 1024 | 16 | 中等 |
vit_b | Vision Transformer | 12 | 768 | 12 | 最小 |
模型的选择取决于可用的计算资源和所需的准确度。较大的模型通常能提供更好的分割质量,但需要更多的内存和计算资源。
来源:segment_anything/build_sam.py README.md112-114
使用这些核心组件通常遵循以下两种模式之一
使用 SamPredictor 进行交互式分割
sam_model_registry 加载模型SamPredictor 实例使用 SamAutomaticMaskGenerator 进行自动分割
sam_model_registry 加载模型SamAutomaticMaskGenerator 实例有关这些组件的详细用法示例,请参阅用法示例。