【论文解读】one-stage系列开山之篇 | 目标检测速度检测大跨步 | YOLO V1详解

前言

关于YOLO系列的初始作者–Joseph Redmon,说实话真的是个典型的米国白左,辣眼睛的CV,不知道的还以为是那个少女心泛滥的中二,祭出来镇楼:

Joseph Redmon

想立就立、想当就当,想退圈就退圈,反正自己公司已经被大厂收购,早就实现了财富自由,唉,真的是。。。。anyway, 有一说一,这也不影响其在学术、在目标检测上的积极贡献。所以还是要细细读一下。

1.简介

1.1 YOLO由来

YOLO == you only look once : 就是看一眼,就可以做到目标检测了,可见足够快吧!
在这里插入图片描述
PS:
这些作者排序就比较有意思了:
第一作者是joe; Joseph Redmon
第二个作者是joe的大师兄、(看通讯地址也知道现在已经在 Allen Institute for Artificial Intelligence干活了);Santosh Divvala
第三个是Ross大神;这个可能都认识就不放了吧
最后一个是joe的指导老师老Ali 、同时也是Allen Institute for Artificial Intelligence一个项目的主要负责人。。。【 info | others

这个显然是业界和学界的合作催生的产物, joe的导师Ali功不可没,paper的具体功能我感觉其实没有太多划时代的创新点(是不是一篇文章,分多次发、发不同阶段的产物还真的不好说,毕竟YOLO_V1 、V2其实赶脚也没有离多久),但是paper让人赶脚着这个虽然不怎么样但是总是能突出速度快、忽略精度低或者说使用其他的方式让你觉得其实没有那么差并且给出一定方法去弥补的赶脚。写的还是不错的、况且还有大神挂名,感觉学术论文的技巧比较高!感觉像我们这样的小白,应该好好学习一下~~

1.2 摘要

在这里插入图片描述
论文也说的清楚,不再像R-CNN系列那样费心提出Proposals了,直接使用一个网络、把找目标看做一个回归问题end-to-end一次训练完!这个绝对会非常快!(paper肯定不会明说,但是这个精度自然就会比较差了,相比于Two-stage的一些代表,例如Faster R-CNN

1.3 代码

[YOLO v1] You Only Look Once: Unified, Real-Time Object Detection | [CVPR’ 16] |[pdf] [official code - c]
(官方的v1版本已经不再维护了,都没官方代码了;最早的也只剩下v2版本了)

2.YOLO网络结构详解

2.1 整体介绍

在这里插入图片描述
这个整体过程也非常清楚:
(1)resize图片到固定尺寸(448x448,显然图片尺寸越大准确度越高,速度也会降低;R-CNN系列都是224x224,因为确实也慢,如果也用448x448的话mAP也许还会上升不过就慢的太过了)
(2)使用一个conv net + fc layer ----> 直接得到分类scores、bbox坐标 (这个过程真的有点像Faster R-CNN里面的RPN环节,不过YOLO就像是只有一个RPN、判断bbox就完了;而Faster R-CNN里面后续还有fc layer+ sibling layer继续再次进行校正bbox)
(3)得到分类score / bbox,通过阈值筛选判断、保留和筛除

2.2 主干网络分类

论文中以YOLO为主,同时也为了和其他detector比较精读和速度,提出了YOLO-Fast、YOLO-VGG16的版本,这个总是拿着不同版本的长处和别人比较的做法确实厉害。

  • YOLO(主要版本)
    在这里插入图片描述
    这是paper作者自己改进的卷积神经网络:
    input : 448x448
    net: 24个conv layer + 2 fc layer
    output: class scores/ bbox, 注意是 7x7x30(请自行对照下方核心思想理解)

Tips:
1.作者paper里面说backbone的原型来源于GoogLeNet系列 - - Inception Net, 但是inception models肯定长着这样:
在这里插入图片描述
而且肯定检测的速度的话也会比较慢,毕竟大型的网络结构。作者的网络显然没有这个结构,最大的替换就是把inception module变成 3x3 +1x1 conv,类似于Network In Network.
2. 而且也说了一下训练过程:在imgnet上按照224x224先进行pretrain,之后采用这些模型fine-turning 448x448
3. 注意网络中使用的激活函数是leaky rectified linear activation:
在这里插入图片描述

  • YOLO-Fast (追求速度的版本)

input : 448x448
net: 9个conv layer + 2 fc layer
output: class scores/ bbox

tips:
只是从YOLO版本中,缩减主干网络的卷积层数(24 个 conv -> 9 个 conv layer),这样检测速度肯定会有较大提升,但是相关的feature map就没有那么高的维度和空间聚合性了,所以检测效果可能会下降非常多。

  • YOLO-VGG16 (追求精读版本)

作者paper中可能也是因为自知精读太差,所以还是也像 R-CNN系列一样使用了其他人常用的VGG16网络,这个也是提升了一些精读 (大约3%左右)、但是检测速度确实下降了非常多。

2.3 核心思想详述

在这里插入图片描述

(1)输入图像被划分为了S*Sgrid,如果一个物体的中心落在了某个grid cell中,则该grid cell就负责检测该物体。(在训练中可以通过ground truth计算出物体中心在哪个grid cell中,所以训练后,算法也自然拥有了这种能力。)

(2)每个grid cell 都会预测出Bbounding boxes及其置信度(confidence scores),这些置信度反应了该Box包含一个物体的确信程度以及bounding box的准确程度。训练过程,目标的置信度表示为 Pr(Object)∗IoU(pred,truth)
tips:
Pr(Object)-> 表示在此cell种是否存在obj, 存在 则=1;否则=0;
IoU(pred,truth) -> 表示预测的bbox与ground truth的 IOU

即如果grid cell中没有目标物体,则置信度为0;
如果有目标,置信度设为IoU(pred,truth),预测的bounding boxes每次都是前向计算出来的,与ground truth计算出目标IoU。

(3)每个bounding box包含5个预测x,y,w,h,以及置信度(x,y)代表bounding box中心相对于对应cell边界的位置;w和h是相对于整个输入图像的宽和高的比例。置信度即bounding box与ground true的IoU(之后在做检测计算的时候会被乘上分类的概率输出)。

注意的是,bounding box的位置是不需要初始化的,区别于Faster R-CNNanchor方法,bounding box位置是模型计算输出的结果,而不是模型参数或者超参数(除了bounding box个数及数据组织方式)。模型权重有了初始值,有图像输入,则bounding box的位置是模型计算确定的。训练阶段将结合ground truth进行bounding box预测位置的调整(网络权重的更新)。

(4)每个grid cell也会输出C类目标对象的类别概率, 即Pr(Classi|Object)。
在实际计算过程,我们计算每一个类别的概率,使用如下公式:
Pr(Classi|Object) ∗ Pr(Object) ∗ IoU(pred,truth) = Pr(Classi) ∗ IoU(pred,truth)

在这里插入图片描述
因为使用的是VOC数据集,有20个分类,所以以上的参数变为:
S=7, B=2, C=20,
最终的输出是 7x7x(2x5+20) = 7x7x30的tensor,具体含义如下所示:
在这里插入图片描述

在这里插入图片描述

配合上图,总结来说: 输入一个448X448 的图片,YOLO将其划分为7X7=49的网格,每个网格要预测2个bbox、并且给出每个预测的bbox 的坐标(x,y,w,h)、每个bbox是否包含该物体的置信度confidence;每一个网格也要预测属于20分类的每一个概率。

2.4 loss计算

在这里插入图片描述
整体说明图:
在这里插入图片描述

说明:主要是包括 bbox误差、置信度误差、分类概率误差

  1. Xi, Yi, Wi,Hi -> 预测bbox框的中心坐标(距离bbox边界的比例;跟img长、宽的比值)/ X_hat, Yi_hat W_hat,H_hat -> 真实目标的bbox框的中心坐标(距离bbox边界的比例;跟img长、宽的比值);
  2. Ci -> 是否包含obj的置信度; C_hat -> 真实否是包含obj;
  3. Pi -> 预测是某个类别的概率;P_hat -> 真实是是某个类别的概率;
    在这里插入图片描述
  4. λcoord :目标obj存在该cell中的权重系数、 λnoobj:obj不存在在该cell中情况下的权重系数 ; λcoord = 5 and λnoobj = .5.

PS: 为何要对w,h开根号?

举例来说:
在这里插入图片描述

3. 优缺点 and 与其他detection比较

3.1 YOLO自述优点

  • 1 非常快
  • 2 考虑图片全局性比较多、所以在预测的时候错误率较低(每个图片最多只能检测98个obj,这个自然错误率低了,哈哈)
  • 3 yolo相比其他,通用泛化能力略好。(他用预测艺术品中图片的检测精读较高来佐证,毕竟这方面的对比其他论文也没去做,哈哈)

3.2 YOLO 自述缺点

在这里插入图片描述

3.3 和其他detector对比(从而作者可以信誓旦旦地说明客观上都没有YOLO好)

主要是对比了DPM、 R-CNN、Fast R-CNN、 Deep MultiBox、 OverFeat、MultiGrasp、Other Fast Detectors

简单来说,就是精度高的paper里面说没有YOLO速度快、速度能称得上real-time的说用的还是sift等老的提取特征方法、使用CNN提取RPN的就强调他们训练是multi-stages、速度很快的就说并不能用于检测复杂情况。

当然其实论SOTA的话,Fast R-CNN(2015年)还是比较有优势的,YOLO其实当时(2016)并没有硬刚,直接忽略不细谈。哈哈,建议去看原文。

4.实验和评估

4.1 和其他detector的比较

  • 部分速度和准确度的比较(VOC2007)
    在这里插入图片描述

速度快的没有YOLO准确度高(那些论文可是N年前的了,这个有点鞭尸的感觉。。。);精度高的还特别标注一下,“看!没有real-time(就是速度慢)、这可是less than real-time的哈”。另外,为了挽回一下YOLO系列的精度,并且还特意写上了YOLO-VGG16

  • VOC 2007 Error Analysis
    主要是围绕着Fast R-CNN(注意:而不是改进版的、更好一点的Faster R-CNN)展开。
    使用Hoiem等人的方法和工具。对于测试时的每个类别,我们看这个类别的top N。每个预测或者是正确的,或者根据错误类型进行分类:

    Correct:正确的类别且IOU>0.5。
    Localization:正确的类别,0.1<IOU<0.5。
    Similar:类别相似,IOU >0.1。
    Other:类别错误,IOU >0.1。
    Background:任何IOU <0.1的目标

在这里插入图片描述
YOLO的诡辩艺术:
“ 看,Fast R-CNN里面因为是RPN有2k个,所以正确率高的同时,分错的占比也高(background)。而我们这边(YOLO)类别都对了,只是对于location这方便略微偏了一点而已(肯定还会提高的)”

  • VOC 2012的精度结果比较

在这里插入图片描述
当然,这个表的结果并不是用来说YOLO只有50%的这么差的精读的实话的,主要是用来鼓吹他自己提出的结构FAST R-CNN + YOLO的精读也是SOTA的!

4.2 YOLO自己精度差?他给出了现在的解决办法

那就是selective search method 不是检测都需要1.5s么,反正是用来提出RPN的、直接用YOLO代替呗~~YOLO反正也才1/45 =0.02 s
(噗,当然要比Faster R-CNN的RPN时间长!!)

于是作者提出了一个方案: Combining Fast R-CNN and YOLO
并且是只看精读、不看速度的!!!

在这里插入图片描述

4.3 YOLO的强势鼓吹佐证

  • 佐证1:在艺术品中人物检测的效果~看,更好泛化能力

在这里插入图片描述
反正就是找冷门的数据集,来刷一下优越感。。。貌似能说明泛化能力超强还是啥问题? 噗~~

  • 佐证2:在户外实时检测方面 ~ 看,除了real-time,还有更符合人眼的bbox和分类哦(噗~~)
    在这里插入图片描述

这让我想起了一个梗:
A某鼓吹自己心算能力特别快,
一个主持人问他,那我考考你吧? 123457 x 999.663等于多少?
A某答曰:100万。
主持人:这个貌似不对吧?
A某:你就说快不快吧。。。。

5.Reference

  1. [YOLO v1] You Only Look Once: Unified, Real-Time Object Detection | [CVPR’ 16] |[pdf] [official code - c]
  2. YOLO相关博客 参考1 | 参考2 | 参考3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI扩展坞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值