YOLO Vision 2026:

Ambarella CVflow 导出适用于 Ultralytics YOLO 模型#

预览指南 — 尚未经过供应商验证

本指南为早期预览版,尚未完成,也未经 Ambarella 验证。随着供应商反馈的不断完善,命令、兼容性细节和工作流步骤可能会有所更改。目前没有 format="ambarella" 导出目标;该工作流将标准 ONNX 导出(format="onnx")与 amba_config/amba_chipset 参数相结合,然后使用 Ambarella 的 CVflow 工具链离线将生成的 ONNX 模型编译为可部署的 AmbaPB 格式。

Ambarella SoC 上部署 Ultralytics YOLO 模型需要针对 CVflow® AI 引擎优化的模型格式。此 Ultralytics 分支将 Ambarella 的 SpongeTorch 压缩工具包直接集成到训练、验证和导出流程中,使你能够生产在 Ambarella 硬件上高效运行的剪枝和量化优化模型。本指南概述了当前的目标检测工作流:感知压缩训练、ONNX 导出、使用 CVflow 工具链编译以及使用编译后的 AmbaPB 模型进行推理。

注意

此工作流需要专有的 Ambarella 工具链组件(spongetorch、CVflow 编译器和 cvflowbackend),这些组件在 PyPI 上不可用。在 Ambarella Developer Zone 上注册,通过 Cooper™ 开发者平台获取 SDK 访问权限。

什么是 Ambarella CVflow?#

Ambarella 是一家总部位于圣克拉拉的半导体公司,以其低功耗 AI 视觉 SoC 而闻名,广泛应用于 IP 安全摄像头、行车记录仪、无人机、机器人和汽车系统。其芯片围绕 CVflow® 构建,这是一个专用的神经向量处理架构(片上 AI 加速器或 NPU),能够在极低功耗下提供高推理吞吐量——CV72S 可在 3 W 以下运行 4K 安全摄像头 AI 工作负载。在部署之前,在 PyTorch 等标准框架中训练的模型会使用 Ambarella 的离线工具链编译为 CVflow 的原生格式。

当前的 CVflow SoC 系列及其典型应用:

SoC 系列典型应用
CV72 / CV754K AI 安防摄像头、智能摄像头、工业视觉
CV5 / CV52无人机、运动相机、机器人、多摄像头系统
CV3-AD汽车 ADAS 和自动驾驶域控制器
N1本地生成式 AI 和多流视频分析设备

为什么要将 YOLO 部署到 Ambarella?#

  • 每瓦性能:CVflow SoC 专为全天候边缘 AI 设计,可在相机级功耗预算内运行实时目标检测
  • 感知压缩训练:SpongeTorch 在训练期间应用剪枝量化感知优化,使模型在保持准确性的同时变得对 NPU 更加友好。
  • 位精确的主机验证:编译后的 AmbaPB 模型在你的工作站上通过 Ultralytics predict/val 运行,其执行方式与芯片上的完全相同,因此你可以在接触硬件之前测量量化后的 mAP
  • 集成相机流水线:Ambarella SoC 将 AI 引擎与 ISP 和视频编码器结合在一起,使其成为 AI 摄像头的单芯片解决方案。

工作流程概述#

流水线分为四个阶段:

  1. 感知压缩训练 — 使用 SpongeKit 配置(amba_config)进行训练,以便 SpongeTorch 在训练期间逐步应用剪枝/量化。
  2. ONNX 导出 — 使用相同的 amba_config 导出压缩检查点,并在 ONNX 图中保留压缩结构。
  3. CVflow 编译 — 使用 CVflow 工具链将 ONNX 模型编译为 AmbaPB 工件。
  4. 推理和验证 — 通过 AmbaPB 后端运行编译后的 *.ambapb.ckpt.onnx 模型,经过 Ultralytics 的 predict/val,然后部署到板卡上。

如果你不需要 SpongeTorch 的训练时优化,SpongeTorch 训练和 SpongeTorch 感知导出可以替换为普通的 ONNX 导出(请参阅在没有 SpongeTorch 的情况下导出)。

前提条件#

安装#

安装此 Ultralytics 分支,然后从 SDK 分发包中安装 Ambarella 工具链 wheel:

!!! Tip "安装"

# Install this Ultralytics fork from source
git clone https://github.com/Ambarella-Inc/ultralytics
cd ultralytics
git checkout amba_v8.4.46
pip install -e .

# Install Ambarella toolchain wheels from the SDK
pip install /path/to/spongetorch-*.whl
pip install /path/to/cvflowbackend-*.whl

AmbaPB 推理后端通过 CVflow 工具链的 tv2 命令(tv2 -libpath cvflowbackend)来定位 cvflowbackend,因此在运行编译模型的推理或验证之前,必须安装该工具链并将其配置在你的 PATH 中。

SpongeKit 配置文件#

SpongeTorch 由 SpongeKit 配置文件(protobuf-text 格式,.prototxt)驱动,该文件定义了要应用的压缩通道:剪枝稀疏度目标、量化设置和压缩计划。从你的 Ambarella SDK 版本获取示例配置和匹配的架构文档。每当验证必须准备未准备好的模型时,都要使用训练配置,并且在导出压缩检查点时始终使用相同的配置。

Amba 参数#

两个参数控制 trainvalexport 模式下的 SpongeTorch 集成:

参数类型默认值描述
amba_configstrNone传递给 spongetorch.prepare() 的 SpongeKit 配置路径。启用感知压缩训练和 SpongeTorch 感知导出。
amba_chipsetstrNone传递给 spongetorch.set_target_chipset() 的目标芯片组名称,例如 CV72

该分支还添加了一个通用导出参数:

参数类型默认值描述
export_filestrNone自定义导出输出路径/名称,例如 '/tmp/model.onnx''model.onnx'

压缩感知训练#

在启用 SpongeTorch 压缩的情况下训练(或微调)你的模型:

用法
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco8.yaml",
    epochs=100,
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

设置 amba_config 后,训练器会在设置时用 spongetorch.prepare() 包装模型和优化器。压缩按步骤计划逐步应用,因此网络在变得稀疏且对量化友好的同时,仍能保持准确性。经过训练的检查点会存储 SpongeTorch 的稀疏状态(_orig/_mask 张量),导出步骤稍后需要用到这些张量。配置文件作为 amba_config.prototxt 复制到运行目录中,以确保可重复性。

检查点门控

在 SpongeTorch 压缩计划跨越其 end_step 之前,best.ptlast.pt 有意不会保存——半压缩的检查点将无法使用。确保 epochs 足够长,以便完成你配置中的计划;日志会报告检查点何时开始保存。如果训练在计划完成之前结束,最终轮次仍会被保存并附带警告,但此类检查点不应进行部署。

微调而不是从头开始训练

为了获得最佳准确率,请先正常训练模型(或从预训练检查点开始),然后在训练好的权重上使用 amba_config 运行较短的压缩微调。

验证压缩检查点#

在编译之前,使用相同的配置验证准确性:

用法
yolo val model=runs/detect/train/weights/best.pt data=coco8.yaml \
  amba_config=config.prototxt amba_chipset=CV72

验证器在需要时重新应用 spongetorch.prepare() 并禁用 Conv+BN 融合,从而保留压缩结构。将 mAP 与你的未压缩基线进行比较;如果准确率下降太多,请调整 SpongeKit 配置并重新训练。

导出到 ONNX#

使用训练中使用的相同 amba_config 导出压缩检查点:

用法
from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")
model.export(
    format="onnx",
    amba_config="config.prototxt",
    amba_chipset="CV72",
)

导出器重建模型,使用你的配置重新应用 spongetorch.prepare(),将稀疏检查点权重重新加载到准备好的结构中,并在禁用 Conv+BN 融合的情况下追踪到 ONNX——生成符合 CVflow 编译器期望的精确形式的图。

保留模型元数据#

ONNX 导出将模型任务、类名、步幅和输入大小嵌入到 ONNX 文件中,而 AmbaPB 后端从编译模型旁边的 metadata.yaml 辅助文件中读取此信息。除非你的 CVflow 编译器创建了此辅助文件,否则请在编译前从 ONNX 模型中提取它:

import onnx

from ultralytics.utils import YAML

model = onnx.load("model.onnx")
YAML.save("metadata.yaml", {item.key: item.value for item in model.metadata_props})

metadata.yaml 与编译后的 *.ambapb.ckpt.onnx*.ambapb.fastckpt.onnx 文件放在同一目录中。

警告
  • 检查点必须包含 SpongeTorch 压缩状态。在设置了 amba_config 的情况下导出普通检查点会引发:"Checkpoint has no SpongeTorch pruning state... Use a compressed checkpoint from amba training before export."
  • 配置必须与训练期间使用的配置匹配,否则权重重载会失败。

使用 CVflow 工具链编译#

按照 SDK 的编译指南,使用 SDK 中的 CVflow 编译器为你的目标芯片组编译导出的 ONNX 模型。编译器将图映射到 CVflow AI 引擎上(量化、调度、内存规划),并生成可部署的 AmbaPB 工件。

注意

为了让 Ultralytics 识别编译后的模型,其文件名必须以 .ambapb.ckpt.onnx.ambapb.fastckpt.onnx 结尾。

使用编译后的模型运行推理#

编译后的 AmbaPB 模型直接通过 Ultralytics API 加载——AutoBackend 检测到 .ambapb 后端后缀并通过 cvflowbackend 路由推理,以位精确的方式执行模型,就像它在 AI 引擎上运行一样:

用法
from ultralytics import YOLO

model = YOLO("model.ambapb.ckpt.onnx")

# Inference
results = model("https://ultralytics.com/images/bus.jpg")

# Validation
metrics = model.val(data="coco8.yaml")

这是硬件部署前的最终准确性检查,包括所有编译器量化效果。如果编译后的模型旁边放置了 metadata.yaml 文件,后端将从中读取类名、步幅和任务信息。后端默认使用 CVflow 推理模式 acinf;设置环境变量 ULTRALYTICS_AMBAPB_DEBUG=1 以记录输入/输出详细信息用于调试。

在开发板上部署#

使用 Ambarella SDK 运行时在你的 Ambarella 设备上加载编译后的模型。预处理和后处理必须与目标检测模型编译时的要求相匹配:0–255 范围内的加黑边 RGB 输入(Ultralytics AmbaPB 后端为编译模型提供 0–255 RGB),以及输出上的标准 YOLO 检测解码。有关运行时 API,请参阅 SDK 部署文档。

在没有 SpongeTorch 的情况下导出#

如果你不需要 SpongeTorch 的训练时剪枝和量化感知优化,标准的 Ultralytics 流水线也可以生成可编译为 CVflow 的模型:

用法
yolo export model=yolo26n.pt format=onnx

使用 CVflow 工具链编译生成的 ONNX,该工具链本身执行训练后量化。此路径以牺牲一些 NPU 性能和量化准确率为代价,换取了更简单的工作流,在训练时没有 spongetorch 依赖项。

实际应用场景#

Ambarella CVflow SoC 上的 Ultralytics YOLO 模型为边缘侧的始终在线视觉提供支持:

  • AI 安防摄像头:在 3W 以下的功耗预算内,在 4K IP 摄像头上实现实时人员和车辆检测。
  • 无人机和机器人:在 CV5 级芯片上进行用于导航、检测和交付的板载目标检测和跟踪。
  • 汽车:在 CV3-AD 域控制器上进行诸如行人和车辆检测之类的 ADAS 感知工作负载。
  • 工业和零售分析:在边缘设备上进行多流人员计数、PPE 检测和货架监控。

总结#

本预览指南概述了在 Ambarella CVflow SoC 上部署 Ultralytics YOLO 模型当前的工作流:使用 SpongeTorch 进行感知压缩训练(amba_config/amba_chipset)、压缩检查点的 ONNX 导出、使用 CVflow 工具链离线编译为 AmbaPB,以及在板卡部署前通过 Ultralytics 对编译模型进行位精确验证。

有关其他边缘 AI 目标,请参阅相关的 HailoRockchip RKNNSony IMX500Qualcomm QNNDEEPXAxelera 指南。有关导出格式的完整列表,请访问导出模式文档和集成页面

常见问题解答#

  • 不可以。没有 format="ambarella" 目标。导出为 ONNX(可选择通过 amba_config 进行 SpongeTorch 压缩),然后使用 SDK 中的 Ambarella CVflow 工具链离线将 ONNX 模型编译为 AmbaPB。

  • CVflow 工具链支持的任何基于 CVflow 的 SoC 都可以作为目标,包括用于 AI 相机的 CV72/CV75 系列、用于无人机和机器人的 CV5/CV52 以及用于汽车的 CV3-AD。amba_chipset 参数配置了 SpongeTorch 的优化目标;编译时需单独选择匹配的目标。接受的芯片组字符串和可用性取决于安装的 SDK 版本。

  • SpongeTorch 是 Ambarella 的模型压缩工具包,集成在 Ultralytics 的 Ambarella 分支中,用于剪枝和量化感知训练。它是可选的:普通的 Ultralytics ONNX 导出也可以使用训练后量化并通过 CVflow 工具链进行编译,但这会以一定的 NPU 性能和量化准确性为代价。

  • 它们是专有的且不在 PyPI 上。在 Ambarella Developer Zone 上注册以请求 SDK 访问权限;spongetorchcvflowbackend wheel 以及 CVflow 编译器随 SDK 分发包一起提供。

  • 在安装了 Ambarella 分支的情况下运行 yolo val model=model.ambapb.ckpt.onnx data=your_data.yaml。AmbaPB 后端以位精确的方式执行编译后的模型,就像它在 CVflow AI 引擎上运行一样,因此报告的 mAP 包含了所有编译器量化效果。

评论