YOLO系列目标检测算法-YOLOv2

YOLO系列目标检测算法目录 - 文章链接


本文总结:

  1. 相比于其他目标检测算法,YOLO有定位错误多、召回率低等缺点,所以YOLOv2专注于提高召回率和定位准确率;
  2. 使用多种先进的技术方法应用到YOLO中,分析对比性能表现,这些方法包括加入BN、使用更高的分辨率、全卷积网络、加入anchor机制、新的网络结构、k-means聚类、直接预测检测结果、使用更具细粒度的特征图、多尺度训练等;
  3. 通过实验对比结果,最终选用BN、使用高分辨率、全卷积、新的网络结构、通过聚类选择anchor、直接预测检测结果、使用更具细粒度的特征图、多尺度训练这些改进;
  4. 为了保持YOLO“快”的特点,没有扩大网络,而是简化了网络,然后使得网络更容易学习,提出了新的分类网络Darknet-19;
  5. 由于检测数据集较少,分类数据集丰富,所以提出了一种联合训练分类和检测数据的方法。在训练期间,混合了检测和分类数据集的图像。当网络看到标记为要检测的图像时,可以基于完整的YOLOv2损失函数反向传播。当它看到分类图像时,只会反向传播架构中分类特定部分的损失;
  6. 使用此方法,训练得到YOLO9000,可以在缺乏检测标注数据的情况下,也能够精准定位目标,可以实时的运行并检测9000多种目标类别。

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。



**YOLO系列目标检测算法-YOLOv2**

  2016.12.25 《YOLO9000: Better, Faster, Stronger》

1. 简介

  本文不仅仅介绍了 YOLOv2 ,还提出 YOLO9000 ,一种实时的目标检测系统,可以检测 9000 多个目标类别。

  与用于分类等其他任务的数据集相比,目标检测的数据集是有限的。而且标记用于检测的图像要比标记用于分类的图像成本要多得多。所以本文提出了一种新的方法来利用已经拥有的大量分类数据,并将其用于扩展当前检测系统的范围。本文的方法使用 目标分类的层次视图它允许将不同的数据集组合在一起。

  还提出了一种 联合训练算法它允许在检测和分类数据上训练目标检测器。该方法利用标注过的检测图像来学习精确定位所有标注和未标注的目标,同时使用分类图像来增加其词汇量和鲁棒性。

  首先,使用一些新颖的技术方法改进了基本的YOLO检测系统,得到YOLOv2,并使用一种 多尺度训练方法 ,使得同一个YOLOv2模型可以以不同的尺寸运行,在速度和准确性之间有一个很好的折衷。然后,使用提出的数据集组合方法和联合训练算法,训练得到YOLO9000,使得YOLO9000在没有目标标注数据的情况下也能够精准预测目标,可以实时的运行并检测9000多种目标类别。

2. 提升

  与最先进的检测系统相比,YOLO存在多种缺点。与Fast R-CNN相比,YOLO产生了大量的 定位错误。此外,与基于区域提案的方法相比, YOLO的召回率相对较低。因此,本文主要关注提高召回率和定位准确率,同时保持分类准确性。

  神经网络算法通常趋向于更大、更深的网络,更好的性能通常取决于训练更大的网络或将多个模型集成在一起。然而,使用YOLOv2,需要一个更精确、依然很 的检测器,所以改进中没有扩大网络,而是简化了网络,然后使得网络更容易学习。本文汇集了以往的多种想法和最新的技术,以提高YOLO的性能,各种技术汇总至表2中。

  • Batch Normalization
    批量归一化可以显著改善收敛性,同时消除对其他形式的正则化的需要。通过在YOLO中的所有卷积层上添加批量归一化,可以使mAP提高2%以上。BN也有助于归一化模型,通过BN,可以在不过度拟合的情况下去除模型中的dropout。
  • High Resolution Classifier
    所有先进的检测方法一般都在ImageNet数据集上预先训练的分类器。在AlexNet之前,大多数分类器使用小于256×256的输入图像,原始YOLO的分类器网络训练使用图片为224×224,训练检测部分时,将分辨率提高到448。这意味着网络必须同时切换到学习目标检测并调整适应新的输入分辨率。

  对于YOLOv2,首先在ImageNet上对分类网络进行10个epoch的微调,使其达到448×448的全分辨率。这使网络有时间调整卷积核权重,以更好地处理更高分辨率的输入。然后,对检测结果的网络进行微调。这种高分辨率分类网络使得mAP增加了近4%

  • Convolutional With Anchor Boxes
    YOLO使用卷积特征提取器顶部的全连接层直接预测边界框的坐标。而不是像R-CNN中使用手工设计的先验框来快速预测坐标。Faster R-CNN中的区域提案网络(RPN)仅使用卷积层预测anchor的偏移量和置信度。由于预测层是卷积的,因此RPN可以在特征图的每个位置预测这些偏移。预测偏移而不是坐标简化了问题,使网络更容易学习。

  本文从YOLO中移除全连接层,并使用anchor预测边界框。首先,去除了一个池化层,以使卷积层的输出具有更高的分辨率,还将网络缩小到416x416而不是448×448。这样做是目的是希望在特征图中有奇数个位置,所以只会有一个中心ceil。目标,特别是大型目标,往往占据图像的中心,因此最好在中心有一个位置来预测这些目标,而不是四个顶点附近的位置。YOLO的卷积层将图像的采样率降低了32倍,因此,通过使用416的输入图像,可以得到13×13的输出特征图。

  当转向anchor框时,还将类预测机制与空间位置解耦,取而代之的是预测每个anchor的class和objectness,objectness预测仍然指的是GT和候选框的IOU,并且class预测指的是给定目标的class的条件概率。

  使用anchor框,YOLO的精度会略有下降。不使用anchor,YOLO每张图片仅预测98个框;但使用anchor,预测框超过1000个。如果没有anchor,模型得到69.5的mAP,召回率为81%。使用anchor,模型得到69.2 mAP,召回率为88%。尽管mAP降低了,但召回率的增加意味着模型还有更多的可改进空间。

  • Dimension Clusters
    在YOLO中使用anchor时,遇到了两个问题。首先,box尺寸是手工设置的。网络可以学习适当调整box, 但如果能为网络选择更好的先验框,可以使网络更容易学习预测更好的检测结果。

  本文中没有选择手动设置先验值,而是在训练集边界框上运行 k-means聚类,自动的寻找合适的先验框。若果使用欧氏距离的标准k-means,较大的框比较小的框产生更多的错误。然而,我们真正想要的是能够获得良好依据分数的先验框,这与box的大小无关。因此,对于距离度量,本文使用:
在这里插入图片描述

  本文使用多种k值运行k-means,并绘制最接近质心的平均IOU,结果见图2。
在这里插入图片描述

  最终选择 k=5作为模型复杂性和高召回率之间的一个很好的折衷。簇质心与手工设置的anchor有显著不同。短而宽的box更少,而高而薄的box更多。

  将平均IoU与我们聚类策略相近的先验值以及手工挑选的anchor进行了比较,结果如表1。
在这里插入图片描述
  使用聚类得到的5个anchor框,结果是61.0%,与手工挑选的9个anchor框的60.9%结果差不多。如果使用聚类得到的9个anchor框,会得到更好从效果67.2%。这表明使用k-means生成anchor框可以以更好的表示形式运行模型,并使模型更容易学习。

  • Direct location prediction
    当在YOLO中使用anchor时,会遇到第二个问题: 模型不稳定特别是在早期迭代期间。大多数不稳定性来自于预测box的(x,y)坐标。 在RPN网络中,网络预测值t_x和t_ y以及(x,y)中心坐标计算如下:
    在这里插入图片描述
    例如,预测结果tx=1时预测框会根据anchor的宽度将框向右移动,tx=-1时会将其向左移动相同的量。

  此公式不受约束,因此任何anchor都可以在图像中的任何点结束,而不管预测框的位置是什么。通过随机初始化,该模型需要很长时间才能稳定下来预测合理的偏移量。

  本文没有采用预测偏移量,而是采用YOLO方法, 预测相对于网格单元位置的位置坐标。这将GT限制在0到1之间。使用sigmoid将网络的预测值限制在这个范围内。

  网络预测输出要素图中每个单元处有5个边界框。网络为每个边界框预测tx、ty、tw、th和to共5个坐标。假定单元格与图像左上角的偏移量为(cx,cy),并且anchor的宽度和高度为pw、ph,则预测结果对应于:
在这里插入图片描述

  • Fine-Grained Feature
    这种改进的YOLO可以在13×13特征图上进行预测。虽然这对于大型目标来说已经足够了,但对于定位较小的目标来说,它可能会受益于 更细粒度的特征。Faster R-CNN和SSD都在网络中的多个特征图上运行候选网络,以使用多种分辨率。本文采用了一种不同的方法,只需添加一个passthrough层,该层以26×26的分辨率从先前的层中提取特征。

  passthrough层通过将相邻特征叠加到不同的通道中( concat)而不是同一位置相加,将高分辨率特征与低分辨率特征连接起来,这与ResNet中的 identity映射类似。这将26×26×512特征图转换为13×13×2048特征图,该特征图可以与原始特征串联。检测器在这个扩展的特征映射之上使用,因此它可以访问更具细粒度的特征。这使性能略微提高了1%。

  • Multi-Scale Training
    最初的YOLO使用448×448的输入分辨率。通过添加anchor后,将分辨率更改为416×416。然而,由于新提出的模型仅使用卷积层和池化层,因此 可以动态调整其大小。希望YOLOv2能够在不同大小的图像上运行,所以将 训练多种尺度的图片到模型中。

  训练多种尺度的图片,不是固定输入图像的大小,而是每隔几次迭代就改变网络。网络每10个batches随机选择一个新的图像尺寸大小。由于模型下采样最后减少了32倍,所以从以下32倍的图片尺寸中提取:{320,352,…, 608}。因此,最小选项为320×320,最大选项为608×608。将网络调整到该图片尺寸下并继续训练。

  这一制度迫使网络学会在各种输入尺寸上进行良好预测。这意味着同一个网络可以以不同的分辨率预测检测。网络在较小的规模下运行速度更快,因此YOLOv2在速度和准确性之间提供了一个简单的折衷方案。

  在低分辨率下,YOLOv2是一种廉价、相当精确的探测器。它以288×288的速度以90多FPS的速度运行,mAP几乎与Fast R-CNN一样好。这使得它非常适合较小的GPU、高帧速率视频或多个视频流。

  高分辨率YOLOv2也是一款先进的检测器,在VOC 2007上具有78.6 mAP,同时仍以高于实时速度运行。在VOC2007上其他框架的YOLOv2比较见表3和图4。
在这里插入图片描述
在这里插入图片描述

3. Faster

  在提高准确率的同时希望保持快速的特点,大多数检测应用程序,如机器人或自动驾驶汽车,都依赖于低延迟预测。为了最大限度地提高性能,将YOLOv2设计为从头开始就很快。

  • Darknet-19
    新提出了一个分类模型,用作YOLOv2的基础网络,与VGG模型类似,主要使用3×3卷积核,并且在每个池化步骤后通道数增加一倍。继Network in Network(NIN)研究之后,YOLOv2使用全局平均池化进行预测,并使用1×1卷积核压缩3×3卷积之间的特征图。使用BN来稳定训练,加快收敛速度,并正则化模型。命名为Darknet-19,有19个卷积层和5个最大池化层。完整描述参见Table6。Darknet-19只需要55.8亿次操作即可处理图像,在ImageNet上达到72.9%的top-1精度和91.2%的top-5精度。
    在这里插入图片描述

  • Training for classification
    使用Darknet框架,在ImageNet-1000数据集上,使用随机梯度下降(起始学习速率为0.1)、多项式速率衰减(4次方)、权重衰减(0.0005)和动量为0:9)对网络进行160个epochs的训练。在训练期间,使用标准的数据增强技巧,包括随机裁剪、旋转、色调、饱和度和曝光偏移等。

  如上所述,在对224×224的图像进行初步训练后,将网络调整为更大的448。对于这种微调,继续使用上述参数进行训练,但只训练10个epochs,学习率为10e−3.在这种更高的分辨率下,网络达到了76.5%的top-1精度和93.3%的top-5精度。

  • Training for detection
    通过删除最后一个卷积层来修改该网络以进行检测,而不是添加三个3×3卷积层,每个层有1024个滤波器,然后是最后一个1×1卷积层以及检测所需的输出数量。对于COCO,模型预测5个框,每个框有5个坐标,每个框共80个类,因此共 5*(5+80)=425个过滤器。还从最后的3 × 3 × 512(即第16层)层添加了一个直通层到倒数第二个卷积层,以便模型可以使用更细颗粒特征。
    在这里插入图片描述
    在这里插入图片描述
    对网络进行了160个epochs的训练,起始学习率为10e−3,分别在60和90epoch时除以10们使用的权重衰减为0.0005,动量为0.9。使用与YOLO和SSD相似的数据增强,包括随机裁剪、颜色变换等。对不同数据集COCO和VOC使用相同的训练策略。

4. Stronger

  本文提出了一种 联合训练分类和检测数据的方法。该方法使用标记为检测的图像来学习检测特定信息,如边界框坐标预测和框分数,以及如何对常见目标进行分类。然后使用只有类别标签的图像来扩展它,就可以扩展检测到的类别数量。

  在训练期间,混合了检测和分类数据集的图像。当网络看到标记为要检测的图像时,可以基于完整的YOLOv2损失函数反向传播。当它看到分类图像时,只会反向传播架构中分类特定部分的损失。

5. 结论

  本文介绍了YOLOv2和YOLO9000实时目标检测系统。YOLOv2在各种检测数据集上比其他检测算法更快。此外,它可以在各种图像大小下运行,以在速度和准确性之间提供最佳的折衷。
  YOLO9000通过联合优化检测和分类训练方法,来检测9000多个目标类别。使用WordTree组合来自不同来源的数据,并使用本文的联合优化技术在ImageNet和COCO上同时进行训练。YOLO9000在缩小检测和分类数据集差距方面迈出了有力的一步。
  本文ImageNet的WordTree表达方法为图像分类提供了更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域中很有用。多尺度训练等训练技术可以为各种视觉任务提供益处。
  对于未来的工作,希望使用类似的技术进行弱监督图像分割。还计划使用更强大的匹配策略来改进检测结果,以便在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据。将继续寻找将不同数据源和结构结合在一起的方法,以构建更强大的视觉世界模型。

猜你喜欢

转载自blog.csdn.net/qq_39707285/article/details/127072675