YOLO26
本文档讲述如何在 NPU 上运行 YOLO26 。
信息
参考 Model Zoo 下载获取示例。
YOLO26示例目录结构:
$ tree ./
./
├── CMakeLists.txt
├── convert_model
│ ├── config_yml.py
│ ├── convert_model_env.sh
│ ├── python
│ │ ├── onnx_extract.py
│ │ └── yolo26s_640.txt
│ └── yolo26s_6.txt
├── figures
│ ├── banner-yolo26.png
│ ├── bus.jpg
│ ├── out_yolo26_6_pcq.png
│ └── performance-comparison.png
├── main.cpp
├── model
│ └── dog.jpg
├── model_config.h
├── README.md
├── yolov26_6_post.cpp
└── yolov26_6_pre.cpp
模型转换
配置虚拟环境
X86 Linux PC
python -m venv .venv && source .venv/bin/activate
pip install ultralytics
导出 onnx 模型
ultralytics 会自动下载模型和缺失的依赖,耐心等待。
X86 Linux PC
cd convert_model/python/
yolo export model=yolo26s.pt format=onnx simplify=True dynamic=False opset=16
裁剪模型
X86 Linux PC
python onnx_extract.py
cd ..
创建转换脚本的软链接
X86 Linux PC
./convert_model_env.sh
模型导入/量化/转换
需要先进入容器开发环境。可以参考 Model Zoo 下载中创建容器这一部分。
信息
不同平台请使用对应的 Docker 镜像:
- A733:ubuntu-npu:v2.0.10.1
- T527:ubuntu-npu:v1.8.11
X86 Linux PC
docker exec -it model-zoo /bin/bash
进入容器对应目录之后运行脚本。
X86 Linux PC
# 进入容器对应目录
cd /workspace/examples/yolo26/convert_model/
X86 Linux PC
./pegasus_import.sh yolo26s_6 # 去掉后缀的模型名
./pegasus_quantize.sh yolo26s_6 pcq 12
- A733
- T527
X86 Linux PC
./pegasus_export_ovx_nbg.sh yolo26s_6 pcq a733
X86 Linux PC
./pegasus_export_ovx_nbg.sh yolo26s_6 pcq t527
导出的模型文件存放在../model目录。
编译示例
接下来可以编译示例,先 exit 退出容器,然后执行下面的命令编译示例。
首先需要配置第三方库和交叉编译工具链。
信息
如果你已经在其他示例中配置过第三方库和交叉编译工具链则可以跳过这一步。
X86 Linux PC
cd ../../../3rdparty/opencv/
unzip opencv-4.9.0-aarch64-linux-sunxi-glibc.zip
cd ../../0-toolchains/
需要先手动点击链接下载之后放到 0-toolchains/ 再执行下面的命令:
X86 Linux PC
tar -xvf gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
X86 Linux PC
cd ../examples/yolo26/
- A733
- T527
X86 Linux PC
../build_linux.sh -t a733 -s debian11
X86 Linux PC
../build_linux.sh -t t527 -s debian11
模型部署
编译示例完成之后,示例会安装到 install 目录,可以使用 scp 传输到板端。
配置 NPU 驱动
信息
如果你已经在其他示例中配置过 NPU 驱动则可以跳过这一步。
将驱动库 scp 传输到板端的 lib 目录。
- A733 对应 common/lib_linux_aarch64/A733 目录
- T527 对应 common/lib_linux_aarch64/T527 目录
然后执行下面的命令导出到环境变量。
Radxa SBC
echo 'export LD_LIBRARY_PATH=$HOME/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
运行示例
配置好驱动之后就可以运行示例了。
提示
对于 T527 平台,你还需要参考 A5E 的板端启用 NPU文档先启用 NPU ,然后使用下面的命令增加当前用户使用 /dev/vipcore 的权限。
Radxa SBC
sudo chmod 777 /dev/vipcore
- A733
- T527
Radxa SBC
cd yolo26_demo_linux_a733/
Radxa SBC
chmod +x ./yolo26_demo_a733
./yolo26_demo_a733 -nb model/yolo26s_6_pcq_a733.nb -i model/dog.jpg
运行结果如下:
radxa@radxa-cubie-a7a:~/Project/yolo26_demo_linux_a733$ ./yolo26_demo_a733 -nb model/yolo26s_6_pcq_a733.nb -i model/dog.jpg
model_file=model/yolo26s_6_pcq_a733.nb, input=model/dog.jpg, loop_count=1, malloc_mbyte=10
VIPLite driver software version 2.0.3.2-AW-2024-08-30
input 0 dim 3 640 640 1, data_format=2, quant_format=0, name=input/output[0], none-quant
output 0 dim 6400 4 1 0, data_format=0, name=uid_20000_sub_uid_1_out_0, none-quant
output 1 dim 1600 4 1 0, data_format=0, name=uid_20001_sub_uid_1_out_0, none-quant
output 2 dim 400 4 1 0, data_format=0, name=uid_20002_sub_uid_1_out_0, none-quant
output 3 dim 6400 80 1 0, data_format=0, name=uid_20003_sub_uid_1_out_0, none-quant
output 4 dim 1600 80 1 0, data_format=0, name=uid_20004_sub_uid_1_out_0, none-quant
output 5 dim 400 80 1 0, data_format=0, name=uid_20005_sub_uid_1_out_0, none-quant
nbg name=model/yolo26s_6_pcq_a733.nb, size: 9362920.
create network 0: 18319 us.
prepare network: 8871 us.
buffer ptr: 0x5cb2600, buffer size: 1228800
network: 0, loop count: 1
run time for this network 0: 34765 us.
output 0, ptr 0x5dde740, size 25600.
output 1, ptr 0x5df77c0, size 6400.
output 2, ptr 0x5dfdc40, size 1600.
output 3, ptr 0x5dff5c0, size 512000.
output 4, ptr 0x5ff3680, size 128000.
output 5, ptr 0x6070700, size 32000.
postprocess time : 6 ms
detection num: 3
7: 68%, [ 466, 74, 690, 171], truck
1: 89%, [ 130, 136, 566, 420], bicycle
16: 90%, [ 133, 221, 310, 540], dog
destroy npu finished.
~NpuUint.
此性能数据仅计算模型推理的时间消耗。如无特别说明,不包含预处理和后处理的时间消耗。
| SoC | NPU | 模型 | 输入分辨率 | 网络创建耗时 | 网络准备耗时 | 单帧推理耗时 | 后处理耗时 | 总耗时 | 帧率 |
|---|---|---|---|---|---|---|---|---|---|
| 全志 A733 | Vivante VIP9000 | yolo26s | 640×640 | 18.3 ms | 8.9 ms | 34.8 ms | 6 ms | 68.0 ms | 28.7 FPS |
Radxa SBC
cd yolo26_demo_linux_t527/
Radxa SBC
chmod +x ./yolo26_demo_t527
./yolo26_demo_t527 -nb model/yolo26s_6_pcq_t527.nb -i model/dog.jpg
运行结果如下:
$ ./yolo26_demo_t527 -nb model/yolo26s_6_pcq_t527.nb -i model/dog.jpg
model_file=model/yolo26s_6_pcq_t527.nb, input=model/dog.jpg, loop_count=1, malloc_mbyte=10
VIPLite driver software version 1.13.0.0-AW-2023-10-19
input 0 dim 3 640 640 1, data_format=2, quant_format=0, name=input[0], none-quant
output 0 dim 6400 4 1 0, data_format=0, name=uid_20000_sub_uid_1_out_0, none-quant
output 1 dim 1600 4 1 0, data_format=0, name=uid_20001_sub_uid_1_out_0, none-quant
output 2 dim 400 4 1 0, data_format=0, name=uid_20002_sub_uid_1_out_0, none-quant
output 3 dim 6400 80 1 0, data_format=0, name=uid_20003_sub_uid_1_out_0, none-quant
output 4 dim 1600 80 1 0, data_format=0, name=uid_20004_sub_uid_1_out_0, none-quant
output 5 dim 400 80 1 0, data_format=0, name=uid_20005_sub_uid_1_out_0, none-quant
nbg name=model/yolo26s_6_pcq_t527.nb, size: 9920576.
create network 0: 20397 us.
prepare network: 11311 us.
buffer ptr: 0x6fe6600, buffer size: 1228800
network: 0, loop count: 1
run time for this network 0: 87270 us.
output 0, ptr 0x7112700, size 25600.
output 1, ptr 0x712b780, size 6400.
output 2, ptr 0x7131c40, size 1600.
output 3, ptr 0x71335c0, size 512000.
output 4, ptr 0x7327640, size 128000.
output 5, ptr 0x73a46c0, size 32000.
postprocess time : 20 ms
detection num: 2
1: 94%, [ 128, 135, 566, 418], bicycle
16: 87%, [ 133, 221, 309, 542], dog
destroy npu finished.
~NpuUint.
此性能数据仅计算模型推理的时间消耗。如无特别说明,不包含预处理和后处理的时间消耗。
| SoC | NPU | 模型 | 输入分辨率 | 网络创建耗时 | 网络准备耗时 | 单帧推理耗时 | 后处理耗时 | 总耗时 | 帧率 |
|---|---|---|---|---|---|---|---|---|---|
| 全志 T527 | Vivante VIP9000 | yolo26s | 640×640 | 20.4 ms | 11.3 ms | 87.3 ms | 20 ms | 139.0 ms | 11.5 FPS |