2. 目标检测与YOLO基础

在把YOLO部署到FPGA之前,必须先弄清楚“检测”到底在算什么。目标检测要同时回答两个问题:物体在哪里(定位)和它是什么(分类)。与图像分类只输出一个类别不同,检测的输出是一组变长结果,每个结果包含边界框坐标、置信度和类别概率。这一差异直接决定了后续硬件加速器的数据流设计:分类网络只需一条标量输出通路,而检测网络需要多尺度特征、密集候选框和大量后处理。

2.1 目标检测的基本概念

主流检测框架可拆成三个部件:骨干网络(Backbone)负责提取特征,颈部(Neck)负责多尺度特征融合,检测头(Head)负责在特征图上预测框与类别。按检测头数量可分为两阶段(如Faster R-CNN,先出候选区域再分类回归)和单阶段(如YOLO、SSD,直接在特征图上回归)。单阶段方法结构规整、延迟低,是FPGA加速的首选。

边界框的表示方式有四种常见形式,理解它们的换算关系对写后处理RTL非常关键:

  • (x1, y1, x2, y2):左上角与右下角绝对坐标,便于裁剪与绘制。
  • (cx, cy, w, h):中心点与宽高,YOLO训练标签常用此形式。
  • 归一化坐标:除以图像宽高,取值0~1,与输入分辨率解耦。
  • 网格相对偏移:YOLO预测的是相对网格单元的偏移量tx、ty、tw、th,需经Sigmoid与指数变换还原。

另一个核心概念是锚框(Anchor)。YOLOv3/v4沿用基于聚类的先验框,每个网格单元挂多个不同长宽比的锚框;YOLOv5则通过自适应锚框计算自动匹配数据集。锚框数量直接决定检测头的输出通道数,也决定片上缓存规模。

2.2 评价指标:mAP、IoU与置信度

检测质量靠指标说话。IoU(交并比)衡量预测框与真实框的重叠程度,是判定“命中”的阈值依据;置信度是模型对“框内有目标”的把握;精确率Precision与召回率Recall构成PR曲线,曲线下面积即AP,所有类别AP的平均值就是mAP。工程上常用mAP@0.5(IoU阈值0.5)和mAP@0.5:0.95(阈值0.5到0.95步长0.05取平均),后者更严格。

指标含义FPGA部署关注点
IoU预测框与真实框交集/并集NMS比较逻辑的定点实现
PrecisionTP/(TP+FP),查得准置信度阈值调节
RecallTP/(TP+FN),查得全小目标漏检与特征分辨率
mAP@0.5IoU=0.5时各类AP均值量化误差容忍度评估
FPS / 延迟每秒帧数、单帧耗时流水线吞吐与DDR带宽
在FPGA上,mAP的下降往往不是卷积算错,而是后处理中的Sigmoid、指数、NMS排序被过度近似。建议先固定量化方案,再逐层定位精度损失。

2.3 YOLO系列算法演进

YOLO的核心思想是把检测统一为回归问题:将图像划分为S×S网格,每个网格直接预测若干框的坐标、置信度和类别,一次前向即可出结果。演进主线可以概括为“更深骨干、更强特征融合、更优训练策略、更简工程实现”。

YOLOv3 / v4 / v5 网络结构对比 YOLOv3 Darknet-53 骨干 FPN 上采样融合 3尺度检测头 13/26/52 锚框聚类 + Logistic 结构清晰,易定点化 YOLOv4 CSPDarknet53 + Mish SPP + PANet 双向融合 CIoU Loss + 数据增强 Mosaic / SAT 训练技巧 精度高,算子种类多 YOLOv5 Focus/CSP + SiLU PANet 颈部 + 自适应锚框 工程化训练/导出 ONNX n/s/m/l/x 多规格 部署友好,社区活跃

2.4 YOLOv3/v4/v5核心思想与结构对比

YOLOv3确立了多尺度预测范式:在13×13、26×26、52×52三个尺度上分别检测大、中、小目标,小尺度特征图负责大物体,大尺度特征图负责小物体。它用FPN自顶向下融合,配合K-means聚类得到的9个锚框,奠定了后续版本的基本骨架。

YOLOv4在v3骨架上做了系统性“堆料”:骨干换成CSPDarknet53,激活函数用Mish,颈部引入SPP扩大感受野、PANet实现自底向上二次融合,训练端加入Mosaic、CutMix、SAT等增强,回归损失改用CIoU。它证明了“训练技巧+结构微调”能显著提升精度,但也带来算子多样性,对硬件映射不友好。

YOLOv5把重心转向工程可用性:用Focus切片降低初始计算量,CSP结构减少重复梯度,SiLU替换Mish更易量化,自适应锚框免去手工聚类,并提供n/s/m/l/x五档模型。对FPGA项目而言,v5的算子规整、ONNX导出成熟、量化工具链完善,通常是首选基线。

选型建议:若追求极致精度且算力充裕,可选v4;若要在有限LUT/DSP下稳定跑通实时检测,优先v5s或v5n,并配合INT8量化与通道剪枝。

2.5 常见误区与复盘

  • 只看mAP不看延迟:检测器最终要满足帧率约束,mAP高但延迟超标的模型无法上板。
  • 忽略后处理开销:NMS和坐标解码在CPU上可能占用30%以上时间,必须评估是否卸载到PL或专用逻辑。
  • 锚框与数据集不匹配:直接套用COCO锚框检测工业零件,召回率会明显下降,应重新聚类。
  • 量化一刀切:首层与检测头对精度敏感,建议保留更高位宽或采用混合量化。
# YOLOv5 导出 ONNX 的典型命令
python export.py --weights yolov5s.pt --include onnx \
  --img-size 640 640 --batch-size 1 --opset 12

# 输出张量形状(3个检测头)
# output0: [1, 3, 80, 80, 85]
# output1: [1, 3, 40, 40, 85]
# output2: [1, 3, 20, 20, 85]