美文网首页
Yolo v1学习

Yolo v1学习

作者: Septieme | 来源:发表于2020-04-05 21:29 被阅读0次

    简介

    Current detection systems repurpose classifiers to per- form detection. To detect an object, these systems take a classifier for that object and evaluate it at various locations and scales in a test image. Systems like deformable parts models (DPM) use a sliding window approach where the classifier is run at evenly spaced locations over the entire image

    在yolo之前的物体检测系统使用分类器来完成物体检测任务:为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。例如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。

    在DPM之后提出的其他方法,如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。

    We reframe object detection as a single regression prob- lem, straight from image pixels to bounding box coordi- nates and class probabilities. Using our system, you only look once (YOLO) at an image to predict what objects are present and where they are.

    yolo应该是第一个使用回归思想来处理物体检测问题的,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要输入到神经网络就能得出图像中都有哪些物体和这些物体的位置。

    所以yolo有多个明显的优点:

    1. 检测速度很快,没有复杂的流程,只需将图像输入神经网络就可以得到检测结果。
    2. 可以比较好地避免背景错误,相比较采用滑窗的物体检测系统,yolo可以更好的利用全局信息和上下文信息。
    3. 可以学习到物体的泛化特征,更有利于迁移。

    但yolo也存在一些缺点:

    1. 检测精度和当下领先的的一些物体检测系统(如R-CNN)相比偏低。
    2. 更容易产生定位错误。
    3. 对小物体的检测效果不好(尤其是密集的小物体),每个栅格只有两个选框。

    设计思路

    We unify the separate components of object detection into a single neural network. Our network uses features from the entire image to predict each bounding box. It also predicts all bounding boxes across all classes for an im- age simultaneously. This means our network reasons glob- ally about the full image and all the objects in the image. The YOLO design enables end-to-end training and real- time speeds while maintaining high average precision.

    YOLO将输入图像划分为S*S的栅格,每个栅格负责检测中心落在该栅格中的物体。
    每一个栅格预测B个(论文中默认为2个)bounding boxes,以及这些bounding boxes的confidence scores。这个 confidence scores反映了模型对于这个栅格的预测:该栅格是否含有物体,以及这个box的坐标预测的有多准。公式定义如下:

    confidence = Pr(Object) * IOU_{pred}^{truth}

    如果这个栅格中不存在一个 object,则confidence score应该为0;否则的话,confidence score则为 predicted bounding box与 ground truth box之间的 IOU(intersection over union)。

    同时,yolo对每个box还有五个预测值:x,y,w,h,confidence

    • 坐标x, y代表了预测的bounding box的中心与栅格边界的相对值。
    • 坐标w, h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。
    • confidence就是预测的bounding box和ground truth box的IOU值。

    每一个栅格还要预测C个 conditional class probability(条件类别概率):Pr(Class_i|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。

    对于每个栅格只预测一组(C个)类概率,而不考虑框B的数量,在测试阶段,将每个栅格的conditional class probabilities与每个 bounding box的 confidence相乘:

    Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth}

    这样便得到了每个bounding box的具体类别的confidence score。 这乘积既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。

    网络结构

    We implement this model as a convolutional neural net- work and evaluate it on the PASCAL VOC detection dataset [9]. The initial convolutional layers of the network extract features from the image while the fully connected layers predict the output probabilities and coordinates.

    Our network architecture is inspired by the GoogLeNet model for image classification [34]. Our network has 24 convolutional layers followed by 2 fully connected layers. Instead of the inception modules used by GoogLeNet, we simply use 1 × 1 reduction layers followed by 3 × 3 convo- lutional layers, similar to Lin et al [22].

    网络结构如下图:

    网络结构

    输入图像大小为448*448,经过若干个卷积层与池化层,变为7*7*1024张量(图一中倒数第三个立方体),最后经过两层全连接层,输出张量维度为7*7*30

    这就是Yolo v1的整个神经网络结构,和一般的卷积物体分类网络没有太多区别,最大的不同就是:分类网络最后的全连接层,一般连接于一个一维向量,向量的不同位代表不同类别,而这里的输出向量是一个三维的张量(7*7*30)。

    对于最后输出的张量是7×7×30,即 S * S * ( B * 5 + C) (B为选框个数,C为类的数量)。

    没有使用BN层,用了一层Dropout。除了最后一层的输出使用了线性激活函数,其他层全部使用Leaky Relu激活函数。

    f(x) = \begin{cases} x, & x > 0 \\ 0.1x, & otherwise \end{cases}

    而对于选框个数B其实是可以调整的,每个方格产生B个选框,最后选定置信度更大的矩形框作为输出,也就是最终每个方格只输出一个预测矩形框,并且每个方格只能预测一个物体。虽然可以通过调整参数,产生不同的矩形框,但这只能提高矩形框的精度。所以当有很多个物体的中心点落在了同一个格子里,该格子只能预测一个物体。也就是格子数为7*7时,该网络最多预测49个物体。

    YOLO imposes strong spatial constraints on bounding box predictions since each grid cell only predicts two boxes and can only have one class. This spatial constraint limits the number of nearby objects that our model can predict. Our model struggles with small objects that appear in groups, such as flocks of birds.

    正如论文中所说,yolo在面对一些邻近的小物体识别效果不是很好。

    训练

    Our final layer predicts both class probabilities and bounding box coordinates. We normalize the bounding box width and height by the image width and height so that they fall between 0 and 1. We parametrize the bounding box x and y coordinates to be offsets of a particular grid cell loca- tion so they are also bounded between 0 and 1.

    yolo将所有的预测结果都归一化到 0~1,对于offsets的处理有一点小技巧, yolo不直接回归中心点坐标数值,而是回归相对于格点左上角坐标的位移值。例如,第一个格点中物体坐标为 (1.3,3.5) ,另一个格点中的物体坐标为(4.8,6.7),这四个数值让神经网络暴力回归,有一定难度。

    所以这里的offset是指,既然格点已知,那么物体中心点的坐标一定在格点正方形里,相对于格点左上角的位移值一定在区间[0, 1)中。让神经网络去预测 (0.3,0.5) 与(0.8,0.7)会更加容易,在使用时,加上格点左上角坐标(1,3)、(4,6)即可。

    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 ground truth. 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.

    每个格点预测B个矩形,在损失函数计算中,只对和真实物体最接近的框计算损失,其余框不进行修正。因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个 predictor就负责 predict object。

    会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。

    这样操作之后发现,一个格点的B个框在尺寸、长宽比、或者某些类别上逐渐有所分工,总体的召回率有所提升。

    However, some large objects or objects near the border of multiple cells can be well localized by multiple cells. Non-maximal suppression can be used to fix these multiple detections. While not critical to performance as it is for R-CNN or DPM, non-maximal suppression adds 2 - 3% in mAP

    通常来说,在预测的时候,格点与格点并不会冲突,但是在预测一些大物体或者邻近物体时,会有多个格点预测了同一个物体。此时采用非极大抑制技巧,过滤掉一些重叠的矩形框。但是mAP提升并没有显著提升。

    Yolo v1使用普通的梯度下降法作为优化器,Loss函数如下:

    Loss函数
    • 预测框的中心点,如第一行其中1_{ij}^{obj}为控制函数,在标签中包含物体的那些格点处,该值为 1 ;若格点不含有物体,该值为 0。也就是只对那些有真实物体所属的格点进行损失计算,若该格点不包含物体,那么预测数值不对损失函数造成影响。(x,y)数值与标签用简单的平方和误差。
    • 预测框的宽高(w,h)。如第二行,1_{ij}^{obj}的含义一样,也是使得只有真实物体所属的格点才会造成损失。这里对 (w,h)在损失函数中的处理分别取了根号,原因在于,如果不取根号,损失函数往往更倾向于调整尺寸比较大的预测框。例如,20个像素点的偏差,对于800*600的预测框几乎没有影响,此时的IOU数值还是很大,但是对于30*40的预测框影响就很大。取根号是为了尽可能的消除大尺寸框与小尺寸框之间的差异。
    • 预测框的置信度C。当该格点不含有物体时,该置信度的标签为0;若含有物体时,该置信度的标签为预测框与真实物体框的IOU数值(IOU计算公式为:两个框交集的面积除以并集的面积)。
    • 物体类别概率P,对应的类别位置,该标签数值为1,其余位置为0,与分类网络相同。

    To remedy this, we increase the loss from bounding box coordinate predictions and decrease the loss from confi- dence predictions for boxes that don’t contain objects. We use two parameters, λcoord and λnoobj to accomplish this. We set λcoord = 5 and λnoobj = .5.

    \lambda_{coord}\lambda_{noobj}是为了让模型更加“重视”含有物体的格点所造成的损失,在论文中分别取5和0.5。

    总结

    Yolo v1最大的贡献就是将物体检测作为一个回归问题进行求解,图像仅经过一次网络,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而其余常见的模型则主要分两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题)。

    相关文章

      网友评论

          本文标题:Yolo v1学习

          本文链接:https://www.haomeiwen.com/subject/lxgpphtx.html