当前位置: 首页 > news >正文

RK3568笔记五:基于Yolov5的训练及部署

若该文为原创文章,转载请注明原文出处。

一. 部署概述

环境:Ubuntu20.04、python3.8

芯片:RK3568

芯片系统:buildroot

开发板:ATK-DLRK3568

开发主要参考文档:《Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.4.0.pdf》、《Rockchip_User_Guide_RKNN_Toolkit2_CN-1.4.0.pdf》
 

二、yolov5模型训练

1、训练环境

训练是在云端训练的,平台AutoDL租了一台2080IT,配置如下:

2、环境搭建

1、创建conda环境

conda create -n rkyolov5 python=3.8       // 用于yolov5
conda create -n rknn2_env python=3.8 -y   // 用于rknn2

2、激活conda环境

conda activate rkyolov5
​
conda deactivate  // 退出环境

3、安装pytoch

pip install torch==1.7.1+cu101 torchvision==0.8.2+cu101 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple 

4、下载yolov5-v6.0

首先需要在官网下载yolov5-6.0的项目 我们打开yolov的官网,Tags选择6.0版本

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

5、训练

python train.py --img 640 --data coco128.yaml --cfg yolov5s.yaml --weights yolov5s.pt --epoch 300 --batch-size 16 --device 0

出错:The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:

原因numpy版本问题

处理,重新安装

pip uninstall numpypip install numpy==1.22

出错:AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS

ModuleNotFoundError: No module named 'PIL'

原因是pillow库版本不支持,降低版本

pip install pillow==9.5.0

6、pt转onnx

转换步骤:

修改models/yolo.py,修改class Detect(nn.Module):的forward函数

注意!!!仅在转换时修改,在训练时改回原状态!再训练时不要忘记哦!

# def forward(self, x):
#     z = []  # inference output
#     for 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()
#
#         if not self.training:  # inference
#             if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:
#                 self.grid[i] = self._make_grid(nx, ny).to(x[i].device)
#
#             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]  # wh
#             else:  # 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].view(1, self.na, 1, 1, 2)  # 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])  # conv
​return x

修改export.py函数的--opset为12

运行export.py

python export.py --weights best.pt --img 640 --batch 1 --opset 12

简化模型

python -m onnxsim weights/yolov5s.onnx weights/yolov5s-sim.onnx

三、安装rknn-toolkit2

根据正点原子的教程安装,先安装工具链,在创建环境,在安装rknn-toolkit2,之后转换模型

下载地址:GitHub - rockchip-linux/rknn-toolkit2

1、创建一个新的环境

conda create rknn2_env python=3.8 -y

2、安装

进入packages

pip install rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl

等待安装

把转换好的onnx 拷贝到 rknn-toolkit2-master/examples/onnx/yolov5目录下,

3、修改test.py文件

ONNX_MODEL = 'yolov5s_relu.onnx'
RKNN_MODEL = 'yolov5s_relu.rknn'

4、运行

python test.py

出错: ImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /root/miniconda3/envs/rknn2_env/lib/python3.8/site-packages/rknn/api/lib/linux-x86_64/cp38/librknnc.so)

原因:工具链没安装,安装后测试正常。

四、部署

通过测试,使用正点原子的yolov5例程测试结果不对,所以使用SDK里自带的rknpu2里的example

重新编译里面的例子,直接编译不编译不过,需要修改一下。

修改build-linux_RK356X.sh和CMakeLists.txt,把正点原子的libs拷贝过来重新编译

编译后的文件在install目录下,把rknn_yolov5_demo_Linux通过adb拷贝到开发板上。

打开开发板终端,运行: ./rknn_yolov5_demo model/RK356X/last.rknn model/zidane.jpg

生成的结果保存在当前目录下。

通过输出信息可以看来推理有出结果,结果也是对的,但只有一个,图片是有2个人.

程序应该还有地方要修改,等到改好后在开放代码。

如有侵权,或需要完整代码,请及时联系博主。

相关文章:

RK3568笔记五:基于Yolov5的训练及部署

若该文为原创文章,转载请注明原文出处。 一. 部署概述 环境:Ubuntu20.04、python3.8 芯片:RK3568 芯片系统:buildroot 开发板:ATK-DLRK3568 开发主要参考文档:《Rockchip_Quick_Start_RKNN_Toolkit2_C…...

VR虚拟现实:VR技术如何进行原型制作

VR虚拟现实原型制作 利用VR虚拟现实软件进行原型制作可以用于增强原型测试期间的沉浸感,减少产品设计迭代次数,并将与产品原型制作相关的成本降低40-65%。 VR虚拟现实原型制作市场规模 用于原型制作的虚拟现实 (VR) 市场在 2017 年估计为 2.104 亿美元…...

51单片机入门

一、单片机以及开发板介绍 写在前面:本文为作者自学笔记,课程为哔哩哔哩江协科技51单片机入门教程,感兴趣可以看看,适合普中A2开发板或者HC6800-ESV2.0江协科技课程所用开发板。 工具安装请另行搜索,这里不做介绍&…...

notes_质谱蛋白组学数据分析基础知识

目录 1. 蛋白组学方法学1.1 液相-质谱法1) 基本原理2) bottom-up策略的基本流程 1.2 PEA/Olink 2. 质谱数据分析2.1 原始数据格式2.2 分析过程1)鉴定搜索引擎(质谱组学)重难点/潜在的研究方向 2)定量3)预处理 2.3 下游…...

【Python基础】一个简单的TCP通信程序

🌈欢迎来到Python专栏 🙋🏾‍♀️作者介绍:前PLA队员 目前是一名普通本科大三的软件工程专业学生 🌏IP坐标:湖北武汉 🍉 目前技术栈:C/C、Linux系统编程、计算机网络、数据结构、Mys…...

算法之双指针

双指针算法的作用 双指针算法是一种使用2个变量对线性结构(逻辑线性/物理线性),进行操作的算法,双指针可以对线性结构进行时间复杂度优化,可以对空间进行记忆或达到某种目的。 双指针算法的分类 1.快慢指针 2.滑动窗口 3.左右指针 4.前后指…...

Redis被攻击纪实

一、前言 声明:本文仅供技术交流使用,严禁采用本文的方法进行任何非法活动。 上周新来的同事分享Redis的原理和机制,想起2017年的时候测试环境Redis被攻击,最后只能重新安装服务器,今天试验一把利用Redis漏洞进行攻击…...

AI工具-PPT-SlidesAI

SlidesAI 使用手册 https://tella.video/get-started-with-slidesai-tutorial-18yq 简介 SlidesAI 是一款快速创建演示文稿的AI工具,适用于无设计经验的用户。 开始使用 1. **安装与设置** - 访问 [SlidesAI官网](https://www.slidesai.io/zh)。 - 完成简单的设置…...

原型链污染攻击

想要很清楚了理解原型链污染我们首先必须要弄清楚原型链这个概念 可以看这篇文章:对象的继承和原型链 目录 prototype和__proto__分别是什么? 原型链继承 原型链污染是什么 哪些情况下原型链会被污染? 例题1:Code-Breaking 2…...

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转,Kotlin

Android Glide transform圆形图CircleCrop动态代码描边绘制外框线并rotateImage旋转&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app&q…...

【ruoyi】微服务关闭登录验证码

登录本地的nacos服务&#xff0c;修改&#xff1a;配置管理-配置列表-ruoyi-gateway-dev.yml 将验证码的enabled设置成false&#xff0c;即可...

AI:78-基于深度学习的食物识别与营养分析

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…...

日本it培训班,如何选择靠谱的赴日IT培训班?

随着科技的发展&#xff0c;信息技术行业在全球范围内迅速发展&#xff0c;并呈现出蓬勃的发展态势&#xff0c;在日本&#xff0c;IT行业也成为一种极为热门的职业选择。日本专门学校在这个领域内培养了许多IT从业者&#xff0c;成为了众多IT公司的培养基地。如果你对IT产业感…...

51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功能&a…...

缅因州政府通知130万人MOVEit数据泄露事件

大家好&#xff0c;今天我要向大家通报一个令人震惊的消息&#xff1a;缅因州政府的系统遭到了入侵&#xff0c;黑客利用MOVEit文件传输工具的漏洞&#xff0c;获取了约130万人的个人信息&#xff0c;这几乎相当于该州的整个人口数量。 MOVEit攻击是Clop勒索软件团伙进行的一次…...

4.2 onnx简化模型结构

前言 对已有的onnx结构&#xff0c;进行简化操作&#xff0c;onnx提供两种常规操作 方式一 假设为 model.onnx, 比较简单粗暴 # 简化 onnxsim model.onnx model_sim.onnx方式二 稍微复杂点&#xff0c;代码有点多 import onnx import argparse from onnxsim import simpl…...

通用的链栈实现(C++)

template<class T> class MyStack//链栈 { private:struct StackNode{T data;StackNode* next;StackNode(const T& val T(), StackNode* p nullptr) :data(val), next(p) {}//};StackNode* top;int cursize;void clone(const MyStack& s){Clear();cursize s.c…...

物联网AI MicroPython学习之语法 bluetooth蓝牙

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; bluetooth 介绍 该模块为板上的蓝牙控制器提供了相关接口。目前支持低功耗蓝牙 (BLE)的Central&#xff08;中央&#xff09;, Peripheral&#xff08;外设&#xff09;, Broadcaster&#xff08;广播者&…...

React中的key有什么作用?

一、是什么 首先,先给出react组件中进行列表渲染的一个示例: const data = [ { id: 0, name: abc }, { id: 1, name: def }, { id: 2, name: ghi }, { id: 3, name: jkl } ]; const ListItem = (props) => { return <li>{props.name}</li>; }; con…...

初认识vue,v-for,v-if,v-bind,v-model,v-html等指令

vue 一.vue3介绍 1.为什么data是函数而不是对象? 因为vue是组件开发,组件会多次复用,data如果是对象,多次复用是共享,必须函数返回一个新的对象 1. 官网初识 Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS …...

别再乱用get()了!Python字典setdefault()的3个进阶技巧(含性能对比)

别再乱用get()了&#xff01;Python字典setdefault()的3个进阶技巧&#xff08;含性能对比&#xff09; 字典操作是Python开发中最频繁的基础动作之一&#xff0c;但很多中高级开发者依然停留在get()方法的舒适区。本文将带你突破常规用法&#xff0c;探索setdefault()在真实项…...

FontForge字体设计:从零到专业字体的免费创作之路 ✨

FontForge字体设计&#xff1a;从零到专业字体的免费创作之路 ✨ 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 还在为商业字体授权费用而烦恼吗&#xff1f;想要打…...

实测梦幻动漫魔法工坊:用LoRA调整画风,轻松打造不同风格的动漫作品

实测梦幻动漫魔法工坊&#xff1a;用LoRA调整画风&#xff0c;轻松打造不同风格的动漫作品 1. 工具概览 梦幻动漫魔法工坊是一款基于Diffusion模型和LoRA微调技术的动漫图像生成工具。它最大的特点是通过简单的界面操作&#xff0c;就能生成各种风格的二次元图像&#xff0c;…...

python 文件管理库 Path 解析(详细基础)

1 Path库能做什么&#xff1a; Path库是python常见的文件操作库&#xff08;以对象形式操作文件路径&#xff09;&#xff0c;可以进行以下操作&#xff1a; 文件路径的拼接&#xff08;example: test / Your_path / files &#xff09; 文件地址的提取&#xff08;提取名称、…...

FontForge完整指南:免费开源字体设计工具的终极解决方案

FontForge完整指南&#xff1a;免费开源字体设计工具的终极解决方案 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 寻找一款功能全面且完全免费的字体设计工具&…...

效率飙升:用快马生成自动化脚本,告别手动vlookup跨表匹配

效率飙升&#xff1a;用快马生成自动化脚本&#xff0c;告别手动vlookup跨表匹配 工作中经常遇到需要跨表格匹配数据的情况&#xff0c;比如把订单表和客户信息表通过订单号关联起来。传统做法是手动用Excel的vlookup函数&#xff0c;但数据量大时不仅操作繁琐&#xff0c;还容…...

效率提升秘籍:用快马平台ai快速生成jupyter notebook数据分析模板

最近在做一个数据分析项目时&#xff0c;我发现每次新建Jupyter Notebook都要重复写很多基础代码&#xff0c;比如数据清洗、可视化这些固定套路。于是尝试用InsCode(快马)平台的AI辅助功能&#xff0c;快速生成了一个可复用的数据分析模板&#xff0c;效率提升非常明显。 自动…...

Koikatu HF Patch终极安装指南:5步解锁游戏全部潜力

Koikatu HF Patch终极安装指南&#xff1a;5步解锁游戏全部潜力 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 还在为Koikatu游戏体验不完整而烦…...

想自己动手做个四足机器人?这份从电机选型到步态控制的保姆级入门指南请收好

从零搭建四足机器人&#xff1a;硬件选型与步态控制实战手册 当你第一次看到波士顿动力的Spot机器人完成后空翻&#xff0c;或是MIT Mini Cheetah在草地上灵活奔跑时&#xff0c;是否也萌生过自己打造一台四足机器的念头&#xff1f;四足机器人正从实验室走向创客空间&#xff…...

m4s-converter:5分钟搞定B站缓存视频永久保存

m4s-converter&#xff1a;5分钟搞定B站缓存视频永久保存 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过这样的烦恼&#xff1f;收…...