RK3588 模型转换+Deepsort 移植

RK3588 模型转换+Deepsort 移植

完成pt模型的训练后,现在需要修改生成的pt 模型,让它适应rknn的框架:

1. onnxsim - 让导出的模型具有中间节点的信息:

显然,如果直接用

python export.py 

我们也可以得到一个onnx 模型,但是这个模型是较为复杂的,而且它没有中间节点的输入输出信息,加入我们需要获得中间的节点的shape信息,我们只能自己手动去设置,但是onnxsim 解决了这个问题:

1. 安装onnx-simplifier 包
pip install onnx-simplifier
2.加载onnx文件,simplify处理后重新保存:
from onnxsim import simplify
onnx_model = onnx.load("source_onnx_dir")  # load onnx model
model_simp, check = simplify(onnx_model)
assert check, "Simplified ONNX model could not be validated"
onnx.save(model_simp, "target_onnx_dir")
print('finished exporting onnx')
3. 利用netron查看导出的onnx

打开netron
导入模型:
在这里插入图片描述
这样中间节点的输出也同样被标识出来了,方便我们进行后续的修改

2. 修改onnx模型

1. 查看官方文档

官方的教程是在export 的时候就把 detect 层的forward函数修改掉,但其实他的用意就是修改原model 的detecet层,将detect层完全删掉,因为rknn需要三个输入,还要将模型输出修改为三个。

2. 查看onnx模型

根据查看模型,我们只需要删除最后一个conv层后面的reshape,transpose层,并将输出修改为三个就可以了:

3. 加载模型

具体操作就是遍历模型中的节点,首先确定最后一个卷积层的位置,然后重置这个卷积层的shape为 三个输出
代码后续看情况开源

在这里插入图片描述
成功将模型输出改为1x33x20x20,1x33x40x40,1x33x80x80。

保存模型"yolo.onnx"

至此,我们就成功完成了pt–>onnx 的转换。

下载官方的npu

cd /home/ptay/rknpu2-master/examples/rknn_yolov5_demo/convert_rknn_demo/yolov5

在onnx下放入修改好的onnx 模型

打开 onnx2rknn.py

修改:

platform = 'rk3588'
MODEL_PATH = './onnx_models/yolo.onnx'

python onnx2rknn.py

结束!

源代码具体后续我考虑是否开源

deepsort 部署请看后续!

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值