菜单

命令行工具

相关源文件

本文档介绍了 Segment Anything Model (SAM) 仓库中提供的命令行工具。这些工具提供了一种方便的方式,无需编写自定义代码即可执行批量处理。有关以编程方式使用 SAM 的信息,请参阅 核心组件

该仓库提供了两个主要的命令行工具:

  1. 自动掩码生成器amg.py)- 为图像中的所有对象生成分割掩码
  2. ONNX 导出export_onnx_model.py)- 将 SAM 模型导出为 ONNX 格式以进行部署

概述

图示:命令行工具系统概述

来源:scripts/amg.py scripts/export_onnx_model.py

自动掩码生成器 (amg.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
--checkpointSAM 模型检查点文件的路径

可选参数

参数默认描述
--devicecuda用于运行推理的设备(cudacpu
--convert-to-rle将掩码保存为 JSON 格式的 COCO RLE,而不是 PNG

来源:scripts/amg.py16-64

自动掩码生成器设置

以下参数控制自动掩码生成的行为

参数描述
--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掩码区域的最小像素面积

来源:scripts/amg.py66-149

输出格式

当以默认模式运行时(不带 --convert-to-rle),脚本为每个输入图像创建一个目录,其中包含:

  1. 每个生成的掩码的 PNG 文件(每个掩码一个文件)
  2. 一个 metadata.csv 文件,其中包含有关每个掩码的信息,包括:
    • 掩码 ID
    • 像素面积
    • 边界框坐标
    • 用作提示的点坐标
    • 预测的 IoU 分数
    • 稳定性分数
    • 裁剪框坐标

当使用 --convert-to-rle 时,为每个输入图像创建一个 JSON 文件,其中包含 COCO RLE 格式的掩码。

来源:scripts/amg.py152-174 scripts/amg.py211-232

工作流

图示:自动掩码生成器工作流程

来源:scripts/amg.py195-233

ONNX 导出工具 (export_onnx_model.py)

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]

必需参数

参数描述
--checkpointSAM 模型检查点的路径。
--output保存 ONNX 模型的路径
--model-type模型类型:default, vit_h, vit_l, 或 vit_b

可选参数

参数默认描述
--return-single-mask导出返回单个最佳掩码而非多个掩码的模型
--opset17ONNX 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

常见示例

生成目录图像的掩码

为目录中的所有图像生成掩码

将模型导出为 ONNX 格式

将 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

限制和注意事项

  1. 内存要求:SAM 模型,尤其是像 vit_h 这样的大型变体,需要大量的 GPU 内存。处理高分辨率图像时,请考虑使用具有足够内存的机器,或使用 --device cpu 标志切换到 CPU 执行。

  2. 处理速度:对于大型图像或目录,自动掩码生成可能非常耗时。考虑使用 --points-per-batch 参数来优化内存使用和速度。

  3. ONNX 兼容性:导出到 ONNX 时,某些操作可能不被所有 ONNX 运行时支持。在某些情况下,--gelu-approximate 标志可能有所帮助。

  4. 输出大小:自动掩码生成器可以为每个图像生成许多掩码。考虑使用过滤参数,例如 --pred-iou-thresh--stability-score-thresh 来减少掩码数量。

来源:scripts/amg.py67-149 scripts/export_onnx_model.py69-84