pnna2/examples/yolov4_tiny
xunyingya 4eaa0d5f93 docs: 更新CHANGELOG及各示例README文档
CHANGELOG: 补充2026-02至2026-07变更记录(vip_→pnna_重命名、API调整等)。
byte_track: 标题修正,细化模块说明(KalmanFilter/STrack/lapjv),
更新3rdparty描述,简化eigen安装步骤。
jsonrpc_server: pnna→pnna2,补充3rdparty说明,改进API文档排版。
yolov4_tiny: 新增二进制输入数据(.dat)说明。
yolov5s_relu: 新增coco标签文件说明,修正格式对齐。
yolov8s: 移除CCS/DSP跨平台编译章节,更新模型文件名。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-15 09:08:01 +08:00
..
3rdparty wsl init 2026-05-22 13:44:21 +08:00
postprocess 清理:移除其他板卡DSP示例工程和RTT示例程序,新增yolov5s_relu示例 2026-07-10 10:34:44 +08:00
resource 清理:移除其他板卡DSP示例工程和RTT示例程序,新增yolov5s_relu示例 2026-07-10 10:34:44 +08:00
Makefile 调整 app() 参数顺序,统一示例 Makefile 结构 2026-06-10 15:00:19 +08:00
README.md docs: 更新CHANGELOG及各示例README文档 2026-07-15 09:08:01 +08:00
yolov4_tiny_demo.c 清理:移除其他板卡DSP示例工程和RTT示例程序,新增yolov5s_relu示例 2026-07-10 10:34:44 +08:00

README.md

YOLOv4-Tiny 目标检测示例

概述

本示例展示了在 ARM Linux 运行环境下,如何通过 PNNA API 驱动 PNNA 硬件完成 YOLOv4-Tiny 目标检测模型的部署与推理。 工程覆盖从模型加载、图像预处理、硬件推理到后处理(解码与 NMS的完整流程可作为 ARM Linux 平台上部署 YOLO 系列检测模型的参考示例。

YOLOv4-Tiny 是轻量级单阶段目标检测模型,适用于对实时性和算力要求较高的嵌入式场景。

主要文件结构

examples/yolov4_tiny/
├── yolov4_tiny_demo.c    # 主程序:负责初始化、推理调度及资源释放
├── postprocess/          # 后处理模块输出解码、置信度筛选、NMS
├── resource/             # 资源目录:存放 .nb 模型文件及测试图片
├── 3rdparty/             # 第三方库:图片解析、日志等
└── Makefile              # 构建脚本

ARM 端 Linux 模型部署参考

ARM Linux 环境下 PNNA 模型部署流程可参考:

ARM 端 Linux 模型部署说明


快速开始

本示例采用上位机交叉编译、下位机运行的方式。 示例工程已提供完整 Makefile用户只需在上位机完成编译并在下位机运行生成的可执行文件即可。

编译示例(上位机 Linux 环境)

在上位机 Linux 环境中,使用交叉编译工具链进入示例目录并执行:

cd examples/yolov4_tiny
make

编译完成后,将在当前目录生成可执行文件:

yolov4_tiny

该可执行文件用于在 ARM Linux 下位机上运行。

准备运行资源(下位机环境)

在 ARM Linux 下位机运行环境中,请确保以下资源可被程序正确访问(推荐与 yolov4_tiny 放在同级目录或 resource/ 目录下)。

模型文件

  • YOLOv4-Tiny 量化模型文件,例如:

    yolov4-tiny_u8.nb
    

测试图片

  • 任意测试图片,例如:

    dog.jpg
    

二进制输入数据(可选)

  • 预编码的二进制输入文件,例如:

    input_0.dat
    

    该文件为预先量化编码的原始输入数据,可直接作为模型输入使用(对应 INPUT_BINARY 输入模式)。

如示例工程自带 resource/ 目录,也可直接使用默认路径,保持代码与资源路径一致即可。


运行推理(下位机 ARM Linux

在下位机 ARM Linux 环境中,执行推理程序:

./yolov4_tiny

程序将依次完成:

  1. PNNA 运行环境初始化
  2. YOLOv4-Tiny 模型加载
  3. 输入图片预处理(归一化、量化)
  4. PNNA 硬件推理
  5. 输出反量化、置信度过滤及 NMS 后处理
  6. 资源释放及退出

测试结果示例

程序运行后,终端输出如下信息:

root@ft78ne-evm:# ./yolov4_tiny
HASHMAP 0xb6b4c524(record-list) INIT SUCCESS
boxes number: 12
16 0.910545 0.291451 0.647096 0.259141 0.569313
7 0.712116 0.759695 0.220082 0.305353 0.176144
2 0.407674 0.760552 0.222090 0.286601 0.162472
1 0.636270 0.423077 0.508935 0.660328 0.612339
destroy app_ctx_t done.
pnna closed

输出说明

程序运行结束后,控制台将输出目标检测相关信息,包括:

  1. 检测框数量: 表示在当前输入图像中检测到的目标总数。

  2. 单个检测框信息: 每一行对应一个检测结果,字段通常包括:

    • 类别 ID
    • 置信度
    • 目标框位置信息(相对于输入图像的坐标)

具体字段含义与顺序以当前工程后处理实现为准。

注意事项

  • 后处理参数配置 置信度阈值Confidence Threshold及 NMS 参数会显著影响检测结果数量和质量,可根据实际应用需求进行调整。

  • 输入预处理一致性 输入图片的尺寸、缩放方式、归一化参数以及通道顺序RGB / BGR必须与模型训练和导出配置一致。

  • 模型输出布局确认 若使用经过裁剪、合并或针对特定硬件定制的 YOLOv4-Tiny 模型,请仔细核对模型输出 tensor 的排列方式,并相应调整后处理逻辑。

  • 量化模型适配 本示例默认使用量化 NBG 模型,工程封装了量化与反量化逻辑,如模型输出为定点格式,需在后处理阶段进行正确的数据解释。


作者 {{xunyingya}}