• 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程序员研修院

  • 相关阅读:
    Python--测试代码
    (五)kafka从入门到精通之topic介绍
    实战讲解网关接口统一认证SpringCloudGateway(图+文)
    MMLAB系列:mmsegmentation的使用
    pat乙级自我回顾:一般错误出现原因
    Android学习笔记 1.2.7 自定义任务 && 1.2.8 自定义插件
    hot100- 最小栈
    在线生产cron定时任务表达式
    前端技能树,面试复习第 45 天—— Vue 基础 | 模版编译原理 | mixin | use 原理 | 源码解析
    java高级用法之:JNA类型映射应该注意的问题
  • 原文地址:https://blog.csdn.net/superdont/article/details/128044639