《You Only Look Once: Unified, Real-Time Object Detection》YOLOV1论文解读

0. 摘要

fasterrcnn两阶段(回归+分类)1.是不是物体,2.是哪个物体

  • 打框位置好不好,预测框和gt重合度越高,打的框越好

  • 假正例:人脸打到鞋上。假正例越少越好。框准不准,没有假正例尴尬

  • 全连接会将整个图片所有信息进行整合汇总。faster是将proposal 的框进行全连接。yolo是将整个图片进行全连接

  • DPM:图像金字塔-->滑动窗口-->分类器,

  • yolov1,16年5月出的,faster已经出了,准确率上比不过faster,时间速度上比得过

1. Introduction

1、图片大小为448*448

2、卷积网络

3、非极大值抑制

  • 每秒超过24帧,即可实现实时性

  • 拿到整个图片信息,即可得到上下文信息,会影响框的位置。faster先提候选框,就看不到上下文信息。

  • 框的定位不是很准,尤其是对于小的物体。分类是没问题的。

优点:

  1. 假正例少

  2. 快,45帧每秒

  3. 泛化能力强

缺点:

  1. 框的定位不准

2. Unified Detection

  • 每一个bounding box,使用整张图的特征

  • 如果一个物体的重心落在了cell单元里,这个cell单元负责预测这一类或者一种物体

  • 每个cell单元,对应b个bounding boxes和b个confidence(置信度分值)=Pr(obj)*IOU。其中Pr(obj)为包含obj的概率,取值0或1。置信度定义合理吗?没关系。y也按照二者相乘来算即可

  • 如果cell不含obj,故Pr(obj)=0,confidence(置信度分值)=Pr(obj)*IOU=0

  • 每一个bounding box需要预测5个值,xywh,confidence。(x,y)为相对grid cell的偏移量

  • 颜色对应类别

  • 输出层需要输出S × S × (B 5 + C) 个tensor。一个cell预测B个bounding boxes,每个bounding box预测5个值,如果有S*S个cell,每个cell需要预测多个类别的概率。

  • Pr(Class_i|Object) Pr(Object) IOU_truth_pred = Pr(Class_i) IOU_truth_pred 。其中Pr(Object) IOU_truth_pred代表某一个bbox所对应的置信度。Pr(Class_i|Object) 所在cell里面的每一个条件概率(一个cell,包含object最有可能属于哪个类别的)。Pr(Class_i|Object) Pr(Object) =Pr(Class_i) ,即(给定object的条件下,属于某个类别的概率)*(它是object的概率)=(属于这个类别的概率是多大)。Pr(Class_i) IOU_truth_pred 对应一个框,框属于某个类别的概率Pr(Class_i) ,且所对应的iou相乘。即属于某个类别,且置信度又很大。即可根据公式对框进行排序。例如

    有20个类别,分别对应概率为P1...P20(概率值是回归得到的),取其中值最大的概率值Pi,每个框有2个bbox,框的置信度分别为score_B1,score_B2,分别用B1和B2×Pi,得到两个框对应两个值

  • 局限性:每个cell只管一个类。很有可能一个框包含多种类别的信息,不能同时体现多种信息。

2.1 Network Design

  • 卷积层为了抽取特征,全连接层为了预测

  • 受到googlenet的启发,但是没有使用其中的inception。24层卷积,2层全连接。1*1卷积用来降维

  • 预训练为了调卷积层的参数,预训练的任务不是为了做目标检测。

  • 网络的输入图片大小是448×448,imagenet的图片是224×224,不需要resize,因为FCN(全卷积网络)输入大小可以改变。

2.2 Training

  • 预训练时,只用了前20层卷积。为什么一共24层卷积,只有前面20层?为了防止过拟合。因为卷积层是为了提特征,如果用所有卷积层来都用来预训练,那么得到的参数只是根据预训练的数据集(imgNet的图片)来提特征,那对于新的数据集或者目标检测的数据集,可能就不会提特征了。其余4层卷积和2层全连接的参数是随机初始化的

  • 分辨率从224×224转变为448×448,可以对细节获取的更好。因为分辨率越高,细节越看的清

  • 最后一层(7×7×30tensor)包含了每个cell分类的概率和框的坐标,置信度。

  • 对原图w,h做了归一化,每个cell落在(0,1)直接。中心点坐标也归一到(0,1)。都是相对坐标,参考当前cell的左上角。t_w=w_boundingboxes(简称w_b)/w_img;t_h=h_b/h_img得到的是cell宽高和原图的比例比例

  • 回归得到P1...P20,真实的是lable标签为y1...y20,二者有差异,可以得到MSE.最后一层采用的是线性激活函数没用softmax。

    坐标、置信度、类别概率这三个需要做回归,每个回归都是MSE,将这3项的loss加权求和在一起。权重是人为定的,不是学习来的,所以不是理想设计。因为有的cell没有包含obj,所以有的置信度=0,加剧了权重的不平衡。这种不平衡会导致模型不稳定且收敛过早,故更多的学习了正例。对于有物体的bbox,置信度不是0,因此confidence_loss有贡献,减少坐标预测的权重。如果bbox不含物体,即confidence—>0,置信度没有贡献,则conference_loss是很大的,因此增加坐标回归的权重。

    将大的bbox和小的bbox视为权重相同的,但是这样不合理,因为大框稍微偏一点,对大框影响不大,对小框影响很大。所以公式②中需要开根号,来减小大小框的差距。为什么xy不开根号,只有w,h开根号呢。因为坐标中心点的偏移和计算IOU没关系。

  • 训练时,定义正例负例。将预测的bbox和gt求IOU,最大的IOU即为所对应的gt.若IOU=0,即没有包含obj,每个bbox预测对应的某一个大小、比例、类别的obj来提升召回率。即更专注。

  • 135轮次,数据集为pascal voc2017,2012,每个批次64,基于动量的随机梯度下降法超参0.9,衰减系数0.0005.随着轮次增加减少学习率,dropout

  • 数据增强

    1. 基于原图20%的放大和缩小)

    2. RGB-->h(色度)s(饱和度)v,如果用RGB来改变饱和度,需要在R\G\B三个维度的值都要改,如果映射到HSV来改变饱和度,只需要改S维度。

2.3 Inference

  • yolov1中的bbox是预测出来的框,不需要初始化,faster rcnn中的anchors是提取出来的。二者不同

  • 一些大的物体,或物体落在边界,多个cell都有可能包含这个物体。即多个cell衍生出来的bbox都有可能预测同样的物体。此时采用非极大值抑制,即可保留下一个bbox来预测物体。在传统的RCNN和DPM中NMS用不用影响不大,但是在yolov1中采用NMS会使mAP增长2%-3%

2.4 Limitations of YOLO

  • yolov1缺陷:

    1. 每一个cell只预测2个bbox,只能预测一个类别。一个图片在某个cell中有两个物体,则无法都预测出来。

    2. yolov1和faster rcnn相比,FP(预测为正,实际为负)小,因为没有检测出来,所以不存在检测错;recall(提取出正确信息条数/样本中的信息条数)也小,召唤出真正该有的也少

    3. 从448*448的输入到最后的7×7的全连接,分辨率越来越小,即用了粗粒度的方式来判别物体

    4. 将大的bbox框和小的bbox框看的一样重要。虽然公式中已经开根号做了一定调整了,但是不一定能解决这个问题,只是减轻了症状。小的错误在大的框中不重要,但是在小的框中,会影响IOU。通常平评判目标检测会用到mAP,而mAP中会用到IOU,故会影响最后的mAP

猜你喜欢

转载自blog.csdn.net/lian740930980/article/details/120362250