Yolov5移植树莓派实现目标检测

news2024/11/20 10:40:54

Hallo,大家好啊!之前写了几篇Yolov5相关项目的博客,然后学习了树莓派之后,更新了几篇树莓派的博客,我的最终目的是将Yolov5移植到树莓派,通过树莓派上面的摄像头实现目标检测。你想啊,在工厂里面,你不可能用笔记本电脑作为上位机给下位机传达指令,所以树莓派作为一个小型pc,有着独天独厚的优势。接下来,以项目为驱动,介绍一下整个流程,包括Yolov5数据集获取模型的训练识别效果树莓派环境的搭建移植树莓派模型在树莓派上的检测效果

目录

一、任务描述 

二、数据集获取

三、Yolov5模型训练

四、模型训练结果

五、检测效果

六、树莓派环境搭建

七、Yolov5移植树莓派

八、树莓派检测效果

总结


一、任务描述 

通过机器视觉的方式实现对工件的识别,以树莓派作为上位机,根据不同的识别效果对下位机发出不同指令,控制整个机器的运转,流程如下:

二、数据集获取

这是老师发的零件,所以网上肯定没有直接能用的模型,不像口罩检测等有现成的数据集,所以我们需要自己去获取数据集。由于我们的零件只有两个,如果我们想获取大量图片话,我们可以通过旋转的方式,我设置每张图片每旋转10度生成一张新的照片,这样没拍一张照片就可以生成36张照片,扩大了数据集的来源。之后用labelImg对图片进行标注,这样我们就获取了大量的数据集和对应的标签txt文件,我按照test:train:val = 1:8:2的比例分配图片。这样我们的数据集就准备好了。

三、Yolov5模型训练

由于yolov5创作者将模型代码开源,所有我们可以拿来直接用,只需要修改train和val的路径,需改成自己的,以及类别的数量,我这里分为两类,所以是2,标签名称就是对应的颜色,blue和red。我选用的是yolov5s这个模型,模型更加轻便,检测速度更快,同样设置类别数量为2.准备好之后,我们就开始训练了,由于我是直接拿cpu来训练的,训练时产在5.7个小时左右,如果用GPU的话速度可以提高不少。

四、模型训练结果

 从图中我们可以看到,无论是准确率还是召回率都接近了100%,平均mAp达到0.995,说明模型的识别效果很好,对于我们的工件识别的任务能够很好的完成。

五、检测效果

从视频中我们可以看到,红色和蓝色的工件被识别出来,红色的打上red的标签,蓝色的打上blue的标签,数字代表精度,基本上在0.8以上,是一个比较理想的结果。对视频进行逐帧检测,每一帧的识别效果都很好。这是模型在笔记本上运行的结果,到此我们的Yolov5模块就算告一段落,接下来的问题就是怎么让它在树莓派上完美运行起来

六、树莓派环境搭建

这是我第一次接触树莓派,又是第一次接触Linux,所有遇到了很多问题,有时候一个问题都要一整天的时间才能够解决。我将这个学习过程,以及遇到的各种疑难杂症都记录下来,发在了csdn上面,希望可以给你们带来帮助。链接如下:Yolov5移植树莓派4B问题总结  Raspberry Pi 4B树莓派学习笔记

我选用的环境是树莓派的64位操作系统,这样的好处是opencv的下载很方便,经过长时间的摸索,我发现Pytorch很难在32位操作系统上安装,即使安装成功也没办法运行。所以我选择的是树莓派64位操作系统,安装了openv和pytorch。

七、Yolov5移植树莓派

环境准备好之后就要进行Yolov5的移植,首先通过vncviewer与树莓派连接,这样我们通过电脑就能控制树莓派,这里出问题的可以看我上面两篇博客。

通过顶端的文件传输将训练好的pt模块传到树莓派上,用linux cd命令进入到yolo所在文件夹中,输入运行指令,python3 运行detect文件,权重文件就用我们刚刚传入的best.pt文件source为0就是调用我们树莓派上安装的CSI摄像头。之后按回车就可以运行了。

八、树莓派检测效果

 我们来看一下检测效果:左边是检测的环境,树莓派搭载csi摄像头获取图像,下面这张图片就是检测时的一张图片,可以看到,红色的零件被识别出来打上了red的标签,蓝色的零件也被识别出来打上蓝色的标签,我们可以利用这两个标签给下位机发出不同的指令,完成指定的任务。

总结

项目主要是Yolov5进行目标检测,之后用树莓派作为上位机,将模型移植树莓派进行识别,控制下位机的运转。过程中遇到数不尽的问题,有硬件上的,有软件上的,常常一个问题就是一天,这个过程是痛苦的,但好在结果是满意的。在检测的时候还发现Yolov5模型的识别速度确实有点慢,笔记本电脑都有点带不动,树莓派上更是卡顿,2-3秒才能检测一张图片。后面优化方向有两个,一个是优化模型,采用yolo-lite模型,一个是优化方法采用opencv模板匹配的方式去识别,不涉及深度学习速度应该会快很多。当然这是后话,人工智能还有很多地方我都没有学习,甚至都没有听过,现在还只是一个小白,继续加油吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【word文档使用方法记录】论文格式修改

word文档使用方法记录**去掉文档都以也封面的页眉:****WPS公式居中,公式号右对齐**为论文每个章节设置不同的页眉去掉文档都以也封面的页眉: 将光标定位在第一页页尾,进入“页面布局”选项卡,点击“分隔符”&#xff…

【MySQL数据库入门】:数据库基础和基本操作

文章目录1. 数据库基础1.1 什么是数据库1.2 主流数据库1.3 如何配置环境1.4 链接数据库1.5服务器,数据库,表关系2.基本的数据库操作3.MySQL架构4.SQL分类5.存储引擎5.1查看存储引擎5.2 存储引擎对比6.总结1. 数据库基础 1.1 什么是数据库 存储数据用文…

安装包UI美化之路-在线安装包

在一些安装场景中,由于完整的安装包很大,下载时间长,且下载后需要人工干预来进行安装,这样会一定程度的降低用户使用体验;nsNiuniuSkin安装包制作解决方案提供了一种在线版本的安装包,支持将实际要安装的内…

C++中delete 和 delete []的真正区别

1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存 那么,按照教科书的理解,我们看下下面的代码: int *a new int[10]; delete a; //方…

Java | 详解 Java连接MySQL、编写JdbcUtils工具类、使用数据库连接池、使用JavaTemplate

一、连接mysql数据库 步骤: 1、启动 MySQL :以管理员身份打开 cmd 命令行,输入 net start mysql 2、在 MySQL 创建一张表,用于后面的操作。我这里创建了一张 user 表,有id、name、password三个字段。 3、导入jar包 (1)…

【总结】最系统化的CV内容,有三AI所有免费与付费的计算机视觉课程汇总(2022年12月)...

欢迎大家关注有三AI的计算机视觉课程系列,我们的课程系列共分为5层境界,内容和学习路线图如下:第1层:掌握学习算法必要的预备知识,包括Python编程,深度学习基础,数据使用,框架使用等…

基于xml的自动装配之byType

基于xml的自动装配之byType 使用bean标签的autowire属性设置自动装配效果 自动装配方式:byType byType:根据要赋值的属性的类型,在IOC容器中匹配某个兼容类型的bean,为属性自动赋值 若在IOC中,没有任何一个兼容类型的b…

net/http 库的客户端实现(下)

前言 上一篇文章我们讲了 net/http 库客户端 request 的构建,接下来继续讲构建HTTP请求之后的处理操作 net/http 库的客户端实现(上) 启动事务 构建 HTTP 请求后,接着需要开启HTTP事务进行请求并且等待远程响应,以net/http.Client.Do()方法…

stm32f407VET6 系统学习 day01 GPIO 配置

1. GPIO 的5个配置 GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口&…

首创证券上交所上市:募资19亿市值306亿 上半年净利降14%

雷递网 雷建平 12月23日首创证券股份有限公司(简称:“首创证券”,股票代码为:“601136”)昨日在上交所上市。首创证券此次发行27,333.38万股,发行价为7.07元,募资总额为19亿元。首创证券首日收盘…

小学生C++编程基础 课程10

938.最小公倍数的简单方法 (课程A) 难度:1 登录 939.最大公约数的简单方法 ( 课程A) 难度:1 登录 940.韩信点兵 (课程A) 难度:1 登录 941.求123…N的和 (课程A&#x…

Bloom filter-based AQM 和 BBR 公平性

设 B 为 Delivery rate,D 为 Delay,将 E B/D 作为衡量效能,所有流量的收敛状态是一个 Nash 均衡,没有任何流量有动机增加或者减少 inflight。参见:更合理的 BBR。 并不是都知道这道理,增加 inflight 能挤…

Java环境配置——Linux 安装JDK

注意这是用普通用户登录后,单独设置用户的java环境变量,非root用户 root用户的编辑命令是 vi /etc/profile 下载安装包 创建java目录 mkdir java 进入目录 cd java 上传安装包 将jdk-8u161-linux-x64.tar.gz上传到java目录 配置环境变量 解压安…

并查集详解

1.并查集原理 某公司今年校招全国总共招生10人,西安招4人,成都招3人,武汉招3人,10个人来自不同的学校,起先互不相识,每个学生都是一个独立的小团体,现给这些学生进行编号:{0, 1, 2,…

156. 如何在 SAP UI5 应用里显示 PDF 文件

SAP 不少标准应用都可以在业务流程进行到某个阶段,根据系统里的业务数据和 SAP 事先开发好的表单模板,生成最终的 PDF 文件并显示在应用页面上。 本文介绍一种在 SAP UI5 页面里嵌入显示 PDF 文件内容的方式,效果如下。 点击屏幕右上角的下载图标,可以将这个显示的 PDF 下…

ASP.NET 企业人力资源管理系统源码 HR源码 前端bootstrap框架开发

中小型企业HR人力资源管理系统源码带使用手册和操作说明 了解更多,可私信我! 【程序语言】:.NET 【数据库】:SQL SERVER 2008 【运行环境】:WINDOWSIIS 【其他】:前端bootstrap框架 运行环境&#xff1…

学习记录-mybatis+vue+elementUi实现分页查询(前端部分)

前端这一块最方便的莫过于是element已经提供好了 接口,三个最关键的接口这里首先解决第一个,总数。 //总记录数totalCount:100,我直接在data中将其先初始化为100,之后直接在响应中设置,这是从后端查询到的值,不需要任何…

华为被迫开源,从认知到落地SpringBoot企业级实战手册(完整版)

前言 本手册重在引导读者进入真实的项目开发体验,围绕Spring Boot技术栈全面展开,兼顾相关技术的知识拓展,由浅入深,步步为营,使读者既能学习基础知识,又能掌握. 一定的开发技巧。本书的目标是让读者拥有一…

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法

图文详解 (Kubernetes)K8S 和 容器中的退出状态码含义和原因及解决方法。 什么是容器退出码 当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本…

Hadoop3.3.4最新版本安装分布式集群部署

Index of /dist/hadoop/commonhttps://archive.apache.org/dist/hadoop/common 集群规划: 注意: NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。 …