跳到主要内容

YOLOX

本文档讲述如何在 NPU 上运行 YOLOX。

信息

参考 Model Zoo 下载获取示例。

YOLOX 示例目录结构:

$ tree ./
./
├── CMakeLists.txt
├── convert_model
│ ├── config_yml.py
│ ├── convert_model_env.sh
│ └── python
│ ├── coco_classes.py
│ ├── demo_utils.py
│ ├── sub_model.py
│ ├── visualize.py
│ └── yolox_sim.py
├── figures
│ ├── output_yolox.png
│ └── yolox_rt.png
├── main.cpp
├── model
│ └── bus.jpg
├── model_config.h
├── README.md
├── yolox_postprocess.cpp
└── yolox_preprocess.cpp

模型转换

下载模型

X86 Linux PC
cd convert_model/
wget https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.onnx

或者下载修改好的模型,点击下载 yolox_s_sim.onnx

然后移动到 convert_model/ 目录下。

裁剪模型

如果下载的是转换好的模型就可以跳过模型裁剪。

X86 Linux PC
cd python/
python3 sub_model.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/yolox/convert_model/
X86 Linux PC
./pegasus_import.sh yolox_s_sim
./pegasus_quantize.sh yolox_s_sim uint8 12
X86 Linux PC
./pegasus_export_ovx_nbg.sh yolox_s_sim uint8 a733

导出的模型文件存放在../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/yolox/
X86 Linux PC
../build_linux.sh -t a733 -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
Radxa SBC
cd yolox_demo_linux_a733/
Radxa SBC
chmod +x ./yolox_demo_a733
./yolox_demo_a733 -nb model/yolox_s_sim_uint8_a733.nb -i model/bus.jpg

运行结果如下:

$ ./yolox_demo_a733 -nb model/yolox_s_sim_uint8_a733.nb -i model/bus.jpg
model_file=model/yolox_s_sim_uint8_a733.nb, input=model/bus.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 80 80 85 1, data_format=0, name=uid_20000_sub_uid_1_out_0, none-quant
output 1 dim 40 40 85 1, data_format=0, name=uid_20001_sub_uid_1_out_0, none-quant
output 2 dim 20 20 85 1, data_format=0, name=uid_20002_sub_uid_1_out_0, none-quant
nbg name=model/yolox_s_sim_uint8_a733.nb, size: 7058512.
create network 0: 17292 us.
prepare network: 7783 us.
buffer ptr: 0x24831600, buffer size: 1228800
Original image size: 640x640
YOLOX preprocess completed: model/bus.jpg -> 640x640, buffer size: 1228800
feed input cost: 11464 us.
network: 0, loop count: 1
run time for this network 0: 30120 us.
detection num: 5
5: 93%, [ 85, 136, 555, 433], bus
0: 89%, [ 113, 243, 199, 524], person
0: 86%, [ 475, 239, 560, 520], person
0: 89%, [ 213, 243, 283, 506], person
0: 56%, [ 79, 328, 121, 515], person
destroy npu finished.
~NpuUint.

此性能数据仅计算模型推理的时间消耗。如无特别说明,不包含预处理和后处理的时间消耗。

SoCNPU模型输入分辨率网络创建耗时网络准备耗时单帧推理耗时后处理耗时总耗时帧率
全志 A733Vivante VIP9000yolox_s640×64017.3 ms7.8 ms30.1 ms55.2 ms33.2 FPS

    您需要登录 GitHub 才能发表评论。如果您已登录,请忽略此消息。

    Radxa-docs © 2026 by Radxa Computer (Shenzhen) Co.,Ltd. is licensed under CC BY 4.0