Go to file
xunyingya f7333eb72e 更新Makefile中的驱动路径 2025-04-21 15:45:57 +08:00
postprocess 去掉input_0_size在yolov8s_demo.c中的定义 2025-04-21 14:12:17 +08:00
resource add resource yolov4-tiny 2025-04-10 11:33:48 +08:00
Makefile 更新Makefile中的驱动路径 2025-04-21 15:45:57 +08:00
README.md 重写readme 2025-04-16 10:19:17 +08:00
yolov4_tiny_demo.c modify to ACC_PNNA_PLL() 2025-04-10 13:35:19 +08:00
yolov5s_demo.c modify to ACC_PNNA_PLL() 2025-04-10 13:35:19 +08:00
yolov8s_demo.c 去掉input_0_size在yolov8s_demo.c中的定义 2025-04-21 14:12:17 +08:00

README.md

示例程序使用说明

概述

本项目提供了一个通用的模型部署框架,支持多种模型(例如 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
    │   ├── dog.jpg   /* 待推理 JPEG 格式的数据 */
    │   ├── input_0.dat    /* yolov4-tiny待推理二进制格式的数据 */
    │   ├── iter_0_input_0_out0_1_3_416_416.tensor    /* yolov4-tiny待推理 tensor 格式的数据 */
    │   ├── network_binary.nb    /* yolov4-tiny待推理网络模型 */
    │   └── yolov8s_u8.nb    /* yolov8s待推理网络模型 */
    |
    ├── yolov4_tiny_demo.c  /* 网络推理流程示例代码 */
    ├── yolov5s_demo.c  /* 网络推理流程示例代码 */
    └── yolov8s_demo.c  /* 网络推理流程示例代码 */

构建项目

本项目提供了一个通用框架,用户可以根据需求部署不同的模型。

选择模型

本项目支持 yolov4_tiny、yolov5s 和 yolov8s 模型的部署。你可以根据需求选择相应的模型进行部署。

YOLOv4-tiny 模型

  • 调用文件:yolov4_tiny_demo.c 中调用了 postprocess 文件夹下的 yolov4_tiny_post.cyolov4_tiny_post.h 进行后处理。

  • 主要函数调用流程:

    • pnna_open():打开设备。
    • nn_init():初始化网络。
    • 数据准备(包括解码、归一化、量化等操作)。
    • nn_infer():开始推理。
    • yolo_postprocess()yolo_postprocess_fast():进行后处理。
    • print_yolov4_tiny_result():打印推理结果。

YOLOv5s 模型

  • 调用文件:yolov5s_demo.c 中调用了 postprocess 文件夹下的 yolov5s_post.cyolov5s_post.h 进行后处理。
  • 主要函数调用流程:与 YOLOv4-tiny 模型类似,只是后处理函数不同。

YOLOv8s 模型

  • 调用文件:yolov8s_demo.c 中调用了 postprocess 文件夹下的 yolov8s_post.cyolov8s_post.h 进行后处理。
  • 主要函数调用流程:与 YOLOv4-tiny 模型类似,只是后处理函数不同。

其他模型

如果你需要部署其他模型,可以按照以下步骤进行:

  1. 编写前后处理代码:根据新模型的特点,编写相应的前后处理代码。前处理通常包括数据解码、归一化、量化等操作,后处理通常包括目标检测、分类等操作。
  2. 替换前后处理函数:在 demo.c 文件中,将原来的前后处理函数替换为你自己编写的前后处理函数。
  3. 配置模型参数:根据新模型的要求,修改 demo.c 文件中的相关参数,如输入输出尺寸、类别数量等。

配置参数

  • 在对应的 demo.c 文件中如果运行时带推理数据为JPG格式的图片则选择如下配置
#define NETWORK_INPUT_TYPE_JPEG       1
// #define NETWORK_INPUT_TYPE_TENSOR     1
// #define NETWORK_INPUT_TYPE_BINARY     1
  • 如果运行时带推理数据为tensor可以理解为txt格式的数据则选择如下配置
// #define NETWORK_INPUT_TYPE_JPEG       1
#define NETWORK_INPUT_TYPE_TENSOR     1
// #define NETWORK_INPUT_TYPE_BINARY     1
  • 如果运行时带推理数据为量化后的二进制格式的数据,则选择如下配置:
// #define NETWORK_INPUT_TYPE_JPEG       1
// #define NETWORK_INPUT_TYPE_TENSOR     1
#define NETWORK_INPUT_TYPE_BINARY     1

编译项目

修改项目根目录下的 Makefile ,以 yolov8s 为例:

OBJ_MAIN=yolov8s_demo.o
OBJ = postprocess/yolov8s_post.o

请根据自己项目需求选择编译相应的文件。输入以下命令编译工程。

make

运行推理

编译成功后,你可以运行生成的可执行文件进行推理:

./your_executable_file -n network_binary.nb -i 1 input_file_name

其中,-n 后面跟网络二进制图文件的名称,-i 后面跟输入文件的数量和输入文件的名称。

input_file_name 需要根据配置参数时选择的数据类型,选择对应的 JPG 或t ensor 或二进制数据进行推理。

注意事项

  • 本项目只能同时运行一个模型,即只能选择 yolov4_tiny、yolov5s 或 yolov8s 中的一个进行部署。
  • 调用 pnna 核的函数接口(如 pnna_open()nn_init()nn_infer() 等)对于所有模型都是一样的,你无需修改这些函数的调用。
  • 在编写前后处理代码时,请确保代码的正确性和稳定性。

Author : @xun