文章目录

  • 前言
  • 物体检测基础
  • YOLO —— 对图像碎片进行物体检测
    • 检测单个物体
    • 同时检测多个物体
  • 多边界框的处理 —— IOU方法
  • 参考链接

前言

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

物体检测基础

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

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

  1. 某物体是否存在于图片中。通常会使用数字01来分别表示目标物体不存在目标物体存在

  2. 如果目标物体存在,目标物体在图片中的位置。YOLO使用物体的中心坐标物体的长、宽来表示。

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

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

PcP_cPc​:图像中是否不存在任何目标物体,1代表存在,0代表完全不存在
BxB_xBx​:目标物体几何中心的横坐标
ByB_yBy​:目标物体几何中心的纵坐标
BwB_wBw​:目标物体的宽度
BhB_hBh​:目标物体的高度
C1C_1C1​:是否存在类别1的物体(狗)
C2C_2C2​:是否存在类别2的物体(人)

检测单个物体

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

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

同时检测多个物体

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

直觉性的答案是将原本的 7∗17*17∗1 的向量扩大,使之同时包含 nnn 个物体的信息,也就是变成 7n∗17n*17n∗1 (形如下图)的格式。
[Pc1Bx1By1Bw1Bh1C11C21.........PcnBxnBynBwnBhnC1nC2n]\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] ⎣⎡​Pc1​Bx1​By1​Bw1​Bh1​C11​C21​.........Pcn​Bxn​Byn​Bwn​Bhn​C1n​C2n​​⎦⎤​

PckP_{ck}Pck​:图像中是否存在第k个目标物体,1代表存在,0代表完全不存在
BxkB_{xk}Bxk​:第k个目标物体几何中心的横坐标
BykB_{yk}Byk​:第k个目标物体几何中心的纵坐标
BwkB_{wk}Bwk​:第k个目标物体的宽度
BhkB_{hk}Bhk​:第k个目标物体的高度
C1kC_{1k}C1k​:第k个目标物体是否属于类别1(狗)
C2kC_{2k}C2k​:第k个目标物体是否属于类别2(人)

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

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

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

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

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

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

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

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

该如何选择边界框呢?

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

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

通常我们会设定一个阈值,当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

【YOLO】物体识别算法的核心思想相关推荐

  1. 【算法特训总结】计算机经典算法的核心思想及独特角度的解读

    计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...

  2. 回溯算法:从电影蝴蝶效应中学习回溯算法的核心思想

    回溯算法:从电影<蝴蝶效应>中学习回溯算法的核心思想 数独.八皇后.0-1背包.图的着色.旅行商问题.全排列问题都能用到 理解"回溯算法" 回溯的思想,类似枚举搜索,枚 ...

  3. 深度学习和目标检测系列教程 13-300:YOLO 物体检测算法

    @Author:Runsen YOLO,是目前速度更快的物体检测算法之一.虽然它不再是最准确的物体检测算法,但当您需要实时检测时,它是一个非常好的选择,而不会损失太多的准确性. YOLO 框架 在本篇 ...

  4. 物体识别算法——SIFT/SURF、haar特征、广义hough变换的对比分析

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:cvvision 链接:http://www.cvvision.cn/7780.html 来源:CV视觉网 识别算法概述: ...

  5. 三种强大的物体识别算法——SIFT/SURF、haar特征、广义hough变换的特性对比分析

    识别算法概述: SIFT/SURF基于灰度图, 一.首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点, ...

  6. kmeans算法的核心思想和实现逻辑流程

    1 概述 K-means算法是集简单和经典于一身的基于距离的聚类算法 采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大. 该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且 ...

  7. YOLO 人脸识别算法以及应用

    这两年,在深度学习的基础上,计算机视觉也得到了迅猛的发展,从而产生了大量令人振奋的应用:安全无人驾驶.精确面部识别.自动阅读放射成像等等. 通过这门课的学习,你将会: 理解如何搭建一个神经网络,包括最 ...

  8. 从电影《蝴蝶效应》中学习回溯算法的核心思想

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 关注我们丨文末赠书 深度优先搜索算法利用的是回溯算法思想.这个算法思 ...

  9. 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

    ------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 我们在深度和广度优先算法提到,深度优先搜索算法利用的是回溯算法思想.这个算法思想非常简单,但是应用 ...

  10. 极客时间——数据结构与算法(39) 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

    转载地址:https://time.geekbang.org/column/article/74287 我们在第 31 节提到,深度优先搜索算法利用的是回溯算法思想.这个算法思想非常简单,但是应用却非 ...

最新文章

  1. 漫谈php框架之中间件
  2. 调用ffmpeg库编译时出现common.h:175:47: error: 'UINT64_C' was not declared in this scope
  3. NLP炼丹笔记:Switch Transformers 朴实无华 大招秒杀
  4. dynamips模拟器模块详细介绍
  5. JAVA如何判断两个字符串是否相等(亲测第二种方式)
  6. 面向对象实现ATM功能
  7. Normalize.css和Reset CSS有什么区别?
  8. mysql怎么约束_MySQL 约束详解
  9. PIE SDK矢量点生成等值线、面
  10. java io 高级,JavaSE - [10] 高级部分之IO流
  11. 红绿3d眼镜与红蓝3d眼镜区别_佩极定制眼镜青少年3D打印定制系列全新发布
  12. 使用爱剪辑等软件制作视频的全套入门教程
  13. 大学生搜题软件哪个好用?2020搜题软件排行榜
  14. linux系统安装佳能打印机驱动,fedora21怎么安装佳能打印机驱动?
  15. 5G即将全面普及,我们到底该换手机卡还是换手机?
  16. 免费版网络验证系统的全自动发卡功能
  17. 软考倒计时19天:招投标法、合同法、采购法
  18. 使用JS获取当前地理位置方法汇总
  19. html5+连连看+抽奖,html 大转盘抽奖
  20. log4rs日志库简析

热门文章

  1. 远程连接服务器出现channel is not opened通道未打开
  2. 网站端服务器返回错误8001,云服务器 http server
  3. 【单片机毕业设计】【mcuclub-cl-022】基于单片机的隧道检测的设计
  4. 《艺多不压身 艺多不养家》反思
  5. AXURE RP8实战手册 网站和APP原型制作案例精粹
  6. 林轩田机器学习基石5笔记:训练和测试的不同
  7. 小草的生命课件PPT模板
  8. UPC-9558 区间权值
  9. 超五类网线与六类网线水晶头为什么不可通用
  10. 【树形dp】贪吃的九头龙