快速入门
典型开发流程
flowchart LR
A[(原始模型)] --> B(netrans转换) --> C[(nb文件)]
C --> D{精度评估}
D -->|Yes| E[模型部署]
D -->|No| F[调整量化参数] --> B
安装netrans
CPU : Intel® Core™ i5-6500 CPU @ 3.2 GHz x4 支持 the Intel® Advanced Vector Extensions.
RAM : 至少8GB
硬盘 : 160GB
操作系统 : Ubuntu 20.04 LTS 64-bit with Python 3.10,不推荐使用其他版本
安装依赖
1sudo apt update
2sudo apt install build-essential
3
4# 安装 mamba ,本项目使用 mamba 创建虚拟环境,演示安装过程
5
6# 下载 mamba 安装脚本
7 wget "https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease//Miniforge3-$(uname)-$(uname -m).sh"
8 # 创建 mamba 的安装目录
9 mkdir -p ~/app
10 # 安装 mamba 到 ~/app/
11 bash Miniforge3-Linux-x86_64.sh -b -p ${HOME}/app/miniforge3
12 # 添加 mamba 的初始化脚本到环境配置文件
13 echo "source " ${HOME}/app/miniforge3/etc/profile.d/mamba.sh"" >> ${HOME}/.bashrc
14 # 重新加载 ~/.bashrc 文件,使 mamba 初始化生效
15 source ${HOME}/.bashrc
16 # 创建一个名为 netrans 的虚拟环境,并安装 Python 3.10
17 mamba create -n netrans python=3.10 -y
18 # 激活 netrans 虚拟环境
19 mamba activate netrans
下载 Netrans
1# 下载 Netrans 到 ~/app
2cd ~/app
3git clone --depth 1 --branch v251204 https://gitlink.org.cn/nudt_dsp/netrans.git netrans
运行配置脚本
1cd ~/app/netrans
2bash setup.sh
模型转换
Netrans 提供了简单的命令行接口,用于编译和优化模型。
1# 以 转成 ONNX 格式的 YOLOv8s 模型为例,演示使用 Netrans 命令行工具完成转换的全过程。
2# 1. 定义模型路径,模型路径默认为工作路径。
3work_path='~/app/netrans/examples/infer_with_pre_post_process/yolov8s'
4cd ${work_path}
5# 2. 激活环境
6mamba activate netrans
7# 3. 模型导入
8netrans load ./ --mean 0 0 0 --scale 255 255 255
9# 4. 模型量化
10netrans quantize ./ asymu8
11# 5. 将前后处理加入推理网络
12netrans add_pre_post ./ asymu8
13# 6. 导出 nbg 文件
14netrans export ./ asymu8
精度评估
下载 yolov5 到 ~/wsp,安装yolov5所需的包
1cd ~/wsp
2git clone https://github.com/ultralytics/yolov5.git
3cd ~/wsp/yolov5
4mamba activate netrans
5pip install -r requirements.txt
下载 evaluation 到 ~/wsp/yolov5,安装依赖包
1git clone https://gitlink.org.cn/nudt_dsp/evaluation.git
2pip install websockets jsonrpcclient
将val_pnna.py移动到~/wsp/yolov5目录下
1mv ~/wsp/yolov5/evaluation/src/val_pnna.py ~/wsp/yolov5/
执行val_pnna.py,脚本会自动下载coco128数据集并解压到'~/wsp'目录下
执行完成后结果保存在~/wsp/yolov5/val目录下
1cd ~/wsp/yolov5
2python val_pnna.py
评估结果如下
1Class Images Instances P R mAP50 mAP50-95:
2all 128 929 0.678 0.651 0.709 0.474
安装交叉编译器
下载交叉编译器
1git clone https://gitlink.org.cn/nudt_dsp/gcc_arm_8.3.git
解压安装
1mkdir -p ~/app
2tar xvf ./gcc_arm_8.3/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ~/app/
配置环境变量
1export TOOLCHAIN_DIR=~/app/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
2export PATH=$TOOLCHAIN_DIR/bin:$PATH
测试:
1arm-linux-gnueabihf-gcc -v
编译示例工程
下载工程
1mkdir -p ~/ws && cd ~/ws
2git clone -b v20251215 https://gitlink.org.cn/nudt_dsp/pnna.git
编译 YOLOv5s 示例
1cd pnna/examples/yolov5s
2make clean && make
成功后将生成可执行文件
1yolov5s
部署到开发板
创建工作目录
1ssh root@192.168.23.100 "mkdir -p /home/root/workspace"
上传可执行程序、模型文件、图片
1scp yolov5s resource/car.jpg resource/yolov5s-int16.nb \
2 root@192.168.23.100:/home/root/workspace
如需批量上传,可以使用:
1scp -r resource root@192.168.23.100:/home/root/workspace
运行示例
1ssh root@192.168.23.100
2cd /home/root/workspace
3chmod +x yolov5s
4./yolov5s
示例输出:
1init pnna lite, driver version=0x00010f00...
2cid=0xb1, device_count=1
3 device[0] core_count=1
4memory pool size=14311808byte
5network core count=1
6HASHMAP 0xb6b22d2c(record-list) INIT SUCCESS
7create_app_ctx done
8Total detections: 5
9Scores: 0.88, Boxes: [43.44, 231.70, 185.25, 543.48], Class ID: 0
10Scores: 0.88, Boxes: [175.69, 241.36, 271.75, 511.14], Class ID: 0
11Scores: 0.88, Boxes: [532.12, 229.05, 639.75, 520.08], Class ID: 0
12Scores: 0.59, Boxes: [-0.03, 325.05, 55.41, 517.27], Class ID: 0
13Scores: 0.47, Boxes: [13.00, 131.06, 619.75, 461.44], Class ID: 5
14postprocess done
15destroy app_ctx done.
16pnna closed
作者 @sq suiqiang@hngwg.com