【树莓派】yolov5 Lite,目标检测,树莓派4B,推理v5lite-e_end2end.onnx,摄像头实时目标检测

server/2024/9/18 12:16:58/ 标签: YOLO, 目标检测, 人工智能, 树莓派4B

文章目录

    • YOLOv5 Lite: 在树莓派上轻松运行目标检测
      • 1. 环境配置
      • 2. 克隆项目
      • 3. 安装依赖项
      • 4. 下载模型权重
      • 5. 理解end2end的含义
      • 6. 示例推理
      • 7. 文件介绍
      • 8. 把文件弄到树莓派4B执行
      • 9. 进一步尝试fp16的onnx(行不通)
      • 10. 视频流检测
  • 问询、帮助

这里有大概的环境配置:
https://qq742971636.blog.csdn.net/article/details/138048132

yolov5树莓派跑不起来,用yolov5 Lite可以:
https://github.com/ppogg/YOLOv5-Lite

YOLOv5_Lite__11">YOLOv5 Lite: 在树莓派上轻松运行目标检测

今天我将向您介绍如何使用YOLOv5 Lite在树莓派上进行目标检测YOLOv5 Lite是一种轻量级目标检测模型,适用于资源受限的设备,如树莓派。在本文中,我将分享环境配置、项目克隆、模型部署以及示例推理的详细步骤。

1. 环境配置

首先,让我们配置环境以准备部署YOLOv5 Lite。以下是您需要执行的命令:

export http_proxy=http://192.168.3.2:10811
export https_proxy=http://192.168.3.2:10811

2. 克隆项目

接下来,我们将克隆YOLOv5 Lite项目。执行以下命令:

git clone https://github.com/ppogg/YOLOv5-Lite.git

3. 安装依赖项

进入项目目录并安装所需的依赖项:

cd ~/YOLOv5-Lite-master/python_demo/onnxruntime
python3 -m pip install onnx onnxruntime

4. 下载模型权重

现在,让我们下载YOLOv5 Lite的模型权重,您可以通过以下链接获取:

模型权重下载链接

5. 理解end2end的含义

YOLOv5 Lite中,我们使用end2end方法进行推理。这意味着模型内置了非极大值抑制(NMS),无需额外的后处理步骤。这样可以极大地简化代码并提高推理速度。

在这里插入图片描述

比如对下图的左图推理,可以得到12*6的结果:

在这里插入图片描述

6. 示例推理

在Windows系统上,使用YOLOv5 Lite进行推理非常快速,达到了每秒100帧的速度。这使得它成为在资源受限的设备上进行实时目标检测的理想选择。

推理速度示例

7. 文件介绍

onnx推理不用管太多底层,不像mnn那样,所以更简单一点,经过上面的步骤,我们有如下文件:

(1)v5lite_e_onnx_end2end.py
(2)v5lite-e_end2end.onnx

执行v5lite_e_onnx_end2end.py就可以直接推理任意图片并保存,下图中的所有文件我放这里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2

在这里插入图片描述

8. 把文件弄到树莓派4B执行

FPS只能达到9,即是每秒大概可以推理9帧图像。因为我们是onnx的fp32的运算,这个运算对树莓派来说还是比较大的,最快看宣传可以达到17帧,需要做一些量化之类的,我这里就不做了。

这是代码执行:
在这里插入图片描述
执行结果保存为save.jpg,打开看到:
在这里插入图片描述

9. 进一步尝试fp16的onnx(行不通)

是否可以使用fp16的onnx推理呢,速度会不会快一些呢,尝试一下,win上安装环境:

pip install onnxmltools  onnxconverter-common

执行python代码:

import onnxmltools
# 加载float16_converter转换器
from onnxmltools.utils.float16_converter import convert_float_to_float16
# 使用onnxmltools.load_model()函数来加载现有的onnx模型
# 但是请确保这个模型是一个fp32的原始模型
onnx_model = onnxmltools.load_model('./v5lite-e_end2end.onnx')
# 使用convert_float_to_float16()函数将fp32模型转换成半精度fp16
onnx_model_fp16 = convert_float_to_float16(onnx_model)
# 使用onnx.utils.save_model()函数来保存,
onnxmltools.utils.save_model(onnx_model_fp16, './v5lite-e_end2end_fp16.onnx')

有警告,但是文件得到了,并且是一半的大小:

在这里插入图片描述
执行推理失败了,说明转换的时候有的nms算子还是不能成功转换的,这一条路堵住了。

在这里插入图片描述

10. 视频流检测

这一步就比较简单了,建立一个文件写点opencv-python的代码,进行usb摄像头检测即可:
在这里插入图片描述

所使用的代码如下,其中v5lite_e_onnx_end2end.py在文档中去搜索获取感谢

import cv2
from v5lite_e_onnx_end2end import yolov5_lite
if __name__ == '__main__':# 初始化摄像头cap = cv2.VideoCapture(0)  # 0 表示第一个摄像头,如果有多个摄像头,可以尝试不同的索引# 加载模型modelpath = 'v5lite-e_end2end.onnx'  # 模型路径classfile = 'coco.names'  # 类别文件路径net = yolov5_lite(modelpath, classfile)  # 加载模型# 循环读取摄像头流while True:ret, frame = cap.read()  # 读取一帧图像if not ret:break  # 如果没有读取到图像,退出循环# 进行检测detected_img = net.detect(frame)# 显示检测结果cv2.imshow('YOLOv5Lite Detection', detected_img)# 检测按键,如果按下 q 键则退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭所有窗口cap.release()cv2.destroyAllWindows()

问询、帮助

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

http://www.ppmy.cn/server/17285.html

相关文章

PDPS16.0单机版及许可证服务器授权安装教程分享

此前小编做过PDPS15(Tecnomatix_15.0)安装包及安装教程分享,此次分享是PDPS16(Tecnomatix_16.0)单机版安装结合SPLMLicenseServer许可证服务器授权安装的教程。服务器型是完整的pdps,单机版只装了个ps,ps的功能一样,仿真需求没要求…

Java基础教程(8)-Java中的面向对象和类(二)

面向对象的三大基本特征 封装(Encapsulation)继承(Inheritance)多态(Polymorphism)封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 封装是面向对象的特征之一,是对象和类概念的主要特性。…

SpringBoot+vue开发记录(二)

说明:本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目: 如下,这样简单创建就行了,JDK什么的就先17,当然1.8也是可以的,后面可以改。 这样就创建好了: 2. pom.xml…

每天一个数据分析题(二百九十三)——数据分析思维

CDA数据分析考试:https://www.cdaglobal.com/ 了解了主要分析维度后再进一步落实到具体的数据表及数据字段时就可以使用哪种思维方法帮助理清线索? A. 业务流程分析 B. 帕累托分析 C. 因果分析 D. 5W2H分析 题目来源于CDA模拟题库 点击此处获取答…

【插件】IDEA 热部署插件 JRebel

1 搜索安装插件 JRebel 2 选中Team URL 1、在上面的框中输入激活的url地址 https://jrebel.qekang.com/{GUID} http://jrebel-license.jiweichengzhu.com/{GUID} GUID生成工具 Create GUID online (guidgen.com) 备用 404 Not Found (ofmonkey.com) 如果上述激活地址不能…

鸿蒙原生应用元服务-访问控制(权限)开发应用权限列表一

ohos.permission.USE_BLUETOOTH 允许应用查看蓝牙的配置。 权限级别:normal 授权方式:system_grant ACL使能:TRUE ohos.permission.DISCOVER_BLUETOOTH 允许应用配置本地蓝牙,查找远端设备且与之配对连接。 权限级别&#…

VMware虚拟机经常卡死风扇狂转的解决办法

干完别的事情切换到VMware虚拟机,有时VMware会卡死风扇狂转,主要原因是因为剪贴板存在一些比如QQ图片等内容,这种内容实现得有点问题,VMware对这种情况处理得不太好导致的 QQ的剪贴板格式是自定义格式,图片部分可能实…

Recommended Azure Monitors

General This document describes the recommended Azure monitors which can be implemented in Azure cloud application subscriptions. SMT incident priority mapping The priority “Blocker” is mostly used by Developers to prioritize their tasks and its not a…

装饰器模式

装饰器设计模式 定义 装饰器模式,在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 装饰器用来包装原有的类,在对使用者透明的情况下做功能的…

学python的第二十一天

生成激活码,连接数据库,并保存到数据库 1,生成激活码 # 1 生成激活码 import random # 导入随机数模块 import os # 导入os模块 import string # 导入字符串模块def GenKey(length): # 定义生成激活码函数chars string.ascii_letters …

电流电压;为什么用铜线作为导体

目录 电流电压 为什么用铜线作为导体 电流:电是怎么流动的 电压:储存压力

Vue3引入高德地图js API 2.0

文章目录 前言一、地图加载1.本文准备环境2.引入库3.加载地图4.加载地图控件 二、POI搜索1.什么是poi搜索2.如何使用 三、绘制点标记与信息窗体1.场景描述2.案例3.信息窗体-链接路由跳转4.进阶-通过Marker自动触发标记点(非鼠标手动点击) 四、jsApi地图事…

ubuntu ROS1 C++下使用免安装eigen库的方法

1、eigen库的定义及头文件介绍 Eigen是一个高层次的C 库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。 2、获取eigen库安装包 下载地址:eigen库官网 ,如下图所示: 下载最新版tar.bz2即可&…

Docker常用操作记录

docker 常用命令 // 查看docker系统信息 docker info // 显示 Docker 版本信息 docker version docker ps // 查看正在运行的容器 docker ps -a // 查看所有已经创建的容器 docker images // 列出镜像列表 docker container ls // 效果同ps命令(加-a效果同)// 详细信息 docke…

【51单片机项目】基于51单片机自制多功能小键盘/模拟USB键盘【附源码】(STC89C52RC+CH9328)

目录 一、效果展示 二、创作灵感 三、硬件电路 注意事项 工作原理 四、源码 main.c 五、附录 CH9328工作原理 CH9328的模式选择 ​编辑 全键盘键码值表 参考链接 一、效果展示 该小键盘具有三种功能: 1、自动输入开机密码 2、每隔一段时间自动按下ct…

Hadoop-Hive-Spark-离线环境搭建

一、版本描述 apache-hive-2.3.9-bin.tar.gz hadoop-2.7.0.tar.gz spark-2.4.0-bin-hadoop2.7.tgz 下载链接: https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz https://archive.apache.org/dist/hadoop/common/hadoop-2.7.…

密码学 | Schnorr 协议:零知识身份证明和数字签名

🥕原文: Schnorr 协议:零知识身份证明和数字签名 🥕写在前面: 本文属搬运博客,自己留存学习。文中的小写字母表示标量,大写字母表示椭圆曲线中的点。 1 Schnorr 简介 Schnorr 由德国数学家和密…

API提取IP

API代理作为IP代理的一项重要业务,在绕开地域网络限制,提高作业效率等方面提供强大的技术支持。它能够帮助用户快速实现软件与软件间的交流,无障碍连通不同应用程序逻辑开发的系统应用。API代理用途范围广泛,如使用API提取代理IP、…

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型。在食用油产业中,数字化转型已成为提升生产效率、优化供应链管理、确保产品质量和满足消费者需求的关键。食用油5G智能工厂数字孪生可视化平台作为这一转型的重要工具,正在推动…

Spark 中的分桶分化

Spark 中的分桶分化 Bucketing是 Spark 和 Hive 中用于优化任务性能的一种技术。在分桶桶(集群列)中确定数据分区并防止数据混洗。根据一个或多个分桶列的值,将数据分配给预定义数量的桶。 分桶有两个主要好处: 改进的查询性能&…