同步example和pnna_driver子模块至20250710
本项目旨在为用户提供一个基于 C 语言的示例应用程序和可重用的函数接口,帮助用户快速理解并部署基于 Pnna 推理框架的模型。
主要功能包括:
用网线连接板卡和调试机,使板卡和调试机处于同一局域网内。
利用串口调试软件,输入命令查看板卡IP地址。
ifconfig
显示内容如下:
eth0 Link encap:Ethernet HWaddr 6C:B3:11:3F:4F:2E inet addr:192.168.23.100 Bcast:192.168.23.255 Mask:255.255.255.0 inet6 addr: fe80::6eb3:11ff:fe3f:4f2e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:118 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:5738 (5.6 KiB) Interrupt:31
使用SSH登录
ssh root@192.168.23.100
下载交叉编译器
git clone https://gitlink.org.cn/nudt_dsp/gcc_arm_8.3.git
解压交叉编译器工具
mkdir -p ~/app tar xvf ./gcc_arm_8.3/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ~/app/
配置环境变量
export TOOLCHAIN_DIR=~/app/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
下载示例工程
mkdir -p ~/ws && cd ~/ws git clone --recurse-submodules https://gitlink.org.cn/nudt_dsp/app_linux_arm.git
编译工程
cd app_linux_arm/example make clean && make
编译成功后将生成可执行程序(如 yolov5s)
将可执行性程序、NBG文件 和输入数据(jpg文件)推送到开发板
scp yolov5s resource/car.jpg resource/yolov5s-int16.nb root@192.168.23.100:/home/root/workspace
利用串口软件,在开发板上执行
./yolov5s
得到结果如下
init pnna lite, driver version=0x00010f00... cid=0xb1, device_count=1 device[0] core_count=1 memory pool size=14311808byte network core count=1 HASHMAP 0xb6b22d2c(record-list) INIT SUCCESS create_app_ctx done Total detections: 5 Scores: 0.88, Boxes: [43.44, 231.70, 185.25, 543.48], Class ID: 0 Scores: 0.88, Boxes: [175.69, 241.36, 271.75, 511.14], Class ID: 0 Scores: 0.88, Boxes: [532.12, 229.05, 639.75, 520.08], Class ID: 0 Scores: 0.59, Boxes: [-0.03, 325.05, 55.41, 517.27], Class ID: 0 Scores: 0.47, Boxes: [13.00, 131.06, 619.75, 461.44], Class ID: 5 postprocess done destroy app_ctx done. pnna closed
其中网络推理结果如下:
Scores: 0.88, Boxes: [43.44, 231.70, 185.25, 543.48], Class ID: 0 Scores: 0.88, Boxes: [175.69, 241.36, 271.75, 511.14], Class ID: 0 Scores: 0.88, Boxes: [532.12, 229.05, 639.75, 520.08], Class ID: 0 Scores: 0.59, Boxes: [-0.03, 325.05, 55.41, 517.27], Class ID: 0 Scores: 0.47, Boxes: [13.00, 131.06, 619.75, 461.44], Class ID: 5
每一列分别表示:置信度、左上角坐标x、左上角坐标y、框的宽、框的高、目标类别
如果需要运行其他网络模型示例工程,修改 Makefile 中编译选项中的文件
EXEC=yolov5s OBJ_MAIN=yolov5s_demo.o OBJ = postprocess/yolov5s_post.o
改为
EXEC=yolov8s OBJ_MAIN=yolov8s_demo.o OBJ = postprocess/yolov8s_post.o
即可编译生成可执行文件 yolov8s
yolov8s
代码中指定输入文件与模型路径:
const char *input_file = "car.jpg"; const char *nbg_name = "yolov5s-int16.nb";
运行方式:
利用V2.1.0接口函数,运行 yolov5s-int16 网络模型,推理 car.jpg 图片,并打印最终结果。
yolov5s-int16
car.jpg
代码中解析输入参数如下:
const char *usage = "vpm_run_dma_test -s sample.txt -l loop_run_count \n" "-n network.nb: network binary graph (NBG) data file resource.\n" "-i input nunber input_0.dat input_1.dat ...: nunber: input file number.\n" " input file name 1, input file name 2 ... \n" "-l loop_run_count: the number of loop run network.\n" "-t time_out: specify time out of network.\n" "-h : help\n" "example: ./test -n network.nb -i 1 416.jpg \n";
参数说明如下:
./yolov8s -n yolov8s_u8.nb -i 1 car.jpg
其中:
“-n” 后面接的参数为 NBG 文件
“-i” 后面接的参数为输入文件,可以是 JPG、二进制或者是 tensor 中的一种
“-l” 后面接的参数为循环推理次数,同一个 NBG文 件和输入文件循环推理。默认为1次。
“-t” 后面接的参数为超时时间,可不设置。
程序默认支持 JPEG 图片输入,如需使用 Binary 或 Tensor 输入,请修改主函数中的宏定义并重新编译:
#define NETWORK_INPUT_TYPE_JPEG 1 // #define NETWORK_INPUT_TYPE_BINARY 1 // #define NETWORK_INPUT_TYPE_TENSOR 1
统一推理流程如下:
作者 {{xunyingya}}
arm端pnna推理示例工程
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
ARM 端 Linux 模型部署
概述
本项目旨在为用户提供一个基于 C 语言的示例应用程序和可重用的函数接口,帮助用户快速理解并部署基于 Pnna 推理框架的模型。
主要功能包括:
环境搭建
准备内容
通过串口连接板卡
通过网口连接板卡
用网线连接板卡和调试机,使板卡和调试机处于同一局域网内。
利用串口调试软件,输入命令查看板卡IP地址。
显示内容如下:
使用SSH登录
模型部署
安装交叉编译工具
下载交叉编译器
解压交叉编译器工具
配置环境变量
编译示例工程
下载示例工程
编译工程
编译成功后将生成可执行程序(如 yolov5s)
推送到开发板
将可执行性程序、NBG文件 和输入数据(jpg文件)推送到开发板
执行程序
利用串口软件,在开发板上执行
得到结果如下
其中网络推理结果如下:
每一列分别表示:置信度、左上角坐标x、左上角坐标y、框的宽、框的高、目标类别
编译选项与版本说明
更换模型示例
如果需要运行其他网络模型示例工程,修改 Makefile 中编译选项中的文件
改为
即可编译生成可执行文件
yolov8s
接口版本说明
示例程序使用说明
V2.1.0 示例
代码中指定输入文件与模型路径:
运行方式:
利用V2.1.0接口函数,运行
yolov5s-int16
网络模型,推理car.jpg
图片,并打印最终结果。V1.0.0 示例
代码中解析输入参数如下:
参数说明如下:
其中:
“-n” 后面接的参数为 NBG 文件
“-i” 后面接的参数为输入文件,可以是 JPG、二进制或者是 tensor 中的一种
“-l” 后面接的参数为循环推理次数,同一个 NBG文 件和输入文件循环推理。默认为1次。
“-t” 后面接的参数为超时时间,可不设置。
程序默认支持 JPEG 图片输入,如需使用 Binary 或 Tensor 输入,请修改主函数中的宏定义并重新编译:
推理流程说明
统一推理流程如下:
部署整体流程总结