菜单

部署

相关源文件

本文档概述了在不同环境中部署“分割一切模型”(SAM)的各种选项。它涵盖了通过 Python API 进行部署、导出为 ONNX 格式以获得更广泛的兼容性以及在 Web 浏览器中运行 SAM。有关 ONNX 导出选项的具体详细信息,请参阅 ONNX 导出,有关 Web 演示应用程序的信息,请参阅 Web 演示

部署选项

SAM 提供多种部署选项,具体取决于您的用例、性能要求和目标环境

图示:SAM 部署选项

来源: README.md87-99

Python API 部署

最直接的部署选项是通过其提供的 API 在 Python 应用程序中直接使用 SAM。此方法非常适合您能够控制环境的服务器端应用程序或本地工具。

使用 SamPredictor

SamPredictor 类提供了一个通过用户定义的提示进行交互式分割的接口

使用 SamAutomaticMaskGenerator

用于在没有用户提示的情况下自动生成图像中的所有潜在掩码

命令行界面

用于从命令行快速生成掩码

来源: README.md53-80

ONNX 导出和部署

将 SAM 导出为 ONNX 格式,可以在支持 ONNX Runtime 的各种环境(包括浏览器、移动设备和边缘计算平台)中进行部署。

ONNX 导出过程

图示:SAM ONNX 导出过程

来源: scripts/export_onnx_model.py97-167

导出命令

可以使用以下方法将轻量级掩码解码器导出为 ONNX 格式

导出选项

导出脚本提供了多种自定义选项

参数描述
--checkpointSAM 模型检查点的路径。
--output保存 ONNX 模型的文件名
--model-typeSAM 模型类型(默认、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

ONNX 模型架构

图示:SAM ONNX 模型接口

来源: scripts/export_onnx_model.py122-141

使用导出的 ONNX 模型

导出的 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

Web 浏览器部署

SAM 可以使用导出的 ONNX 模型和 ONNX Runtime Web 部署到 Web 浏览器中。

Web 演示架构

图示:Web 演示架构

来源: README.md97-99

Web 演示实现

SAM 存储库在 demo/ 文件夹中包含一个基于 React 的 Web 演示,演示了如何

  • 在浏览器中加载和运行 ONNX 模型
  • 处理图像并生成嵌入
  • 处理用户交互以进行提示
  • 可视化分割掩码

Web 演示使用多线程来在执行模型推理的同时保持响应式界面。

来源: README.md97-99

性能考量

模型大小选项

SAM 提供三种不同主干大小的模型变体

模型类型描述Checkpoint
defaultvit_hViT-H SAM 模型(最大)sam_vit_h_4b8939.pth
vit_lViT-L SAM 模型(中等)sam_vit_l_0b3195.pth
vit_bViT-B SAM 模型(最小)sam_vit_b_01ec64.pth

较小的模型会牺牲一定的准确性以换取更快的推理速度和更低的内存需求。

来源: README.md101-114

优化技术

有几种选项可用于优化模型性能

  1. 模型量化

    • ONNX 导出脚本提供了量化模型的选项
    • 减小模型大小并提高推理速度
    • 使用导出脚本的 --quantize-out 参数
  2. 单一掩码返回

    • 对于高分辨率图像,仅返回最佳掩码可以提高运行时性能
    • 使用导出脚本的 --return-single-mask 参数
  3. GELU 近似

    • 使用 tanh 近似替换 GELU 运算
    • 适用于具有缓慢或未实现 erf 运算的运行时
    • 使用导出脚本的 --gelu-approximate 参数

来源: scripts/export_onnx_model.py42-74

部署工作流摘要

图示:SAM 部署工作流

来源: README.md87-99

必需的依赖项

根据您的部署目标,需要不同的依赖项

Python API 部署

  • Python ≥ 3.8
  • PyTorch ≥ 1.7
  • TorchVision ≥ 0.8

附加依赖项

  • OpenCV(用于掩码后处理)
  • pycocotools(用于 COCO 格式)
  • matplotlib(用于可视化)
  • ONNX Runtime(用于运行 ONNX 模型)
  • ONNX(用于导出)

Web 部署

  • ONNX Runtime Web
  • Web 应用程序框架(例如 React)

来源: README.md30-51