YOLO v1总结

YOLO V1

1. idea

  • 此前的目标检测将问题看成是分类问题,而yolo看成是一个回归问题
  • yolo非常快,可以达到一秒45帧的速度
  • yolo在运行时将整张照片作为输入,可以得到更多的context。而不像R-CNN那样将Bounding Box作为输入
  • YOLO具有更强的泛化能力(得益于将图片整体作为输入?)
    YOLO v1总结
  • yolo的运行步骤为:1. resize图片;2. 输入网络;3. 极大值抑制

2. details

  • 将object detection的各个部分整合到一个单独的网络
  • 将整张图片划分为S×SS \times S个网格grid,每个网格预测出B个bounding box,每个box各预测出一个置信度confidence(用于描述这个box包含object的概率),confidence的定义为
    Pr(object)IOUpredtruth Pr(object)*IOU_{pred}^{truth}
    假如没有object落在box中,则confidence为0
  • 每个box要预测五个值,其中一个便是confidence,另外四个是(x,y,w,h)(x,y,w,h)(x,y)(x,y)表示box的中心。(x,y)(x,y)是box相对于grid的的相对位置,归一化到[0,1][0,1],而(w,h)(w,h)是相对于input(整张图)的比例,一样[0,1][0,1]
  • 每个grid还需要预测出C(C为类别的总数)个概率值Pr(ClassiObject)Pr(Class_i|Object)
  • 在测试阶段,可以根据以下公式得到类别指定的置信度class-specific confidence
    Pr(ClassiObject)Pr(Object)IOUpredtruth=Pr(Classi)IOUpredtruthPr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth}
  • 因此,整个网络的输出是一个S×S×(B5+C)S \times S \times (B * 5 + C)的tensor

3. Experiment

  • CNN采用类似GoogleNet的结构
    YOLO v1总结
    没有采用inception模块,采用1×11 \times 1的卷积层降维加上一个3×33\times 3的卷积层代替
  • 网络一共24层,fast yolo采用9层
  • 数据集采用Pascal VOC,S=7,B=2,C=20,因此输出为7×7× 307 \times 7 \times \ 30的向量。
  • 在ImageNet上进行预训练卷积层(预训练时长1周),在预训练的卷积层(20层)后加入4层卷积层和2层全连接层。因为目标识别需要更多的信息,将输入大小从224224增大到448448。
  • loss采用sum-squared error。因为大部分的box都不包含object,不加权的情况下会使网络倾向于预测出confidence全0。同时,位置信息与分类错误权重一致的情况下实验不太理想。因此,增大位置信息(coordinate)的权重并增大那些包含object的box的权重,论文中加入两个参数λcoord=5,λnoobj=0.5\lambda_{coord}=5, \lambda_{noobj}=0.5。最终的loss function为YOLO v1总结
    其中
  1. C为box的confidence,
  2. pi(c)p_i(c)为第i个grid属于第c类的概率;
  3. Iiobj\mathbb I_i^{obj}代表object是否出现在第i个grid上(构建ground truth的时候每个object只在一个grid上有置信度,即object中心所在的grid才会使Iiobj=1\mathbb I_i^{obj}=1
  4. Iijobj\mathbb I_{ij}^{obj}代表第i个grid中的第j个box是否responsible(首先筛选grid,选出object中心所在的grid,对这些grid中两个box选择具有最大iou的box,最后产生的box才是responsible。思想与进化算法相似,每个grid产生两个个体(grid),选择适应值(IOU)最高的grid)
  5. Iijnoobj=1\mathbb I_{ij}^{noobj}=1是除了4.中所指的其他所有的box
  6. 值得注意的是,对于分类error的惩罚只作用于出现object的grid上
  7. 对于宽和高h w的开根,是因为对于不同的大小box回归,预测偏差相等时对于小box的惩罚更大。如偏差同样为10,对于长为100的box的惩罚显然应该小于长为20的box
  8. 对于responsible的box的置信度error计算,target也就是ground truth需要在计算出预测值以后才能动态计算出相应的置信度,置信度为预测box与target box的IOU
  9. loss总结:对于responsible的box需要计算边框(x,y,w,h)(x,y,w,h)的error以及置信度(目标置信度为与object的IOU)的error,对于其他box只需要计算置信度的error(目标置信度为0)。对于分类error,只需要计算object中心所在的grid。