You're reading the documentation for a development version.
For the latest stable release version, please have a look at master.

快速入门

典型开发流程

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