香橙派5使用NPU加速yolov5的实时视频推理(一)

2023-05-16

前言:

        寒假里,博主完成了树莓派4B搭载yolofastest-V2的ncnn加速,效果挺不错的,但总感觉还是稍微差点意思,于是就购买了一块香橙派5,想要用RK3588芯片自带的NPU来加速深度学习的部署,在2023年3月4日也是完成了香橙派5的NPU加速深度学习部分,其效果也确实非常可观,在画质较低的情况下,运行速度达到了100fps以上,下面是我在B站发布的效果视频点我跳转。这篇博客也是为了总结一下玩香橙派5的时候遇到的坑。

准备材料:

        1、香橙派5

        2、一台windows10或windows11的电脑

        3、一个内部带有Ubuntu20.04的移动硬盘(如果没有,也可以用VMware安装个虚拟机也行)。

        3、USB摄像头(某宝上有卖的,啥都可以)用来做视频识别

        4、64G内存卡(烧录了官方的Debian11系统)、HDMI线、显示屏、官方的电源线、键鼠套装

        5、香橙派5官方提供的无线网卡(其他网卡应该也行,只不过当时我买了,即使安装了驱动也没上成网)

        6、散热壳(也是某宝买的,不是官方的)

 说明:

        关于RKNN,官方给出了两种思路,一种是关于C的,另一种是关于Python的,这里我只介绍Python有关部分。

        在接下来的操作中,一和二是在windows系统上进行操作的,三是在Ubuntu20.04系统上进行的,四是在香橙派5上操作的,大家注意区分!!!

一、使用官方指定的yolov5版本去训练:

        不瞒大家,对于yolov5来说,博主本人在寒假之前也没用过,这个寒假才学会了yolov5的训练和应用,在此之前,我甚至都不知道yolov5还分为多个版本,RKNN官方教程

进入教程后,首先点击框内链接跳转至yolov5的GitHub仓库

 博主这里跳转过后是403,没关系,我们直接点击yoloV5官方库跳转至如下界面。

 点击左上角箭头所指区域,搜索c5360f6e7009eb4d05f14d1cc9dae0963e949213,跳转至如下界面,按顺序点击箭头所指区域

 进入如下界面后,点击Browse file

 这样,我们就找到了正确的版本了

 把代码保存到本地,接下来,我们点击Releases · ultralytics/yolov5 · GitHub,进入如下界面

 滚动滑轮大概在界面的中部位置,点击箭头所指区域

 进入如下界面

滑动滚轮到页面底部,下载我们的预训练模型yolov5s.pt

 然后就是开始我们的yolov5的简单训练了,这里我参考的是这篇博客,这位博主写的很好,对小白很友好小白YOLOv5全流程-训练+实现数字识别_yolov5数字识别_牛大了2022的博客-CSDN博客

        当然了,我们因为选择了不同的版本,会出现一点小的问题,这里我也记录了下来。

        1、这里一定要采用单引号,否则就会报出这个错误ValueError: too many dimensions ‘str‘

        2、当出现OSError: [WinError 1455] 页面文件太小,无法完成操作,一般是要去给Anaconda所在的盘符分配一定的虚拟内存,同时把train.py里的'--batch-size'选项调小,我是轻薄本,于是就改成了4,虚拟内存分配了50G,此外,如果多次输出这个错误的话,就尽量不要用python终端去执行命令了,直接修改train.py里面的参数,然后运行train.py

        3、当出现如下错误的时候,不要慌张,可以把所有的np.int修改成np.int_即可

 4、如果以上错误都解决了的话,已经开始训练了,结果出现下面的错误

 这样的话,就要进入loss.py函数,修改两个地方,第一个地方:

for i in range(self.nl):
        anchors = self.anchors[i]

 改为如下所示:

 for i in range(self.nl):
        anchors, shape = self.anchors[i], p[i].shape

第二个地方:

indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1)))  # image, anchor, grid 

改为:

indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid

 以上的错误解决完了就可以训练了。博主我啊,为了写这篇博客,还把这整个操作给又弄了一遍,各位看在这么辛苦的份上,给我点个赞吧。

二、将训练好的best.pt转为best.onnx

        这里,我们再次进入RKNN官方教程这里,按照官方提供的步骤来操作。

         这一步一定要等训练完成后,再对export.py进行修改,然后我们要把得出的best.pt复制到export.py同一级文件夹下。

python export.py --weights best.pt --img 640 --batch 1 --include onnx

         我确实报了一大堆警告,最开始我没有去管,后来到了转rknn的时候,出了个大问题

这是报的错误

WARNING: The shape inference of prim::Constant type is missing, so it may result in wrong shape inference for the exported graph. Please consider adding it in symbolic function.

         我们要到export.py文件里面,把'--opset'选项该成11,再次运行代码,弹出下面的界面,没有了上面说的警告,但还是会有一些警告,博主上网查了一些,说是深度神经网络的网络结构太灵活,网络结构中出现不少if else 语句,需要去掉,这个我没在意,后续也没出啥问题。

         之后,在export.py的同级目录下,就会生成best.onnx这个文件,我们需要做的就是把这个文件copy到我们的Ubuntu20.04系统里面,进行处理。

写不开了,大家可以跟着看第二篇

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

香橙派5使用NPU加速yolov5的实时视频推理(一) 的相关文章

  • 树莓派4b 安装ubuntu20.04server和图形化界面遇到的问题

    树莓派安装图形界面参考教程 树莓派4b安装Ubuntu 18 04系统及图形桌面 树莓派4B安装 ubuntu20 04 amp VNC远程桌面 amp 安装ROS noetic 树莓派4b安装Ubuntu和ROS的完整爬坑记录 2021年
  • 【STM32】串口接收任意字符串

    目录 前言cube配置usart h xff1a usart cmain xff1a 效果 前言 之前写了一篇STM32hal库串口中断接收任意字符 实际上是不完美的 xff0c 他接收到换行符就完蛋了 花了点时间深入研究了一下hal库的串
  • 使用封装的axios发送请求

    使用封装的axios发送请求 1 src api api js 定义请求路由方法 span class token function import span URLS from span class token string 39 conf
  • STM32串口驱动

    首先了解串口通信的一些基本原理 xff1a 串口通信 xff1a 串口通信是指数据通过一条数据线 xff08 或者两条差分线 xff09 一位接着一位的传输出去 串口通信的优点是占用硬件资源少 xff0c 且传输距离较远 xff0c 缺点是
  • IIC 驱动OLED

    IIC总线可以驱动很多器件 xff0c 比较常见的有OLED EEPROM存储器 xff08 AT24C02 xff09 温度传感器 xff08 LM75A xff09 温湿度传感器 xff08 DHT11 xff09 等 有关IIC总线协
  • Stm32-使用TB6612驱动电机及编码器测速

    这里写目录标题 起因一 电机及编码器的参数二 硬件三 接线四 驱动电机1 TB6612电机驱动2 定时器的PWM模式驱动电机 五 编码器测速1 定时器的编码器接口模式2 定时器编码器模式测速的原理3 编码器模式的配置4 编码器模式相关代码5
  • CAN总线协议入门基础原理

    CAN 是 Controller Area Network 的缩写 xff08 以下称为 CAN xff09 xff0c 是 ISO 1 国际标准化的串行通信协议 CAN 通过 ISO11898 及 ISO11519 进行了标准化 xff0
  • SPI总线协议基本原理及相关配置

    单片机应用中 xff0c 最常用的通信协议主要有三个 xff0c 即USART IIC和SPI 关于前两个的介绍在之前文章学习过 xff0c 这次介绍一下第三个通信协议 SPI SPI Serial Peripheral Interface
  • 利用定时器的输出比较功能产生PWM驱动舵机

    一 定时器基本原理 首先我们来看一下ST官方给出的关于定时器的相关介绍 xff1a xff08 以STM32F103C8T6为例 xff09 STM32F103C8T6 含有 4 个 16 位定时器 xff0c 分别是一个高级定时器 TIM
  • ST-LINK固件升级

    关于st link固件升级注意的问题 在下载调试的过程中 xff0c 程序可能由于st link版本过旧而提示 command not supported 的错误 xff0c 这就要求我们升级st link固件才可以正常下载 但是在升级的过
  • 关于英伟达jetson nano的搭配双目摄像头跑ORB_SLAM2

    1 安装系统 按照商家给的资料安装 xff0c 将Ubuntu18 04LTS镜像拷贝到tf卡中 xff0c 插上jetson nano就可以安装了 2 系统设置 进入系统我先把系统语言设置为中文 xff0c 在右上角的设置中找到系统设置中
  • 双目摄像头(CSI-IMX219)的标定

    1 介绍 网上关于这类标定有挺多教程的 xff0c 但由于这个摄像头的特殊性 xff0c 所以不可能完全安装教程来走 目前来说有3种标定方法 xff1a ROS操作系统来标定 matlab标定 opencv标定 这三种方法我先试了用ROS来
  • 小学生学AD16(入门级别,看这篇就够了)

    1 软件安装 xff1a AD16的安装我就不多介绍了 xff0c csdn一搜一大把 要学一个软件 xff0c 那么软件安装是必经之路 xff0c 不要认为软件安装不重要 xff08 如果你的安装完之后桌面没快捷方式 xff0c 那么可以
  • Arduino串口绘图器双通道绘制

    Serial print val Serial print 34 34 Serial println muBiao 其实只用在两个变量之间加个 xff0c 就行了 参考网址 https www norwegiancreations com
  • 关于神舟笔记本TX8连副屏经常蓝屏的问题

    大概率是3060显卡驱动的问题 xff0c 可以试试重新安装显卡驱动 若还是不行就换个接口 xff0c 不要用hdim的接口 xff0c 那个是直接连3060的 换剩下两个的minidp接口其中一个 xff0c 第一个不要接 xff0c 那
  • 51单片机入门(小学生都能学会)

    序 xff1a 时隔一年 xff0c 我终于从二年级到三年级了 xff01 由于小学三年级这学期要学单片机 xff0c 故写下这篇笔记留下些什么 由于自己也是新手 xff0c 欢迎各位指出本文的各种错误 1 什么是51单片机 为什么要说这个
  • 解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

    起因 为了互通Linux系统和Windows系统的文件 xff0c 以更好的实现文件管理和资源共享 所以在查阅资料后 xff0c 使用WinScp xff0c WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端 它的
  • 小学生51系列之基础知识

    1 单片机的基本结构 说到基本结构 xff0c 就是指51单片机的硬件组成 51单片机由中央处理器CPU 储存器 定时器 I O端口 组成 其中储存器包含数据储存器 xff08 RAM xff09 和程序储存器 xff08 ROM xff0
  • ros 接入Livox Mid-70

    最近在研究3d避障激光 大疆Livox mid 70 xff0c 记录下接入过程 环境信息 xff1a Ubuntu 18 04 ros melodic 1 livox view 点云可视化 xff08 1 xff09 根据livox mi
  • ROS+opencv实践-二维码识别

    一 安装二维码识别的功能包 sudo apt span class token operator span get install ros span class token operator span melodic span class

随机推荐

  • C语言简单链表详细步骤详解

    43 链表 gt 小阿豪带你写链表 xff01 xff01 xff01 xff01 进入正文 span class token number 1 span 首先 xff0c 先想好自己要创建的链表格式以及最后的的显示界面 xff01 xff
  • 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 滚球控制系统 这里展示一下画圆 xff1a 观看完整视频点这里 接下来 xff0c 我来分享一下从搭整体结构到调试完的过程 这是我搭完的整体结构 xff08 缩小版 xff09 不管什么题 xff0c 结构部分还是
  • 【Linux网络编程】你了解TIME_WAIT状态吗?

    在Linux网络编程中 xff0c 我相信大多数人觉得最难理解的就是TCP中的TIME WAIT状态了吧 xff0c 那么TIME WAIT的概念到底是什么 xff0c 有几个类型呢 xff0c 以及在面试中经常会问到的TIME WAIT状
  • 【图解】八幅图带你轻松掌握八大排序(上):冒泡排序、选择排序、插入排序、快速排序

    在算法中 xff0c 八大排序算是最简单的也是重中之重 xff0c 所以掌握好八大排序的思想是非常重要的 xff0c 很多人学排序的时候会觉得似懂非懂 xff0c 本篇文章作者耗时两小时绘制了八大排序的详细图解 xff0c 让大家快速理解八
  • 最详细整理STL之vector基础

    前言 xff1a Vector是一种可以存储任意类型的动态数组 xff0c 属于序列式容器 xff0c 可以用sort对其进行排序 xff0c 底层数据结构是数组 xff0c 可以随机访问元素 Vectors 包含着一系列连续存储的元素 其
  • STL之vector扩容机制

    前言 大家好 xff0c 我是萝卜 上期结尾说到vector的push back操作一般情况下时间复杂度为O 1 xff0c 是否存在特殊情况 那么本期就讲讲vector在容器空间不足时进行push back操作会发生什么 vector作为
  • 求职嵌入式软件开发linux kernel/BSP leader/工程师职位

    个人工作说明 xff1a 目前从事linux系统网络设备的开发工作 xff0c 负责bootloader linux kernel文件系统 xff0c driver移植 xff0c 以及开源app移植 主要技能和过去的经验 xff1a 1
  • 【2023最新】计算机网络面试题【收藏持续更新】

    你好 xff0c 我是萝卜 xff0c 我会在本篇文章持续更新关于计算机网络的面试题 最新内容更新日期 xff1a 2023 04 11 基础 说一下计算机网络体系结构 网络体系结构一般有三种 xff1a ISO七层模型 xff0c TCP
  • UDP协议详解

    概述 xff1a UDP只在IP的数据报服务之上增加了两个最基本的服务 xff1a 复用和分用以及差错检测 UDP不保证可靠交付 xff0c 但是不意味着应用对数据的要求是不可靠的 xff0c 只是所有维护可靠性的工作可由用户在应用层完成
  • TCP传输可靠性保证机制之重传机制

    TCP重传机制 tcp重传机制包括超时重传 快速重传 带选择确认的重传 SACK 重复SACK 四种 超时重传 xff1a 超时重传是tcp协议保证数据可靠性的一个重要机制 原理是在发送某一个数据以后开启一个计时器 xff0c 在一定时间内
  • VSCode:终端控制台常用指令

    常用的指令 以下是一些在 Visual Studio Code 终端控制台中常用的指令 xff1a 1 清除终端 xff1a clear 2 列出当前目录中的文件和文件夹 xff1a ls 3 切换到指定目录 xff1a xff1a cd
  • Ubuntu18.04安装ROS时rosdep update报错解决办法

    在安装ros进行rosdep update时经常会报错 xff0c 有时候可以通过换网解决 xff0c 但从我安装那么多次的经验来看 xff0c 仅有一次换手机热点后更新成功了 xff0c 其他都是失败 xff0c 成功率太低 从网上搜到了
  • 【STM32】STM32F103C8T6串口通信,实现3个串口收发数据

    串口通信 xff08 Serial Communications xff09 实现单片机与电脑或者其它外设进行通信 xff0c 通信时只需两根线 xff08 TX xff0c RX xff09 就可以实现数据传输 STM32f103有三个串
  • C语言学习笔记——(2)数组

    数组 1 什么是是数组2 数组的定义2 1数组的表达2 2数组的含义2 3数组的大小 xff1a 3 字符数组4 字符串操作5 二维数组 1 什么是是数组 数组是指有序的元素序列 如果将有限个类型相同的变量的集合命名 xff0c 那么这个名
  • 多线程编程实验

    xff08 一 xff09 查看下列程序并运行 xff0c 掌握如何通过扩展Thread类创建线程 span class token keyword package span span class token namespace case1
  • 实验一:基于Ubuntu系统实现无人机自主飞行

    ps xff1a 为避免出现错误 xff0c 在进行新的一步时 xff0c 需要关闭由于上一步操作打开的终端 xff0c 并开启一个新的终端 例如 xff1a 在开始第5步 安装MAVROS 之前 xff0c 关闭由于第3步 安装ROS 打
  • 5000字学习C语言错误处理的四种方式。

    C错误处理 在C语言中 xff0c 错误处理是一个非常重要的主题 通常情况下 xff0c 程序员需要在代码中处理错误 xff0c 以保证程序能够在出现错误时正确地处理这些情况 C语言中常见的错误类型包括 xff1a 语法错误 逻辑错误 运行
  • yum 源制作

    YUM介绍 YUM主要用于自动升级 安装 移除 rpm 软件包 xff0c 它能自动查找并解决 rpm 包之间的依赖关系 xff0c 要成功的使用 YUM 工具更新系统和软件 xff0c 需要有一个包含各种 rpm 软件包的 reposit
  • MATLAB021b与VS2022混编

    MATLAB2021b与VS2022混编 前言 目前在做一个大创项目 xff0c 其中用到关于Matlab与C的混合编程 xff0c 特此记录 Matlab2021b 如图所示 xff0c 红线划出的是即将使用的 c函数 xff0c 在左侧
  • 香橙派5使用NPU加速yolov5的实时视频推理(一)

    前言 xff1a 寒假里 xff0c 博主完成了树莓派4B搭载yolofastest V2的ncnn加速 xff0c 效果挺不错的 xff0c 但总感觉还是稍微差点意思 xff0c 于是就购买了一块香橙派5 xff0c 想要用RK3588芯