- arxiv:http://arxiv.org/abs/1506.02640
- code:http://pjreddie.com/darknet/yolo/
- github:https://github.com/gliese581gg/YOLO_tensorflow
- github: https://github.com/xingwangsfu/caffe-yolo
- github: https://github.com/tommy-qichang/yolo.torch
- github: https://github.com/frankzhangrui/Darknet-Yolo
- github: https://github.com/frischzenger/yolo-windows
1、整体思路
- 将图像resize到448*448作为神经网络的输入
- 运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities
- 进行非极大值抑制,筛选Boxes
2、具体步骤
步骤一:输入448*448大小的图像
- 直接将输入图像的大小resize为448*448,由于图像有变形,输入不同长宽比的图像检测结果可能不一样,所以尽量维持训练数据与检测数据图像的尺寸相似
步骤二:划分网格检测
- 将输入图像划分为S*S的栅格,每个栅格负责检测中心落在栅格中的物体,每一个栅格预测B个bounding boxes,以及这些bounding boxes的confidence scores,这个参数反映了该格网是否含有物体,以及这个box的的坐标预测有多准
计算公式:
如果这个box中不存在一个object,则confidence score应该为0;反之,confidence score为predicted bounding box 与ground truth box之间的IOU
每个bounding box 有5个predictions:x,y,w,h,confidence
x,y代表预测的bounding box的中心与栅格边界的相对值
w,h代表预测的bounding box的width、height相对于整幅图像的比例
confidence就是预测的bounding box和ground truth box的IOU
- 每个栅格还要预测C个conditional class probability(条件类别概率)Pr(Classi|Object),即在一个栅格包含一个Object的前提下,它属于某个类的概率,我们只为每个栅格预测一组(C个)类概率,而不考虑B的大小
注意:①conditional class probability信息是针对每个网格的;②confidence信息是针对每个bounding box的;
在测试阶段,将每个栅格的conditional class probabilities与每个bounding box的confidence相乘
这样即可得到每个bounding box的具体类别的confidence score,这乘积包含了bounding box中的预测的class的probability,也反映了bounding box是否含有object和bounding box坐标的准确度。
步骤三:损失函数
- 损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这三个方面达到很好的平衡。
简单的全部采用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。
c) 对不同大小的bbox预测中, 小box预测偏相同的尺寸对IOU的影响更大,而sum-square error loss中对同样的偏移loss一样。
解决方案如下:
为了缓和这个问题,作者将box的width和height取平方根代替原本的height和width,如下图:small bbox的横轴值较小,发生偏移时,反映在y轴上的loss(下图绿色)比big box(下图红色)好大。
步骤四:非极大值抑制
3、创新点
- 将目标检测问题看作是回归问题,不需要复杂的流程,速度非常快
- 通过推理整个图像进行预测,从整个图像综合考虑,不仅分析物体的appearance还分析contextual信息,把背景检测为物体的概率不到Fast R-CNN的一半
- 对物体的泛化能力比较好,在自然图像上训练,在艺术图像上检测时,效果比DPM和R-CNN好很多
4、不足
- 物体的检测精度低于其他state-of-the-art的物体检测模型
- 容易产生物体的定位错误
- 对小物体的检测效果不好(尤其是密集的小物体)
- 召回率(recall)较低