当前位置:首页 > 系统教程 > 正文

边缘AI加速实战:从零开始使用Hailo-8在Linux上部署YOLO目标检测(小白也能看懂的Hailo-8推理教程)

欢迎来到边缘计算的世界!如果你手里有一块Hailo-8加速卡,并希望在这个高能效的芯片上跑通YOLO目标检测,那么这篇教程就是为你准备的。Hailo-8是一款拥有26 TOPS超高算力的AI加速卡,特别适合在Linux系统上进行低功耗、高帧率的边缘推理。本文将带你走完从模型训练、格式转换到最终在Linux设备上推理的全过程,哪怕你是第一次接触,也能按步骤成功运行。

边缘AI加速实战:从零开始使用Hailo-8在Linux上部署YOLO目标检测(小白也能看懂的Hailo-8推理教程) Hailo-8  YOLO模型推理 Linux部署 HEF模型转换 第1张

第一步:前期准备与思路梳理

在开始敲命令之前,我们先理清思路。使用Hailo-8进行YOLO模型推理,主要分为三大阶段:模型获取与转换、Linux目标环境配置、编写推理代码。这里要注意,Hailo-8无法直接读取我们训练出来的PyTorch权重(.pt)或ONNX模型,它需要一种名为HEF(Hailo Executable Format)的专用格式。因此,我们的核心任务就是将模型转换为HEF格式。

第二步:YOLO模型训练与ONNX导出

首先,我们需要一个YOLO模型。这里以YOLOv8为例(同样适用于YOLOv9/YOLOv11等)。假设你已经准备好了一个自定义数据集,并在你的电脑(可以是Windows或Linux)上完成了训练。

训练完成后,我们得到的是best.pt文件。我们需要通过以下命令将它转换为ONNX格式,这是进入Hailo生态的第一步。打开终端并执行: yolo export model=./best.pt imgsz=640 format=onnx opset=11

第三步:使用Hailo模型动物园(Model Zoo)转换HEF格式

接下来,你需要一台安装了Ubuntu 20.04或22.04的机器(物理机或虚拟机均可),这台机器将作为我们的“编译环境”。Hailo的模型转换工具依赖特定的环境,强烈建议使用Conda来管理Python环境,以避免版本冲突-1。

首先,克隆官方的Hailo模型动物园(Model Zoo)仓库: git clone https://github.com/hailo-ai/hailo_model_zoo.git 然后创建并激活Conda环境: conda create -n hailo_env python=3.8 conda activate hailo_env 接着,安装Hailo Dataflow Compiler(需要去Hailo官网下载对应的wheel包)和hailo_model_zoo。安装时可能会遇到依赖冲突,通常需要固定numpy和numba的版本,例如:pip install numpy==1.23.3 numba==0.60.0-2。

环境配置好后,就可以进行最关键的一步——编译。假设你的模型是yolov8n,执行以下命令: hailomz compile yolov8n --ckpt /path/to/your/model.onnx --hw-arch hailo8 --calib-path /path/to/calibration/images/ --classes 20 其中,--calib-path指向一个包含几百张代表图片的文件夹,用于模型校准;--classes要改成你自己的类别数。命令执行成功后,你就会得到一个关键的HEF模型文件-2-10。这个文件就是最终要在目标Linux设备上运行的。

第四步:Linux目标端环境搭建

现在,我们带着生成的HEF文件,转移到你的目标Linux设备上(例如树莓派5或任何带有M.2接口安装了Hailo-8的Linux主机)。

1. 安装驱动与HailoRT: 首先确保系统已更新,并安装Hailo的PCIe驱动和运行时库HailoRT。对于树莓派5,官方提供了便捷的一键安装命令: sudo apt install hailo-all 安装后重启,使用hailortcli fw-control identify命令检查是否识别到设备-5-9。

2. 配置PCIe速度(树莓派用户必看): 为了发挥最大性能,建议在/boot/firmware/config.txt文件中开启PCIe Gen 3模式: dtparam=pciex1_gen=3-3。

第五步:编写推理代码

环境就绪后,我们最后一步就是编写Python代码来调用Hailo-8进行推理。这里我们主要使用hailort Python包(pyhailort)。

以下是一个极简的推理代码框架,用于读取图片并输出结果:

import cv2import numpy as npfrom hailo_platform import (HailoInferenceFilter, HailoFormatType, HailoStreamInterface)# 配置参数HEF_PATH = "./yolov8n.hef"INPUT_IMAGE_PATH = "./test.jpg"# 初始化设备device = HailoInferenceFilter(HailoStreamInterface.PCIe)network_group = device.configure(HEF_PATH)[0]network_group.activate()# 获取输入输出信息input_vstream = network_group.input_streams[0]output_vstream = network_group.output_streams[0]# 读取并预处理图片img = cv2.imread(INPUT_IMAGE_PATH)img_resized = cv2.resize(img, (640, 640))# 根据你的模型要求进行归一化等预处理input_data = np.expand_dims(np.transpose(img_resized, (2, 0, 1)), axis=0).astype(np.float32)# 执行推理input_vstream.send([input_data])raw_output = output_vstream.recv()# 后处理(此处需根据YOLO模型进行解码,可参考官方示例或自定义解码器)print("推理完成,原始输出shape:", raw_output.shape)network_group.deactivate()

这段代码只是一个起点,真正的后处理(解码边框、NMS等)需要根据YOLO版本自行实现或参考Hailo社区的例子-10。对于刚上手的朋友,建议先跑通官方仓库中的hailo-rpi5-examples,再替换自己的HEF文件-2。

总结

至此,你已经完成了从零开始在Linux上使用Hailo-8推理YOLO的全过程。虽然中间会遇到环境配置和模型转换的坑,但只要严格按照YOLO模型训练 -> ONNX导出 -> 模型动物园(Model Zoo)编译HEF -> 目标端驱动安装 -> 编写推理代码的流程来,最终看到检测框在视频上实时跳动时,那种成就感是无与伦比的。希望这篇教程能帮助你在边缘AI的道路上少走弯路!