本文档概述了在不同环境中部署“分割一切模型”(SAM)的各种选项。它涵盖了通过 Python API 进行部署、导出为 ONNX 格式以获得更广泛的兼容性以及在 Web 浏览器中运行 SAM。有关 ONNX 导出选项的具体详细信息,请参阅 ONNX 导出,有关 Web 演示应用程序的信息,请参阅 Web 演示。
SAM 提供多种部署选项,具体取决于您的用例、性能要求和目标环境
图示:SAM 部署选项
来源: README.md87-99
最直接的部署选项是通过其提供的 API 在 Python 应用程序中直接使用 SAM。此方法非常适合您能够控制环境的服务器端应用程序或本地工具。
SamPredictor 类提供了一个通过用户定义的提示进行交互式分割的接口
用于在没有用户提示的情况下自动生成图像中的所有潜在掩码
用于从命令行快速生成掩码
来源: README.md53-80
将 SAM 导出为 ONNX 格式,可以在支持 ONNX Runtime 的各种环境(包括浏览器、移动设备和边缘计算平台)中进行部署。
图示:SAM ONNX 导出过程
来源: scripts/export_onnx_model.py97-167
可以使用以下方法将轻量级掩码解码器导出为 ONNX 格式
导出脚本提供了多种自定义选项
| 参数 | 描述 |
|---|---|
--checkpoint | SAM 模型检查点的路径。 |
--output | 保存 ONNX 模型的文件名 |
--model-type | SAM 模型类型(默认、vit_h、vit_l、vit_b) |
--return-single-mask | 导出仅返回最佳掩码的模型 |
--opset | 使用的 ONNX opset 版本(默认:17) |
--quantize-out | 用于保存量化模型的可选路径 |
--gelu-approximate | 用 tanh 替换 GELU 运算的近似值 |
--use-stability-score | 使用稳定性分数而不是预测质量分数 |
--return-extra-metrics | 返回额外的指标(稳定性分数、面积等) |
来源: scripts/export_onnx_model.py22-94
图示:SAM ONNX 模型接口
来源: scripts/export_onnx_model.py122-141
导出的 ONNX 模型需要特定的输入
image_embeddings:来自图像编码器的输出(不在 ONNX 模型中)point_coords:输入点的坐标point_labels:输入点的标签mask_input:可选输入掩码has_mask_input:一个布尔值,指示是否提供了掩码输入orig_im_size:原始图像尺寸并产生以下输出
masks:二进制掩码预测iou_predictions:掩码的预测 IoU 分数low_res_masks:低分辨率掩码输出来源: scripts/export_onnx_model.py130-142
SAM 可以使用导出的 ONNX 模型和 ONNX Runtime Web 部署到 Web 浏览器中。
图示:Web 演示架构
来源: README.md97-99
SAM 存储库在 demo/ 文件夹中包含一个基于 React 的 Web 演示,演示了如何
Web 演示使用多线程来在执行模型推理的同时保持响应式界面。
来源: README.md97-99
SAM 提供三种不同主干大小的模型变体
| 模型类型 | 描述 | Checkpoint |
|---|---|---|
default 或 vit_h | ViT-H SAM 模型(最大) | sam_vit_h_4b8939.pth |
vit_l | ViT-L SAM 模型(中等) | sam_vit_l_0b3195.pth |
vit_b | ViT-B SAM 模型(最小) | sam_vit_b_01ec64.pth |
较小的模型会牺牲一定的准确性以换取更快的推理速度和更低的内存需求。
来源: README.md101-114
有几种选项可用于优化模型性能
模型量化
--quantize-out 参数单一掩码返回
--return-single-mask 参数GELU 近似
--gelu-approximate 参数来源: scripts/export_onnx_model.py42-74
图示:SAM 部署工作流
来源: README.md87-99
根据您的部署目标,需要不同的依赖项
来源: README.md30-51