Skip to content

YOLOv5 部署

介绍

YOLOv5 是一个单阶段结构目标检测网络框架,其中主体结构由 4 部分组成,包括由修改后的 CSPNet 构成的网络骨干,由 FPN (Feature Paramid Network) 构成的高分辨率特征融合模块,由 SPP(Spatial Pyramid Pooling) 构成的池化模块,以及三个不同的检测头用于检测不同大小的目标。

本章节将演示如何在边缘设备上完成 YOLOv5s 部署、加载与识别流程。提供以下两种方式部署:

  • AidLite Python API
  • AidLite C++ API

在本案例中,模型推理运行在设备端 NPU 计算单元,通过代码调用相关接口接收用户输入并返回结果。

  • 设备:IQ9075
  • 系统:Ubuntu 24.04
  • 源模型:YOLOv5s
  • 量化模型精度:INT8 量化
  • Model Farm 模型参考:YOLOv5s-INT8

支持平台

平台运行方式
IQ9075Ubuntu 24.04

准备工作

  1. IQ9075 硬件

  2. Ubuntu 24.04 系统

系统依赖配置

配置 AidLux 依赖源

bash
# 下载正确的公钥
sudo wget -O- https://archive.aidlux.com/ubuntu24/public.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/private-aidlux.gpg > /dev/null

# 编辑源文件
sudo vim /etc/apt/sources.list.d/private-aidlux.list

#在源文件中填入AidLux 提供的私钥
deb [arch=arm64 signed-by=/etc/apt/trusted.gpg.d/private-aidlux.gpg] https://archive.aidlux.com/ubuntu24 noble main

#  更新缓存
sudo apt update

更新完成后,可以通过如下命令获取到AidLux 官方的SDK 依赖

bash
sudo apt list | grep aid | grep unknown
bash
# 安装软件
# 必须先安装的,系统不自带
sudo apt install python3 python3-pip libopencv-dev python3-opencv  net-tools
# 安装 aidlite 之前必须安装的
sudo apt install aidlux-aistack-base aidrtcm

# 安装 aidlite 及依赖 
sudo apt install aid-lms aidlms-sdk aidlite-sdk cmake
sudo apt-get install libfmt-dev nlohmann-json3-dev
sudo apt install aidlite-*

# 支持DSP
sudo apt-get install qcom-fastrpc1
sudo apt-get install qcom-fastrpc-dev

# 安装 aidgen-sdk
sudo apt install aidgen-qnn240-sdk

# 安装 mms 服务
sudo apt install aid-mms

# 支持 GPU
sudo apt-add-repository -s ppa:ubuntu-qcom-iot/qcom-ppa
sudo apt install qcom-adreno-cl1
sudo ln -s /usr/lib/aarch64-linux-gnu/libOpenCL.so.1 /usr/lib/aarch64-linux-gnu/libOpenCL.so

安装完成后检查系统 /usr/local/share 新增 aidliteaidgen 目录

设备授权

获取设备 SN 码

bash
cat  /sys/devices/soc0/serial_number

获取授权文件

提供SN号给阿加犀技术人员,生成设备指定 License 文件,放入路径 /etc/opt/aidlux/license/AidLuxLics

激活授权

bash
sudo /opt/aidlux/cpf/aid-lms/manager.sh restart

下载 YOLOv5s-INT8 模型资源

bash
mms list yolov5s

#------------------------可以看到 YOLOv5s 模型------------------------
Model        Precision  Chipset           Backend
-----        ---------  -------           -------
YOLOv5s      INT8       Qualcomm QCS6490  QNN2.31
YOLOv5s      INT8       Qualcomm QCS8550  QNN2.31
YOLOv5s      FP16       Qualcomm QCS8550  QNN2.31
YOLOv5s      W8A16      Qualcomm QCS6490  QNN2.31
YOLOv5s      W8A16      Qualcomm QCS8550  QNN2.31
YOLOv5s-seg  INT8       Qualcomm QCS8550  QNN2.16
YOLOv5s-seg  INT8       Qualcomm QCS6490  QNN2.31

# 下载 YOLOv5s-int8
mms get -m YOLOv5s -p int8 -c qcs8550 -b qnn2.31 -d /home/ubuntu/yolov5s
cd /home/ubuntu/yolov5s
# 解压
unzip YOLOv5s_qcs8550_w8a8.zip

💡注意

开发者也可以在 Model Farm 网页上搜索并下载

AidLite SDK 安装

开发者也可以参考模型文件夹中的 README.md 安装 SDK

  • 确保 QNN 后端版本 ≥ 2.31
  • 确保 aidlite-sdkaidlite-qnnxxx 的版本是 2.3.x
bash
# AidLite & QNN 版本检查
dpkg -l | grep aidlite
#------------------------ 可以看到类似如下输出 ------------------------
ii  aidlite-qnn236       2.3.0.230         arm64        aidlux aidlite qnn236 backend plugin
ii  aidlite-sdk          2.3.0.230         arm64        aidlux inference module sdk

QNN & AidLite 版本更新

bash
# 安装 AidLite SDK
sudo apt update
sudo apt install aidlite-sdk
sudo apt install aidlite-qnn236

# aidlite sdk c++ check
python3 -c "import aidlite; print(aidlite.get_library_version())"

# aidlite sdk python check
python3 -c "import aidlite; print(aidlite.get_py_library_version())"

AidLite Python API 部署

运行 Python API 例子

bash
cd /home/ubuntu/yolov5s/code

# --target_model: 模型文件路径
# --imgs: 图片输入
# --invoke_nums: 循环次数
python3  python/run_test.py --target_model /home/ubuntu/yolov5s/models/QCS8550/W8A8/cutoff_yolov5s_qcs8550_w8a8.qnn231.ctx.bin --imgs ./python/bus.jpg --invoke_nums 10

可以在命令行看到模型推理耗时 (单位 ms)以及检测结果:

plain
=======================================
QNN inference 10 times :
 --mean_invoke_time is 1.5697240829467773 
 --max_invoke_time is 2.2764205932617188 
 --min_invoke_time is 1.477956771850586 
 --var_invoketime is 0.05570707855895307
=======================================
检测到5个区域
1 [668, 385, 141, 500] 0.86635846 person
2 [219, 407, 125, 465] 0.86257815 person
3 [55, 393, 178, 515] 0.845101 person
4 [3, 207, 812, 601] 0.8401416 bus
5 [0, 551, 73, 325] 0.5058796 person
图片保存在 ./python/yolov5s_result.jpg
=======================================

AidLite C++ API 部署

运行 C++ API 例子

bash
cd /home/ubuntu/yolov5s/code/cpp

mkdir build && cd build
cmake ..
make
./run_yolov5

可以在命令行看到模型推理耗时 (单位 ms)以及检测结果:

C++ 代码默认循环推理 10 次

plain
current thread_idx[1] [9] get_output_tensor cost time : 0.911757
repeat [10] time , input[21.061591] --- invoke[16.763899] --- output[16.023339] --- sum[53.848829]ms
postprocess cost time : 0.158227 ms
Result id[0]-x1[209.905304]-y1[242.500031]-x2[284.438965]-y2[518.384033]
Verify result : idx[0] id[0] coverage_ratio[0.983873]
Result id[0]-x1[105.769806]-y1[228.641464]-x2[234.684357]-y2[546.474487]
Verify result : idx[0] id[0] coverage_ratio[0.129211]
Verify result : idx[1] id[0] coverage_ratio[0.000000]
Verify result : idx[2] id[0] coverage_ratio[0.934018]
Result id[0]-x1[474.906281]-y1[228.192184]-x2[558.729797]-y2[524.893982]
Verify result : idx[0] id[0] coverage_ratio[0.000000]
Verify result : idx[1] id[0] coverage_ratio[0.952345]
Result id[5]-x1[81.684174]-y1[122.895874]-x2[562.999390]-y2[479.283447]
Verify result : idx[0] id[5] coverage_ratio[0.893258]

结果图片 result.jpg 保存在 build 文件夹下