1. 环境准备与模型转换思路
在泰山派RK3566上部署YOLOv5模型,最关键的一步是将PyTorch训练好的模型转换为RKNN格式,这样才能充分利用板载NPU的加速能力。整个流程分为三个核心阶段:PyTorch转ONNX、ONNX转RKNN、板端部署。我实际测试下来,RK3566的NPU对YOLOv5的加速效果非常明显,推理速度比纯CPU提升5-8倍。
先说说硬件需求。除了泰山派开发板,你还需要准备一台Ubuntu系统的电脑(物理机或虚拟机均可),用于模型转换。我用的Ubuntu 22.04,Python版本建议3.8-3.10,太高或太低都可能遇到兼容性问题。Windows训练好的模型需要先转换为ONNX格式,这个步骤必须在修改模型结构后进行,否则转换后的ONNX模型无法正常处理输出。
模型转换中最容易踩坑的是输出层处理。YOLOv5默认的输出包含检测框解码逻辑,但NPU需要原始输出数据,所以必须修改模型的forward函数。我建议直接使用官方提供的修改方案,避免自己重写解码过程。
2. PyTorch模型转ONNX实战
首先在训练好的YOLOv5项目中找到models/yolo.py文件,将原有的forward函数替换为简化版本。这个修改的目的是去掉后处理步骤,让模型只输出原始特征图。记得在训练和推理时要改回原版函数。
# 转onnx时使用
def forward(self, x):
z = []
for i in range(self.nl):
x[i] = self.m[i](x[i])
return x
接下来修改export.py中的shape处理逻辑。找到shape = tuple((y[0] if isinstance(y, tuple) else y).shape)这行,确保它正确处理单输出模式。这个修改是为了适应我们简化后的输出结构。
转换命令很简单,但要注意指定正确的输入尺寸:


288

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



