本页面涵盖了“分割一切模型”(SAM)的高级功能和定制选项,重点介绍了允许用户为特定用例调整模型行为的细节。有关基本用法,请参阅入门指南页面。有关核心组件的详细信息,请参阅核心组件。
SamAutomaticMaskGenerator类提供了许多可微调的参数来控制掩膜生成行为。理解这些参数对于针对特定应用程序优化SAM的性能至关重要。
来源: segment_anything/automatic_mask_generator.py34-136
自动掩膜生成器会在图像上生成一个点网格,用作提示。
points_per_side:控制采样网格的密度(默认值:32)point_grids:允许显式指定自定义点网格来源: segment_anything/automatic_mask_generator.py35-110
SAM 提供两种主要的掩膜质量过滤方法。
| 参数 | 描述 | 默认 | 推荐范围 |
|---|---|---|---|
pred_iou_thresh | 掩膜被保留的最低预测 IoU 值。 | 0.88 | 0.80-0.95 |
stability_score_thresh | 稳定性得分(阈值变化下的掩膜一致性)的最低值。 | 0.95 | 0.90-0.97 |
stability_score_offset | 计算稳定性时用于阈值的偏移量。 | 1.0 | 0.8-1.2 |
提高这些阈值会生成更少但质量更高的掩膜。
来源: segment_anything/automatic_mask_generator.py42-44 segment_anything/automatic_mask_generator.py295-306
对于高分辨率图像,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
SAM 可以清理掩膜中分散的小区域和孔洞。
min_mask_region_area:掩膜区域和孔洞的最小面积(以像素为单位)。output_mode:掩膜输出格式(binary_mask、uncompressed_rle 或 coco_rle)。来源: segment_anything/automatic_mask_generator.py50-51 segment_anything/automatic_mask_generator.py166-171 segment_anything/automatic_mask_generator.py323-372
SAM 提供三种模型尺寸,每种尺寸的性能和资源需求都不同。
| 模型 | 编码器 | 参数 | 内存 | 推理速度 | 典型用例 |
|---|---|---|---|---|---|
| ViT-H | 6.32 亿参数 | 6.36 亿 | 高 | 最慢 | 最高质量的分割效果 |
| ViT-L | 3.07 亿参数 | 3.11 亿 | 中等 | 中等 | 质量与性能的良好权衡 |
| ViT-B | 9100 万参数 | 9400 万 | 低 | 最快 | 资源受限的环境 |
来源: segment_anything/modeling/image_encoder.py16-117
Vision Transformer 架构有几个参数决定了模型的大小和能力。
这些参数影响:
embed_dim:嵌入维度的尺寸。depth:Transformer 块的数量。num_heads:注意力头的数量。来源: segment_anything/modeling/image_encoder.py16-66
SAM 的内存需求随着以下因素显著增长:
对于内存受限的环境:
ResizeLongestSide 缩减图像尺寸。SamAutomaticMaskGenerator 中处理更少的点。来源: segment_anything/modeling/image_encoder.py16-117
SAM 模型可以导出为 ONNX 格式,以便在具有特定优化的各种环境中部署。
来源: segment_anything/utils/onnx.py17-144
将 SAM 导出为 ONNX 时,有多种选项可用于定制模型的行为。
| 选项 | 描述 | 用例 |
|---|---|---|
return_single_mask | 返回最佳掩膜,而不是所有掩膜候选。 | 交互式应用 |
use_stability_score | 使用稳定性得分而非 IoU 预测进行排名。 | 需要更稳定掩膜的应用 |
return_extra_metrics | 返回其他指标,如稳定性得分和面积。 | 高级过滤工作流 |
来源: segment_anything/utils/onnx.py25-39 segment_anything/utils/onnx.py107-144
一项关键的优化是将图像编码器与模型的其余部分分开。
来源: segment_anything/utils/onnx.py107-126
ONNX 导出包含高级掩膜选择和后处理功能。
来源: segment_anything/utils/onnx.py76-106
对于需要高效处理多个提示或图像的应用,可以采用多种批量处理策略。
来源: segment_anything/automatic_mask_generator.py242-248 segment_anything/automatic_mask_generator.py197-221
SamAutomaticMaskGenerator 以批处理的方式处理点,以提高效率。
points_per_batch 参数控制同时处理的点数,并可根据可用的 GPU 内存进行调整。
来源: segment_anything/automatic_mask_generator.py242-248
对于高分辨率图像,分块处理可以更节省内存。
裁剪处理流水线允许处理任意大小的图像,同时内存占用有限。
来源: segment_anything/automatic_mask_generator.py197-221 segment_anything/automatic_mask_generator.py225-263
有效使用 SAM 需要了解如何针对不同场景优化提示。
可以战略性地放置点来提高分割质量。
对于复杂的分割任务,组合不同类型的提示可以产生更好的结果。
使用自动掩膜生成器时,提示的密度会影响掩膜的质量和数量。
points_per_side 值会生成更多掩膜并捕捉更多细节。来源: segment_anything/automatic_mask_generator.py98-110
处理高分辨率图像会带来特定的挑战,可以通过高级技术来解决。
对于大型图像的精细分割,多尺度处理非常有效。
crop_n_layers > 0 以多尺度处理图像crop_overlap_ratio 以确保裁剪边界处的对象能够正确分割来源: segment_anything/automatic_mask_generator.py45-48 segment_anything/automatic_mask_generator.py197-221
有几种技术可用于优化内存使用
points_per_batch)crop_n_layers)来源: segment_anything/automatic_mask_generator.py65-66
在使用裁剪时,边界处的对象需要特殊处理
crop_overlap_ratio 控制相邻裁剪之间的重叠来源: segment_anything/automatic_mask_generator.py47 segment_anything/automatic_mask_generator.py312-314
虽然 SAM 被设计为一个基础模型,但可以通过提示工程和参数调整针对特定领域进行优化。
不同领域可能受益于不同的参数设置
| 领域 | 推荐参数 | 原理 |
|---|---|---|
| 医学影像 | 较高的 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
特定领域的后处理可以显著提高结果
min_mask_region_area 来过滤掉噪声或伪影postprocess_small_regions 方法来清理断开的区域和孔洞来源: segment_anything/automatic_mask_generator.py323-372
本页介绍了使用 Segment Anything Model 的高级主题,包括:
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(dca509)