经典网络结构梳理:YOLO目标检测算法。

论文下载地址:https://pjreddie.com/media/files/papers/yolo.pdf

caffe代码下载地址:https://github.com/yeahkun/caffe-yolo

YOLO:You Only Look Once: Unified, Real-Time Object Detection 是发表在2016年的CVPR。YOLO基础版可以达到45帧/s的实时检测;Fast YOLO可以达到155帧/s

YOLO的检测流程:

1. 将图片resize到448*448大小。

2.将图片放到网络里面进行处理。

3.进行非极大值抑制处理得到结果。

YOLO不同于传统的检测算法,采用滑动窗口来寻找目标。YOLO直接采用单个卷积神经网络来预测多个bounding boxes和类别概率。

YOLO存在的优点是:1.速度快。  2. 泛化能力强 ,可以广泛适用于其他测试集。3.背景预测错误率低,因为是整张图片放到网络里面进行预测。

YOLO存在的缺点是:1.精度低。2.小目标和邻近目标检测效果差。3.对于新的不常见的角度无法识别,容易产生物体定位错误。

YOLO细节:

作者将目标检测的流程统一为单个神经网络。该神经网络采用整个图像信息来预测目标的bounding boxes的同时识别目标的类别,实现端到端实时目标检测任务。

YOLO网络结构使用的是24层卷积层+2层fc层。卷积层使用的是比较简单,卷积核都是3*3和1*1交替。

从下图可以看出,YOLO先将图片分割成S*S的格子。每一个格子都会预测多个bounding boxes,每个bounding boxes都会有一个置信值(confidence score)。置信值表示的是该bounding boxe包含目标的置信度,也就是bounding boxes和Ground Truth的IOU。同时每一个bounding box包含5个值:x,y,w,h和confidence。(x,y)代表与格子相关的box的中心。(w,h)为与全图信息相关的box的宽和高。置信值公式为:

左边第一项代表了格子包含一个目标的概率,每一格子只预测一类概率。左边第二项和第三项表示的是置信值。置信值*概率 = 特定类别置信分数。

YOLO损失函数:

损失函数的设计目标就是让坐标(x,y,w,h)8维,confidence 2维,classification 20维这个三个方面达到很好的平衡。 
简单的全部采用了sum-squared error loss来做这件事会有以下不足: 
a) 8维的localization error和20维的classification error同等重要显然是不合理的。 
b) 如果一些格子中没有object(一幅图中这种格子很多),那么就会将这些栅格子中的bounding box的confidence 置为0,相比于较少的有object的格子,这些不包含物体的格子对梯度更新的贡献会远大于包含物体的格子对梯度更新的贡献,这会导致网络不稳定甚至发散。

解决办法:

更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为 λcoord ,在pascal VOC训练中取5。(上图蓝色框) 
对没有object的bbox的confidence loss,赋予小的loss weight,记为 λnoobj ,在pascal VOC训练中取0.5。(上图橙色框) 
有object的bbox的confidence loss (上图红色框) 和类别的loss (上图紫色框)的loss weight正常取1。

对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏相同的尺寸对IOU的影响更大。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个巧妙的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。

猜你喜欢

转载自blog.csdn.net/donkey_1993/article/details/81481833