readme中增加V2.1接口介绍
本项目提供了一个通用的模型部署框架,支持多种模型(例如 YOLO 系列:yolov4_tiny、yolov5s、yolov8s 等)。 通过本示例,用户可以了解如何根据所选模型部署相应的推理代码,只需修改前后处理函数,其他部分的代码和函数接口保持一致。
example 目录结构及其主要功能如下所示:
example ├── Makefile /* 用于构建项目的 Makefile 文件 */ │ ├── postprocess │ ├── classification_post.c │ ├── classification_post.h /* 分类网络相关后处理函数 */ │ ├── yolov4_tiny_post.c │ ├── yolov4_tiny_post.h /* yolov4-tiny 相关后处理函数 */ │ ├── yolov5s_post.c │ └── yolov5s_post.h /* yolov5s 相关后处理函数 */ │ ├── yolov8s_post.c │ └── yolov8s_post.h /* yolov8s 相关后处理函数 */ │ ├── resource │ ├── car.jpg /* 待推理 JPEG 格式的数据,大小640*640 */ │ ├── dog.jpg /* 待推理 JPEG 格式的数据,大小416*416 */ │ ├── input_0.dat /* yolov4-tiny待推理二进制格式的数据 */ │ ├── yolov4-tiny_u8.nb /* yolov4-tiny 网络模型 */ │ ├── yolov5s-int16.nb /* yolov5s 网络模型,数据格式int16 */ │ └── yolov8s_u8.nb /* yolov8s 网络模型 */ | ├── yolov4_tiny_demo.c /* 网络推理流程示例代码 */ ├── yolov5s_demo.c /* 网络推理流程示例代码 */ └── yolov8s_demo.c /* 网络推理流程示例代码 */
yolov5s_demo.c
yolov4_tiny_demo.c
yolov8s_demo.c
int pnna_open(); // 初始化 Pnna 硬件和驱动资源 int pnna_close(); // 释放硬件资源,关闭驱动
app_ctx *create_app_ctx(buffer *nbg_buffer, void *norm_param, preprocess_cb preprocess, postprocess_cb postprocess);
int app(app_ctx *model, void *output, nn_tensor *input);
void destroy_app_ctx(app_ctx *model);
// 1. 打开设备 pnna_open(); // 2. 加载模型 get_nbg_data_from_name(&nbg_buffer, "yolov5s.nb"); // 3. 创建输入 tensor nn_tensor *input_data = create_tensor(640 * 640 * 3, 1); get_jpeg_data_from_name(input_data, "car.jpg", 1); // 4. 创建模型上下文 app_ctx *model = create_app_ctx(&nbg_buffer, &norm_params, preprocess_normalize_quantize, yolov5s_postprocess_dq); // 5. 推理 detection dets[10]; app(model, dets, input_data); // 6. 清理资源 destroy_tensor(input_data, 1); destroy_app_ctx(model); pnna_close();
arm-linux-gnueabihf-gcc
.nb
./yolov5s_demo
rtt_dsp/
#ifdef _TMS320C6X
preprocess_cb
preprocess_normalize_quantize
yolov5s_postprocess_dq
以下函数为历史接口,已被 V2.1 封装取代。建议新项目统一使用 V2.1 接口。
int nn_init(nn_context **context, const char *nbg_name, unsigned int timeout); // 初始化模型 @deprecated int nn_infer(nn_context *context, void **input_buffer, void **output_buffer); // 推理入口 @deprecated int nn_destroy(nn_context *context); // 释放资源 @deprecated
作者 {{xunyingya}}
模型部署顶层示例程序。包含各模型的demo.c和后处理代码
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
示例程序使用说明
概述
本项目提供了一个通用的模型部署框架,支持多种模型(例如 YOLO 系列:yolov4_tiny、yolov5s、yolov8s 等)。 通过本示例,用户可以了解如何根据所选模型部署相应的推理代码,只需修改前后处理函数,其他部分的代码和函数接口保持一致。
文件简介
example 目录结构及其主要功能如下所示:
yolov5s_demo.c
使用 V2.1 接口,推荐使用;yolov4_tiny_demo.c
和yolov8s_demo.c
使用 V1.0 接口(已废弃),保留做兼容性参考。接口说明
打开与关闭设备
创建模型上下文
执行推理
销毁模型上下文
示例流程(以 yolov5s 为例)
推理主流程
yolov5s_demo.c
编译与部署说明
ARM 平台部署
arm-linux-gnueabihf-gcc
)编译示例;.nb
文件、输入图片传至开发板;DSP / RT-Thread 平台部署
rtt_dsp/
提供的库文件;yolov5s_demo.c
中的#ifdef _TMS320C6X
代码块;前后处理说明
preprocess_cb
指针注入(如preprocess_normalize_quantize
),实现归一化、量化、图像通道排列等;yolov5s_postprocess_dq
,负责输出结果解析(如目标框解码、阈值过滤、NMS等);V1.0 接口(不推荐使用,仅保留说明)