yolov5训练自己的pt文件,转onnx,再转成rknn,到RK3588开发板运行测试

这篇具有很好参考价值的文章主要介绍了yolov5训练自己的pt文件,转onnx,再转成rknn,到RK3588开发板运行测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、训练自己的模型

  1. yolov5训练好自己的模型,例如训练完后,名称为best.pt,路径为runs/exp/weights/best.pt。

  1. 采用detect.py文件验证best.pt可以正常检测目标,再进行下一步工作。

二、pt转onnx

  1. 修改utils/yolo.py文件的后处理部分,将class Detect(nn.Module) 类的子函数forward由

def forward(self, x):        z = []  # inference outputfor i in range(self.nl):            x[i] = self.m[i](x[i])  # conv            bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)            x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0,1,3,4,2).contiguous()ifnot self.training:  # inferenceif self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:                    self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)                y = x[i].sigmoid()if self.inplace:                    y[...,0:2] = (y[...,0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy                    y[...,2:4] = (y[...,2:4] * 2) ** 2 * self.anchor_grid[i]  # whelse:  # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953                    xy = (y[...,0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i]  # xy                    wh = (y[...,2:4] * 2) ** 2 * self.anchor_grid[i]  # wh                    y = torch.cat((xy, wh, y[...,4:]), -1)                z.append(y.view(bs, -1, self.no))return x if self.training else (torch.cat(z,1), x)

修改为:

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

注意:训练和检测的时候,yolo.py文件应保持原来的样子。

  1. 修改export.py文件

2.1修改export_onnx函数以下内容:

(1)将opset_version=opset 修改为:opset_version=12;

(2)修改outputnames为: output_names=['out378', 'out439', 'out500'])

(3)删除output_names后的dynamic段落;

2.2 修改parse_opt函数以下内容:

(1)将--data 的default修改为自己的yaml文件路径;

(2)将--weights的default修改为自己的pt文件路径:runs/exp/weights/best.pt。

(3)运行export.py文件,会在pt所在文件夹下生成onnx文件。

三、onnx转rknn

  1. 创建rknn虚拟环境进行转换。(已创建rknn虚拟环境,则跳至下一步)

需要的配置在rknn-toolkit2(-master)文件夹 的doc/requirements_cp38-1.4.0.txt中,按照以下步骤进行创建:

(1)进入rknn-toolkit2(-master)文件夹,右键打开终端,

(2)conda创建虚拟环境rknn:

conda create -n rknn python=3.8

(3)安装需要的环境:

pip install -r doc/requirements_cp38-1.4.0.txt -i https://pypi.douban.com/simple
  1. 进入rknpu2/examples/rknn_yolov5_demo/convert_rknn_demo/yolov5文件夹。

(1)将onnx文件复制到onnx_models文件夹下。

(2)将需要检测的图片例如mmj.jpg放入当前路径。

(3)将dataset.txt内容修改为mmj.jpg。

  1. 修改onnx2rknn.py文件:

(1)修改MODEL_PATH = './onnx_models/best.onnx'

(2)修改检测图片名称im_file = './mmj.jpg'

(3)修改生成的rknn文件名称RKNN_MODEL_PATH = './{}/best.rknn'.format(OUT_DIR,exp)

  1. 修改运行环境为rknn虚拟环境,运行onnx2rknn.py文件,生成的best.rknn文件在rknn_models文件夹下。

四、rknn编译

  1. 进入rknpu2/examples/rknn_yolov5_demo/convert_rknn_demo文件夹。

(1)将best.rknn文件复制到model/RK3588文件夹。

(2)将mmj.jpg 和 dataset.txt文件复制到model文件夹。

  1. 修改 /include/postprocess.h 文件中的 OBJ_CLASS_NUM 为自己训练的目标种类个数。

  1. 修改 /mode/coco_80_labels_list.txt文件内容为自己训练的种类名称。

  1. gcc编译器配置(如已喔诶之,则跳至下一步5)

(1)下载gcc编译器并解压至自定义路径(xxx/RK3588/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu)

(2)添加gcc编译器环境变量:在终端输入命令 vim /etc/profile。在文件末端添加gcc编译器路径/bin:

export PATH=$PATH:/home/yf01/ssd/RK3588/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

(3):wq 保存退出。

  1. 修改build-linux_RK3588.sh文件:

(1)修改TARGET_SOC="rk3588"

(2)修改gcc编译器路径为gcc编译器所在位置。

export TOOL_CHAIN=/home/yf01/ssd/RK3588/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
  1. 运行环境为rknn虚拟环境,运行build-linux_RK3588.sh文件,生成install文件夹。文件夹中的rknn_yolov5_demo_Linux即为可以在RK3588开发板上运行的文件。

五、RK3588开发板上运行

  1. 将rknn_yolov5_demo_Linux文件夹复制到rk3588开发板上,进入rknn_yolov5_demo_Linux文件夹。

  1. 打开终端,输入指令:

./rknn_yolov5_demo ./model/RK3588/best.rknn ./model/mmj.jpg
  1. 运行结果为out.jpg,即mmj.jpg的检测结果。

注意:待检测图片尺寸应大于训练图片尺寸,否则可能报错。文章来源地址https://www.toymoban.com/news/detail-427907.html

到了这里,关于yolov5训练自己的pt文件,转onnx,再转成rknn,到RK3588开发板运行测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • yolov5 pt 模型 导出 onnx

    在训练好的yolov5 pt 模型 可以 通过 export.py 进行导出 onnx 导出流程 在 export.py 设置模型和数据源的yaml 在官方的文档中 说明了可以导出的具体的类型。 在 --include 添加导出的类型, 不同的 类型的 环境要求不一样,建议虚拟环境,比如onnx 和 openvino 的numpy 版本要求不一只,一

    2024年02月11日
    浏览(31)
  • ONNX版本YOLOV5-DeepSort (rknn版本已经Ready)

    目录 1. 前言 2. 储备知识 3. 准备工作 4. 代码修改的地方 5.结果展示         之前一直在忙着写文档,之前一直做分类,检测和分割,现在看到跟踪算法,花了几天时间找代码调试,看了看,展示效果比单纯的检测要更加的炸裂一点。         DeepSORT(Deep Learning to Tra

    2024年02月11日
    浏览(30)
  • YOLOV5(二):将pt转为onnx模型并用opencv部署

    yolov5s 6.0自带export.py程序可将.pt转为.onnx等,只需配置需要的环境即可。 1. 安装环境 报错:NVIDIA-tensorrt安装失败! 解决:从源码安装TensorRt: ①安装CUDNN和CudaToolKit等GPU配置 ②从官网下载需要的rt版本:https://developer.nvidia.com/nvidia-tensorrt-8x-download ③解压后,将lib文件夹添加到

    2024年02月10日
    浏览(33)
  • 如何在windows系统下将yolov5的pt模型导出为onnx模型

    最近在做本科毕业设计,要求是在树莓派上部署yolo算法来实现火灾检测,在网上查了很多资料,最后选择用yolov5s模型先试着在树莓派上部署,看下效果如何,由于从大佬那里拿到了yolov5火灾检测模型,但想要将它移植到树莓派上第一步要把pt模型转换成onnx模型,原因我想大

    2023年04月12日
    浏览(32)
  • 【零基础玩转yolov5】yolov5训练自己的数据集(CPU训练+GPU训练)

     博主也是最近开始玩yolov5的,甚至也是最近开始使用python的,很多东西都没有接触过,因此训练自己的数据集花了不少时间,所以想写篇博客记录一下,希望同样是零基础的小伙伴们可以更加轻松的上手。同时大家如果发现了错误和理解偏差,欢迎指正。 参考资料: Yolo

    2024年02月06日
    浏览(56)
  • 使用Yolov5训练自己的模型

    本文主要介绍如何运用开源Yolov5模型,结合自己的数据,训练其他目标检测模型。 基础准备工作: anaconda 适用Yolov5的虚拟环境 git上下载Yolov5并调通测试代码 https://github.com/ultralytics/yolov5 https://github.com/ultralytics/yolov5 本次用的环境: python==3.7 pytorch==1.7.1 torchvision==0.8.2 torchaud

    2024年02月05日
    浏览(43)
  • yolov5训练自己的数据集

    1.YOLOv5为开源代码,直接从github上下载,首先打开github官网,下载。 下载使用pycharm打开,有图中这些文件,   其中 data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称)

    2024年02月07日
    浏览(38)
  • 【YOLO】yolov5训练自己的数据集

    【Python】朴实无华的yolov5环境配置(一)   上面前期教程中,大致介绍了yolov5开发环境的配置方法和yolov5项目的基本结构,下一步就是基于yolov5预训练模型来训练自己的数据集,这对于只是想要使用yolov5这个工具的人,还是想要深入研究yolov5类似的目标识别算法的人,都是

    2024年02月11日
    浏览(27)
  • yolov5训练自己的数据集问题排除

    D:ProgramDataAnaconda3envsyolov5python.exe D:/yxt/yolov5-master/train.py Traceback (most recent call last):   File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 140, in module     refresh()   File \\\"D:ProgramDataAnaconda3envsyolov5libsite-packagesgit__init__.py\\\", line 127, in refresh     if not Git.refresh(p

    2024年04月11日
    浏览(43)
  • YOLOv5训练自己的数据集实现视频的识别

    写在前面 我本来是使用这个模型进行手写签名的定位,但是因为比赛的主办方原因,数据不允许公开,所以我使用动物世界的一段开头视屏来制作我的数据集。这整个模型跑通的过程中,我参考了很多不错的博客,写这篇博客的原因是记录一下我的所见所感。我的模型是在

    2024年02月02日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包