Ultralytics YOLO27:

Ultralytics YOLO 模型的 Hailo 导出#

Hailo AI 加速器可在 Raspberry Pi AI HAT+ 和 AI HAT+ 2 等边缘设备上运行已编译的 Hailo 可执行格式 (HEF) 模型。Ultralytics 可使用 Hailo 数据流编译器 (DFC) 将 YOLO 检测、分割、语义分割、深度估计、分类、姿态和 OBB 模型直接导出为 HEF。

Hailo 部署面向边缘计算机视觉而设计:摄像头、机器人、工业系统、网关,以及其他需要本地目标检测、无需将每一帧发送到云端的设备。已编译的 HEF 包含量化网络、硬件分配、调度,以及所选加速器所需的可选 HailoRT 后处理。

Hailo edge AI ecosystem for Ultralytics YOLO

比较更新的边缘加速器

对于新的硬件部署,你还可以评估 DeepXAxeleraRockchip。DeepX 是追求更高 YOLO 性能和更高每瓦性能时更合适的起点,而 Axelera 面向更高吞吐量的部署。Rockchip 也广泛应用于价格实惠的 SBC 和嵌入式系统。

为什么要在 Hailo 上部署 Ultralytics YOLO?#

将 Ultralytics YOLO 与 Hailo 神经处理单元 (NPU) 结合,可为从模型训练到边缘 AI 推理提供实用路径。常见用例包括:

  • 智能摄像头和视频分析:在摄像头附近运行实时目标检测,用于安防、零售、交通和占用情况分析。
  • 机器人和自主系统:检测人员、车辆、包裹、工具或障碍物,无需依赖持续的云连接。
  • 工业计算机视觉:部署自定义 YOLO 模型,用于检测、计数、安全监控和质量控制。
  • Raspberry Pi AI 项目:使用 AI HAT+ 或 AI HAT+ 2 为 Raspberry Pi 系统添加加速视觉推理。
  • 边缘网关和 AI PC:在本地处理多个视频或传感器流,同时降低带宽和云计算需求。

本地推理可以提升隐私性和响应速度,因为图像会保留在部署设备上。实际吞吐量、延迟和功耗取决于 YOLO 模型大小、输入分辨率、Hailo 架构、主机系统和应用流水线。

Hailo 导出工作原理#

Ultralytics 负责 format="hailo" 背后的完整导出工作流:

YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compile

导出器会自动执行以下阶段:

  1. 使用与编译器兼容的设置导出静态 ONNX 图。
  2. 为模型架构选择检测头输出。
  3. 生成归一化、激活和后处理指令。
  4. 构建具有代表性的校准数据流,并将模型量化为 INT8。
  5. 为所选 Hailo 加速器编译优化后的图。
  6. 使用 Ultralytics 元数据保存 HEF,并移除中间 ONNX 文件。

YOLOv8 和 YOLO11 检测模型在编译后的流水线中使用 HailoRT YOLO NMS。YOLO26 编译原始检测头张量:Ultralytics 将 NMS 应用于默认的一对多输出,或者使用 nms=False 解码无 NMS 的一对一输出。YOLOv8/YOLO11 分割、姿态和 OBB 编译原始头部张量,由 Ultralytics 在推理时进行解码,并且 YOLOv8/YOLO11/YOLO26 分类在芯片上运行 softmax,因此 HEF 直接返回类概率。对于 YOLO26 语义分割,导出器遵循加速器:Hailo-8/8L (DFC v3.x) 返回用于主机上采样和缩减的分类器对数几率,而 Hailo-10H/15 (DFC v5.x) 在芯片上编译多类 ArgMax 头并返回紧凑的类别图。单类头在每个目标上都使用主机对数几率路径,因为它们需要阈值而不是 ArgMax。YOLO26 深度模型在 a16 中编译密集对数几率卷积,并在主机上重建公制深度图(头部之后的截断/指数和学习到的对数仿射校准),因此量化器在原始对数几率上保持其最宽的范围。用户无需查找 ONNX 终点节点、编写 Hailo 模型脚本 (.alls) 或手动创建 NMS JSON。

安装#

安装 Ultralytics,并从 Hailo Developer Zone 下载适用于目标硬件的 DFC wheel(需要免费注册):

pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whl
注意

Hailo 编译需要 Linux x86_64。在受支持的工作站上编译模型,然后将输出目录复制到目标设备。推理不需要 DFC。

Hailo-8 和 Hailo-8L 使用 DFC v3.x。Hailo-10H 和 Hailo-15 使用 DFC v5.x。安装与目标加速器匹配的编译器版本。

在 Ultralytics Platform 中导出

Ultralytics Platform 提供托管式 Hailo 导出,因此无需本地 Hailo 账户或 DFC 安装。

导出 Hailo HEF 模型#

使用 format="hailo",并通过 name 选择目标加速器:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output)  # yolo11n_hailo_model/

对应的 CLI 命令为:

yolo export model=yolo11n.pt format=hailo name=hailo8

Hailo 导出仅支持 INT8。未提供 data 时,Ultralytics 会自动下载特定任务的校准数据集。对于自定义模型,请使用具有代表性的训练图像或验证图像:

要获得最佳精度,至少使用 1,024 张校准图像

Ultralytics 强制使用 DFC 优化级别 2,并将微调配置为使用实际的校准数据集大小。Hailo 建议至少使用 1,024 张多样化图像;内置轻量级数据集会以级别 2 编译,但可能无法代表生产领域。对于生产环境的 HEF 导出,请通过 data="path/to/dataset.yaml" 传入具有代表性的数据集。

model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")

编译使用固定输入形状。将 imgsz 设置为设备上使用的分辨率:

model.export(format="hailo", name="hailo8", imgsz=640)

支持的模型和硬件#

Hailo 生态系统涵盖广泛的计算机视觉工作负载,但 Ultralytics 的 format="hailo" 导出器目前验证了标准 YOLO 检测、分割、语义分割、深度估计、分类、姿态和 OBB 检测头。任务表描述了可用的导出器路径;硬件验证情况在下方单独列出。

Ultralytics 任务直接 Hailo 导出支持的模型系列备注
目标检测YOLOv8、YOLO11、YOLO26标准 Ultralytics Detect 检测头,包括自定义模型
实例分割YOLOv8、YOLO11原始检测头张量由 Ultralytics 在推理时解码;当前不支持 YOLO26-seg
语义分割YOLO26Hailo-8/8L 和单类别检测头返回 logits;Hailo-10H/15 直接生成多类别图
深度估计YOLO26a16 中编译密集 logits;Ultralytics 在推理时重建度量深度图
图像分类YOLOv8、YOLO11、YOLO26softmax 在芯片上运行;HEF 直接返回类别概率
姿态估计YOLOv8、YOLO11原始检测头张量由 Ultralytics 在推理时解码;当前不支持 YOLO26-pose
定向目标检测YOLOv8、YOLO11原始检测头张量由 Ultralytics 在推理时解码;当前不支持 YOLO26-OBB

YOLOv10、YOLO-World、YOLOE 和 RT-DETR 等专用检测系列目前无法通过 Ultralytics format="hailo" 路径支持。Ultralytics 会在编译前拒绝这些任务和模型系列,而不是生成未经验证的 HEF。

模型系列Hailo-8 / Hailo-8LHailo-10H / Hailo-15输出
YOLOv8 / YOLO11 检测带 HailoRT YOLO NMS 的 HEF
YOLO26 检测原始检测张量;默认情况下为主机 NMS,使用 nms=False 时为无 NMS
YOLOv8-seg / YOLO11-seg原始分割张量,由 Ultralytics 在推理时解码
YOLOv8-pose / YOLO11-pose已在 Hailo-8L 上验证未经验证原始姿态张量,由 Ultralytics 在推理时解码
YOLOv8-obb / YOLO11-obb已在 Hailo-8L 上验证未经验证原始 OBB 张量,由 Ultralytics 在推理时解码
YOLOv8-cls / YOLO11-cls / YOLO26-cls已在 Hailo-8L 上验证未经验证芯片端 softmax;HEF 返回类别概率
YOLO26-sem已在 Hailo-8L 上验证未经验证Logits,或 Hailo-10H/15 上直接生成的多类别图
YOLO26-depth已在 Hailo-8L 上验证未经验证密集 logits;由 Ultralytics 解码度量深度图

姿态、OBB、分类、YOLO26 语义分割以及 YOLO26 深度估计(Hailo-8/8L 路径)已在 Hailo-8L、HailoRT 4.23 和 DFC 3.33 上完成验证。导出器接受下方列出的其他目标,但这些新的任务路径需要使用匹配的编译器和设备进行验证后,才能用于生产环境。

选择以下某个 name 值:

name目标加速器
hailo8Hailo-8
hailo8lHailo-8L
hailo10hHailo-10H
hailo15hHailo-15H
hailo15lHailo-15L

如果省略 name,则使用 hailo8l 作为默认值;将 name 设置为你要部署使用的加速器。安装与所选目标匹配的 DFC 版本。

Hailo 硬件和 SDK 版本#

不同的 Hailo 加速器系列使用不同的编译器版本。生成的 HEF 必须与目标硬件匹配,因此应为运行推理的设备选择 name,而不是执行导出的机器。

硬件系列DFC 版本
Hailo-8 / Hailo-8LDFC v3.x
Hailo-10HDFC v5.x
Hailo-15H / Hailo-15LDFC v5.x

编译器运行在 Linux x86_64 上,而生成的 HEF 则通过 HailoRT 运行在 Hailo 设备上。这种分离使你可以在工作站或 Ultralytics Platform 中进行编译,然后将小型运行时产物部署到 ARM 或 x86 边缘主机。

兼容性说明#

Hailo 编译与硬件相关,并使用固定输入形状。请注意以下限制:

  • 所选的 name 必须与部署加速器匹配。
  • 校准图像应代表生产环境中预期的光照、视角、物体和背景。
  • 每个 HEF 都针对固定的 imgsz 进行编译。若要支持多个分辨率,请在主机上将帧调整为已编译的尺寸,或针对每个分辨率分别编译一个 HEF。
  • 由于 Ultralytics 会根据模型元数据生成后处理配置,因此支持自定义类别数量。
  • 支持使用标准 Ultralytics Detect 头的检测模型、YOLOv8/YOLO11 分割、姿态和 OBB 模型,以及 YOLOv8/YOLO11/YOLO26 分类模型和 YOLO26 语义分割与深度估计模型;目前不支持 YOLO26 实例分割、姿态和定向边界框,以及 YOLO-World、YOLOE、YOLOv10 和 RT-DETR 导出。
  • Hailo-8/8L 和 Hailo-10H/15 工件由不同代的 DFC 编译,并且不能互换。

校准和 INT8 量化#

Hailo HEF 导出使用 INT8 量化,将 YOLO 网络高效映射到加速器上。校准数据集用于估计激活范围;它不会重新训练模型,也不要求在编译期间提供标签。

注意

Hailo 硬件和 Dataflow Compiler 支持 INT4、INT8 和 INT16 精度。Ultralytics format="hailo" 路径使用 INT8 进行编译,并在任务需要更大范围时应用 16 位激活(a16)。

如果省略 data,Ultralytics 会使用特定于任务的轻量级校准数据集,例如用于检测的 COCO128、用于语义分割的 cityscapes8 或用于深度估计的 depth8。密集深度头对校准域尤其敏感:使用无关的检测图像校准深度模型会使预测图变得平坦,而更大的域内数据集可以提高保真度。对于自定义计算机视觉模型,将 data 指向其数据集 YAML,以便编译器观察来自实际部署域的代表性图像:

model.export(format="hailo", name="hailo8", data="my_dataset.yaml")

fraction 选择用于校准的比例或图像数量。[train, val, test] 列表会限制每个拆分,两个元素的列表会保留完整的 test,而 0 会跳过测试集。只有当图像代表部署域时,增加图像数量才有帮助。域外图像可能降低量化精度并增加优化时间。如果 INT8 HEF 相比原始 PyTorch 模型丢失精度,应先改进校准数据,再更改模型或运行时设置。

各模型系列的精度预期#

在具有域内校准(COCO128,128 张图像)的 Hailo-8L 上测得,INT8 HEF 导出结果在相同评估协议下保留其 PyTorch mAP50 的以下比例:

模型mAP50 保留率备注
YOLOv8n~100%带片上 NMS 的 DFL 头
YOLO11n~96%骨干网络中的注意力模块对 INT8 更敏感
YOLO26n~93%端到端头部加注意力;请参阅置信度说明

保留率比较两个模型在相同置信度阈值下的结果。YOLOv8 和 YOLO11 HEF 会将导出时的 conf(默认值为 0.25)固化到片上 NMS 中,因此如果使用默认低阈值的 PyTorch 基线进行验证,就会纳入精确率-召回率曲线中更大的部分,从而夸大量化差距。

除检测外,分割、姿态、OBB 和分类导出路径也在同一 Hailo-8L(DFC 3.33、HailoRT 4.23)上完成了验证。每个 INT8 HEF 都使用域内校准,在相同验证拆分上与对应的 PyTorch 检查点进行了比较:

任务指标(验证拆分)YOLOv8nYOLO11n
实例分割掩码 mAP50 保留率(COCO128-seg)98.0%93.6%
姿态框 mAP50 保留率(COCO8-pose)98.1%90.8%
定向边界框mAP50 保留率(DOTA128)~100%96.9%
分类top-1 保留率(ImageNet 验证集)92.6%95.4%

分割、姿态和 OBB 使用各任务默认的域内数据集(COCO128-seg、COCO8-pose、DOTA128)进行校准;分类使用 ImageNet100 进行校准。上述默认设置带来两个注意事项:COCO8-pose 只有 8 张图像,因此姿态结果仅供参考,生产环境中应为 data= 传入更大的数据集;DOTA8 会使两个模型的 mAP50 都接近 100% 饱和,这也是 OBB 使用 DOTA128 进行评估的原因。分类也是唯一一个 YOLO11 保留率高于 YOLOv8 的任务;对于其他任务,YOLO11 的注意力骨干网络对 INT8 更敏感。

根据设备测量结果,可以得出三条实用规则:

  1. 始终在域内进行校准。 使用域外图像进行微调等同于完全禁用微调:使用 1,238 张域外图像校准的 YOLO26n,其精度(85.7%)与未进行微调编译的模型相同。少量域内数据优于大量域外数据。
  2. 对于 YOLO26 部署,将 conf 调低约 0.05。 量化会使 YOLO26 的分数平均下降约 0.05,因此在 PyTorch 中调好的阈值会使 HEF 丢弃有效检测。设备端使用 conf=0.20 时,其检测数量与 PyTorch 在 conf=0.25 下的检测数量一致;再略微调低(约为 conf=0.15)则可以恢复几乎全部剩余的 mAP50 差距,但代价是产生更多低置信度检测。量化还会重新排序约 20% 的检测结果——这是一种任何阈值都无法消除的永久排序影响——但这种重新排序不会阻碍在较低阈值下恢复 mAP50。
  3. 在 Hailo-8/8L(DFC 3.33)上,注意力损失是结构性的。 注意力模块会编译为 matmul 操作,在编译器为其提供的每种模式下都保持 INT8 激活输入;该图的 16 位输出模式分配失败,提高周围层的精度也没有帮助,因为矩阵乘法无论如何都会将其输入重新量化为 INT8(在我们的测试中,将深度可分离卷积和输出卷积保持为 16 位并未改变 mAP)。当精度优先且模型可以互换时,YOLO11 目前在这里的量化效果优于 YOLO26;更新的 Hailo 代际产品(DFC 5.x)提供了更多混合精度选项,结果可能有所不同。

导出工件#

导出会创建一个目录,其中包含可部署的 HEF 和 Ultralytics 元数据:

yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json
  • *.hef 是由 HailoRT 加载的已编译模型。
  • metadata.yaml 保存模型名称、任务、输入尺寸、步幅和 Hailo 目标信息。
  • nms_config.json 记录 YOLOv8 和 YOLO11 检测模型生成的 HailoRT NMS 配置。YOLO26 检测以及所有非检测任务(分割、语义分割、深度、分类、姿态、OBB)都不使用此文件。

编译后会删除中间 ONNX 图。

在 Hailo 硬件上运行推理#

在目标设备上安装 HailoRT。Raspberry Pi AI HAT+ 和 AI HAT+ 2 用户可以参阅 Raspberry Pi AI 软件指南。在 Raspberry Pi OS 上,两组软件包不能同时安装,因此只运行与硬件匹配的代码块,然后重启。

对于 AI HAT+(Hailo-8 / Hailo-8L):

sudo apt install dkms
sudo apt install hailo-all
sudo reboot

对于 AI HAT+ 2(Hailo-10H,Raspberry Pi OS Trixie 或更高版本):

sudo apt install dkms
sudo apt install hailo-h10-all
sudo reboot

重启后,确认已检测到加速器:

hailortcli fw-control identify
注意

hailo-allhailo-h10-all 软件包仅在 Raspberry Pi OS 上安装 HailoRT。在任何其他主机上,都应从 Hailo Developer Zone 下载并安装 HailoRT 软件包——该来源与 DFC 相同。

将完整的导出目录复制到设备上,以便 metadata.yaml 保持在 HEF 旁边。Ultralytics 使用 HailoRT 直接在导出目录上运行 predictval

from ultralytics import YOLO

model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")

对于检测模型,后端会转换 YOLOv8/YOLO11 HailoRT NMS 输出并自动解码任一 YOLO26 头。其默认的一对多输出会通过预测器的 NMS。它解码原始分割、姿态和 OBB 张量,返回芯片上分类概率,并通过 Hailo-8/8L 上的主机缩减以及所有单类头或针对多类 Hailo-10H/15 头的芯片上 ArgMax 生成语义类别图。TAPPAS、GStreamer 和 Raspberry Pi picamera2.devices.Hailo 助手仍然可用于特定于应用程序的流水线。

对于 GStreamer 部署,将 HEF 传递给 hailonet

gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
  hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
  hailofilter function-name=yolov8 ! hailooverlay ! autovideosink

Hailo 部署选项#

HEF 是多个 Hailo 运行时接口共用的可部署模型工件。选择适合应用的接口:

运行时选项最适合
HailoRT Python 或 C/C++ API自定义应用和对推理的直接控制
Raspberry Pi picamera2.devices.HailoRaspberry Pi 上的 Camera Module 项目
GStreamer 和 Hailo 应用实时视频流和多阶段流水线
hailortcli设备检查、HEF 检查和基准测试

当应用需要 Ultralytics 类别名称、输入尺寸、步幅或其他模型信息时,将 metadata.yaml 与 HEF 放在一起。HEF 本身不能替代应用层的摄像头采集、可视化、跟踪、告警或存储逻辑。

验证 Hailo 设备和 HEF#

在集成摄像头或视频流水线之前,独立验证运行时和加速器:

hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hef

仅设备性能测量可以将 Hailo 推理与视频解码、图像缩放、绘制和应用 I/O 隔离开来。在估算端到端延迟或每秒帧数时,应单独测量完整应用。

Hailo 与其他 YOLO 导出格式的比较#

根据执行模型的硬件选择导出格式。HEF 特定于硬件;当最终设备已包含 Hailo 加速器时应选择 HEF,而不应将其视为通用或自动最快的边缘格式。

部署目标或优先级推荐的 Ultralytics 格式与 Hailo 的比较
现有 Hailo NPU 或 Raspberry Pi HATHailo HEF(format="hailo"使用已安装的 Hailo 加速器和 HailoRT 堆栈
新型受功耗限制的 M.2 或 SBC NPUDeepX如果追求更高的 YOLO 性能和更好的每瓦性能,从这里开始
高吞吐量、多流边缘 NPUAxelera在较新的加速器硬件上评估,以获得更高的流密度和吞吐量
NVIDIA GPUTensorRT使用带 FP16 和 INT8 选项的 NVIDIA GPU 内核,而不是独立的 NPU
Intel CPU、GPU 或 NPUOpenVINO面向已集成到 Intel 系统中的加速器
Apple 硬件CoreML通过原生 Apple 运行时使用 Apple Neural Engine、GPU 和 CPU
Qualcomm Snapdragon NPUQNN为 Qualcomm 的设备端 NPU 编译,而不要求外部加速器
Rockchip NPURKNN广泛用于经济型 SBC 和嵌入式系统
华为升腾 NPUAscend为 Atlas 板卡和 OrangePi AIPro 上的升腾 AI Core 编译 CANN .om 模型
谷歌 Coral Edge TPUEdge TPU在 Coral 加速器上运行 INT8 LiteRT 模型,而不是 Hailo 模块
Ambarella CVflow SoCAmbarella为 Ambarella 摄像头和嵌入式视觉 SoC 编译
Raspberry Pi AI CameraSony IMX500在摄像头传感器中运行网络,而不是通过连接到主机的 Hailo 加速器运行
移动或嵌入式 CPU/GPUNCNN在没有可用的专用受支持 NPU 时提供轻量级便携式运行时
可移植的跨运行时部署ONNX保留跨运行时的可移植性;HailoRT 无法执行 ONNX,必须先将其编译为 HEF

不要仅因为 Hailo 是 NPU,就认为它一定更快或更节能。对于新的 M.2 部署,DeepX 是追求更高 YOLO 性能和更好每瓦性能的更强候选,而 Axelera 面向显著更高的多流吞吐量。Rockchip 是 SBC 和嵌入式系统中广受欢迎的低成本选项。厂商提供的 TOPS 和功耗数据并不是可直接比较的应用基准,因此在购买硬件之前,应在候选设备上验证相同的 YOLO 检查点、输入尺寸、精度、主机和完整视频流水线。

优化 Hailo 计算机视觉性能#

模型和流水线选择通常比编译器标志更重要:

  • 从较小的 YOLO 模型开始,只有在精度需要时才增大模型尺寸。
  • 选择仍能保留应用所关注对象的最低固定 imgsz
  • 在可能的情况下,使用来自真实摄像头和环境的校准图像。
  • 在帧之间保持 Hailo 网络处于活动状态,而不是每次推理都重新打开 HEF。
  • 将设备推理时间与预处理、视频解码、后处理、可视化和网络 I/O 分开。
  • 对于持续视频工作负载,使用 GStreamer 等流式流水线。
  • 在生产环境使用的确切加速器和 HailoRT 版本上验证导出的 HEF。

导出参数#

参数类型默认值描述
namestrhailo8l目标 Hailo 加速器架构
imgszintlist640固定模型输入尺寸
datastrNone校准数据集 YAML;分类任务则接受数据集目录或内置数据集名称。如果省略,Ultralytics 会选择特定于任务的校准数据集。
fractionfloatintlist1.0校准子集可以按比例、图像数量或 [train, val, test] 的比例/数量指定。包含两个项目的列表会保留 test 的完整内容,同时跳过 0
quantizeint8Hailo 导出使用 INT8 量化
simplifyboolTrue简化中间 ONNX 图
conffloat0.25YOLOv8/YOLO11 HailoRT NMS 置信度阈值
ioufloat0.7YOLOv8/YOLO11 HailoRT NMS IoU 阈值
devicestrNone中间 ONNX 导出步骤的设备,默认情况下为 CPU(device=cpu)。Dataflow Compiler 步骤不使用它。

YOLOv8/YOLO11 检测导出接收 HailoRT NMS。YOLO26 默认使用原始的一对多输出以供主机 NMS 使用;nms=False 选择其无 NMS 的一对一输出。分割、姿态和 OBB 使用原始头部张量,分类返回芯片上概率,语义分割在 Hailo-8/8L 以及所有单类头上返回原始对数几率,或者为多类 Hailo-10H/15 头返回烘焙的类别图。深度估计返回原始深度对数几率,Ultralytics 在推理时将其解码为公制深度图。不支持动态形状、嵌入式 Ultralytics NMS、FP16 和 FP32。

Hailo 导出故障排除#

Hailo Dataflow Compiler 导入错误#

如果导出报告缺少 hailo_sdk_client,请在与 Ultralytics 相同的 Python 环境中安装适用于目标硬件代际的 DFC wheel。Hailo-8/8L 和 Hailo-10H/15 需要不同的编译器代际。

不支持的操作系统或架构#

HEF 编译支持 Linux x86_64。如果本地计算机运行 macOS、Windows、Raspberry Pi 或其他 ARM 系统,请通过 Ultralytics Platform 导出,或使用兼容的工作站。

导出耗时很长#

DFC 优化是开销最大的阶段。编译时间会随着模型大小、输入分辨率和校准数据量的增加而延长。受支持的 GPU 可以加速优化,而仅使用 CPU 编译可能会明显变慢。

量化模型精度下降#

请使用与生产环境输入相似的校准图像,并确保包含重要的目标、尺度、光照条件和背景。在部署前,请在同一个验证集上比较原始 PyTorch 模型和导出的 HEF。即使校准效果良好,不同模型系列之间仍会存在一定程度的差距;有关实测基线,请参阅按模型系列划分的精度预期

HEF 无法在设备上加载#

确认 name 与实际的 Hailo 架构匹配,并确保设备驱动、固件和 HailoRT 软件包彼此兼容。使用 hailortcli parse-hef 检查构件,并使用 hailortcli fw-control identify 验证加速器。

输出解析不正确#

metadata.yaml 与 HEF 放在一起,以便 Ultralytics 选择匹配的 YOLOv8、YOLO11 或 YOLO26 后处理路径。自定义 HailoRT 应用同样必须使后处理与导出的模型系列匹配。

总结#

Ultralytics Hailo 导出提供了从训练好的 YOLO 模型到可部署 HEF 的直接路径:

  1. 加载 YOLOv8、YOLO11 或 YOLO26 检测或分类模型,YOLOv8/YOLO11 分割、姿态或 OBB 模型,或 YOLO26 语义分割或深度估计模型。
  2. 使用 format="hailo" 导出,并选择目标架构。
  3. 使用匹配的 DFC 在本地完成校准和编译,或在 Ultralytics Platform 中使用托管导出。
  4. 将 HEF 和 metadata.yaml 复制到由 Hailo 驱动的边缘设备上。
  5. 使用 HailoRT、Raspberry Pi Picamera2 或 GStreamer 视频管道运行推理。

如需了解其他计算机视觉部署目标,请参阅导出模式基准测试模式集成指南。相关硬件指南包括 DeepXAxeleraONNXOpenVINOTensorRTNCNNRKNNSony IMX500Qualcomm QNN

常见问题#

  • 不可以。请在受支持的 Linux x86_64 系统上运行 DFC,然后将生成的 HEF 部署到 Raspberry Pi。

  • 受支持的 GPU 可以大幅缩短 DFC 优化时间。CPU 编译是可行的,但可能需要明显更长的时间。

  • 直接导出支持采用标准 YOLOv8、YOLO11 或 YOLO26 检测头的检测模型,YOLOv8/YOLO11 分割、姿态和 OBB 模型,以及 YOLOv8/YOLO11/YOLO26 分类模型。这包括基于这些标准架构构建的自定义训练模型。YOLO26 语义分割和深度估计模型也受支持。YOLO26 实例分割、姿态和 OBB 模型,以及 YOLOv10、YOLO-World、YOLOE 和 RT-DETR 会被拒绝,而不会生成未经验证的 HEF。

  • 可以。对自定义 .pt 权重使用相同的 format="hailo" 命令,并通过 data 传入训练数据集 YAML,以进行具有代表性的 INT8 校准。类别名称和类别数量会从模型元数据中读取。

  • 每个 HEF 都是针对固定输入形状编译的,因此单个 HEF 无法动态调整大小。实际使用中,你可以在主机上将输入调整为编译尺寸,或针对所需分辨率编译多个 HEF。在导出时选择 imgsz,使其与部署管道匹配。

  • YOLO26 使用无 DFL 的边界框回归,因此两个头都编译为原始张量,而不是 YOLOv8 风格的 HailoRT NMS 流水线。Ultralytics 默认解码张量并应用 NMS,或者在用 nms=False 导出时返回无 NMS 的检测结果。

  • Hailo Dataflow Compiler 会在 Linux x86_64 构建机器上将模型转换并量化为特定于硬件的 HEF。HailoRT 会在目标设备上加载并运行该 HEF。

  • 请将编译后的 HEF 部署到 Hailo 运行时。ONNX 是导出期间使用的中间表示,编译成功后会被移除。

  • 请从 Hailo Developer Zone 下载适用于你的硬件代际的编译器 wheel。编译器仅用于创建 HEF;HailoRT 会在目标加速器上运行它。

评论