【论文笔记】You Only Look Once: Unified, Real-Time Object Detection

论文

论文题目:You Only Look Once: Unified, Real-Time Object Detection

发表于:CVPR2016

论文地址:https://arxiv.org/pdf/1506.02640.pdf

项目地址:YOLO: Real-Time Object Detection

论文代码:https://github.com/AlexeyAB/darknet

论文翻译:YOLOv1论文翻译_摔倒了也得抓一把土-CSDN博客_yolov1论文翻译

【YOLO学习笔记】之YOLO v1 论文笔记1(超详细:翻译+理解)_水亦心的博客-CSDN博客_yolo论文

YOLOv1创新点:

  • 把目标检测定义为一个回归问题,把整张图作为网络的输入,直接在输出层回归预选框的位置和所属类别。

  • 速度快,达到45 FPS,实现了实时检测,Fast YOLO可达到155 FPS。

  • one-stage detection的开山之作。

概要流程图:

步骤概述:

  1. 将输入图片尺寸调整到448*448;

  2. 在整个图像上运行卷积网络;(卷积层负责提取图像特征,全连接层负责预测图像位置和所属类别概率值。)

  3. 根据模型的置信度对得到的检测结果进行阈值处理。(用NMS过滤bbox)

网络结构:

 借鉴 GoogleNet 网络结构,不同的是YOLO 使用11卷积层和33卷积层替代Inception module。24个卷积层+ 2个全连接层。卷积层用来提取图像特征,全连接层用来预测图像位置和所属类别概率值。对于卷积层和全连接层,主要使用Leaky ReLU激活函数,max(x,0.1*x)

 最后一层全连接层使用线性激活函数。

YOLOv1 流程:

  1. 将输入图片resize到固定尺寸448*448。

  2. 将输入图片划分为SS(论文取77=49)个网格,每个网格负责检测中心落在该网格中的物体object。

  3. 每个网格预测B(文中取B=2)个边界框。对每个边界框预测5个值:①边界框坐标(x,y,w,h),边界框中心坐标x,y(相对值,相对于所属网格的边界),边界框宽高w,h(相对值,相对于原始输入图像的宽高的比例);②置信度confidence(边界框与ground true的IOU值)。定义如下: 。如果有gt_box 落在一个网格里,第一项取1,否则取0。当该边界框是背景时Pr(object)=0,而当该边界框包含目标时,Pr(object)=1。第二项为预测的bbox和实际gt_box间的IOU值。

  4. 每个网格需要预测C(文中C=20)个条件类别概率,(因为使用的数据集VOC2012的类别有20个,假设网格中有一个物体,需要预测其分别属于各个类别的概率。每个网格不管预测多少边界框,它只负责一组类别概率值)。定义如下: 。每个网格预测的类别信息。 

  5. 所以,每个网格需要预测B* 5+C(即5* 5+20=30)个值,对应一个30维的向量。整张图片需要预测 S* S* (B* 5+ C)(7* 7* (2* 5+20)=1470)个值,一个1470维的tensor。

  6. 每个网格预测的条件类别概率和预测框的置信度相乘,得到每个预测框的具体类别置信度得分PrIOU:

    边界框类别置信度表征的是该边界框中目标属于各个类别的可能性大小以及边界框匹配目标的好坏。后面会说,一般会根据类别置信度来过滤网络的预测框。

    注:P(B|A) * P(A) = P(AB)。若直接看式子会发现存在一定歧义。Pr(Object)只是一个存在判断,只取1或0,实际对整个公式计算没有影响。左边式子表示为假设网格中存在一个物体,则Object值为1,表示式子存在;若网格中不存在物体,Object直接不存在,左边式子赋值为0。右边式子同理,某个gt_box落在某一网格中时,Object值取1,表示式子存在,否则取0,表示不存在。(个人理解)或者可以考虑在右边Pr(Classi)补充为 Pr(Classi*Object),Object取1或0,对式子表达的意思无影响。

  7. 最后采用非极大值抑制(NMS)算法从输出结果中提取出最有可能的对象和其对应的边界框。(下面非极大抑制的流程)

  • 设置一个 Score 的阈值,一个 IOU 的阈值(overlap);
  • 对于每类对象,遍历属于该类的所有候选框,①过滤掉 Score 低于 Score 阈值的候选框; ②找到剩下的候选框中最大 Score 对应的候选框,添加到输出列表; ③进一步计算剩下的候选框与②中输出列表中每个候选框的 IOU,若该 IOU 大于设置的 IOU 阈值,将该候选框过滤掉(大于一定阈值,代表重叠度比较高),否则加入输出列表中; ④最后输出列表中的候选框即为图片中该类对象预测的所有边界框。
  • 返回步骤 2 继续处理下一类对象。

注意:

  • 当 overlap 阈值越大、proposals boxes 被压制的就越少,结果就是导致大量的 FP (False Positives),进一步导致检测精度下降与丢失 (原因在于对象与背景图像之间不平衡比率,导致 FP 增加数目远高于 TP)

  • 当 overlap 阈值很小的时候,导致 proposals boxes 被压制的很厉害,导致 recall 大幅下降。

损失函数 Loss function:

 

  • 使用SSE作为loss,(sum-squared error 和方差,所有元素相减取平方,再累加),容易优化,但不够理想。
  • 由于多数网格不包含物体,即多数的confidence=0,会使得这部分梯度很高,需要减少其权重,否则易导致模型不稳定。论文在增大边界框坐标预测的权重时,又减少了不包含物体边界框的坐标预测权重, 
  • 大的bbox(边界框)得分会高于小bbox,所以没有直接使用w和h,而是采用w和h的平方根。

坐标预测:

大方框的小误差没有小方框的小误差重要,作者直接预测边界框宽高(w和h)的平方根,减少差距影响,有效但没完全解决。

对不同大小的bounding box预测中,相比于大box大小预测偏一点,小box大小测偏一点肯定更不能被忍受。所以在Loss中同等对待大小不同的box是不合理的。为了解决这个问题,作者用了一个比较取巧的办法,即对w和h求平方根进行回归。从后续效果来看,这样做很有效,但是也没有完全解决问题。

置信度预测:

由于绝大部分网格中不包含目标,导致绝大部分box的confidence=0,所以在设计confidence误差时同等对待包含目标和不包含目标的box也是不合理的,否则会导致模型不稳定。作者在不含object的box的confidence预测误差中乘以惩罚权重λnoobj=0.5。

类别预测:

即每个box属于什么类别,需要注意一个网格只预测一次类别,即默认每个网格中的所有bounding boxes都是同一类。

每个网格预测2个bbox,但对应的类别只有1个,如果网格中确实有目标,那么只选择与gt_box的IOU最大的bbox来负责该预测目标,其他bbox的置信度设置为0。如果一个网格对应的bbox中有多个目标,也只会选择其中一个训练,放弃其他的(缺点之一)。

需要注意的是:不同任务的重要程度不同,应给予不同的loss weight(权重)。每个网格两个预测框坐标比较重要,给这些损失前面赋予更大的损失权重,一般为5。而对于没有object的预选框的confidence loss,赋予小的loss weight,一般为0.5。在有object的预选框的confidence loss和类别的loss,权重正常取1。

小trick:

回归offset代替直接回归坐标:(x,y)不直接回归中心点坐标数值,而是回归相对于格点左上角坐标的位移值。

同一格点的不同预测框有不同作用:训练时只需要1个bbox(IOU最大)负责一个object。在损失函数计算中,只对负责object的bbox计算损失,其余框不做修正。总体召回率有所提升。

使用非极大抑制生成预测框:大物体或近邻物体可能会生成多个格点所预测。使用NMS可以过滤掉一些重叠框。

推理时,将p*c作为输出置信度: ,可过滤掉大部分重叠的bbox。

训练:

预训练分类网络: 在 ImageNet 1000-class competition dataset上预训练一个分类网络,这个网络是网络结构中的前20个卷积网络+average-pooling平均池化层+ 全连接层 (此时网络输入是224*224)。

训练检测网络:预训练后,在预训练得到的20层卷积层后加上随机初始化的4个卷积层和2个全连接层。因为高分辨率的图片检测效果更好,检测要求细粒度的视觉信息,所以将网络的输入从224* 224增加到448* 448。网络流程如下:

预测:

bbox的位置信息: 

图片划分为7* 7=49个网格,每个网格预测2个bbox,共7* 7* 2=98个bbox。

每个网格单元包含20个类别信息: 表示为一个20维的tensor。

每个网格预测的class信息bounding box预测的confidence信息 相乘,就得到每个bounding box的class-specific confidence score。 下列图片表示的就是每个bbox的score(因为每个网格有20个类别,所以经过相乘可以每个bbox得到20个score)

因为共有98个bbox,每个bbox预测得到一个20维的tensor,遍历所有的网格,最后可以得到98个20维的tensor。(每个bbox既有对应的class信息又有坐标信息)

NMS(极大抑制处理):

得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

实验结果:

数据集:PASCAL VOC 2007

 

效果图

优缺点:

优点:

  • 检测速度非常快。没有复杂的检测流程。

  • 使用整张图像进行全局推理,能利用上下文信息,有效减少了背景误差。

  • 可以学习目标的泛化特征。

缺点:

  • precision精度低于其他SOTA目标检测算法。

  • 原始输入图片只划分为7*7个网格,两物体比较接近时,效果较差。

  • 对小目标检测效果不好。

  • 每个网格最多预测2个方框,1个类别,易漏检,召回率低。

  • 对新物体或比例不正常的物体预测效果不理想。

  • 容易产生定位误差。

  • 训练时,模型可能不稳定。

参考博客:

 翻译:YOLO论文翻译——中文版 - 简书

【YOLO学习笔记】之YOLO v1 论文笔记1(超详细:翻译+理解)水亦心的博客-CSDN博客yolo论文

解读:YOLO v1论文解读 - 知乎

【论文解读】Yolo三部曲解读——Yolov1 - 知乎

图解YOLO - 知乎

【深度学习YOLO V1】深刻解读YOLO V1(图解)_c20081052的专栏-CSDN博客_yolov1

目标检测|YOLO原理与实现 - 知乎

YOLO目标检测从V1到V3结构详解 - 云+社区 - 腾讯云

菜狗子写文,勿喷!写得不全,有机会或有理解了继续补补!也希望各位大佬看到了有不对的地方多多指教!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值