谁人不识YOLOv1?

如需讲解视频,请关注个人我的微信公众号:小纸屑算法

麻烦你们给我点个赞,就是那种让我看起来,写的还不错的样子!😁😁😁😁😁

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

Idea

具体YOLO是如何将two stage合成为一个stage的呢?rest

1)首先,将输入图片划分为7x7的网格cdn

2)而后,每个网格cell输出两个bounding box的预测和一个共享的类别预测。以下图。 每个bounding box的预测包含五个值C,x,y,w,h,其中C表示预测框的置信度,x,y,w,h表示预测框的位置和尺寸,p_ci表示预测框属于类别ci的几率。

能够看出,一个cell预测两个框,但输出的时候只能输出一个预测结果,通常取置信度C值大的那个预测框做为这个cell的预测结果,框的类别取p_ci最大的类别。 3)既然一个cell有两个预测框,那每一个预测框的Ground Truth怎么计算呢? 首先,一个Ground Truth框分配给其center所在的cell,以下图,自行车的绿色Ground Truth框分配给粉色的cell,

其次,在一个cell内部,Ground Truth会分配给与其IOU最大的predictor,以下图,粉色cell中的两个预测框是红色框,绿色GT框会分配给宽矮的红色预测框。

有了输出,有了GT,再设计设计网络结构,即输入到输出的映射,就能够利用梯度降低进行训练了。

Network

下图是简化版的网络结构,

下图是详细的网络结构,

能够看出,图片先经由一个做者设计的24层的Feature Extractor,提取特征,而后再通过两个全链接层,就获得最后7x7x30的输出。

须要注意的是,这个7x7的输出的意义就是做者说的将网格划分为7x7的网格。

Loss

Loss主要分为三个部分,位置损失、置信度损失和类别损失。

上式中,SxS是输出结果的分辨率,也是cell的个数,B是一个cell中的预测框的个数,两个sigma意思是遍历全部cell的全部box求和,lambda是损失权重,1函数是指示函数,条件为真时取1,为假时取0。

1)位置损失

这里首要的是弄清楚给定一个predictor,其预测的x,y,w,h的含义,红色框住的是对应的标签。 x,y的含义是预测框的中心点相对cell左上角的相对坐标,其值在0~1之间。 w,h的含义是预测框的宽度与图片宽度的比值,预测框的高度与图片高度的比值,其值也在0~1之间。 也即predictor预测的x,y,w,h都是归一化后的的相对值,如下图为例,红色框是绿色GT框的预测框,则 预测的x=X/64,y=Y/64,w=W/448,h=H/448。 预测框x,y,w,h对应的标签也是相同的计算方法。

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。

Training

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

总共训练136个epoch,第一个epoch,学习率稳定从0.001升至0.01,接着保持0.01的学习率学习75个epoch,而后将学习率降至0.001训练30个epoch,再将学习率降至0.0001训练30个epoch。

Experiments

学习效果如上表,能够看到YOLO的速度成碾压态势,而准确率依然很高。

Error Analysis

做者还对YOLO进行了偏差分析,对比了Fast R-CNN与YOLO的偏差来源。 首先做者将识别结果分为五类:

  1. 正确分类:类别正确,IOU>0.5
  2. 位置错误:类别正确,0.1<IOU<0.5
  3. 近似错误:类别识别为近似类别,IOU>0.1
  4. 其余错误:类别错误,IOU>0.1
  5. 背景错误:IOU<0.1

Fast R-CNN与YOLO的偏差组成以下图:

能够看出,Fast R-CNN以背景错误为主,YOLO以位置错误为主。

结论

YOLO开创性的提出了一步式算法,作到了实时检测和高准确率。

相关文章
相关标签/搜索