YOLO解读

推广下我的个人博客网站,以后博客可能都转移到那里了。


上一篇讲了region-free结构的检测模型SSD,这次region-free的鼻祖You Only Look Once:
Unified, Real-Time Object Detection,这是它的第一个版本,它还有v2,以后再讲。

整体特点

第一个颠覆ross的RCNN系列,提出region-free,把检测任务直接转换为回归来做,第一次做到精度可以,且实时性很好。

  1. 直接将原图划分为SxS个grid cell,如果有物体的中心落到这个格子里那么这个格子的gt就是这个物体(如果有多个物体的中心落到这个格子里,就取距离格子中心点最近的那个物体为gt,我的猜想,需要看代码验证)。

  2. 每个格子被指定的gt需要对应B个bounding box(下面简称为bbox)去回归,也就是说每个格子对应的B个bbox的gt是一样的(我也很奇怪这一点为什么同一个物体需要两个bbox去回归,为了提高精度吧)->(Each predictor gets better at predicting certain
    sizes, aspect ratios, or classes of object, improving overall recall.每一套去适应不同的size或者比例等)
    YOLO predicts multiple bounding boxes per grid cell. At training time we only want one bounding box predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the groundtruth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratios, or classes of object, improving overall recall. 也就是说每个cell设置B个predictor,训练时选择iou最好的预测结果,增加它的置信度,其他的降低置信度。对于每个gt指派的cell,Decrease the confidence of these boxes Don’t adjust the class probabilities or coordinates,详情查看下面链接的ppt

  3. 每个bbox预测5个值: x, y, w, h, 置信度。(x, y)是bbox的中心在对应格子里的相对位置,范围[0,1]。(w, h)是bbox相对于全图的的长宽,范围[0,1]。x, y, w, h的4个gt值可以算出来。confidence = P(object)* iou, 它的gt值是这样指定的: 若bbox对应格子包含物体,则P(object) = 1,否则P(object) = 0。它和ssd及rcnn系列在这里有个很不同的地方,它是直接回归bbox的位置,而ssd及rcnn系列是回归的是default box/anchor的偏移量,就是现有一个预设的box,然后网络只用学习这个预设box的偏移使它更准,但是yolo没有default box/anchor这个东西。

  4. 每个格子也会预测属于各个类别的置信度,也就是每个格子对应的B个box是共享这个值的,这B个box只能属于一类的,所以和第一步呼应它们的gt都是一样的。

  5. inference阶段这里写图片描述,class-specific confidence score既包含了bounding box最终属于哪个类别的概率,又包含了bounding box位置的准确度。最后设置一个阈值与class-specific confidence score对比,过滤掉score低于阈值的boxes,然后对score高于阈值的boxes进行非极大值抑制(NMS, non-maximum suppression)后得到最终的检测框体。

其他示意图
YOLO解读_第1张图片

YOLO解读_第2张图片

YOLO解读_第3张图片
YOLO解读_第4张图片
后处理时再reshape成7*7*30

训练细节##

此处为转载,出处见结尾。
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S*S*(B*5 + C)维向量与真实图像的对应S*S*(B*5 + C)维向量的均方和误差。如下式所示。其中,coordError、iouError和classError分别代表预测数据与标定数据之间的坐标误差、IOU误差和分类误差。
每个格子的 loss=coordError + iouError + classError
YOLO对上式loss的计算进行了如下修正。

  1. 位置相关误差(坐标、IOU)与分类误差对网络loss的贡献值是不同的,因此YOLO在计算loss时,使用λcoord =5修正coordError。
  2. 在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用λnoobj =0.5修正iouError。(注此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)。
  3. 对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题。(注:这个方法并不能完全解决这个问题)。

综上,YOLO在训练过程中Loss计算如下式所示:
YOLO解读_第5张图片

总结

此处为转载,出处见结尾。
综上所述,YOLO有如下特点:

  1. 快。YOLO将物体检测作为回归问题进行求解,整个检测网络pipeline简单,且训练只需一次完成。
  2. 背景误检率低。YOLO在训练和推理过程中能“看到”整张图像的整体信息,而基于region proposal的物体检测方法(如Fast RCNN)在检测过程中,只“看到”候选框内的局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体[1]。
  3. 识别物体位置精准性差,√w和√h策略并没有完全解决location准确度问题。
  4. 召回率低,尤其是对小目标(密集的小物体更差,它们可能同类可能不同类都在一个cell里,虽然一个cell对应B个bbox,但是它们共用一个gt,这就导致一些物体被忽略掉,且infer时B个bbox也只是输出一个综合置信度最高的bbox)。

参考了
YOLO的slides
YOLO详解:评论里很多对话很赞
还是之前喜欢的专栏: You Only Look Once: Unified, Real-Time Object Detection(YOLO)

你可能感兴趣的:(深度学习,论文学习笔记,detection)