菜单

高级主题

相关源文件

本页面涵盖了“分割一切模型”(SAM)的高级功能和定制选项,重点介绍了允许用户为特定用例调整模型行为的细节。有关基本用法,请参阅入门指南页面。有关核心组件的详细信息,请参阅核心组件

1. 定制自动掩膜生成

SamAutomaticMaskGenerator类提供了许多可微调的参数来控制掩膜生成行为。理解这些参数对于针对特定应用程序优化SAM的性能至关重要。

来源: segment_anything/automatic_mask_generator.py34-136

1.1 点网格生成

自动掩膜生成器会在图像上生成一个点网格,用作提示。

  • points_per_side:控制采样网格的密度(默认值:32)
  • point_grids:允许显式指定自定义点网格

来源: segment_anything/automatic_mask_generator.py35-110

1.2 掩膜质量过滤

SAM 提供两种主要的掩膜质量过滤方法。

参数描述默认推荐范围
pred_iou_thresh掩膜被保留的最低预测 IoU 值。0.880.80-0.95
stability_score_thresh稳定性得分(阈值变化下的掩膜一致性)的最低值。0.950.90-0.97
stability_score_offset计算稳定性时用于阈值的偏移量。1.00.8-1.2

提高这些阈值会生成更少但质量更高的掩膜。

来源: segment_anything/automatic_mask_generator.py42-44 segment_anything/automatic_mask_generator.py295-306

1.3 多尺度裁剪处理

对于高分辨率图像,SAM 可以以多尺度裁剪的方式处理图像。

主要参数

  • crop_n_layers:裁剪层数(0 表示不裁剪)
  • crop_nms_thresh:用于过滤裁剪之间重复掩膜的 NMS 阈值。
  • crop_overlap_ratio:相邻裁剪之间的重叠比例。
  • crop_n_points_downscale_factor:更深层中点密度的缩减因子。

来源: segment_anything/automatic_mask_generator.py45-48 segment_anything/automatic_mask_generator.py197-221

1.4 后处理

SAM 可以清理掩膜中分散的小区域和孔洞。

  • min_mask_region_area:掩膜区域和孔洞的最小面积(以像素为单位)。
  • output_mode:掩膜输出格式(binary_maskuncompressed_rlecoco_rle)。

来源: segment_anything/automatic_mask_generator.py50-51 segment_anything/automatic_mask_generator.py166-171 segment_anything/automatic_mask_generator.py323-372

2. 使用不同的模型尺寸

SAM 提供三种模型尺寸,每种尺寸的性能和资源需求都不同。

2.1 模型尺寸比较

模型编码器参数内存推理速度典型用例
ViT-H6.32 亿参数6.36 亿最慢最高质量的分割效果
ViT-L3.07 亿参数3.11 亿中等中等质量与性能的良好权衡
ViT-B9100 万参数9400 万最快资源受限的环境

来源: segment_anything/modeling/image_encoder.py16-117

2.2 关键架构参数

Vision Transformer 架构有几个参数决定了模型的大小和能力。

这些参数影响:

  • embed_dim:嵌入维度的尺寸。
  • depth:Transformer 块的数量。
  • num_heads:注意力头的数量。

来源: segment_anything/modeling/image_encoder.py16-66

2.3 内存需求和优化

SAM 的内存需求随着以下因素显著增长:

  1. 模型尺寸(ViT-B、ViT-L、ViT-H)
  2. 输入图像分辨率
  3. 同时处理的提示数量

对于内存受限的环境:

  • 使用更小的模型(ViT-B)。
  • 使用 ResizeLongestSide 缩减图像尺寸。
  • SamAutomaticMaskGenerator 中处理更少的点。
  • 使用支持优化的 ONNX 导出。

来源: segment_anything/modeling/image_encoder.py16-117

3. 高级 ONNX 导出选项

SAM 模型可以导出为 ONNX 格式,以便在具有特定优化的各种环境中部署。

来源: segment_anything/utils/onnx.py17-144

3.1 定制 ONNX 模型

将 SAM 导出为 ONNX 时,有多种选项可用于定制模型的行为。

选项描述用例
return_single_mask返回最佳掩膜,而不是所有掩膜候选。交互式应用
use_stability_score使用稳定性得分而非 IoU 预测进行排名。需要更稳定掩膜的应用
return_extra_metrics返回其他指标,如稳定性得分和面积。高级过滤工作流

来源: segment_anything/utils/onnx.py25-39 segment_anything/utils/onnx.py107-144

3.2 模型拆分以提高效率

一项关键的优化是将图像编码器与模型的其余部分分开。

  1. 预计算:图像编码器计算密集,但每张图像只需运行一次。
  2. 交互式使用:提示编码器和掩膜解码器在每次用户交互时运行。
  3. 降低延迟:这种拆分架构显著提高了交互式应用的响应速度。

来源: segment_anything/utils/onnx.py107-126

3.3 掩膜选择与后处理

ONNX 导出包含高级掩膜选择和后处理功能。

  • 根据各种指标自动选择最佳掩膜。
  • 将掩膜上采样到原始图像尺寸。
  • 分辨率处理和插值。

来源: segment_anything/utils/onnx.py76-106

4. 批量处理策略

对于需要高效处理多个提示或图像的应用,可以采用多种批量处理策略。

来源: segment_anything/automatic_mask_generator.py242-248 segment_anything/automatic_mask_generator.py197-221

4.1 批量处理点

SamAutomaticMaskGenerator 以批处理的方式处理点,以提高效率。

points_per_batch 参数控制同时处理的点数,并可根据可用的 GPU 内存进行调整。

来源: segment_anything/automatic_mask_generator.py242-248

4.2 图像裁剪处理

对于高分辨率图像,分块处理可以更节省内存。

  1. 图像被分成重叠的裁剪块。
  2. 每个裁剪块独立处理。
  3. 结果通过非极大值抑制(NMS)进行合并。

裁剪处理流水线允许处理任意大小的图像,同时内存占用有限。

来源: segment_anything/automatic_mask_generator.py197-221 segment_anything/automatic_mask_generator.py225-263

5. 高级提示工程

有效使用 SAM 需要了解如何针对不同场景优化提示。

5.1 战略点放置

可以战略性地放置点来提高分割质量。

  • 中心点(标签=1):对轮廓清晰的对象最有效。
  • 边界点(标签=1):有助于定义模糊对象的范围。
  • 背景点(标签=0):有助于将特定区域排除在掩膜之外。
  • 多个点:可用于细化复杂形状。

5.2 组合不同类型的提示

对于复杂的分割任务,组合不同类型的提示可以产生更好的结果。

  1. 使用边界框提示来定义大致感兴趣的区域。
  2. 添加点提示来细化边界框内的分割。
  3. 对于迭代细化,可以使用先前的掩膜输出来作为掩膜提示。

5.3 提示密度考虑

使用自动掩膜生成器时,提示的密度会影响掩膜的质量和数量。

  • 较高的 points_per_side 值会生成更多掩膜并捕捉更多细节。
  • 较低的值效率更高,但可能会遗漏较小的对象。
  • 对于大型图像,使用具有适当点密度设置的裁剪块比简单地增加全局点密度更有效。

来源: segment_anything/automatic_mask_generator.py98-110

6. 处理大型图像

处理高分辨率图像会带来特定的挑战,可以通过高级技术来解决。

6.1 多尺度处理

对于大型图像的精细分割,多尺度处理非常有效。

  • 使用 crop_n_layers > 0 以多尺度处理图像
  • 较小的裁剪可以捕捉精细细节,而较大的区域可以提供上下文
  • 适当设置 crop_overlap_ratio 以确保裁剪边界处的对象能够正确分割

来源: segment_anything/automatic_mask_generator.py45-48 segment_anything/automatic_mask_generator.py197-221

6.2 内存优化技术

有几种技术可用于优化内存使用

  1. 分小批量处理点(points_per_batch
  2. 使用基于裁剪的处理(crop_n_layers
  3. 在保持纵横比的同时调整输入图像大小
  4. 使用 ONNX 导出并分离图像编码器
  5. 考虑使用较小的模型变体(ViT-B 或 ViT-L)

来源: segment_anything/automatic_mask_generator.py65-66

6.3 处理裁剪边界处的对象

在使用裁剪时,边界处的对象需要特殊处理

  • 参数 crop_overlap_ratio 控制相邻裁剪之间的重叠
  • 较高的重叠值会增加捕获完整对象的几率
  • 掩码生成器会自动过滤掉接触裁剪边界的掩码,以避免截断的对象

来源: segment_anything/automatic_mask_generator.py47 segment_anything/automatic_mask_generator.py312-314

7. 针对特定领域的 SAM 微调

虽然 SAM 被设计为一个基础模型,但可以通过提示工程和参数调整针对特定领域进行优化。

7.1 特定领域参数集

不同领域可能受益于不同的参数设置

领域推荐参数原理
医学影像较高的 stability_score_thresh,较低的 pred_iou_thresh优先保证器官/病灶掩码的稳定性
航空/卫星较高的 points_per_side,较高的 crop_n_layers捕捉小型对象并处理大型图像
文档分析较低的 stability_score_thresh,较高的 min_mask_region_area捕捉文本块并避免噪声
工业检测较高的 pred_iou_thresh,较低的 crop_overlap_ratio关注缺陷边界的精度

来源: segment_anything/automatic_mask_generator.py42-51

7.2 领域自适应的后处理

特定领域的后处理可以显著提高结果

  • 使用 min_mask_region_area 来过滤掉噪声或伪影
  • 应用 postprocess_small_regions 方法来清理断开的区域和孔洞
  • 基于掩码的形状、大小或位置来实现自定义过滤,以满足特定领域的特定要求

来源: segment_anything/automatic_mask_generator.py323-372

总结

本页介绍了使用 Segment Anything Model 的高级主题,包括:

  1. 自定义自动掩码生成参数
  2. 使用不同模型尺寸及其权衡
  3. 用于高效部署的高级 ONNX 导出选项
  4. 点和图像裁剪的批量处理策略
  5. 高级提示工程技术
  6. 处理大型图像的策略
  7. 特定领域的微调方法

有关自定义掩码生成参数的更具体细节,请参阅 自定义掩码生成。有关模型尺寸选择的更多信息,请参阅 使用不同模型尺寸