如需讲解视频,请关注我的个人微信公众号:AI研究小院
麻烦大家给我点个赞,就是那种让我看起来,写的还不错的样子!😁😁😁😁😁
YOLOv1是继Faster R-CNN后,第一个one stage物体检测算法,开创了物体检测算法一个全新流派,自YOLOv1后,物体检测基本分为one stage和two stage两个流派。
下图是YOLO在整个物体检测算法历史上的坐标。
image背景
可以看出,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的原理。
imageFast R-CNN主要由四部分组成(如下图),首先是共用的Feature Extractor,然后是传统的Region Proposal算法,有了共用的Extracted Feature Map和ROI(Region Of Interest)后,将Extracted Feature Map上对应ROI部分截取出来,经过ROI Pooling,转成分辨率固定的Feature Map,输入到物体检测部分,以回归物体类别和bounding box,完成整个物体检测流程。
image由于Fast R-CNN分为Extract Feature和Region Proposal两个过程,因此是two stage的,这导致了Fast R-CNN的常常准确度高,但速度做不到实时性。
YOLO的提出就是解决Fast R-CNN的缺点,将two stage合成为一个stage,从而达到实时性。
Idea
具体YOLO是如何将two stage合成为一个stage的呢?
1)首先,将输入图片划分为7x7的网格
image2)然后,每一个网格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,
image
其次,在一个cell内部,Ground Truth会分配给与其IOU最大的predictor,如下图,粉色cell中的两个预测框是红色框,绿色GT框会分配给宽矮的红色预测框。
image有了输出,有了GT,再设计设计网络结构,即输入到输出的映射,就可以利用梯度下降进行训练了。
Network
下图是简化版的网络结构,
image下图是详细的网络结构,
image可以看出,图片先经由一个作者设计的24层的Feature Extractor,提取特征,然后再经过两个全连接层,就得到最后7x7x30的输出。
需要注意的是,这个7x7的输出的意义就是作者说的将网格划分为7x7的网格。
Loss
Loss主要分为三个部分,位置损失、置信度损失和类别损失。
image上式中,SxS是输出结果的分辨率,也是cell的个数,B是一个cell中的预测框的个数,两个sigma意思是遍历所有cell的所有box求和,lambda是损失权重,1函数是指示函数,条件为真时取1,为假时取0。
1)位置损失
image这里首要的是弄清楚给定一个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)置信度损失
imageCi预测的是Pr(object)*IOU,综合反映了预测框有object的概率和预测框与truth的IOU大小。
所以对于一个cell的C_i的标签的计算方法是:
3)类别损失
image预测的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
image学习效果如上表,可以看到YOLO的速度成碾压态势,而准确率依然很高。
Error Analysis
作者还对YOLO进行了误差分析,对比了Fast R-CNN与YOLO的误差来源。
首先作者将识别结果分为五类:
- 正确分类:类别正确,IOU>0.5
- 位置错误:类别正确,0.1<IOU<0.5
- 近似错误:类别识别为近似类别,IOU>0.1
- 其他错误:类别错误,IOU>0.1
- 背景错误:IOU<0.1
Fast R-CNN与YOLO的误差组成如下图:
image可以看出,Fast R-CNN以背景错误为主,YOLO以位置错误为主。
结论
YOLO开创性的提出了一步式算法,做到了实时检测和高准确率。
网友评论