YOLOv1论文阅读笔记

一.主要思想

将目标检测任务看作是一个回归任务,使用一个单一的神经网络以回归的方式直接预测一张图片上的所有bounding box的坐标和物体类别。将目标检测的各个部分统一进了一个单一的神经网络之内,因此可以进行端到端的训练。

二.特点

1.速度非常快

2.定位准确率略低于当前最优模型,但是YOLO的假阳性率也低。

3.不能够预测密集的物体,小物体,尤其是紧密接触的不同类别的物体。

三.具体方法

1.首先将整张图片划分成S * S个网格,如下图所示:

YOLOv1论文阅读笔记_第1张图片

此时设置S=7,将原图划分为了7 * 7个网格。如果一个物体的中心落入某个网格中,则这个网格就负责检测这个物体。

2.每个网格预测B个bounding box,其中每个bounding box需要预测5个值,(x, y, w, h, confidence),其中(x, y)代表bounding box中心坐标相对于当前网格左上角点的偏移量,(w, h)代表bounding box的真实宽和高相对于原图宽高尺寸的比例,设原图的尺寸为H * W,即原图高为H,宽为W,假设bounding box的中心点在原图上的真实坐标为(x_, y_),bounding box的真实尺寸为(w_, h_)则:

x_grid_size = W / S

y_grid_size = H / S

x = x_ / x_grid_size - int(x_ / x_grid_size)

y = y_ / y_grid_size - int(y_ / y_grid_size)

w = w_ / W

h = h_ / H

其中int(a)表示a的整数部分。

而confidence反映了当前bounding box包含物体的可信度以及定位准确度,其计算公式如下图所示:

其第一项反映了这个bounding box有物体的概率,第二项反映了模型输出的预测bounding box和ground truth的iou。根据这个公式可以知道,在模型训练时label的这个值是实时在线计算的,因为iou需要实时在线计算。由于在训练过程中,我们已经知道了图片上的物体的bounding box,则这些bounding box的Pr(Object)值为1,因此上式的结果为1 * IOU^{truth}_{pred}=IOU^{truth}_{pred},因此在label中,那些有物体的bounding box的这个值就是预测框和此bounding box的iou,而之前说每个网格都需要预测B个bounding box,但并不是每个网格都有物体,因此那些没有物体的那些bounding box的Pr(Object)=0,则上式为0 * IOU^{truth}_{pred}=0,实际上也是预测的bounding box和真实bounding box的iou,因为没有物体所以iou一定是0。因此,在训练阶段,label中某个bounding box的confidence值就是预测的bounding box和真实bounding box的iou,但是在测试极端我们需要将其理解为Pr(object) * IOU^{truth}_{pred},需要注意在训练阶段label的confidence值只是在数值上等同于iou,但实际含义依旧为Pr(object) * IOU^{truth}_{pred}

3.每个网格需要有一个类别预测向量,假设物体类被总共由C类(没有背景),则这个网格会预测一个长度为C的向量,向量的每个值代表这个网格已知有物体的条件下是这个类别的概率。例如这个向量的第i个值为

代表已知有物体的条件下,这个网格的物体类别为Class_i的概率。因此,从这一点可以看出,文中虽说一个网格预测B个boudning box,但是其只能预测一类物体,也就是说这B个bounding box只能是同一类别。这也是YOLOV1的一个缺陷之一,多个紧密接触的不同物体的检测效果就会很差。

因此综上所述,一个网格需要预测B * 5 + C个值,而一张图片由S * S 个网格,则需要预测S * S * (B * 5 + C)个值。

因此一张图片的输入和输出尺寸关系如下图所示:

YOLOv1论文阅读笔记_第2张图片

可以看到,在S=7,B=2,物体类别为20类的情况下,每个网格最终都预测为了一个(2 * 5 + 20)=30维的向量。则30为的向量的构成如下图所示:

YOLOv1论文阅读笔记_第3张图片

在测试阶段,需要将预测的每个Bounding Box的confidence值和其所在网格的C个类别概率值进行相乘来确定当前网格是哪个类别的物体,公式如下所示:

当然在预测阶段我们会首先通过confidence阈值去判断当前预测的bounding box是否存在物体,如果存在物体在通过上式进行类别概率计算。

四.网络结构

网络结构如下图所示:

YOLOv1论文阅读笔记_第4张图片

可以看到,网络最终输出的形状为7 * 7 * 30,其中7 * 7代表原图分割的7 * 7个网格,30就是之前所说的每个网格所预测的30个值。在网络中使用了1 * 1的卷积去减少feature map的通道数从而降低计算量,需要注意的是,网络的卷积层是在ImageNet上预训练的,但是网络的输入将图片扩大到448,这是因为目标检测往往需要更细粒度的特征,因此将图片扩大至448 * 448。

五.损失函数

损失函数采用误差平方和损失函数,但我们知道,输出的30维向量中有定位信息以及分类信息,那么开头时也说了用回归的方式及解决定位问题也同时解决分类问题,那么就有一个权重因素需要考虑,这个误差平方和中定位的误差平方和和分类数据的误差平方和采用相同的权重是不妥的。尤其是每张图片中大量的网格中是没有物体的,那么那些没有物体的网格所预测的那些Bounding box的confidence都趋近于0,使得这些没有物体的网格的梯度会超过那些包含物体的网格的梯度,从而造成模型的不稳定。个人理解实际就是类别不均衡所带来的问题,就是模型将会过分关注没有物体的网格。因此这里文中给出了两个权重值,lamda_coord=5,lamda_noobj=0.5,其中第一个从字面可以看出是定位损失的权重,第二个为没有物体的confidence损失的权重。整个损失函数如下所示:

YOLOv1论文阅读笔记_第5张图片

可以看到,在bounding box的宽和高部分采用了根号,这是想让模型对于大物体的小偏差不那么重视,应当更重视小物体的偏差。当第i个网格的第j个bounding box中存在物体时l_{ij}^{obj}=1,否则l_{ij}^{obj}=0。相反的,当第i个网格的第j个bounding box中不存在物体时l_{ij}^{noobj}=1,否则l_{ij}^{noobj}=0。如果第i个网格有物体则l_{i}^{obj}=1,否则l_{i}^{obj}=0,这里只针对网格是因为在计算类别损失时,每个网格只能检测一类物体。

六.模型效果

你可能感兴趣的:(算法)