当前位置: 代码迷 >> 综合 >> YOLO-V2论文理解《YOLO9000: Better, Faster, Stronger》
  详细解决方案

YOLO-V2论文理解《YOLO9000: Better, Faster, Stronger》

热度:9   发布时间:2023-12-06 00:46:15.0

YOLO9000&YOLOV2

论文地址:YOLO9000: Better, Faster, Stronger
本文对YOLOV2的结构,训练部分进行详细解读。

YOLOV2相对YOLO的改进

YOLO有许多缺点,造成了大量的定位误差,相对于RPN网络,YOLO的召回率相对较低,YOLOV2主要关注提高召回率和定位,同时保持分类精度。YOLOV2的目标是需要一种更精确、速度更快的检测器,不是扩大网络,而是简化网络,使表示更容易学习。
在这里插入图片描述

  1. Batch Normalization:批量标准化。批处理规范化导致收敛的显著改善,同时消除了对其他形式正则化的需要。通过在YOLO的所有卷积层上增加批处理标准化,我们在mAP上获得了超过2%的改进。批量规范化也有助于规范模型。通过批量标准化,我们可以在不过度拟合的情况下消除模型中的遗漏。
  2. High Resolution Classifier:高分辨率分类器。所有最先进的检测方法都使用在ImageNet上预先训练的分类器。从AlexNet开始,大多数分类器对小于256 × 256的输入图像进行操作。原始YOLO以224 × 224训练分类器网络,并将检测分辨率提高到448。这意味着网络必须同时切换到学习对象检测和调整到新的输入分辨率。对于YOLOv2,我们首先在ImageNet上以448×448的全分辨率对10个时期的分类网络进行微调。这使得网络有时间在更高分辨率的输入上调整其滤波器。然后,我们根据检测结果微调网络。这个高分辨率的分类网络使我们的mAP增加了近4%。
  3. Convolutional With Anchor Boxes:带AnchorBox的卷积码。YOLO直接使用卷积特征提取器顶部的全连接层来预测边界框的坐标。与其直接预测坐标,不如使用手工选择的先验来预测边界框[15]。区域建议网络仅使用卷积层来预测AnchorBox的偏移和置信度。由于预测层是卷积的,因此区域概率神经网络在特征图的每个位置预测这些偏移。预测偏移而不是坐标简化了问题,使网络更容易学习。我们从YOLO移除完全连接的图层,并使用AnchorBox来预测边界框。首先,我们消除一个汇集层,以使网络卷积层的输出具有更高的分辨率。我们还将网络缩小到416个输入图像,而不是448×448。我们这样做是因为我们希望在我们的要素地图中有奇数个位置,这样就有了一个中心单元。物体,尤其是大物体,往往会占据图像的中心,所以最好在中心有一个位置来预测这些物体,而不是四个位置都在附近。YOLO的卷积层对图像进行了32倍的下采样,因此通过使用416的输入图像,我们得到了13 × 13的输出特征图。当我们移动到AnchorBox时,我们也将类预测机制从空间位置中分离出来,取而代之的是预测每个AnchorBox的类和对象。在YOLO之后,对象性预测仍然预测基础事实和建议框的借据,并且类预测预测假设存在对象,则预测该类的条件概率。使用AnchorBox,我们得到的精度略有下降。YOLO预测每张图片只有98个盒子,但是有了AnchorBox,我们的模型预测超过1000个。没有AnchorBox,我们的中间模型得到69.5 mAP,召回率为81%。有了AnchorBox,我们的模型获得了69.2 mAP,召回率为88%。尽管mAP减少了,但召回率的增加意味着我们的模型有更大的改进空间。
  4. Dimension Clusters:维度簇。在YOLO使用AnchorBox时,我们会遇到两个问题。首先是盒子的尺寸是手工挑选的。网络可以学会适当地调整盒子,但是如果我们为网络选择更好的优先级,我们可以使网络更容易学会预测好的检测。我们不是手动选择先验,而是在训练集边界框上运行k均值聚类,以自动找到好的先验框。如果我们使用欧几里德距离的标准k-均值,那么较大的盒子比较小的盒子产生更多的误差。然而,我们真正想要的是导致良好IOU分数的先验,这与盒子的大小无关。因此,对于我们的距离度量,我们使用:d(box,centroid)=1?IOU(box,centroid)d(box,centroid)=1-IOU(box,centroid)d(box,centroid)=1?IOU(box,centroid)我们对不同的k值进行k均值运算,并绘制质心最近的平均IOU,见图2。我们选择k = 5作为模型复杂性和高召回率之间的良好折衷。聚类质心明显不同于手工挑选的AnchorBox。短而宽的盒子越来越少,高而薄的盒子越来越多。
    在这里插入图片描述
    关于上述的距离度量及anchorbox的聚类计算伪代码参考:YOLOv2、v3使用K-means聚类计算anchor boxes的具体方法

在这里插入图片描述

我们将平均IOU与我们的聚类策略和表1中手工选择的AnchorBox的最近先验进行了比较。在仅有5个先验聚类中心的情况表现和使用AnchorBox的情况类似,并且他们的平均IOU是61.0和60.9.如果我们使用9个聚类中心,我们会看到更高的平均IOU。这表明,使用k-means来生成我们的边界框,以更好的表示开始模型,并使任务更容易学习。
在这里插入图片描述

  1. Direct location prediction:直接位置预测。当对YOLO使用AnchorBox时,我们遇到了第二个问题:模型不稳定,尤其是在早期迭代期间。大多数不稳定性来自于预测框的(x,y)(x,y)(xy)位置。在RPN网络中,网络预测值和(x,y)(x,y)(xy)中心坐标计算如下:
    x=(tx?wa)+xax=(t_x*w_a)+x_ax=(tx??wa?)+xa?y=(ty?ha)+yay=(t_y*h_a)+y_ay=(ty??ha?)+ya?
    (xa,ya,wa,ha)(x_a,y_a,w_a,h_a)(xa?,ya?,wa?,ha?)为锚框的信息,(tx,ty)(t_x,t_y)(tx?,ty?)为预测输出
    例如,tx=1t_x=1tx?=1的预测会将框向右移动锚框的宽度waw_awa?tx=?1t_x =-1tx?=?1的预测会将其向左移动相同的量。这个公式是不受约束的,所以任何锚框都可以在图像中的任何点结束,而不管框预测的位置是什么。在随机初始化的情况下,模型需要很长时间来稳定,以预测合理的偏移。我们不是预测偏移,而是遵循YOLO方法,预测相对于网格单元位置的位置坐标。这将ground truth限制在0和1之间。我们使用逻辑激活来限制网络的预测落在这个范围内。

注意:上述RPN网络的预测框计算公式引用自RPN网络的论文,下面是YOLO9000原论文的预测框坐标计算公式出处,明显与RPN网络不符(读论文读到这一头雾水,一度怀疑论文打错,于是去查了RPN网络的论文,即Faster-RCNN论文,才知道作者打错了)
YOLO9000论文公式出处上图为YOLO9000论文公式
RPN论文(Faster-RCNN论文)公式出处上图为Faster-RCNN论文公式

YOLOV2的网络预测输出feature map中每个cell的5个边界框。网络预测每个边界框的5个坐标,tx、ty、tw、tht_x、t_y、t_w、t_htx?ty?tw?th?tot_oto?。如果单元格从图像左上角偏移(cx,cy)(c_x,c_y)(cx?cy?),并且边界框先前具有宽度和高度pw,php_w,p_hpw?ph?,则预测对应于:
bx=σ(tx)+cxb_x=\sigma(t_x)+c_xbx?=σ(tx?)+cx?by=σ(ty)+cyb_y=\sigma(t_y)+c_yby?=σ(ty?)+cy?bw=pwetwb_w=p_we^{t_w}bw?=pw?etw?bh=phethb_h=p_he^{t_h}bh?=ph?eth?Pr(object)?IOU(b,object)=σ(to)Pr(object)*IOU(b,object)=\sigma(t_o)Pr(object)?IOU(b,object)=σ(to?)
由于我们限制了位置预测参数化更容易学习,使网络更加稳定。使用维度聚类以及直接预测边界框中心位置比使用锚框的版本提高了YOLO近5%。

在这里插入图片描述
YOLOV2试图采用AnchorBox,AnchorBox的中心和cell中心一致来计算loss和BoundingBox,YOLO作者发现这种方式预测对模型不稳定,特别是模型早期迭代时预测框位置不稳定。RPN网络采用的方法也是这个。

YOLOV2最终采用聚类生成的5个宽高并且没有中心坐标的的BoundingBox(论文设置了5个聚类中心),称为先验框。
上述公式(cx,cy)(c_x,c_y)(cx?,cy?)表示当前cell相对于图像左上角的坐标,pw,php_w,p_hpw?,ph?表示先验框的尺寸,每个cell产生5组值(tx,ty,tw,th,to)(t_x,t_y,t_w,t_h,t_o)(tx?,ty?,tw?,th?,to?),将这5组值与5个先验框进行计算,因为我们的5个先验框没有中心坐标,只有高宽信息,在计算的时候,我们将当前cell的中心赋值给这5个先验框,得到5组先验框坐标(x,y,pw,ph)(x,y,p_w,p_h)(x,y,pw?,ph?)
论文的Figure3看起来不是那么具体,为了好理解请看下图。
在这里插入图片描述

上图可知cell的左上角坐标赋给了先验框的中心坐标,通过预测输出(tx,ty,tw,th,to)(t_x,t_y,t_w,t_h,t_o)(tx?,ty?,tw?,th?,to?)计算出预测框(Ground truth box to predict),通过预测框和GroundTruth比较计算loss纠正逼近GroundTruth。

  1. Fine-Grained Features:细粒度功能。这种改进的YOLO在13 × 13特征地图上预测检测。虽然这对于大型对象来说已经足够了,但是对于定位较小的对象来说,它可能会受益于更细粒度的特性。Faster R-CNN和SSD都在网络中的各种feature maps上运行他们的proposal网络,以获得一系列分辨率。我们采取了不同的方法,简单地添加一个passthrough层,以26 × 26的分辨率从早期的层带来特征。
    passthrough图层通过将相邻feature堆叠到不同的通道而不是空间位置,将高分辨率feature与低分辨率feature连接起来,类似于ResNet中的恒等映射。
    这将26 × 26 × 512feature map转换为13 × 13 × 2048feature map,可与原始feature连接。我们的检测器运行在这个扩展的feature map之上,因此它可以访问细粒度的特征。这使性能适度提高了1%。
    关于细粒度的知识可以了解:Selective Sparse Sampling for Fine-grained Image Recognition
    其中谈到特征串联的操作,上面的论文将图像的特征串联,YOLO则是将26X26X512的feature map拆成4块13X13X512的feature map,串联起来得到13X13X2024的特征。(我对细粒度的知识了解不多,这里贴出来方便自己以后对这方面知识的探索)

  2. Multi-Scale Training:多尺度训练。原始YOLO使用448 × 448的输入分辨率。加上Anchor Box,我们把分辨率改成了416×416。然而,由于我们的模型只使用卷积和池化层,它可以动态调整大小。我们希望YOLOv2能够在不同大小的图像上运行,因此我们将其训练到模型中。
    我们不是固定输入图像的大小,而是每隔几次迭代就改变网络。我们的网络每10批随机选择一个新的图像尺寸。由于我们的模型以32的倍数进行下采样,因此我们从以下32的倍数中提取:{320,352,…,608}.因此最小的选项是320 × 320,最大的选项是608 × 608。我们将网络调整到那个维度,并继续训练。
    这种机制迫使网络学会在各种输入维度上进行良好的预测。这意味着同一网络可以预测不同分辨率的检测。网络在较小的尺寸下运行更快,因此YOLOv2在速度和精度之间提供了一个简单的折衷方案
    在低分辨率下,YOLOv2是一种廉价、相当精确的检测器。288×288,运行速度90 FPS以上,mAP几乎和Fast R-CNN一样好。这使得它非常适合较小的图形处理器、高帧率视频或多视频流。
    在高分辨率下,YOLOv2是一款最先进的检测器,在VOC 2007上具有78.6 mAP,同时仍能以高于实时速度的速度运行。YOLOv2的比较见表3

进一步的实验。我们对YOLOv2在2012年VOC数据集上进行了检测训练。表4显示了YOLOv2与其他先进检测系统的比较性能。YOLOv2达到73.4 mAP,同时运行速度远远快于竞争方法。我们还在COCO上进行训练,并与表5中的其他方法进行比较。在VOC指标(IOU = .5)上,YOLOv2获得44.0 mAP,与SSD和Faster R-CNN相当。

参考

YOLOV2 论文笔记

  相关解决方案