Advertisement

论文学习:《You Only Look Once: Unified,Real-Time Object Detection》

阅读量:

1. YOLO算法核心思想与主要贡献

在之前的文章中,在图像目标检测领域中传统上采用的方法是利用滑动窗口技术来探测图像中的潜在目标区域(即候选框),然后对每个候选框进行分类处理以完成识别工作。尽管这种方法能够保证较高的识别精度但它计算效率较低

基于回归模型的任务设计是YOLO算法的核心思想。该算法将目标检测问题转化为回归模型的问题。具体而言,在输入一张待处理的图像时,在图像上划分网格单元(grid)。随后完成一次完整的扫描过程,在每个网格单元(grid cell)生成多个候选框(bounding boxes)。最后通过回归计算各候选框(bounding boxes)的尺寸与实际目标的位置坐标。

这篇文章主要提出的创新之处在于:

目标检测过程被归类为回归任务类别。该系统基于图像的像素层至边界坐标的详细信息以及各类别的概率值进行处理。

该系统实现了从头到尾的整体架构设计,在接收一张输入图片后通过神经网络模型对图像进行分析后直接生成检测边界,并在网络训练过程中设定多样化的损失函数以及明确的输出格式要求。

2. 论文框架

2.1 第一节 问题和方案的提出

在论文的第一节中以R-CNN为例,并指出当时的目标检测领域存在一个关键挑战:由于图像中的每个独立待检测区域均需单独进行训练而导致整个过程运行速度较慢,并且难以实现有效的优化。随后在此基础上提出了将目标检测任务转化为一个统一的回归问题的方法,并直接导出了本研究提出了一种高效的物体检测算法——YOLO(You Only Look Once),并详细阐述了其主要优势。

论文介绍了YOLO算法的特点在于:

1. 非常快;

2. 预测是基于整张图片的;

3. YOLO学习的特征具有高度抽象性,在应用到常规图像及艺术图像任务时会表现出更强的适用性

此外, 该算法在准确率方面也存在明显局限性(尤其是位置检测精度较低), 尤其是在处理小型目标时表现欠佳.

2.2 第二节 算法思想和网络框架

注:三级子标题是便于我自己理解的思路,不是文章的分章结构

2.2.1 算法思想

该网络接收的输入为一张分辨率设定为448×448像素的RGB图像;输出结果包括带有边界框标注和分类标签的图像;其中输出层结构设计为S×S个网格单元,并且每个单元格可同时识别B个边界框以及C类目标;其中输出层维度计算公式为:每个网格单元包含B个边界框信息(由坐标(x,y)、宽高比(w,h)以及置信度值组成)以及一个独热编码形式的目标类别信息;因此整个输出层总维度数计算公式则表示为:(S×S) × (5B + C),其中5代表每个边界框所需的关键属性数目(x,y,w,h及置信度),C则代表目标类别数量;

算法大致流程为:

系统将输入图像划分为S×S大小的网格单元;当某个目标的中心位于该网格时,则该网格将负责检测该目标。

每个单元格生成B个边界框及其对应的置信度分数。这些分数不仅反映了模型对包含目标的那个框的信心程度,同时也衡量了模型预测各个边界框位置准确性。当单元格中没有目标时,置信度设为0,即Pr(Object) = 0

每个边界框由5个预估值组成:(x, y)坐标表示网格边界框的中心位置;高度h和宽度w则是相对于整个图像的比例;最后其置信度预估了预测边界框与实际目标区域之间的重叠程度(即交并比IOU)。

每一个单元格的预测还会估计与该类相关的概率Pr(Classi|Object)。这些概率仅取决于包含目标的那一单元,并不涉及对其他单元的概率预测。采用这种策略的好处在于:通过综合2、3和4所得到的一组参数能够全面反映两个方面的情况——即目标所属类别的同时性及其与框的位置匹配程度

5. 利用这些概率构建损失函数,进行训练损失函数。损失函数形式如下:

关于这种形式的损失函数设计,论文在2.2章节进行了描述。

在损失函数方面,YOLO采用平方误差的形式作为其核心机制。论文指出这种设计易于优化的原因在于其简便性。然而,在每个图像中,许多网格单元并未包含任何目标物体。这些未包含目标的单元格通常会被赋予接近于零的置信度分数,并且这一设定会压倒包含目标单元格所具有的显著梯度值。这种做法可能导致模型出现不稳定现象,在训练初期可能导致发散问题。此外,在处理大小不同的边界框时给予相同的权重也是平方误差的一个特点。而我们的期望是较大的边界框与较小框之间的误差差异更显著地被模型捕捉到。

论文的解决方案是对损失函数进行了一些改进:

1. 通过提高边界框定位损失并降低无目标区域置信度预测误差项的效果显著提升模型性能。对于包含目标的对象而言,在计算总的目标检测损失时会将其置信度乘以5倍;而对于无目标区域,则仅计算其置信度乘以0.5倍。

2. 用预测边界框的宽和高的平方根,代替直接预测边界的宽和高

本文深入分析了损失函数的相关内容,并对其核心概念进行了详细的阐述;该博文以其清晰明了的语言和丰富的内容详尽地探讨了这一主题。

直接引用一下这位作者的讲解:

è¿éåå¾çæè¿°

这个损失函数中:

  • 仅在特定grid cell中存在object时才对classification error进行惩罚。
  • 仅当该box predictor负责某特定ground truth box时才会对box的coordinate error进行惩罚;此时决定对该ground truth box负责的是其预测值与该ground truth box之间IoU值是否为所在cell内所有box的最大值。

在解决这一问题的过程中,在论文中描述的方法是为了避免出现特征间的过度协同适应(这里可能需要进一步解释)的情况。具体而言,在论文中描述的方法是通过引入Dropout和数据增强技术来实现这一目标。具体来说,在建立第一层卷积层后应用概率为0.5的Dropout方法作为防止网络过度适应训练数据的技术措施。此外,在数据增强方面采用了随机缩放比例达到20%的技术,并在HSV色彩空间中随机调整图像的曝光和饱和度,并将对比度调节至最高可达1:5的比例。

2.2.2 网络架构

该检测网络包括24个卷积层以及两个全连接层。在各相邻的卷积层之间交替插入了1×1尺寸的卷积核以减少前一层的空间维度。其中,在ImageNet分类任务中输入图像像素大小为(224×224),而在目标检测任务中则采用(448×448)的像素尺寸。值得注意的是,在经过全部(即第)25个卷积后采用了平均池化操作作为最终池化手段;而所有其他中间各层层均采用了带有泄漏率ReLU(Leaky ReLU)的激活函数。据称该研究者表示完成整个网络训练过程所需时间长达一周;此外论文进一步提出了一种加速YOLO算法的具体框架方案仅使用了9个卷积核以及相应数量滤波器数量减少了相应的计算量但并未改变其基本架构。

在其中,卷积神经网络的作用是对输入的图像进行特征提取。而全连接层则用于预测输出的概率值以及目标坐标的确定。

YOLOv1中所列举的例子其输出空间尺寸为7\times7单元格,在每个单元格中计算得到的结果包括(5\times2+20)项。即该算法将输入图像划分为一个包含多个区域的网格结构,在此基础上进行目标检测与分类。其中每个网格单元能够识别并定位两个目标边界框,并对这些目标进行种类归类统计。整体分类数目共计C

2.2.3 YOLO的不足之处

每个grid仅能预判两个bounding box,并且仅限于处理单一类别(值得注意的是,在YOLOv2v3版本中对此进行了优化)。此方法主要适用于较小的目标,并尤其难以检测像鸟群这样多个小目标的情况

2. 算法难以推广至不同尺寸、比例及结构的对象。其边界框在特征提取方面较为粗略;由于我们的模型架构在输入图像经历多级下采样处理(后续改进采用图像压缩比值解决此问题)。

在训练一个能够接近检测系统性能水平的损失函数时,在小尺寸边界框与大尺寸边界框之间出现相同的误差情况。然而,在较大尺寸框架中的轻微错误不会带来负面影响;相反,在较小尺寸框架中的微小误差会对IoU产生显著影响。因此,算法整体上的主要误差源于定位精度不足。

2.3 与其他算法的对比

第三章及第四章的主要内容是对现有算法及YOLO系统性能特点的系统性比较分析。其中YOLO系列算法凭借其卓越的快速检测能力脱颖而出,在实际应用中其平均帧率可达45FPS,在加速版本中则可突破155FPS的限制瓶颈。该算法体系在平均精度(mAP)方面表现稳定,在测试集上达到了63.4%的优异水平与同类主流算法faster R-CNN具有可比性

3. 个人感想

如此高效的算法或许能够被应用于那些对实时性能有严格要求的任务领域中,在文章中提到了该算法基于其核心特征具备高度概括能力,在其他应用场景中的应用效果可能会较好

算法将特征提取与目标识别分别置于不同的网络层次(卷积层与全连接层)之中,则通过迁移学习的方法得以更好地将其应用于多种任务上。因每次训练均需一周时间,在此情形下许多人都难以承受。

全部评论 (0)

还没有任何评论哟~