赞
踩
目标检测(object detection)是在给定的图片中精确找到物体所在位置,并标注出物体的类别。物体的尺寸变化范围很大,摆放物体的角度、姿态不确定,而且可以出现在图片任何地方,同时物体也可是多个类别的。
目标检测在多个领域中被广泛使用。例如,在无人驾驶领域,系统需要通过识别拍摄到的视频图像中车辆、行人、道路和障碍的位置来规划行进路线;在安保领域,系统需要检测异常目标,如歹徒或者危险品。
目标检测在目标定位基础上进一步开发,其与图片分类、目标定位的主要区别如下:
Image Classification | Classification with Localization | Object Detection | |
---|---|---|---|
图片特点 | 包含比较大的单个物体 | 包含比较大的单个物体 | 包含多类物体 |
处理方法 | 将图片输入到多层卷积神经网络中 | 在图片分类基础上,使神经网络多输出4个单元用来表示物体的边界框(如红框所示) | 在分类定位基础上,使神经网络多输出n个单元,代表物体是否属于该类别的物体 |
输出结果 | 是/否属于该类别 | 是/否属于该类别+该物体的位置信息 | 每个物体是否属于该类别+该物体的位置+是否属于n个类别 |
具体结果 | 1个代表属于某类别的值 | 1个代表属于某类别的值+4个代表边框的值 | 1个代表物体存在的值+n个属于某类别的值+4个代表边框的值 |
目标检测通常采用滑动窗口来进行,即使用一个小窗口,窗口截取到图片上的区域,将该区域输入到卷积神经网络,输出1或0代表该区域内是否有目标,并按照一定的步长滑动窗口,直到遍历整张图片。
这种方法相当于对每个窗口的图片做了一个图片分类,但带来的是低计算成本和高精度难以同时满足的现实问题。
滑动窗口的卷积实现即在卷积层上应用这个算法。首先把神经网络的全连接层转化成卷积层, 全连接层可看作是进行一次卷积操作,但在把全连接层转化成卷积层之后,每个窗口截取到的区域存在共享的部分,将神经网络每层所有窗口共享的部分重叠在一起,相当于将整张图片输入神经网络得到的结果。
所以,不必将图片每个区域分别输入神经网络进行检测,直接将整张图片输入进行卷积操作,神经网络就可以识别出对象的位置。
交并比(IoU:Intersection over Union)函数是用于计算两个边界框交集和并集之比,即下图中S(绿色)/S(蓝色+绿色+黄色)的数值,常用来评价目标检测算法的精度。
一般来说,IoU大于等于0.5时说明结果可以接受,即检测结果可接受。如果预测器和实际边界框完美重叠,loU就是1,因为交集就等于并集。通常规定0.5是阈值(threshold),用来判断预测的边界框是否正确,loU越高,边界框越精确。
当目标检测窗口格子划分较小时,会出现同时有几个格子里检测到有目标的情况。即图中的一辆汽车可能被检测到多次:
可以采用非极大值抑制(Non-max suppression)的方法解决此问题。首先比较所有格子输出结果中检测到物体的概率,由大到小排序,保留概率最大的预测框,然后依次与比它小的预测框求交并比,若交并比很大,则说明这两个预测框很有可能检测的是同一个物体,于是把存在物体概率较低的那个预测框抑制掉。
下图显示的是抑制后的结果:
目标检测中存在一个问题就是每个格子只能预测一个对象,如果想让一个格子检测出多个对象,就要使用到锚框(Anchor Box)。
如上图所示,我们使用3×3的网格,可以观察到人和汽车的几何中心几乎在同一个网格,然而传统方法中一个格子只能预测一个对象,而且对于y输出的向量可以检测这三个类别:人、汽车和摩托车,他将无法输出检测结果,所以我必须从两个检测结果中选择一个,这便影响了模型性能,导致一些对象被丢弃无法检测出来。
而引入锚框后,预先定义两个不同形状的锚框,把预测结果和这两个锚框关联起来:
因此,定义类别标签时用的向量不再是:
而是重复两次:
前面8个是和Anchor box1相关联,后面8个是和Anchor box2相关联。行人一般符合anchor box1形状,所以用Anchor box1来预测行人回达到很好的效果,这么编码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。