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

文章目录

    • 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: 在树莓派上轻松运行目标检测

今天我将向您介绍如何使用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()

下次博客准备把树莓派系统打包到镜像里去,这样可以免得每次都装半天环境,理论上克隆sd卡里所有内容就复刻了一份所有东西了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/575157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

80个在线小游戏源码

源码简介 搭建80个在线小游戏网站源码,解压即可食用,支持在本地浏览器打开。 安装教程 纯HTML,直接将压缩包上传网站目录解压即可 首页截图 源码下载 80个在线小游戏源码-小8源码屋

Mac虚拟机装Windows Mac环境安装Win虚拟机教程 macbookpro安装windows虚拟机

在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于Mac用户来说,有时候需要在自己的电脑上安装Windows操作系统,以体验更多软件及功能,而在Mac安装Windows虚拟机是常用的一种操作。下面就来看看Mac虚…

前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构

前端框架EXT.NET Dotnet 3.5开发的实验室信息管理系统(LIMS)成品源码 B/S架构 LIMS实验室管理系统 发展历史 实验室信息管理系统(LIMS),就是指通过计算机网络技术对实验的各种信息进行管理的计算机软、硬件系统。也就是将计算机网络技术与现…

新手答疑 | 零基础该怎么学习嵌入式?嵌入式Linux学习路线是什么?嵌入式开发板推荐?

很多初学者想要涉足嵌入式Linux开发领域,但往往在刚入门阶段,会因为初次接触到大量复杂的概念术语和深奥的技术文档感到压力重重,面对这些内容不知从何下手,感到十分迷茫,网上的内容也纷繁复杂,没有清晰的学…

《前端面试题》- React - 如何区分函数组件和类组件

问题 如何区分函数组件和类组件? 答案 可以使用instanceof 或者Component.prototype.isReactComponent。 示例 函数组件 export default function FunctionComonent() {if(FunctionComonent.prototype.isReactComponent){console.log(FunctionComonent是类组件…

白平衡简介

文章目录 白平衡的概念白平衡的调节常见的白平衡模式 白平衡的概念 白平衡是指摄影、摄像和显示技术中的一项重要概念,用于调节图像中的白色或中性灰色的色彩,使其看起来在不同光源条件下都是准确的白色或灰色。白平衡的主要目的是确保图像的色彩准确性…

C++的二叉搜索树

目录 基本概念 二叉搜索树的实现 插入结点 查找结点 删除结点 删除结点左为空 删除结点右为空 基于特殊情况的优化 删除结点左右不为空 基于特殊情况的优化 完整代码 二叉搜索树的实际应用 K和KV模型 改造二叉搜索树为为KV模型 基本概念 1、二叉搜索树又称二叉…

科技云报道:走入商业化拐点,大模型“开箱即用”或突破行业困局

科技云报道原创。 大模型加速狂飙,AI商业化却陷入重重困境。 一方面,传统企业不知道怎么将AI融入原始业务,另一方面,AI企业难以找到合适的商业化路径。 纵观海外AI玩家,已经有许多企业趟出了自己的商业化道路。 微…

Linux系统安全与应用【一】

目录 1.账号安全控制 1.1 系统账号清理 1.2 密码安全控制 1.3 命令历史限制 1.4 命令总结 2.系统引导和登录控制 2.1 使用su命令切换用户 2.2 限制使用su命令的用户 3.可插拔式认证模块PAM 3.1 linux中的PAM安全认证 3.2 PAM认证原理​编辑 3.3 PAM认证的构成 3.4 P…

项目管理中常用的三个工具:甘特图、看板、燃尽图

在日常项目管理的实践中,为了更有效地追踪项目进度、优化资源配置和提高团队协作效率,管理者常常会借助一些工具来辅助工作。这些工具的本质在于将抽象复杂的项目管理任务具象化、简单化,以更直观、方便的方式呈现出来。 以下介绍项目管理中…

基于Springboot的在线动漫信息平台

基于SpringbootVue的在线动漫信息平台的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 热门动漫 文章专栏 会员分享 论坛信息 动漫资讯 后台登录 动漫分类管…

在Spring Boot应用中实现阿里云短信功能的整合

1.程序员必备程序网站 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 2.导入坐标 <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.0</version></dependency><…

SpringCloud之Feign集成Ribbon

Feign定义【可跳过】 Spring Cloud Feign是一个声明式的伪Http客户端&#xff0c;它使得写Http客户端变得更简单。其英文表意为“假装&#xff0c;伪装&#xff0c;变形”&#xff0c;是一个http请求调用的轻量级框架&#xff0c;可以以Java接口注解的方式调用Http请求&#x…

[Rust开发]在Rust中使用geos的空间索引编码实例

geos的空间索引用的是STRTree&#xff0c;这是一种基于STR算法的四叉树索引&#xff0c;有如下特点&#xff1a; 使用Sort-Tile-Recursive (STR) 算法创建的仅查询的R-tree空间索引 STR(Sort-Tile-Recursive,递归网格排序) 基本思想是将所有的矩形以“tile”的方式分配到r/n&a…

netsh int ipv4 show dynamicport tcp动态端口port设置

netsh int ipv4 show dynamicport tcp netsh int ipv4 set dynamicport tcp start4000 num10000

STM32_舵机的实战

一、配置相应的管脚 二、写代码

linux+ndk把jni制作成so库供apk使用(带线程的回调)

我们就不墨迹了,直接开始,往往我们需要jni给我们回调一些数据,并且是实时的回调,这里我们就需要多写一些东西了 1.先在安卓里面设置好接口以及回调,我自己给你们看源代码 package com.example.myndkapplicationimport android.os.Bundle import android.util.Log import androi…

基于Python实现心脏病数据可视化DEA+预测【500010103.1】

一、数据说明 该心脏病数据集是通过组合 5 个已经独立可用但以前未合并的流行心脏病数据集来策划的。在这个数据集中&#xff0c;5 个心脏数据集结合了 11 个共同特征&#xff0c;使其成为迄今为止可用于研究目的的最大心脏病数据集。 该数据集由 1190 个实例和 11 个特征组成…

wstunnel (websocket模式ssh)

接上一篇 修改客户端运行参数 ssh -o ProxyCommand"./wstunnel client -L stdio://%h:%p ws://192.168.254.131:8080" 127.0.0.1 其中127.0.0.1为服务端的本地ssh访问&#xff0c;可以修改为通过服务端访问其他设备的ssh服务。例如&#xff1a; ssh -o ProxyComma…

线性代数-行列式-p1 矩阵的秩

目录 1.定义 2. 计算矩阵的秩 3. 矩阵的秩性质 1.定义 2. 计算矩阵的秩 3. 矩阵的秩性质