在 FPGA 上实现 YOLOv5
YOLO 算法广泛应用于工业界。为实现自定义 NPU,本文介绍在 FPGA 上运行 YOLOv5 的流程。
YOLOv5 开源代码地址:
[图片:YOLOv5 检测效果]
[图片:网络结构概览]
数据准备与量化
在 FPGA 中实现 YOLOv5,首先在 VOC 数据集上进行算法训练,获取训练后的权重文件,并进行 8bit 量化操作。
[图片:量化处理流程]
得到三个权重文件。
权重解析与重组
将权重文件发送至 FPGA 前,使用 Python 解析权重文件,并按照 FPGA 加速器架构对权重进行重组。
解析的 Python 文件示意如下:
[图片:权重数据格式]
网络结构与算子实现
YOLOv5 的网络结构包含卷积、Cat 等操作。FPGA 实现需覆盖上述基本算子。
[图片:YOLOv5 网络结构]
[图片:局部算子细节]
FPGA 上的实现结构如图所示:
[图片:FPGA 实现架构图]
每个算子包含输入缓冲区(in_buf)、输出缓冲区(out_buf)及控制计算模块。
[图片:算子内部结构]
各模块通过控制信号协同运行,确保 NPU 正常运行。
[图片:控制信号示意]
系统总控通过 AXI Lite 寄存器模块实现。
[图片:AXI Lite 控制模块]
最终效果如下:
[图片:最终运行效果]


