如需讲解视频,请关注个人我的微信公众号:小纸屑算法
YOLOv1是继Faster R-CNN后,第一个one stage物体检测算法,开创了物体检测算法一个全新流派,自YOLOv1后,物体检测基本分为one stage和two stage两个流派。微信
下图是YOLO在整个物体检测算法历史上的坐标。网络
能够看出,YOLOv1是在Faster R-CNN以后提出的,但查看首次上传arXiv的时间可知(见下图),YOLOv1和Faster R-CNN基本是同时提出的,所以YOLO做者动笔之时,Fast R-CNN是SOTA(state of the art),Faster R-CNN还没有出世,所以YOLO做者的主要对比对象是Fast R-CNN。固然,做者后续仍是补充了与Faster R-CNN的对比结果作参考。函数
下面简单分析下Fast R-CNN的原理。学习
Fast R-CNN主要由四部分组成(以下图),首先是共用的Feature Extractor,而后是传统的Region Proposal算法,有了共用的Extracted Feature Map和ROI(Region Of Interest)后,将Extracted Feature Map上对应ROI部分截取出来,通过ROI Pooling,转成分辨率固定的Feature Map,输入到物体检测部分,以回归物体类别和bounding box,完成整个物体检测流程。优化
因为Fast R-CNN分为Extract Feature和Region Proposal两个过程,所以是two stage的,这致使了Fast R-CNN的经常准确度高,但速度作不到实时性。设计
YOLO的提出就是解决Fast R-CNN的缺点,将two stage合成为一个stage,从而达到实时性。3d
具体YOLO是如何将two stage合成为一个stage的呢?rest
1)首先,将输入图片划分为7x7的网格cdn
能够看出,一个cell预测两个框,但输出的时候只能输出一个预测结果,通常取置信度C值大的那个预测框做为这个cell的预测结果,框的类别取p_ci最大的类别。 3)既然一个cell有两个预测框,那每一个预测框的Ground Truth怎么计算呢? 首先,一个Ground Truth框分配给其center所在的cell,以下图,自行车的绿色Ground Truth框分配给粉色的cell,
其次,在一个cell内部,Ground Truth会分配给与其IOU最大的predictor,以下图,粉色cell中的两个预测框是红色框,绿色GT框会分配给宽矮的红色预测框。
有了输出,有了GT,再设计设计网络结构,即输入到输出的映射,就能够利用梯度降低进行训练了。
下图是简化版的网络结构,
下图是详细的网络结构,
能够看出,图片先经由一个做者设计的24层的Feature Extractor,提取特征,而后再通过两个全链接层,就获得最后7x7x30的输出。
须要注意的是,这个7x7的输出的意义就是做者说的将网格划分为7x7的网格。
Loss主要分为三个部分,位置损失、置信度损失和类别损失。
1)位置损失
2)置信度损失
Ci预测的是Pr(object)*IOU,综合反映了预测框有object的几率和预测框与truth的IOU大小。 因此对于一个cell的C_i的标签的计算方法是:
3)类别损失
预测的p_ci是条件几率,即Object已知的状况下,Class_i的几率,若是GT的类别是ci,则p_ci的标签是1,其余p_ci的标签为0。
YOLO模型训练采用了如下技巧: 1)数据加强 包括随机缩放,随机截取,随机调整曝光度和饱和度 2)dropout 估计是全链接层,使用了dropout,dropout rate取0.5 3)优化器 采用momentum优化器,超参数beta取0.9 4)weight decay 采用了权重衰减,系数为0.0005 5)batch size为64 6)learning rate
做者还对YOLO进行了偏差分析,对比了Fast R-CNN与YOLO的偏差来源。 首先做者将识别结果分为五类:
Fast R-CNN与YOLO的偏差组成以下图:
能够看出,Fast R-CNN以背景错误为主,YOLO以位置错误为主。
YOLO开创性的提出了一步式算法,作到了实时检测和高准确率。