地瓜派RDK X5部署YOLOv11n性能优化实战:从7FPS到47FPS的完整解决方案
当我在RDK X5开发板上首次部署YOLOv11n模型时,7FPS的推理速度让我陷入了深深的困惑。同样的硬件平台,YOLOv5s能跑180FPS,而参数更少的YOLOv11n却只有个位数的帧率?这显然不符合常理。经过72小时的深度排查与技术攻关,最终将性能提升至47FPS。本文将完整呈现这次性能优化的技术细节与思考过程。
1. 问题定位与关键发现
1.1 性能瓶颈初步分析
使用hb_mapper checker工具检查模型算子分布时,一个关键发现浮出水面:
hb_mapper checker --model-type onnx --march bayes-e --model yolo11n.onnx | grep -i softmax
输出结果显示:
/model.10/m/m.0/attn/Softmax CPU -- Softmax -- 1.0 float
WARNING: Softmax算子不支持int8/int16量化
1.2 性能瓶颈原理图解
YOLOv11引入的C2PSA模块(C2F with Partial Self-Attention)包含Softmax算子,其默认计算流程存在严重性能问题:
BPU子图1 → CPU(Softmax) → BPU子图2
↑____________数据搬运___________↓
实际测量各环节耗时:
- BPU计算:7ms
- CPU计算:19ms
- 数据搬运:100ms(累计4次)
- 总延迟:≈126ms → 7.9FPS
2. 核心解决方案:强制BPU部署Softmax
2.1 node_info配置技巧
通过研究地平线官方文档,发现可以通过指定int16精度强制Softmax在BPU运行:
# yolo11n_config_optimized.yaml
node_info: {
"/model.10/m/m.0/attn/Softmax": {
'ON': 'BPU',
'InputType': 'int16',
'OutputType': 'int16'
}
}
2.2 技术原理验证
虽然Softmax不支持int8量化,但BPU硬件实际支持int16精度计算:
- 计算误差:余弦相似度>0.95
- 性能收益:避免CPU-BPU数据搬运
859




被折叠的 条评论
为什么被折叠?



