ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

目标检测(理论+实践)(一)

2020-12-15 19:01:43  阅读:262  来源: 互联网

标签:边界 检测 YOLO 实践 目标 图像 SSD


目标检测的基本概念

   目标检测是计算机视觉中的一个重要任务,和通常的图像分类问题具有一定的差异性,相比于基于深度学习的图像分类任务,目标检测任务更具难度。
  在图像分类任务里,假设图像里只有一个主体目标,我们重点关注的是如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想知道它们在图像中的具体位置。此类任务称之为目标检测(object detection)或物体检测。

  在目标检测中,通常使用边界框(bounding box)来描述目标的位置。边界框是一个矩形框,可以由矩形左上角的x和y轴坐标与右下角的x和y轴坐标来确定,如下图所示:
在这里插入图片描述

目标检测思路的发展脉络

  卷积神经网络(CNN)由于其参数共享、连接稀疏性和平移不变性等优点已经广泛应用到了计算机视觉应用当中。因此,有研究人员考虑基于CNN的目标检测,但是CNN并不善于直接预测识别目标的位置信息。并且在一幅图像中可能出现的物体个数也是不确定的,在这种情况下,如何实现目标检测,即不仅需要识别出物体的类别,还需要确定物体的具体位置信息。

最初的基于深度学习的解决思路:

整体的思想是,首先需要知道图像中某个位置存在物体,再将对应的局部区域送入到分类网络中去进行识别,就可以知道图像中每个物体的位置和类别了。其中可以通过滑窗的方式,罗列图像中各种可能的区域,一个个去试,分别送入到分类网络中进行分类得到其类别,同时算法会对当前的边界框进行微调,这样对于图像中每个区域都能得到(class,x1,y1,x2,y2)五个属性,汇总后即可得到图像中物体的类别和位置信息。

其中上面所说的局部区域就是通过边界框来确定(在待识别图上预设一个边界框,然后进行滑窗操作,即可得到大量的候选框,将每个框送入到分类网络中进行分类都会有一个分类得分,得分越高,识别的越准确)。但这种原始思路似乎有些耗时了,因此有系列目标检测模型横空出世,它们均是在原始目标检测思路上进行了改进。

RCNN:

RCNN是将CNN方法引入目标检测领域,大大提高了目标检测效果,经典的目标检测算法是使用滑动窗口方法依次判断所有可能的区域,RCNN则是使用selective search方法预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上使用CNN来提取特征,进行分类判断。

其主要包括四个步骤:

  1. 候选区域的生成;
  2. 特征提取:对每个候选区域,使用深度卷积神经网络提取特征;
  3. 类别判断:将数据特征送入每一类的SVM分类器,判别是否属于该类别;
  4. 位置精调:使用回归器精调并修正候选框的位置。

论文地址:添加链接描述

YOLO:

YOLO算法的全称是You Only Look Once:Unified,Real-Time Object Detection。Unified指的是这是一个统一的框架,提供端到端的预测,而real-time体现的是Yolo算法速度之快。

YOLO主要有两点改进:

  1. 它的训练和检测均是在一个单独的网络中进行,它没有显示地求取候选框的过程,而前面所说的RCNN是采用独立于网络之外的selective search方法获取候选框;
  2. YOLO将目标检测作为一个回归问题进行求解,图像输入到模型后只需经过一次推理即可得到图像中所有物体的类别及其所在的位置。而RCNN将目标检测的结果分为两大部分:对物体的分类和基于回归问题的物体位置的确定。

其中YOLO的网络结果如下图所示,这里就不再进行详细说明,可以进一步查阅其论文:添加链接描述
在这里插入图片描述

SSD:

SSD算法的全称是Single Shot MultiBox Detector,Single shot指明了SSD属于one-stage方法,MultiBox指明了SSD是多框预测。

相比与YOLO,SSD采用CNN直接进行检测,而不是像YOLO那样在全连接层之后做检测;此外SSD在YOLO的基础上还有两点改进:

  1. SSD提取了不同尺度的特征图来做检测,大尺度特征图(较靠前的特征图)可以用来检测小物体,而小尺度特征图(较靠后的特征图)用来检测大物体;
  2. SSD采用了不同尺度和长宽比的锚框。

YOLO算法存在的不足之处在于它难以检测小目标,而且定位不太准确,SSD在一定程度上可以对这个不足进行改正。论文地址:添加链接描述

目标框的定义方式

  用来表示目标框的方式主要有两种,(x1,y1,x2,y2)和(c_x,c_y,w,h)。其中x1,y1分别代表目标框的左上角的横向和纵向坐标,x2,y2分别代表目标框的右下角的横向和纵向坐标。c_x,c_y分别代表图像目标框的中心位置坐标,w和h分别代表目标框的宽和高。

交并比

  给定目标的真实类别,可以和模型识别出的类别有一个相似度的判断。那么如果目标的真实边界框已知,如何衡量目标框和真实边界框之间的相似度,从而判断实验边界框的优劣呢?

  Jaccard系数可以衡量两个集合的相似度,给定集合A和B,它们的Jaccard系数即二者交集大小除以二者并集大小:

J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B) =\frac{|A\cap B|}{|A \cup B|} J(A,B)=∣A∪B∣∣A∩B∣​

  实际上,我们可以把边界框内的像素区域看成是像素的集合。如此一来,我们可以用两个边界框的像素集合的Jaccard系数衡量这两个边界框的相似度。当衡量两个边界框的相似度时,我们通常将Jaccard系数称为交并比(Intersection over Union,IoU),即两个边界框相交面积与相并面积之比,如下图所示。交并比的取值范围在0和1之间:0表示两个边界框无重合像素,1表示两个边界框相等。
在这里插入图片描述

总结

  本文首先介绍了一下目标检测的相关基本概念及其实现思路的发展脉络,从传统的基于深度学习的滑动窗口目标检测方法,到RCNN、YOLO再到SSD等。最后简单介绍了一下目标检测中边界框的定义方式,还有用来衡量目标边界框和真实目标边界框的相似度方法——交并比。
  由于时间比较赶,下一篇肝肝目标检测的实践部分(目标检测数据集VOC数据的获取和相关预处理)。

标签:边界,检测,YOLO,实践,目标,图像,SSD
来源: https://blog.csdn.net/Despacito1006/article/details/111223374

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有