草庐IT

YOLOv5识别图像内苹果和香蕉

superdont 2024-04-10 原文

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识别图像内苹果和香蕉的更多相关文章

  1. ruby-on-rails - 添加回形针新样式不影响旧上传的图像 - 2

    我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司

  2. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  3. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  4. ruby-on-rails - 在 heroku 的 .fonts 文件夹中包含自定义字体,似乎无法识别它们 - 2

    Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在

  5. ruby-on-rails - 在 Ruby (on Rails) 中使用 imgur API 获取图像 - 2

    我正在尝试使用Ruby2.0.0和Rails4.0.0提供的API从imgur中提取图像。我已尝试按照Ruby2.0.0文档中列出的各种方式构建http请求,但均无济于事。代码如下:require'net/http'require'net/https'defimgurheaders={"Authorization"=>"Client-ID"+my_client_id}path="/3/gallery/image/#{img_id}.json"uri=URI("https://api.imgur.com"+path)request,data=Net::HTTP::Get.new(path

  6. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  7. ruby-on-rails - 没有这样的文件或目录 - 用 Mini Magick 识别 - 2

    在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc

  8. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  9. ruby-on-rails - 使用 Dragonfly 从 URL 分配图像 - 2

    我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ

  10. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

随机推荐