YOLOV1论文解读
摘要:
将对象检测框架为一个回归问题,回归到空间分隔的边界框和相关的类概率。在一次评估中,单个神经网络直接从完整的图像中预测边界框和类概率。由于整个检测流程是一个单一的网络,可以直接对检测性能进行端到端优化。
- YOLO模型以每秒45帧的速度实时处理图像。
介绍:
一个卷积网络同时预测多个bounding box和这些bounding box的类概率。
优点
1、YOLO非常快。
由于将检测问题作为回归问题进行预测,因此不需要复杂的流程。
2、,YOLO在做出预测时,会从全局对这幅图像进行推理。
与滑动窗口和基于区域提取的技术不同,YOLO在训练和测试期间可以看到整个图像,因此它隐式地编码关于类及其外观的上下文信息。
3、YOLO学习目标的可概括表示。
YOLO在准确度方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,尤其是小对象。
统一检测
将目标检测的各个部分统一到一个神经网络中。网络使用整个图像的特征来预测每个边界框(bouding box)。它还可以同时预测一个图像在所有类中的所有边界框(bouding box)。
系统将输入图像划分为S×S网格(grid)。如果一个物体的中心落在一个网格单元(grid cell)中,该网格单元(grid cell)负责检测该物体。
每个网格单元格(grid cell)预测B个边界框(bounding box)和这些框的置信度得分。这些置信度评分反映了模型对框中包含目标的置信度,以及它认为框中所预测的内容有多准确。在形式上,我们定义置信度为
就是单个框的置信度,后面有用。
如果该单元格(cell)中不存在对象,则置信度得分应为零。否则,我们希望置信度得分等于预测框与真实值之间的联合(IOU)的交集。
每个边界框(bouding box)包含5个预测:x、y、w、h和置信度。(x, y)坐标表示框的中心相对于网格单元格(grid cell)的边界的坐标。宽度和高度是相对于整个图像预测的。最后,置信度预测表示预测框与任何真值框之间的IOU。
每个网格单元(grid cell)还预测C条件类概率Pr ( Classi | 对象 )。这些概率取决于包含目标的网格单元(grid cell)。我们只预测每个网格单元格(grid cell)的一组类概率,而不考虑框B的数量。
在测试时,将条件类概率和单个框的置信度预测相乘。
这给了我们每个框(box)的特定类别的置信度分数。这些分数既编码了类出现在框(box)中的概率,也编码了预测框与对象的匹配程度。
图解:
首先是模型检测作为回归问题来研究。它将图片分成S × S个网格,每个网格预测B个Bounding box、这些框(box)的置信度、C个可能类别。这些预测被编码成一个S × S × (B * 5 + C)维张量。
用S = 7, B = 2来评价YOLO在PASCAL VOC成果。PASCAL VOC有20个标签类,所以C = 20。我们最后的预测是一个7 × 7 × 30维张量。
网络设计
网络的初始卷积层从图像中提取特征,而完全连接层预测输出概率和坐标。
其网络架构受到GoogLeNet图像分类模型的启发。
网络有24的卷积层 + 2个完全连接层
其网络没有使用GoogLeNet使用的inception模块,而是简单地使用了1 × 1 reduction layers 紧跟着3 × 3的卷积层中。
整个网络图:
图解:
检测网络由24个卷积层和2个全连接层组成,交替的1 × 1的卷积层减少了前一层的特征空间。在ImageNet分类任务中以一半的分辨率
(224 × 224输入图像)对卷积层进行预训练,然后将分辨率提高一倍进行检测。
网络的最终输出是预测的7 × 7 × 30维张量。
训练
在ImageNet 1000类竞争数据集上对卷积层进行了预训练。在训练前,使用上图中的前20个卷积层,然后是平均池化层和完全连接层。
然后我们将模型转换为执行检测。Ren等人的研究表明,在预训练网络中同时添加卷积层和连接层可以提高性能。按照他们的示例,我们添加了四个卷积层和两个完全连接的层,它们的权值都是随机初始化的。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224提高到448×448。
最后一层预测类概率和边界框坐标。我们通过图像的宽度和高度对边界框(bounding box)的宽度和高度进行归一化,使它们位于0和1之间。我们将边界框(bouding box)x和y坐标参数化为特定网格单元位置的偏移量,因此它们的边界也在0和1之间。
我们对最后一层使用线性激活函数,所有其他层都使用下面的leaky调整线性激活
我们对模型输出的平方和误差进行了优化。我们使用平方和误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相等,这不理想。而且,在每个图像中,许多网格单元格(grid cell)不包含任何对象。这将把这些单元格(cell)的置信度推向零,通常会压倒包含目标的单元格的梯度。这可能导致模型不稳定,导致早期训练出现分歧。
为了解决这个问题,增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。使用两个参数,λcoord 和λnoobj实现。设置λcoord = 5和λnoobj = 5。
平方和误差也可以在大框和小框中同样加权误差。我们的误差度量应该反映出大框里的小偏差比小框里的小偏差更重要。为了部分解决这个问题,我们预测边界框(bounding box)的宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测每个网格单元格(grid cell)有多个边界框(bounding box)。在训练时,我们只希望一个边界框预测器负责每个对象。我们指定一个预测器“负责”根据哪个预测与真实值之间具有当前最高的IOU来预测目标。这将导致边界框预测之间的专门化。每个预测器都能更好地预测特定的大小、纵横比或目标的类别,从而提高整体回忆能力。
优化的损失函数:
liobj 表示是否目标在单元格(cell)i 中。
lijobj 表示在单元格(cell) i 的第 j 个边界框(bounding box)预测器负责该预测。
注意,如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。
训练时:
batch size = 64
momentum = 0.9
decay = 0.0005
leaning rate:第一个迭代周期:10-3提高到10-2,继续以10-2训练了75个迭代周期,然后用10-3 训练30个迭代周期,最后用10-4训练30个周期。
为了避免过拟合,使用了dropout和广泛的数据增强。在第一个连接层之后,速率为0.5的dropout层阻止层之间的相互适应。为了增加数据,我们引入了随机缩放和高达原始图像大小20%的平移。我们还在HSV色彩空间中使用高达1.5倍的因子随机调整曝光和图像的饱和度。
推论
一些大的目标或靠近多个网格单元边界的目标可以被多个网格单元很好地定位。非极大值抑制可以用来修正这些多重检测。
YOLO的局限性
YOLO对边界框预测施加了很强的空间限制,因为每个网格单元(grid cell)只能预测两个框(box),并且只能有一个类,这样就约束限制了模型预测临近对象的数量,也就是说,密集的小物体效果会很差。
由于此模型学习从数据中预测边界框,因此它很难泛化到新的、不常见的方向比或配置的目标。该模型也使用相对较粗糙的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。
最后,当我们训练一个近似检测性能的损失函数时,我们的损失函数会同样的对待小边界框与大边界框的误差。大边界框的小误差通常是好的,但小边界框的小误差对IOU的影响要大得多。主要错误来源是不正确的定位。
与其他检测系统比较
可变形的部件模型Deformable parts models(DPM)使用滑动窗口方法来检测目标。DPM使用一个不相交的流程来提取静态特征、对区域进行分类、预测高得分区域的边界框等。我们的系统用一个卷积神经网络替换了所有这些不同的部分。该网络同时进行特征提取、边界框预测、非最大抑制和上下文推理。网络不再使用静态特性,而是在线训练这些特性,并针对检测任务对它们进行优化。我们的统一架构比DPM更快、更精确。
R-CNN. R-CNN及其变体使用区域建议而不是滑动窗口来查找图像中的对象。选择性搜索生成潜在的边界框,卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂流程的每个阶段都必须独立地精确地进行调优,因此生成的系统非常慢,在测试时每张图像要花费40多秒的时间。
YOLO和R-CNN有一些相似之处。每个网格单元提出潜在的边界框,并使用卷积特性对这些框进行评分。然而,我们的系统对网格单元的建议设置了空间限制,这有助于减少对同一对象的多次检测。我们的系统也提出了更少的边界框,每张图像只有98个,而选择性搜索则只有2000个左右。最后,我们的系统将这些单独的组件组合成一个单独的、联合优化的模型。
其他快的检测器,Fast and Faster R-CNN 通过共享计算和使用神经网络替代选择性搜索来提出区域加速R-CNN框架,虽然它们提供了比R-CNN更快的速度和更高的准确度,但两者仍然不能达到实时性能。
许多研究工作集中在加快DPM流程上。它们加速HOG计算,使用级联,并将计算推动到GPU上。但是,实际上只有30Hz的DPM 可以实时运行。
YOLO不是试图优化大型检测流程的单个组件,而是完全抛弃流程,被设计为快速检测。
像人脸或行人等单类别的检测器可以高度优化,因为他们必须处理更少的变化。YOLO是一种通用的检测器,可以学习同时检测多个目标。
Deep MultiBox与R-CNN不同,Szegedy等人训练卷积神经网络来预测感兴趣的区域,而不是使用选择性搜索。MultiBox还可以用一个类预测代替置信度预测来进行单目标检测。但是,MultiBox无法执行通用的目标检测,只是一个较大的检测流程中的一小部分,需要进一步的图像patch块分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat Sermanet等人训练卷积神经网络进行定位,并采用该定位器进行检测。OverFeat能够有效地进行滑动窗口检测,但仍然是一个不相交的系统。OverFeat优化定位,而不是检测性能。与DPM一样,本地化器在进行预测时只看到本地信息。OverFeat不能推断全局上下文,因此需要大量的后处理来产生一致的检测。
MultiGrasp 我们的工作在设计上类似于Redmon等人的抓取检测。我们对边界框预测的网格方法是基于MultiGrasp系统抓取的回归分析。然而,抓取检测比目标检测任务要简单得多。MultiGrasp只需要为包含一个目标的图像预测一个可以抓取的区域。不必估计目标的大小,位置或目标边界或预测目标的类别,只找到适合抓取的区域。YOLO预测图像中多个类别的多个目标的边界框和类别概率。
实验:
图解: PASCAL VOC 2007上的实时系统。比较了快速检测器的性能和速度。Fast YOLO是PASCAL VOC检测史上最快的检测器,其准确度是其他实时检测器的两倍。YOLO是10 mAP比快速版本更准确,但仍然远远高于实时速度。
VOC 2007误差分析
在测试时,对于每个类别,我们查看该类别的前N个预测。每个预测要么是正确的,要么是根据错误类型进行分类的。
图显示了在所有的20个类别上每种错误类型平均值的分解图。
图解: 误差分析,Fast R-CNN vs**.** YOLO 这些图显示了各种类别的前N个预测中定位错误和背景错误的百分比(N = #表示目标在那个类别中)。
YOLO比Fast R-CNN的背景误检要少得多。通过使用YOLO消除Fast R-CNN的背景检测,我们获得了显著的性能提升。对于R-CNN预测的每个边界框,我们检查YOLO是否预测一个类似的框。如果是这样,我们根据YOLO预测的