本页面提供了全面的示例,演示如何使用分割任意模型 (SAM) 完成不同的图像分割任务。我们将介绍如何使用交互式 SamPredictor 和自动式 SamAutomaticMaskGenerator 接口,以及命令行工具和部署选项。有关安装说明和基本设置,请参阅 入门指南,有关 SAM 架构的技术详细信息,请参阅 核心组件。
SAM 提供两种主要的掩码生成接口
来源: notebooks/predictor_example.ipynb20-30 notebooks/automatic_mask_generator_example.ipynb18-30
SamPredictor 类通过允许您提供特定的提示(点、框或掩码)来指示要分割的对象,从而实现交互式分割。
来源: README.md55-65 notebooks/predictor_example.ipynb80-90
点提示允许您点击一个对象来生成其掩码。每个点都可以标记为前景点(对象内部)或背景点(对象外部)。
multimask_output=True 参数指示 SAM 为相同的提示返回三个不同的掩码预测,允许您选择最佳的一个。
来源: notebooks/predictor_example.ipynb180-200
框提示允许您在对象周围绘制边界框以获得精确的掩码。
来源: notebooks/predictor_example.ipynb220-240
您可以结合点和框提示以获得更精确的控制
您还可以使用先前生成的掩码 Logits 来改进预测
来源: notebooks/predictor_example.ipynb250-270
来源: notebooks/predictor_example.ipynb20-40 README.md55-70
SamAutomaticMaskGenerator 类允许您生成图像中的所有潜在对象掩码,而无需提供特定的提示。
来源: README.md68-72 notebooks/automatic_mask_generator_example.ipynb120-130
您可以使用各种参数自定义自动掩码生成器的行为
影响掩码质量和数量的主要参数
points_per_side:控制点采样的密度(点越多 = 掩码越多)pred_iou_thresh:较高的值会产生更高质量的掩码,但数量较少stability_score_thresh:较高的值会选择对点放置变化更鲁棒的掩码min_mask_region_area:去除掩码中的小断开区域和孔洞来源: notebooks/automatic_mask_generator_example.ipynb130-150
来源: notebooks/automatic_mask_generator_example.ipynb18-30
generate() 方法返回一个字典列表,每个字典包含有关一个掩码的信息
每个掩码字典包含
segmentation:二进制掩码bbox:XYWH 格式的边界框area:掩码的像素面积predicted_iou:模型的预测 IoU 分数stability_score:掩码稳定性分数crop_box:用于生成此掩码的图像裁剪框point_coords:用于生成此掩码的点坐标来源: notebooks/automatic_mask_generator_example.ipynb140-160 README.md118-145
SAM 包含一个命令行脚本,用于自动为图像生成掩码
例如
该脚本支持以下可选参数
--checkpoint:模型检查点的路径--model-type:要加载的模型类型(默认为 "vit_h")--input:图像文件或图像目录的路径--output:输出目录的路径--amg-kwargs:SamAutomaticMaskGenerator 参数的 JSON 序列化字符串来源: README.md76-78
对于在支持 ONNX 的环境中进行部署,您可以将 SAM 的掩码解码器导出为 ONNX 格式。
例如
来源: README.md88-96
ONNX 导出将模型分为两部分
来源: README.md88-95
SAM 提供三种模型尺寸,可平衡精度和计算要求
| 模型类型 | 描述 | 检查点大小 | 性能 |
|---|---|---|---|
vit_h(默认) | ViT-H SAM 模型 | 2.4 GB | 最高精度,最慢 |
vit_l | ViT-L SAM 模型 | 1.2 GB | 精度和速度的良好平衡 |
vit_b | ViT-B SAM 模型 | 375 MB | 最快,精度较低 |
使用特定模型
来源: README.md101-115
一次性计算嵌入:使用 SamPredictor 时,请调用 set_image() 一次,然后进行多次基于提示的预测,而不是为每次预测重新加载图像。
提示选择:
多掩码输出:设置 multimask_output=True 可获得多个备选掩码预测,然后选择最佳的一个。
自动掩码生成器性能:
points_per_side 可加快处理速度pred_iou_thresh 和 stability_score_thresh 可获得更高质量的掩码min_mask_region_area内存优化:如果您遇到内存问题,特别是使用 ViT-H 模型时
来源: notebooks/predictor_example.ipynb30-40 notebooks/automatic_mask_generator_example.ipynb25-30
要在笔记本或应用程序中显示掩码和提示,您可以使用这些辅助函数
来源: notebooks/predictor_example.ipynb145-170
在处理 SAM 的输出时,了解掩码数据格式很重要
predict() 方法返回三个值
masks:一个形状为 [num_masks, H, W] 的布尔值张量scores:一个预测置信度分数的列表logits:可用于进一步细化的原始 logitsgenerate() 方法返回一个字典列表,每个字典包含
用于以 COCO 格式存储掩码
来源: README.md118-155
SAM 可集成到各种计算机视觉工作流中
SamPredictor 加快训练数据的手动标注来源: README.md20-30
模型加载错误:
性能缓慢:
不理想的掩码:
SamAutomaticMaskGenerator 的参数multimask_output 并从备选项中选择最佳掩码内存问题:
ONNX 导出问题:
来源: README.md95-100 notebooks/predictor_example.ipynb40-50 notebooks/automatic_mask_generator_example.ipynb30-40