【YOLO】物体识别算法的核心思想

这篇具有很好参考价值的文章主要介绍了【YOLO】物体识别算法的核心思想。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

YOLO是目前比较流行的物体检测算法,有着体积小,检测准确度高的强大优点。这里对YOLO的核心思想知识点,使用可视化的方法做一总结。

物体检测基础

YOLO是用于识别图像中的物体的网络。这类网络解决的问题通常是找到图片中是否存在某种物体(如是否有狗或人),以及找到物体在图片中的位置并标记出来(如使用红色方框标记物体)。

比如,对于一个检测图片中人和狗的网络来说,在神经网络的输出端,需要表达两类信息:

  1. 某物体是否存在于图片中。通常会使用数字01来分别表示目标物体不存在目标物体存在
    【YOLO】物体识别算法的核心思想

  2. 如果目标物体存在,目标物体在图片中的位置。YOLO使用物体的中心坐标物体的长、宽来表示。
    【YOLO】物体识别算法的核心思想

YOLO —— 对图像碎片进行物体检测

YOLO作为一个图像物体检测算法,输出一个向量来表示图像中目标物体的信息

【YOLO】物体识别算法的核心思想

P c P_c Pc:图像中是否不存在任何目标物体,1代表存在,0代表完全不存在
B x B_x Bx:目标物体几何中心的横坐标
B y B_y By:目标物体几何中心的纵坐标
B w B_w Bw:目标物体的宽度
B h B_h Bh:目标物体的高度
C 1 C_1 C1:是否存在类别1的物体(狗)
C 2 C_2 C2:是否存在类别2的物体(人)

检测单个物体

比如,将下面的图片传入训练好的YOLO网络,就会得到这样的一个向量。根据这个向量标出对应的物体中心和方形轮廓,就会得我们想要的结果。
【YOLO】物体识别算法的核心思想

当图片中没有任何目标物体时, P c P_c Pc 的值为0,向量中的其他值就不必理会。

【YOLO】物体识别算法的核心思想

同时检测多个物体

但是如果图中同时有多个目标物体,一个向量不够用怎么办?

【YOLO】物体识别算法的核心思想

直觉性的答案是将原本的 7 ∗ 1 7*1 71 的向量扩大,使之同时包含 n n n 个物体的信息,也就是变成 7 n ∗ 1 7n*1 7n1 (形如下图)的格式。
[ P c 1 B x 1 B y 1 B w 1 B h 1 C 11 C 21 . . . . . . . . . P c n B x n B y n B w n B h n C 1 n C 2 n ] \left[ \begin{matrix} P_{c1} \\ B_{x1} \\ B_{y1} \\ B_{w1} \\ B_{h1} \\ C_{11} \\ C_{21} \\ ... \\ ... \\ ... \\ P_{cn} \\ B_{xn} \\ B_{yn} \\ B_{wn} \\ B_{hn} \\ C_{1n} \\ C_{2n} \\ \end{matrix} \right] Pc1Bx1By1Bw1Bh1C11C21.........PcnBxnBynBwnBhnC1nC2n

P c k P_{ck} Pck:图像中是否存在第k个目标物体,1代表存在,0代表完全不存在
B x k B_{xk} Bxk:第k个目标物体几何中心的横坐标
B y k B_{yk} Byk:第k个目标物体几何中心的纵坐标
B w k B_{wk} Bwk:第k个目标物体的宽度
B h k B_{hk} Bhk:第k个目标物体的高度
C 1 k C_{1k} C1k:第k个目标物体是否属于类别1(狗)
C 2 k C_{2k} C2k:第k个目标物体是否属于类别2(人)

但由于神经网络的输出结构是固定的,无法灵活的根据情况来自由变动,那么一种简单的解决方法就是让用于表示输出的向量足够大(比如每次检测 10000 10000 10000 个物体,神经网络每次输出一个 70000 ∗ 1 70000*1 700001 的向量)。但是这个方法,对于常见的只有数个目标物体的情况时就会有很大的浪费,而对于个别的出现非常多物体的情况来说又会不够用,适用性非常差。

YOLO所使用的思想的一大杰出之处就是优雅的解决了这个问题。

它将图片分割为数个小的碎片(比如 4 ∗ 4 4*4 44),然后对于每个碎片进行单一物体检测。这样一来,只要切割图像得到的单个碎片足够小,就能够保证每个图像碎片中的目标物体数量足够少(比如只有1~2个)。

【YOLO】物体识别算法的核心思想

这样一来,对于每个图像碎片,我们可以让神经网络只尝试找到固定数量个目标物体即可,神经网络的输出格式就可以固定下来(比如我们设为 16 16 16 个碎片,每个碎片 2 2 2 个目标物体,那么神经网络的输出就是一个 14 ∗ 16 14*16 1416 的矩阵)。

下图就是一个例子。(不过值得注意的是,为了便于表示,对目标物体的中心坐标、宽度、高度做了归一化处理,可能与YOLO算法的实际情况不符。其次,对于每个碎片中目标物体的中心坐标,究竟是碎片内的局部目标物体的中心坐标,还是目标物体在没打碎图像前的全局中心坐标,参考资料没讲解清楚,这里存疑。笔者按照局部目标物体的中心坐标的方法进行处理。)

【YOLO】物体识别算法的核心思想

多边界框的处理 —— IOU方法

通过使用上述方法,将目标图片切割成小碎片,然后逐一进行检测,得到的检测结果就是这样一个 7 ∗ 16 7*16 716 的矩阵(这里假设切割图片为 4 ∗ 4 4*4 44 个碎片,每个碎片中只寻找一个物体)。再对输出的结果进行处理,就可以得到目标物体的边界框(下图中用黄色和红色的方框来表示),以及这些边界框的精确度(下图中用每个方框边角的黑色数字来表示)。

【YOLO】物体识别算法的核心思想

但是目标检测问题中,经常会遇见的问题是出现多个边界框,都画出来的话显然会造成混乱:这么多个边界框对应的究竟是几个目标物体?对于某个目标物体来说,哪个边界框属于它?对应某一目标物体的多个边界框中,哪个最精确?

该如何选择边界框呢?

一种直觉性的方法是保留准确度最大的边界框。但是这个方法的问题是,只会保留 1 1 1 个边界框用于标出图像中狗的位置、 1 1 1 个边界框用于标出图像中人的位置。但如果图像中有多个同类目标物体,就会丢失信息了,导致无法接受的偏差。我们需要更好的方法。

这一问题的常用解法是利用IOU(交并比)判断两个边界框是否属于同一物体。计算方法是,对于任意两个边框,用二者重叠部分(交集)的面积,除以二者合并起来(并集)的面积,得到一个比值。图像化公式见下图

【YOLO】物体识别算法的核心思想

通常我们会设定一个阈值,当IOU超过这个阈值,就判断两个边框属于同一个物体。这样一来,就能首先确定每个目标物体对应那些边界框,随后再借助每个边界框所对应的精确度,找出属于每个目标物体的最精确的边界框。(利用这种方法而非粗暴的找全局最大值,从而提高物体检测精确度的方法,被称为Non maximum suppression,非极大值抑制)

参考链接

https://www.youtube.com/watch?v=ag3DLKsl2vk
https://www.cnblogs.com/happyamyhope/p/9629358.html
https://zhuanlan.zhihu.com/p/37489043文章来源地址https://www.toymoban.com/news/detail-456016.html

到了这里,关于【YOLO】物体识别算法的核心思想的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 低成本ESP32-CAM,YOLO核心代码识别,录像保存,项目中问题分享以及解决。

      ESPCAM监控的具体细节 Arduino编写, FreeRTOS系统,以便后面添加其他功能, 图片以UDP发送,数据处理基本在服务端, TCL连接给ESP32人或物的位置,两个舵机控制转向。 服务端的具体细节 后端是python代码, 使用YOLOv5核心代码识别图像人或物,核心代码的提取花时间 用opencv调试

    2024年02月05日
    浏览(45)
  • 开源的AI算法可以进行物体识别,动物识别

    有许多开源的AI算法可以进行物体识别和动物识别。其中最常用的算法是深度学习中的卷积神经网络(Convolutional Neural Network,CNN),如Google开源的Inception和ResNet模型,以及Facebook开源的Detectron2框架等。这些算法通过训练大量数据集来学习物体和动物的特征,并通过卷积、池化

    2024年02月07日
    浏览(44)
  • python目前哪个版本最稳定,python什么版本比较稳定

    大家好,本文将围绕python目前哪个版本最稳定展开说明,python什么版本比较稳定是一个很多人都想弄明白的事情,想搞清楚python哪个版本好用2020需要先了解以下几个事情。 大家好,小编来为大家解答以下问题,python安装哪个版本比较好,python一般安装哪个版本,现在让我们

    2024年01月25日
    浏览(31)
  • 毕业设计-基于深度学习玉米叶病虫害识别系统 YOLO python 机器学习 目标检测 人工智能 算法

    目录 前言 设计思路 一、课题背景与意义 二、算法理论原理 2.1 卷积神经网络 2.2 YOLOv5算法 三、检测的实现 3.1 数据集 3.2 实验环境搭建 3.3 实验及结果分析 实现效果图样例 最后        📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准

    2024年02月03日
    浏览(46)
  • 图像分析技术大比拼:图像分类、图像识别、目标检测的优缺点分析与算法比较

          计算机视觉是人工智能领域的一个重要分支,它旨在构建能够理解和处理图像、视频等视觉信息的计算机系统。在计算机视觉领域中,图像分类、图像识别和目标检测是三个重要的任务。        一、图像分类       图像分类是计算机视觉领域最基础的任务之一,它

    2024年02月16日
    浏览(37)
  • STM32 OV7725摄像头模块识别颜色物体(1)--HSL二值化和腐蚀中心算法,并用串口输出数据

    目录 前言 一、摄像头采集数据流程 二、如何将图像显示到电脑上  三、图像二值化 1、什么是RGB? 2、RGB565转RGB888 I、RGB565和RGB888的区别 II、代码 3、RGB转HSL I、什么是HSL  II、转换公式  III、代码 3、输出一张摄像头二值化图片 I、原理 II、代码  四、简单的物体识别 1、原理参

    2024年02月11日
    浏览(35)
  • Spring核心设计思想

    目录 前言: Spring是什么 什么是IoC 传统开发思想 IoC开发思想 Spring IoC 什么是DI 小结:     官网中提出:Spring makes programming Java quicker, easier, and safer for everybody. Spring’s focus on speed, simplicity, and productivity has made it the world\\\'s most popular Java framework.     Spring 使编程 Java 对每个人来

    2023年04月17日
    浏览(35)
  • Spring核心思想

    通常所说的 Spring 指的是 Spring Framework(Spring 框架) Spring 是包含了众多工具方法的 IOC 容器 将众多工具方法的 IOC 容器拆解为三部分 众多工具方法 IOC 容器 众多工具方法 将扳手🔧理解为一个工具 扳手🔧可以用来打螺丝(方法) 扳手🔧可以用来敲核桃(方法) … 容器 将水杯理解为

    2024年02月08日
    浏览(40)
  • 【23】核心易中期刊推荐——视觉/图像感知与识别&人工智能算法及应用​​​​​​​

    在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含的相关情报量很大,而多数期刊的情报量却很少;也就是说,世界上大量的科学论文集中在少量的科学期刊中,这就是所谓的“核心期刊效应”,其结果是产生了各个学科或专业的“

    2024年02月03日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包