我读YOLO

来源:互联网 发布:奥斯维辛集中营 知乎 编辑:程序博客网 时间:2024/06/07 20:17

背景

论文地址:You Only Look Once: Unified, Real-Time Object Detection
主页:YOLO: Real-Time Object Detection
此篇文章发表于 CVPR 2016,RBG 挂名的一篇物体检测方法,作者是 Joseph Redmon,了解的同学可以补充一下他的经历,据说可八。

主要贡献

  1. 加速物体检测,YOLO 的 mAP 与 R-CNN 相近,但速度提升。Fast YOLO 可以达到 155 fps,并且 mAP 依然是传统 DPM 的两倍
  2. 端到端(end-to-end)方式训练网络
  3. 不易检测到错误的物体(less false positive)
  4. 相比较 DPM 和 R-CNN 来说,泛化性更强

方法

R-CNN 的定位+分类方法需要对每个 RoI 都进行分类,所以速度缓慢。YOLO 改为回归的方法,整张图作为回归的输入,判断 bounding box 位置以及所属类别,减少多次通过 proposal 分类带来的时间消耗。

  1. 输入图像划分为 S×S 的网格,如果物体的中心点落在网格中,则此网格对此物体负责(未明白
  2. 每个格子选出 B 个候选 bounding boxes,每个 bbox 由一个五维向量表示,{x,y,w,h,confidence},其中的 (x,y)[0, 1] 表示 bbox 中心点在网格中与左上角坐标的相对偏移百分比,(w,h)[0, 1] 表示宽高与整幅图的相对比值。confidence=Pr(Object)×IoUtruthpred,表示这个 bbox 是物体的可信度概率。
  3. 每个网格还有一个分类的预测值,写为 Pr(Classi|Object),表示该网格是第 i 类的概率,如下图

这里写图片描述

在 PASCAL VOC 检测中,S = 7,B = 2,一共有 20 个类别,则输出就是 7x7x30 的向量。其中 30=20 classes+(2×5)

网络设计

本文中使用的网络类似 GoogLeNet,共有 24 个卷积层和 2 个全连接层。Fast YOLO 使用 9 个卷积层。如图
这里写图片描述

训练

  1. 先预训练,使用 ImageNet 1000 分类数据集训练网络前 20 个卷积层,加一个 mean pooling 层和 softmax 层
  2. 激活函数如下
    f(x)={x,0.1x,if x>0otherwise
  3. Loss function 如下
    λcoordi=0S2j=0B1objij[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1objij[(wiw^i)2+(hih^i)2]+i=0S2j=0B1objij(CiC^i)2+λnoobji=0S2j=0B1noobjij(CiC^i)2+i=0S21objicclasses(pi(c)p^i(c))2

    • 其中第一二行为每个 bbox 边框的误差,1objij 表示只计算是 object 的边框,使用 λcoord 调节占比
    • 第三四行为每个 bbox 判断是否包含物体的误差,有无物体的误差使用 λnoord 调节占比
    • 第五行对每个网格计算分类误差
    • 文中使用 λcoord=5λnoord=0.5
  4. 训练使用 PASCAL VOC 2007 & VOC 2012 数据集合,batch_size=64,momentum=0.9,weight decay=0.0005
  5. dropout rate = 0.5,放在第一个 fc 层后面
  6. 训练集合在 HSV 通道 1.5 倍曝光和饱和度,随机尺度+平移变换增加训练集

局限

  • 由于每个网格只能分一类并且只有 B 个 bbox,导致一些小物体(如小鸟)并不能够被完全检测出来。
  • 对新出现的物体或者角度不能够很好检测
  • Loss Function 设计还不是很合理,大 bbox 的小误差对 Loss Function 的影响小于小 bbox 大误差

实验

这里写图片描述
分析如下
这里写图片描述

0 0