yolov5训练出pt模型文件,转换成rknn格式并测试。

一、任务介绍

        我的任务是在服务器GPU上训练yolov5后,转换到使用NPU的平台上,对数据集进行测试,查看MAP等模型性能的损失,目前阶段还没有开展检测速度的评估。

        主要分为三个步骤

        1、在服务器GPU上训练出yolov5的模型文件,best.pt,然后使用yolov5中的export转换成onnx格式。

        2、在linux虚拟机上配置python环境并安装格式转换工具rknn-toolkit2,完成onnx格式转换rknn格式。

        3、在NPU上配置rknn_yolov5_demo,修改postrocess.h、main.cc等文件,添加label保存功能。编写sh脚本,实现对一个数据集文件夹检测。

二、具体步骤

2.1、第一步、使用GPU训练yolov5,并把pt文件转换成onnx格式

        训练过程不是格式转换的重点,这里不赘述,只说一些格式转换过程中的注意事项。

2.1.1、首选训练pt的python环境需要向使用的yolov5版本看齐,不必和后面rknn-toolkit2使用的python版本相同。

        比如:我使用的是yolov5-7.0版本、python版本使用的是python 3.10

        而配置rknn-toolkit2环境时使用的python版本是python 3.6

2.1.2、修改yolov5/models/yolo.py文件

        删掉class Detect(nn.Module)类的forward函数(yolo.py文件的第56行,当然yolov5版本不同行数可能会有变化)中一部分,修改结果:

                

        注意:训练的过程中不要使用这个修改的yolo.py训练,这个修改只是rknn格式转换过程中的要求。

2.1.3、运行yolov5/export.py文件

        将你训练yolov5得到的best.pt文件复制到yolov5目录下

        运行命令:python export.py --weights best.pt --include onnx

        这时会在yolov5目录下获得由best.pt转换得到的best.onnx

2.2、第二步、使用虚拟机,安装rknn-toolkit2并完成格式转换

2.2.1、安装rknn-toolkit2工具包

        onnx格式只是我们需要的中间转换格式,这一步我们要完成onnx格式到rknn格式的转换

        首先我们需要使用的转换工具是rknn-toolkit2

        github地址:https://github.com/rockchip-linux/rknn-toolkit2/tree/master

                

        由于转换工具需要再linux系统上运行,所以我创建了一个虚拟机来配置环境。

        在这一部分主要环境配置上,我使用的是ubuntu-22.04.2系统,和anaconda3-2023.07-1-Linux-x86_64.sh.

        anaconda的使用方法和window环境下一致,先创建一个python3.6的基础环境,然后把对应版本的rknn-toolkit安装包:rknn-toolkit2/packages/rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl 和环境依赖的包的清单TXT文件rknn-toolkit2/doc/requirements_cp36-1.5.2.txt放到虚拟机系统中

        然后激活环境 conda activate py36

        安装环境包 pip install -r requirements_cp36-1.5.2.txt

        安装rknn-toolkit2工具包本身 pip install rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl

我写这篇笔记的时候是使用相同的文件安装,所以会提示有相同的版本。在您安装完成后可以进入python中import一下这个包,过程如下,如果没有报错,说明安装完成

2.2.2、开始转换模型格式,onnx转rknn

        首先需要把rknn-toolkit2/examples/onnx/yolov5这个文件夹中的文件下载到我们的虚拟机系统中,再把我们之前转换得来的best.onnx也放到一起

        我是用的下面这个onnx2rknn文件夹

        然后还需要修改一下test.py文件,就三个位置,1、需要转换的模型路径和测试图片的路径 2、自定义的类别 3、你要搭载的平台具体型号

        这时候再运行python test.py

        运行程序,就可以得到转换结果best.rknn和测试结果图像

然后把best.rknn复制出来,再进行最后一步,进入平台(我是用的是rk3588)实际使用rknn模型。

2.3、RK3588部署

2.3.1、基本步骤

                0, 基本信息 芯片型号:RK3588s Linux架构:aarch64

                        

                1, 获得代码 git clone GitHub - rockchip-linux/rknpu2

                2, 进入命令行安装依赖的包 sudo apt install cmake imagemagick

                3, Build example。运行代码前先生成可执行文件,进入rknpu2/examples/rknn_yolov5_demo,把我们best.rknn也复制到这个文件夹。

        在生成demo之前还需要修改两个文件,一个是include/postprocess.h 把其中的

#define OBJ_CLASS_NUM 3 #修改为你的数据集有几个类型,我的是有3个

        还有model/coco_80_labels_list.txt这个文件是写你的类型分别叫什么名字,我直接写的0、1、2,每行一个数字

这时候运行./build-linux_RK3588.sh就可以生成一个demo文件了

        ./build-linux_RK3588.sh

4, 运行demo。

./build/build_linux_aarch64/rknn_yolov5_demo best.rknn 00603.jpg

        注意一下目录即可,命令就三个部分

        1、 demo文件的位置 ./build/build_linux_aarch64/rknn_yolov5_demo

        2、rknn文件位置,我放到的是当前路径,所以直接写的名字,对应即可

        3、被测图像位置,同理,对应即可

2.3.2、修改添加labels保存功能

        这一步我是通过修改src/main.cc实现的,当然修改前一定记得备份

        这里我先分享一下我修改后的文件:

                        链接:https://pan.baidu.com/s/139a9Vcglj7sweIAkG3ZMsw 
                        提取码:knrq 

        首先我们定位到315行,可以看到这里是打印检测结果的那个句子,那么我们只要把他打印的角点坐标转换成yolo的标签格式即可,然后用outfile这句把信息写入到输出文件中,当然还有一个文件名管理和输出文件创建的过程,这个我写在前面了                   

        169行到181行就是管理输出文件名的代码,实现的是由图像名123.jpg得到输出标签名123.txt,在这里我把所有的输出都放到了一个out_labels文件夹中,我是手动创建的这个文件夹,拿测试结果的时候就是把这个文件夹复制走,再手动把里面清空

        修改过main.cc文件后还需要再按照新的main.cc生成一个新的demo

        也就是再运行一下   ./build-linux_RK3588.sh

2.3.3、批量运行命令

        这是一个待优化的点:每次都在调用demo检测一张图实现对数据集的评估,只是建立在不关注运行速度的前提下的,这可能是下一阶段的重点工作

                这样再拿测试结果去其他地方计算ap等性能评价指标即可了。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
训练自己的yolov5模型,你需要进行以下准备工作: 1. 安装Anaconda并创建一个适用于yolov5的虚拟环境。 2. 从GitHub上下载yolov5的代码库,并确保测试代码可以正常运行。 接下来,你可以按照以下步骤进行模型训练: 1. 下载yolov5s.pt模型,并将其放在本地yolov5-master文件夹下。 2. 使用torch.hub.load函数加载本地的yolov5s.pt模型,设置source参数为'local',以便在本地加载模型,避免网络速度问题。 3. 在训练过程中,模型的结果会保存在./runs/train/exp文件夹中。你可以在该文件夹下找到训练过程中的各种信息,最终训练模型保存在weights文件夹下的best.pt文件中。 4. 使用加载的自己训练模型文件(best.pt)进行目标检测。你可以使用以下命令来完成目标检测任务: ``` python detect.py --weights ./runs/train/exp/weights/best.pt --source ./YOLO_rubbish/dblj_0.jpg --device 0 ``` 以上是训练自己的yolov5模型的基本步骤和命令。你可以根据自己的需求进行相应的调整和扩展。 #### 引用[.reference_title] - *1* *2* *3* [使用Yolov5训练自己的模型](https://blog.csdn.net/ylclaire_01/article/details/123082666)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值