论文:https://arxiv.org/abs/1506.02640
GitHub源码地址:https://github.com/pjreddie/darknet
翻译:
http://noahsnail.com/2017/08/02/2017-8-2-YOLO%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/
理解参考:
https://zhuanlan.zhihu.com/p/25236464
核心技术:
YOLO将输入的图像分割为SxS个格子,如果一个检测目标的中心落入一个单元格中,则该网格负责检测该目标.
例如下图中的狗就由第五行,第二格的格子负责预测狗的boundingbox.
每个网格单元预测这些盒子的B个边界框和置信度分数。这些置信度分数反映了该模型对盒子是否包含目标的信心,以及它预测盒子的准确程度。在形式上,我们将置信度定义为 Pr(Object)∗IOUtruthpred P r ( O b j e c t ) ∗ I O U p r e d t r u t h .如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU).
每个边界框包含五个预测: x,y,w,h x , y , w , h 和置信度, (x,y) ( x , y ) 坐标表示边界框相对于网格单元边界框的中心坐标,宽度和高度是相对于整个图片进行预测的.最后置信度预测表示预测框和实际边界框之间的IOU.
每个网格单元还预测 C C 个条件类别概率Pr(Classi|Object) P r ( C l a s s i | O b j e c t ) .这些概率以包含目标的网格单元为条件,每个网格单元我们只预测一组类别概率,不管边界框的数量B是多少(每个网格单元只对一个目标负责).
例如在Pascal VOC上进行训练测试的时候,使用 S=7 S = 7 , B=2, B = 2 , .Pascal VOC有20个标注类,所以 C=20 C = 20 ,最终得到的就是一个 7x7x30 7 x 7 x 30 的张量.
Loss Function定义:
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5+C)维向量与真实图像的对应S*S*(B*5+C)维向量的均方和误差.其中 coordError,iouError,classRrror c o o r d E r r o r , i o u E r r o r , c l a s s R r r o r 分别代表预测数据与标定数据之间的坐标误差,IOU误差和分类误差.
突出贡献:
YOLO将物体检测作为回归问题求解。基于一个单独的end-to-end网络,完成从原始图像的输入到物体位置和类别的输出
.同时达到速度快效果好的目标.
缺陷:
虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。
1)对小物体的检测效果不够好.
2)对boundingBox的预测不够精确.