072 NPU的目标检测模型加速:从Faster R-CNN到YOLOv8
去年做一款边缘AI摄像头产品,选型了某国产NPU芯片,标称4TOPS算力。团队信心满满地把Faster R-CNN模型移植上去,结果帧率只有0.8fps——连幻灯片都算不上流畅。当时硬件同事盯着示波器上的DDR带宽曲线,脸色比示波器的绿色波形还难看。后来换成YOLOv8-nano,同样的NPU,帧率直接飙到45fps。这中间差的不是算法精度,而是对NPU硬件特性的理解深度。
目标检测在NPU上的“水土不服”
NPU和GPU的架构差异,决定了模型加速策略完全不同。GPU擅长大规模并行计算,对不规则的内存访问容忍度较高;NPU则极度依赖数据流的规则性和计算单元的固定化。
Faster R-CNN在NPU上跑不动,核心问题出在三个地方:
RPN(Region Proposal Network)的“动态”特性。RPN需要生成候选框,然后对每个候选框做NMS(非极大值抑制)。NPU的硬件加速器通常只支持固定形状的卷积和全连接计算,而NMS涉及大量条件判断和动态排序——这恰恰是NPU的软肋。我见过有人试图把NMS也塞进NPU的硬件流水线,结果芯片直接挂死,因为NPU的指令队列被分支跳转堵死了。
ROI Pooling的“非对齐”访问。Faster R-CNN的ROI Pooling需要从特征图上根据候选框坐标做插值采样。NPU的DMA(直接内存访问)控制器喜欢连续的内存块,而ROI Pooling的访问模式是离散的、非对齐的