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

版权声明:转载请注明来源,谢谢。 https://blog.csdn.net/luke_sanjayzzzhong/article/details/89027208

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)定义为:
    P r ( O b j e c t ) I O U p r e d t r u t h Pr(Object) * IOU^{truth}_{pred}
    也就是这个格子的分类概率乘于IOU。
  3. 每个预测出来的边框包含5个值: x , y , w , h , c o n f i d e n c e x, y, w, h, confidence .其中 ( x , y ) (x,y) 代表边框的中心点, x , y x,y 的坐标是相对一个格子而言的; ( w , h ) (w,h) 代表边框的宽和高,注意这里是相对整张图片而言的;最后confidence代表预测边框和真实边框的的IOU。个人觉得这里论文讲得有点矛盾,前面说confidence是 P r ( O b j e c t ) I O U p r e d t r u t h Pr(Object) * IOU^{truth}_{pred} ,现在又这样说。
  4. 每个格子单元同时预测C个类别的概率,也就是后验概率 P r ( C l a s s i O b j e c t ) Pr(Class_i|Object) ,要注意的是,有多少类我们就预测多少个类别,不管有多少个边框B。这里的意思是,如果我们做10个类别的目标检测,那么就预测出10个类别的后验概率。

测试的时候

  1. 测试时,将每个预测类别的条件概率乘于每个边框的置信度:
    P r ( C l a s s i O b j e c t ) P r ( O b j e c t ) I O U p r e d t r u t h = P r ( C l a s s i ) I O U p r e d t r u t h Pr(Class_i|Object) * Pr(Object) * IOU^{truth}_{pred} = Pr(Class_i) * IOU^{truth}_{pred} ,
    这样就可以得出每个类别对应的边框的分数了。到这里作者就统一了,也就是置信度(confidence)是等于
    P r ( O b j e c t ) I O U p r e d t r u t h Pr(Object) * IOU^{truth}_{pred}
    这是论文给的图片:
    在这里插入图片描述

网络设计

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

在这里插入图片描述

训练

  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.1 x , otherwise \phi(x) = \begin{cases} x, & \text {if $x$ > 0}, \\0.1x, & \text {otherwise} \end{cases}
  5. loss function 如下:
    在这里插入图片描述
    具体训练参数还是到论文细看。

预测

  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

猜你喜欢

转载自blog.csdn.net/luke_sanjayzzzhong/article/details/89027208