在 LicheePi 4A 上部署 YOLOX 并使用 HHB-onnxruntime 进行推理
本文详细介绍如何在LicheePi 4A上部署YOLOX目标检测模型,并使用HHB-onnxruntime进行高效推理。
YOLOX简介
YOLOX是一种高效的目标检测算法,在保持高精度的同时提供了出色的速度表现,非常适合边缘设备部署。
1. 环境准备
1.1 硬件准备
- LicheePi 4A(LPi4A)开发板
- MicroSD 卡(用于存储系统)
- 电源适配器
- USB 串口调试工具(可选)
1.2 软件准备
- LicheePi 4A 官方 Linux 系统
- Python 3.11
- pip 及必备依赖项
- ONNX 运行时(onnxruntime)
- HHB 工具(可用于模型转换)
- YOLOX 模型及其 ONNX 版本
# 更新系统
sudo apt update && sudo apt upgrade -y
安装一些软件,用于示例中后续使用
sudo apt install wget git vim
安装 SHL 库
wget https://github.com/T-head-Semi/csi-nn2/releases/download/v2.4-beta.1/c920.tar.gz
tar xf c920.tar.gz
cp c920/lib/* /usr/lib/riscv64-linux-gnu/ -rf
Python 环境配置 LPi4A 烧录的系统中已默认安装 python 3.11 版本。可以使用如下命令确认
python3 --version
后续均以 python3.11 版本为例,其他版本在安装依赖时需要修改到对应版本的命令。 各种 python 程序软件依赖的软件包大多可通过 pip 安装,可以使用如下命令安装 pip
apt install python3-pip
安装其他python包之前,先安装 venv 包,用于创建python虚拟环境
apt install python3.11-venv
创建 python虚拟环境,并激活
cd /root
python3 -m venv ort
source /root/ort/bin/activate
至此,基本 python 环境已经创建完成,与其他体系结构类似,可以直接通过 pip install 安装纯 python 包。
安装opencv
sudo apt install python3 python3-pip
sudo apt install python3-opencv
sudo apt install libqt5gui5-gles
2. 获取并转换 YOLOX 模型
在 LPi4A 上执行以下步骤:
# 克隆 YOLOX 仓库
git clone https://github.com/Megvii-BaseDetection/YOLOX.git
cd YOLOX/demo/ONNXRuntime
wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx
修改源码
本教程将使用 HHB-onnxruntime 执行模型,因此切换到。在源码中的 onnxruntime 示例目录,修改文件 demo/ONNXRuntime/onnx_inference.py 的开头新增两行代码
#!/usr/bin/env python3
# Copyright (c) Megvii, Inc. and its affiliates.
+import sys
+sys.path.insert(0, "../../")
import argparse
import os
代码中使用 sys.path.insert 指定搜索路径,以此免去从源码中安装 YOLOX 的安装包的操作。
安装依赖包
RISC-V 体系结构的 python 生态还有欠缺,未来完善之后,YOLOX 中依赖的包可以通过 requirements.txt 文件直接安装。 本教程中的 YOLOX 示例依赖了较多的 python 包,下载预编译好的 python 包
git clone -b python3.11 https://github.com/zhangwm-pt/prebuilt_whl.git
cd prebuilt_whl
可以按照以下顺序,手工处理。
pip install numpy-1.25.0-cp311-cp311-linux_riscv64.whl
pip install opencv_python-4.5.4+4cd224d-cp311-cp311-linux_riscv64.whl
pip install kiwisolver-1.4.4-cp311-cp311-linux_riscv64.whl
pip install Pillow-9.5.0-cp311-cp311-linux_riscv64.whl
pip install matplotlib-3.7.2.dev0+gb3bd929cf0.d20230630-cp311-cp311-linux_riscv64.whl
pip install pycocotools-2.0.6-cp311-cp311-linux_riscv64.whl
pip3 install loguru-0.7.0-py3-none-any.whl
pip3 install torch-2.0.0a0+gitc263bd4-cp311-cp311-linux_riscv64.whl
pip3 install MarkupSafe-2.1.3-cp311-cp311-linux_riscv64.whl
pip3 install torchvision-0.15.1a0-cp311-cp311-linux_riscv64.whl
pip3 install psutil-5.9.5-cp311-abi3-linux_riscv64.whl
pip3 install tqdm-4.65.0-py3-none-any.whl
pip3 install tabulate-0.9.0-py3-none-any.whl
安装过程中会涉及到其他纯 python 依赖包,pip 会自动从官方源下载。
安装 HHB-onnxruntime
HHB-onnxuruntime 是移植了 SHL 后端(execution providers),让 onnxruntime 能复用到 SHL 中针对玄铁 CPU 的高性能优化代码。
wget https://github.com/zhangwm-pt/onnxruntime/releases/download/riscv_whl/onnxruntime-1.14.1-cp311-cp311-linux_riscv64.whl
pip install onnxruntime-1.14.1-cp311-cp311-linux_riscv64.whl
执行
在示例目录中执行 onnx_inference.py 示例
export PYTHONPATH=$PYTHONPATH:/root/YOLOX
python3 onnx_inference.py -m yolox_s.onnx -i soccer.png -o outdir -s 0.3 --input_shape 640,640
参数说明:
- -m:指定模型
- -i:指定图片
- -o:指定输出目录
- -s:指定检测的阈值
- --input_shape:指定检测时使用的图片尺寸
参考结果
本教程中输入如下图,是运动员踢足球的图片,预期的检测结果是检测到两个人和一个足球。
图片来源于网络
示例正常执行后,会在 outdir 目录下生成结果图片 soccer.png。图片中会用框画出检测到的目标,并标注概率,效果如下图:
参考文档:
https://wiki.sipeed.com/hardware/zh/lichee/th1520/lpi4a/8_application.html