yolov5训练的pt模型,转换为rknn并部署在瑞芯微RK3588开发板

一、下载源码

在GitHub中搜索并下载yolov5的源代码,然后放在自己部署好的项目环境。

直接用下面的命令即可部署适合yolov5的环境,至于缺什么库,什么版本不对的可以百度查一下。

 pt模型转onnx模型

我这里已经把源码下载好并加载好了我的虚拟环境了

 注意

要把models/yolo.py文件的class Detect(nn.Module)里的前向传播函数改成下面的

注意:如果改了这里的前向传播的话那么运行export.py文件的时候还会报一个错,也是需要改的

注意:在训练时不要修改yolo.py的这段代码,训练完成后使用export.py进行模型导出转换时一定要进行修改,不然会导致后面的rknn模型转换失败! 

    def forward(self, x):
            z = []  # inference output
            for i in range(self.nl):
                x[i] = self.m[i](x[i])  # conv

            return x

 运行export.py报错的话也要把下面被我注释掉的替换成红色框的,此时再运行export.py文件就不会有错了。

运行export.py报错的信息

    if isinstance(y, list):
        shape = tuple(y[0].shape if hasattr(y[0], 'shape') else [1])
    else:
        shape = tuple(y.shape)

然后直接使用命令去执行,其中yolov5s.pt是权重文件,可以改为自己训练出来的权重文件,onnx是我们要输出以onnx结尾的权重文件,可以看到下面export.py文件开头里面写了,还可以输出其他文件结尾的

python export.py --weights yolov5s.pt --include onnx

 执行完就会在当前目录下就会出现一个名字和yolov5s一样的名字,但是结尾是.onnx结尾的文件

 检查(重要):

best.onnx (netron.app)将导出的onnx模型看看正不正确,主要看输入输出

如果不改前面说到的前向传播的话,输出如下,这个输出是不对的,因为只有一个通道输出

正确的是下面这样的,输出应该有三个通道的

 onnx模型转rknn模型

 然后再转去我们之前搭配好的转rknn的环境,至于怎么搭建可以看我博客里的另一篇文章。

写文章-CSDN创作中心

我现在已经切换到部署好转rknn的环境了,看看你部署好的环境是否有rknn-toolkit2这个库。

 然后去GitHub把这个下面这个源码下载下来

地址:rockchip-linux/rknn-toolkit2 (github.com)

 下载下来并且进入到下面图片的目录下。,并且把刚才上面生成的onnx结尾的文件放到下面的目录来

 修改该目录下的test的内容

 然后直接用命令运行这个test.py文件

python test.py

 运行完之后就从原来的onnx文件结尾的转到了我们要的rknn结尾的了

  在这个test.py的main函数中可以了解到这个python文件的作用:

      【 配置——加载onnx模型—导出rknn模型——rknn模型推理——后处理——输出结果

 下面是运行出来的结果,基本和在板子上运行出来是没什么区别的,此时就可以把这个rknn文件烧录到板子上了,然后要自己写一个推理的文件。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值