YOLOv5识别图像内苹果和香蕉
YOLOv5为目标检测带来了极大的方便。通过简单地训练YOLOv5,即可以实现一个速度快、性能高的目标检测系统。
下面介绍如何从头开始构造一个简单的目标检测系统,用来识别图像内的苹果和香蕉,并标注他们所在的位置。
特别强调的是,YOLOv5给我们提供了全套解决方案,整个系统并不需要我们自己手写代码。
对于通用任务,我们要做的就是找到开源数据集,训练它,然后就得到了完整的可以实现目标检测的系统。
例如,我们找到花卉数据集,通过该数据集训练,就可以实现一个识别花卉的系统。我们找到一个火车轨道伤损数据集,通过使用该数据集训练YOLOv5,就可以得到一个火车轨道伤损识别系统。
如果我们要进行的是一个专用任务。我们要做的工作可能要多一些,此时需要我们对一些训练图像进行标注,对其中出现的特定目标进行标注。当然,我们可以使用labelImg非常方便地对图像内的特定对象进行标注。
例如,我们要识别非常罕见的某个物体A、物体B、物体C。我们只要找到一些包含这些物体的图像,并使用labelImg对他们进行标注。然后训练该数据集,就可以得到一个新的YOLO系统识别新的图像上出现的物体A、物体B、物体C。
为什么要提到罕见的物体A、B、C。因为常见的物体,我们都可以找到别人已经构造好的数据集,不需要我们额外做标注工作了。
1 概述
首先,我们看下具体的流程:
步骤1:训练适用于当前项目的权重文件。 步骤2:使用训练好的权重文件,完成识别。
下面使用图来说明一下:
步骤1:
训练适用于当前项目的权重文件。
步骤2:
使用训练好的权重文件,完成识别。
更具体来说,从头开始仅仅需要六个步骤即可。具体步骤如下:
2 实现
如果已经具备一定的深度学习基础,上述步骤在半个小时即可完成。
下面,简单对上述六个步骤做个介绍。
2.1 step 1 配置anaconda
为了方便,直接安装anaconda就好。这样比较方便,不需要我们额外进行配置了。
2.2 step 2 下载YOLOv5
主要包含如下几个工作:
要件1:下载YOLOv5工程文件 要件2:下载权重文件 要件3:按照requirements.txt文件,配置第三方库 要件4:查看测试文件
要件1:下载YOLOv5工程文件
通过搜索引擎,找到官网,下载即可。
要件2:下载权重文件
它有好多预训练好的权重文件,我们可以根据需要下载即可。
如果问题比较简单,我们直接下载“YOLOv5n”即可。
总体来说:
预训练文件较小时,它的精读低、但是速度较快。
预训练文件较大时,它的精读高、但是速度较慢。
各个文件的大小如下:
要件3:按照requirements.txt文件,配置第三方库
运行YOLOv5,需要很多第三方库,直接使用YOLOv5自带的requirements.txt一次搞定。
要件4:查看测试文件
YOLOv5给我提供了两张测试图像,路径如下。
2.3 step 3 测试YOLOv5
本步骤测试YOLOv5是否能够正常运行。如下图,使用YOLOv5自带的测试图像、权重文件,实现目标检测。
图中:
左侧:测试图像
中间:权重文件
右侧:左侧测试图像的检测结果。可以看到检测出了领带、人、车等等。
直接运行detect.py即可。
需要注意的是,要配置其参数:
source:测试文件位置
weight:权重文件位置
2.4 step 4 数据集处理
这里需要使用labelImg。labelImg用来对图像进行标注,它能够根据手工标注自动给出对象在图像内的位置、对象大小。
如下图所示,文件classes所示:共有两个分类苹果和香蕉。苹果对应着类别0,香蕉对应着类别1.
如下图所示,图像lilizong1.jpg在labelImg处理后,会得到lilizong1.txt文件。
lilizong1.txt中,共有四行,前三行对应着lilizong1.jpg中三个苹果,第四行对应着lilizong1.jpg中的一只香蕉。
标注文件lilizong1.txt中,数值包含四个部分:
【分类、对象位置(x,y)、对象尺寸(宽度、高度)】
(x,y)、(宽度、高度)都是归一化的值。
简单理解,原始图像的宽度、高度都是1。或者将未知、尺寸都理解为原图像的百分比。
例如,在lilizong1.txt中,第1行中:
[0,0.47,0.52,0.12,0.118]
其中数值0是分类,对应着apple,(0.47,0.52)是苹果在图像中的位置,(0.12,0.118)是苹果的宽度和高度。
0.47表示当前的apple距离左边界的距离占图像总宽度的47%
0.52表示当前的apple距离上边界的距离占图像总高度的52%
0.12表示当前的apple的宽度占图像总宽度的12%
0.118表示当前的apple的高度占图像总高度的11.8%
labelImg安装方式如下:
pip install labelImg
labelImg的运行方式如下:
labelImg
运行labelImg,如下图所示。
主要操作如下:
1、图像目录:设定要标注的图像在哪
2、标签目录:生成的标签文件存在哪
3、支持类型:选择【YOLO】(也支持其他类型)
4、create rectangle(生成标注框)
5、设置默认标签
导入图像后,框定图像内的对象、设定标签即可获取对应的包含类别、位置、宽高的标注文件。
这里主要分为四部分:
1、data.yaml:配置文件
2、train:训练文件
3、val:验证文件
4、test:测试文件
配置文件(data.yaml)的内容主要包含:
1、设定好目标检测的分类
2、nc:类的个数(nubmer of class)
3、train:训练文件的路径
4、val:验证文件的路径
需要注意,使用yolov5,既要包含训练文件、又要包含验证文件。无论训练文件,还是验证文件其中的图像都要包含对应对应的标签。
2.5 step 5 训练YOLOv5
训练过程,就是使用训练文件、验证文件,获取权重文件的过程。
运行train.py完成YOLOv5的训练。需要注意的是,要配置其对应的参数,主要包含:
--batch-size="2" :批处理大小
--epochs="200" :训练轮次
--data="lilizong/data.yaml":数据源位置
--weights=".\weight\yolov5n.pt":使用的权重
配置方式如下:
2.6 step 6 目标检测
使用训练好的权重,进行目标检测。
运行train.py,实现目标检测。需要配置参数如下:
--source=".\lilizong\test" :原文件路径
--weights=".\runs\train\exp\weights\best.pt":训练好的权重
配置方式如下:
识别香蕉和苹果(目标检测)的结果如下所示:
视频课程地址:
YOLOv5实战(检测苹果和香蕉)--计算机视觉视频教程-人工智能-CSDN程序员研修院
YOLOv5识别图像内苹果和香蕉相关推荐
- RK3588实战:调用npu加速,yolov5识别图像、ffmpeg发送到rtmp服务器
前言:最近在学习一些rk3588相关的东西,趁着这个项目,把学习的相关东西整合下,放到一个项目里面,巩固学习的知识. 项目名称:yolov5识别图像.ffmpeg发送到rtmp服务器 功能:1.ope ...
- 计算机如何高效识别图像?
原文 How computers got shockingly good at recognizing images 作者 Timothy B. Lee 译者 李平海 图片如无标示亦出自原文 文末附有 ...
- [译]计算机如何高效识别图像?
原文 How computers got shockingly good at recognizing images 作者 Timothy B. Lee 译者 李平海 图片如无标示亦出自原文 文末附有 ...
- 神经网络提取图片特征,神经网络算法识别图像
如何用Python和深度神经网络寻找相似图像 代码首先,读入TuriCreate软件包import turicreate as tc我们指定图像所在的文件夹image,让TuriCreate读取所有的 ...
- 基于神经网络的文字识别,神经网络如何识别图像
ocr文字识别系统 . OCR软件OCR(OpticalCharacterRecognition)软件是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符 ...
- 神经网络处理表格数据,神经网络如何识别图像
如何利用卷积神经网络提取图像特征 卷积神经网络有以下几种应用可供研究: 1.基于卷积网络的形状识别 物体的形状是人的视觉系统分析和识别物体的基础,几何形状是物体的本质特征的表现,并具有平移.缩放和旋转 ...
- Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下)
Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下) 关于 效果图 第一步,添加我们的训练库 编写扫描框控件 新建扫码界面ScannerActivity.java 关于二维码拍照 ...
- 人工神经网络图像识别,神经网络如何识别图像
如何通过人工神经网络实现图像识别 人工神经网络(Artificial Neural Networks)(简称ANN)系统从20 世纪40 年代末诞生至今仅短短半个多世纪,但由于他具有信息的分布存储.并 ...
- 编程实战(4)——python识别图像中的坐标点并保存坐标数据
编程实战(4)--python识别图像中的坐标点并保存坐标数据 文章目录 编程实战(4)--python识别图像中的坐标点并保存坐标数据 综述 代码思路 库的安装 图片预处理 图像细化 图像二极化 提 ...
最新文章
- es根据磁盘使用情况来决定是否分配shard
- 几个基于jvm 的微服务框架
- 反制爬虫之Burp Suite RCE
- JavaScript的表单事件
- 常用的SQLAlchemy列选项
- dll已加载但找不到入口点dllregisterserver_Java 是如何加载类的?
- 阿里内推算法岗位编程笔试题
- Java Socket编程(一)TCP/IP简介
- 使用ffmpeg推流拉流
- logit回归模型的参数估计过程_LOGISTIC模型参数估计及预测实例.pdf
- 计算机学院运动会海报,《图文》运动会宣传海报资料
- ARP断网攻击与监听
- 为什么只有涨价才能救小米?
- POJ 1417 True Liars 带权并查集 + 背包
- 青云很忙 QingCloud Insight 2017开幕倒计时
- apache SSI
- Windows远程桌面服务漏洞(CVE-2019-0708)复现测试
- 回归问题-逐步回归(Stepwise Regression)
- STM32 0.96寸4针IOLED显示器驱动IIC(HAL库)
- 【CSS】CSS餐厅小游戏练习1~32关的参考答案
热门文章
- Linux vim设定Tab键缩进
- Java 工具类 - 银行卡校验 BankCardUtil
- 进阶面试的必看的ORM架构之 ORM简介
- 使用make latexpdf, 报错The font “SourceHanMonoSC-Regular“ cannot be found.但是这个字体实际上已经安装了。
- python之matplotlib制作基础图表以及图例,标注,marker,中文设置
- ORA-16032: parameter LOG_ARCHIVE_DEST_3 destination string cannot be translated问题处理过程
- 2005-04-21
- gnome菜单图标显示
- 【Oracle】-【权限-ORA-04043】- object does not exist
- LearningSpark9:SparkSQL