本文档介绍了 Segment Anything Model (SAM) 仓库中提供的命令行工具。这些工具提供了一种方便的方式,无需编写自定义代码即可执行批量处理。有关以编程方式使用 SAM 的信息,请参阅 核心组件。
该仓库提供了两个主要的命令行工具:
amg.py)- 为图像中的所有对象生成分割掩码export_onnx_model.py)- 将 SAM 模型导出为 ONNX 格式以进行部署图示:命令行工具系统概述
来源:scripts/amg.py scripts/export_onnx_model.py
amg.py 脚本在图像上运行 SAM 的自动掩码生成器,无需用户提示即可生成分割掩码。它可以处理单个图像或整个目录,并以 PNG 或 COCO RLE 格式输出掩码。
python scripts/amg.py --input <input_path> --output <output_path> --model-type <model_type> --checkpoint <checkpoint_path> [options]
| 参数 | 描述 |
|---|---|
--input | 图像或图像文件夹的路径 |
--output | 保存掩码的目录 |
--model-type | 模型类型:default, vit_h, vit_l, 或 vit_b |
--checkpoint | SAM 模型检查点文件的路径 |
| 参数 | 默认 | 描述 |
|---|---|---|
--device | cuda | 用于运行推理的设备(cuda 或 cpu) |
--convert-to-rle | 否 | 将掩码保存为 JSON 格式的 COCO RLE,而不是 PNG |
以下参数控制自动掩码生成的行为
| 参数 | 描述 |
|---|---|
--points-per-side | 图像每边采样的点数 |
--points-per-batch | 同时处理的点数 |
--pred-iou-thresh | 掩膜被保留的最低预测 IoU 值。 |
--stability-score-thresh | 保留掩码的最低稳定性分数 |
--stability-score-offset | 计算稳定性分数时应用的偏移量 |
--box-nms-thresh | 用于去除重复掩码的 NMS 阈值 |
--crop-n-layers | 分层掩码生成的裁剪层数 |
--crop-nms-thresh | 不同裁剪层之间的 NMS 阈值 |
--crop-overlap-ratio | 相邻裁剪之间的重叠比例 |
--crop-n-points-downscale-factor | 用于减小每个裁剪层 points-per-side 的因子 |
--min-mask-region-area | 掩码区域的最小像素面积 |
当以默认模式运行时(不带 --convert-to-rle),脚本为每个输入图像创建一个目录,其中包含:
metadata.csv 文件,其中包含有关每个掩码的信息,包括:当使用 --convert-to-rle 时,为每个输入图像创建一个 JSON 文件,其中包含 COCO RLE 格式的掩码。
来源:scripts/amg.py152-174 scripts/amg.py211-232
图示:自动掩码生成器工作流程
export_onnx_model.py 脚本将 SAM 模型导出为 ONNX 格式,该格式支持跨各种平台和运行时环境进行部署。有关 ONNX 格式及其优势的更多信息,请参阅 ONNX 导出。
python scripts/export_onnx_model.py --checkpoint <checkpoint_path> --output <output_path> --model-type <model_type> [options]
| 参数 | 描述 |
|---|---|
--checkpoint | SAM 模型检查点的路径。 |
--output | 保存 ONNX 模型的路径 |
--model-type | 模型类型:default, vit_h, vit_l, 或 vit_b |
| 参数 | 默认 | 描述 |
|---|---|---|
--return-single-mask | 否 | 导出返回单个最佳掩码而非多个掩码的模型 |
--opset | 17 | ONNX opset 版本(必须 ≥11) |
--quantize-out | 无 | 如果设置,将在指定路径保存一个量化模型 |
--gelu-approximate | 否 | 使用 tanh 的 GELU 近似值(对于具有缓慢/缺失 erf 运算的运行时很有用) |
--use-stability-score | 否 | 使用稳定性分数代替预测掩码质量 |
--return-extra-metrics | 否 | 返回附加指标(稳定性分数、面积等) |
来源:scripts/export_onnx_model.py22-94
图示:ONNX 导出过程工作流
来源:scripts/export_onnx_model.py97-200
图示:ONNX 导出代码实体关系
来源:scripts/export_onnx_model.py97-115 segment_anything/build_sam.py47-52
为目录中的所有图像生成掩码
将 SAM 模型导出为 ONNX 格式
也创建模型的量化版本
来源:scripts/amg.py236-238 scripts/export_onnx_model.py174-201
命令行工具作为核心 SAM 组件的高级接口。它们提供了对 Python API 类公开的功能的便捷访问。
图示:命令行工具与整体系统的集成
来源:scripts/amg.py195-201 scripts/export_onnx_model.py107-115 segment_anything/build_sam.py47-52
内存要求:SAM 模型,尤其是像 vit_h 这样的大型变体,需要大量的 GPU 内存。处理高分辨率图像时,请考虑使用具有足够内存的机器,或使用 --device cpu 标志切换到 CPU 执行。
处理速度:对于大型图像或目录,自动掩码生成可能非常耗时。考虑使用 --points-per-batch 参数来优化内存使用和速度。
ONNX 兼容性:导出到 ONNX 时,某些操作可能不被所有 ONNX 运行时支持。在某些情况下,--gelu-approximate 标志可能有所帮助。
输出大小:自动掩码生成器可以为每个图像生成许多掩码。考虑使用过滤参数,例如 --pred-iou-thresh 和 --stability-score-thresh 来减少掩码数量。