YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)阅读笔记

1. Abstract

  1. 一个网络可以预测边框和类别的概率,做到了end-to-end
  2. 速度非常快,能做到45 fps(frams per second).
  3. 可以学到更普遍的物体特征,不过个人感觉没啥用。速度快也意味着精度下降。

2. Introduction

  1. YOLO的流程非常简单:

    1. 将图片resize到448x448
    2. 用一个神经网络训练
    3. 通过Non-max suppression
  2. YOLO的三个优点:

    1. 速度快,在Titan X上跑达到45fps,小版本的更快
    2. YOLO能够看到整张图片,不像R-CNN只是提取部分区域。在背景检测方面YOLO比区域提取算法更好。
    3. YOLO在泛化方面做得更好,面对不是训练数据的分布时,更强。

3. Unified Detection

训练的时候

  1. 把输入的图片分成SxS个格子(grid)。如果一个物体的中心落在这个格子,那么这个格子就负责检测这个物体。
  2. 每个格子预测B个边框,同时给每个边框带上置信分数(confidence scores)。置信分数反映了边框含有预测物体的可能性大小,以及这个预测的边框的准确度。通常,这个置信度(confident)定义为:
    Pr(Object)IOUpredtruthPr(Object) * IOU^{truth}_{pred}
    也就是这个格子的分类概率乘于IOU。
  3. 每个预测出来的边框包含5个值:x,y,w,h,confidencex, y, w, h, confidence.其中(x,y)(x,y)代表边框的中心点,x,yx,y的坐标是相对一个格子而言的;(w,h)(w,h)代表边框的宽和高,注意这里是相对整张图片而言的;最后confidence代表预测边框和真实边框的的IOU。个人觉得这里论文讲得有点矛盾,前面说confidence是Pr(Object)IOUpredtruthPr(Object) * IOU^{truth}_{pred},现在又这样说。
  4. 每个格子单元同时预测C个类别的概率,也就是后验概率Pr(ClassiObject)Pr(Class_i|Object),要注意的是,有多少类我们就预测多少个类别,不管有多少个边框B。这里的意思是,如果我们做10个类别的目标检测,那么就预测出10个类别的后验概率。

测试的时候

  1. 测试时,将每个预测类别的条件概率乘于每个边框的置信度:
    Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_i|Object) * Pr(Object) * IOU^{truth}_{pred} = Pr(Class_i) * IOU^{truth}_{pred},
    这样就可以得出每个类别对应的边框的分数了。到这里作者就统一了,也就是置信度(confidence)是等于
    Pr(Object)IOUpredtruthPr(Object) * IOU^{truth}_{pred}
    这是论文给的图片:
    YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)阅读笔记

网络设计

  1. 24层卷积层,最后两层是全连接层,和GoogLeNet很像,但是卷积核只用1x1的和3x3
    的。另外还有一个快速版的YOLO,卷积层只有9层。

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)阅读笔记

训练

  1. 预训练:用前20层去预训练
  2. 检测任务通常需要细粒度(fine-grained)的图像信息,因此增加图片的分辨率到448x448,原来是224x224
  3. 为了归一化,所以将边框的w和h设置为相对整张图片的宽和高,这样w和h的值就能落到(0,1)了;同理将边框的x和y设置为相对格子单元也是为了归一化。
  4. 最后一层没用**函数,其他的都用了Leaky rectified lineage activation:
    ϕ(x)={x,if x > 0,0.1x,otherwise\phi(x) = \begin{cases} x, & \text {if $x$ > 0}, \\0.1x, & \text {otherwise} \end{cases}
  5. loss function 如下:
    YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)阅读笔记
    具体训练参数还是到论文细看。

预测

  1. 预测的时候,在PASCAL VOC数据集上,每张图片预测了98个框,每个框都有相应类别的概率。

不足

  1. 检测小物体效果不好
  2. (这个不足看不懂)
  3. 对大框的错误和小框的错误同等对待,然而小框出错对IOU影响很大。

3. 和别的检测算法比较

  1. 总的来说就如下:比YOLO准确率高的没YOLO快,比YOLO快的没它的准确率高。

4. 实验

  1. 主要是和Fast R-CNN比较。
  2. 在艺术作品上的检测效果非常好,其他的检测算法效果与YOLO相比都相差甚远。

5. 野外实时检测

  1. https://pjreddie.com/darknet/yolo/ 这个网址有视频样例,看起来挺厉害的。

6. 总结

实时性很厉害,YOLO的实现还用了自己的框架,名字叫darknet,真的是厉害啊。有机会看看用pytorch或tensorflow实现的源码。

7.论文参考(带笔记)

You Only Look Once: Unified, Real-Time Object Detection

相关文章:

  • 2021-11-11
  • 2021-07-30
  • 2022-01-03
  • 2022-01-07
猜你喜欢
  • 2022-01-02
  • 2021-11-04
  • 2022-01-05
  • 2022-01-12
  • 2021-06-11
  • 2021-06-02
相关资源
相似解决方案