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> |
||
|---|---|---|
| .. | ||
| 3rdparty | ||
| postprocess | ||
| resource | ||
| Makefile | ||
| README.md | ||
| yolov4_tiny_demo.c | ||
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 模型部署流程可参考:
快速开始
本示例采用上位机交叉编译、下位机运行的方式。 示例工程已提供完整 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
程序将依次完成:
- PNNA 运行环境初始化
- YOLOv4-Tiny 模型加载
- 输入图片预处理(归一化、量化)
- PNNA 硬件推理
- 输出反量化、置信度过滤及 NMS 后处理
- 资源释放及退出
测试结果示例
程序运行后,终端输出如下信息:
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
输出说明
程序运行结束后,控制台将输出目标检测相关信息,包括:
-
检测框数量: 表示在当前输入图像中检测到的目标总数。
-
单个检测框信息: 每一行对应一个检测结果,字段通常包括:
- 类别 ID
- 置信度
- 目标框位置信息(相对于输入图像的坐标)
具体字段含义与顺序以当前工程后处理实现为准。
注意事项
-
后处理参数配置 置信度阈值(Confidence Threshold)及 NMS 参数会显著影响检测结果数量和质量,可根据实际应用需求进行调整。
-
输入预处理一致性 输入图片的尺寸、缩放方式、归一化参数以及通道顺序(RGB / BGR)必须与模型训练和导出配置一致。
-
模型输出布局确认 若使用经过裁剪、合并或针对特定硬件定制的 YOLOv4-Tiny 模型,请仔细核对模型输出 tensor 的排列方式,并相应调整后处理逻辑。
-
量化模型适配 本示例默认使用量化 NBG 模型,工程封装了量化与反量化逻辑,如模型输出为定点格式,需在后处理阶段进行正确的数据解释。
作者 {{xunyingya}}