YOLO由24层ConvNet和2层FCs组成。其核心思想是将图片均匀划分为多个grid cell,每个grid cell产生两个bbox和grid cell中如果存在对象,对象是各类的概率,每个bbox由5个参数组成,xywh和confidence,confidence是bbox中存在对象的概率,将两概率相乘即可表示grid cell存在某类对象的概率。

YOLO的损失函数是全文重点。通过损失函数,使得模型更关注包含对象的bbox。

但也因为网络本身的设置,使得YOLO无法对多个相邻小物体进行识别,并且对定位和大小物体偏差的错误也没能通过微调损失函数解决。

目录

Introduction

Unified Detection

Network Design

Limitations of YOLO


Introduction

目前大多数检测系统是将图像分类任务转换为图像检测任务。YOLO将目标检测问题转换为回归问题。使用一个网络从完整图片中预测bounding boxes和class probabilities。因为整个检测流程是一个单一网络,所以它能够被端到端的优化。相较于最有目标检测算法,yolo存在更多的定位错误

 

Unified Detection

将输入图片分割为S x S网格。如果一个目标的中心在某个网格中,这个网格就负责检测这个目标。每个网格预测B个bounding boxes和对应的confidence scores。Confidence scores反应了模型对box包含目标的confident以及预测目标的accurate。定义confidence:

【目标检测】YOLO v1 one-stage

       如果没有目标存在,则confidence scores应该为0。另外,我们希望confidence scores等于predicted box和ground truth的IoU。每一个bounding box包含5个值:x, y, w, h, confidence。(x, y)表示box中心相对于网格单元的坐标;w, h是相对于整个图片的宽高;因此x, y, w, h的值都在[0, 1]之间。confidence prediction代表predicted box和ground truth box间的IoU。

       每个网格也预测C个类条件概率:

【目标检测】YOLO v1 one-stage

       这个概率是网格包含目标情况下的。每个网格只预测一组类条件概率,与bbox数量B无关。测试时:

【目标检测】YOLO v1 one-stage

这样我们就获得了每个box的class-specific confidence score。

【目标检测】YOLO v1 one-stage

参数设置:对于VOC数据集,S = 7,B = 2,C = 20。

 

Network Design

【目标检测】YOLO v1 one-stage

24卷积层+2全连接层。卷积层从图片中提取特征,全连接层预测概率和坐标。Fast YOLO使用9个卷积层以及更少的卷积核。使用前20层卷积层在ImageNet上训练。之后增加了4层卷积层和2层全连接层,并加大了图片的分辨率,以满足检测对图片细纹理的要求。最后一层使用linear**函数,其余使用leaky rectified linear**函数:

【目标检测】YOLO v1 one-stage

损失函数原型是模型输出的sum-squared error,但存在两个问题:

  1. 它平均的考虑了定位error和分类error,这不太理想。
  2. 许多网格并不包含任何目标,这使得这些网格的confidence scores向着0,导致模型不稳定,出现偏差。

为解决这些问题,我们增加了bounding box坐标预测损失的影响,并且减少不包含目标box的confidence造成的损失。我们使用λcoord和λnobj来调解他们的影响,设置λcoord=5、λnobj = 0.5。

Sum-squared error同时也均衡了大小box的loss。相对于大box中的deviation,小box的deviation更应该被loss function注意。为解决这个,我们将对宽高的预测替换为宽高平方根。

YOLO在每个网格中预测多个bbox,训练时,对每个目标,我们只希望有一个去bbox负责。我们指定bbox的原则是,与ground truth有最高IOU的bbox。这使得每个predictor在对某个目标的size, aspect ratio, class有着更好的表现,改善整体的召回率。训练时,我们最优化一下loss function:

【目标检测】YOLO v1 one-stage

如果一个对象出现在那个网格中,损失函数只惩罚分类错误。如果网格有某个predictor具有最高的IOU,对那个ground-truth box负责,损失函数只惩罚bounding box坐标错误。

 

Limitations of YOLO

  1. 因为每个网格只有两个bbox,只对一个目标负责,YOLO这种对bbox预测的空间限制导致网络无法对过多相邻目标预测。尤其是对鸟群等小目标检测不强。
  2. 因为模型从数据中学习预测bbox,导致他很难拓展到有新的、不寻常aspect ratio和其他参数的目标上。
  3. 错误的主要原因在于错误的定位。Loss function同等对待小bbox和大bbox中的错误,但小bbox的错误会对IOU有更大的影响。