YOLOv2论文解读

原文下载链接
摘要
  我们将介绍YOLO9000,这是一种先进的实时对象检测系统,可以检测9000多个对象类别。首先,我们建议对YOLO检测方法进行各种改进,无论是新颖的还是从以前的工作中得出的。改进的模型YOLOv2在诸如PASCAL VOC和COCO之类的标准检测任务方面是先进的。使用新颖的,多尺度的训练方法,相同的YOLOv2模型可以在不同的大小上运行,从而在速度和准确性之间轻松权衡。以67 FPS速度运行时,YOLOv2在VOC 2007上获得76.8 mAP。以40 FPS速度运行时,YOLOv2获得78.6 mAP,优于采用ResNet和SSD的Faster RCNN的最新方法,同时运行速度仍显着提高。最后,我们提出了一种联合训练目标检测和分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。通过我们的联合培训,YOLO9000可以预测没有标记检测数据的物体类别的检测结果。我们在ImageNet检测任务上验证了我们的方法。尽管仅采用200个类别中的44个的检测数据,但YOLO9000在ImageNet检测验证集上获得了19.7 mAP。在COCO以外的156个类别中,YOLO9000的平均得分为16.0。但是YOLO可以检测到200多个类。它预测了9000多种不同物体类别的检测结果。而且它仍然实时运行。
1.介绍
  通用目标检测应该快速,准确并且能够识别各种目标。自从引入神经网络以来,检测框架已经变得越来越快和准确。但是,大多数检测方法仍限于一小部分对象。
  与其他任务(例如分类和标记)的数据集相比,当前的对象检测数据集受到限制。最常见的检测数据集包含成千上万的图像以及数十到数百个标签。分类数据集包含数百万个具有数万或数十万个类别的图像。
  我们希望将检测扩展到对象分类的级别。但是,标记要检测的图像比标记分类或标记要昂贵得多(标记通常是用户免费提供的)。因此,我们不太可能在不久的将来看到与分类数据集规模相同的检测数据集。
  我们提出一种新方法来利用我们已经拥有的大量分类数据,并使用它来扩展当前检测系统的范围。我们的方法使用对象分类的分层视图,该视图允许我们将不同的数据集组合在一起。
  我们还提出了一种联合训练算法,该算法允许我们在检测和分类数据上训练对象检测器。我们的方法利用标记的检测图像来学习精确定位对象,同时使用分类图像来增加其词汇量和健壮性。
  使用这种方法,我们训练了YOLO9000,这是一种实时对象检测器,可以检测9000多种不同的对象类别。首先,我们对基本的YOLO检测系统进行了改进,以生产出最新的实时检测器YOLOv2。然后,我们使用数据集组合方法和联合训练算法在ImageNet的9000多个类别以及COCO的检测数据上训练模型。
  我们所有的代码和经过预先训练的模型都可以从http://pjreddie.com/yolo9000/在线获得。
2.更好
  与最先进的检测系统相比,YOLO存在许多缺点。与Fast R-CNN相比,YOLO的错误分析表明,YOLO会产生大量的定位错误。此外,与基于区域提案的方法相比,YOLO的召回率相对较低。因此,我们主要致力于改善召回率和定位,同时保持分类准确性。
  计算机视觉通常趋向于更大,更深的网络。更好的性能通常取决于训练大型网络或将多个模型整合在一起。但是,对于YOLOv2,我们希望使用一种仍能快速运行的更准确的检测器。与扩大网络规模相反,我们简化了网络,然后使表示更易于学习。我们将过去工作中的各种想法与我们自己的新颖概念融合在一起,以提高YOLO的性能。结果摘要可在表2中找到。

  批量标准化。批处理规范化导致收敛性的显着改善,同时消除了对其他形式的规范化的需求。通过在YOLO的所有卷积层上添加批处理归一化,我们可以在mAP方面获得2%以上的改进。批处理规范化还有助于规范化模型。通过批量归一化,我们可以消除模型中的缺失而不会过度拟合。
  高分辨率分类器。所有最新的检测方法都使用在ImageNet上预先训练的分类器。从AlexNet开始,大多数分类器都对小于256×256的输入图像进行操作。原始的YOLO在224×224处训练分类器网络,并将分辨率提高到448以进行检测。这意味着网络必须同时切换到学习对象检测并调整为新的输入分辨率。
  对于YOLOv2,我们首先在ImageNet上以448×448的完整分辨率微调分类网络10轮。这使网络有时间调整其过滤器,使其在更高分辨率的输入上更好地工作。然后,我们根据检测结果对网络进行微调。这种高分辨率分类网络使我们的mAP几乎提高了4%。
  卷积与锚框。YOLO使用卷积特征提取器顶部的完全连接层直接预测边界框的坐标。代替直接预测坐标,更快的R-CNN使用手工选择的先验来预测边界框。仅使用卷积层,Faster R-CNN中的区域提议网络(RPN)即可预测锚框的偏移量和置信度。由于预测层是卷积的,因此RPN会在特征图中的每个位置预测这些偏移。预测偏移量而不是坐标可以简化问题,并使网络更容易学习。
  我们从YOLO中删除完全连接的图层,并使用锚定框预测边界框。首先,我们消除了一个池化层,以使网络卷积层的输出具有更高的分辨率。我们还将网络缩小为可处理416的输入图像,而不是448×448。之所以这样做,是因为我们希望要素地图中的位置数量为奇数,从而只有一个中心单元。对象(尤其是大对象)往往会占据图像的中心,因此最好在中心位置使用一个位置来预测这些对象,而不要使用附近的四个位置。YOLO的卷积层将图像降采样32倍,因此使用416的输入图像,我们得到13×13的输出特征图。
  当我们移至锚框时,我们还将类预测机制与空间位置分离,而是为每个锚框预测类和对象。在YOLO之后,客观性预测仍会预测真值框和提议框的IOU,并且类别预测会在存在目标的情况下预测该类别的条件概率。
  使用锚框,准确性会略有下降。YOLO只能预测每个图像98个盒子,但使用锚框我们的模型可以预测1000个以上。如果没有锚定盒,我们的中间模型将获得69.5的mAP,81%的召回率。使用锚定盒,我们的模型获得69.2的mAP,召回率达到88%。即使mAP降低,召回率的增加也意味着我们的模型还有更多的改进空间。
  维度簇。在YOLO上使用锚框时,我们会遇到两个问题。首先是盒子尺寸是手工挑选的。网络可以学习适当地调整框,但是如果我们为网络选择更好的先验条件,则可以使网络更容易学习预测良好的检测。
  无需手动选择先验,我们在训练集边界框上运行k-means聚类以自动找到良好的先验。如果我们使用具有欧几里德距离的标准k均值,则较大的盒子会比较小的盒子产生更多的误差。但是,我们真正想要的是能够获得良好IOU分数的先验值,而这与盒子的大小无关。因此,对于我们的距离度量,我们使用:

$d(box, centroid) = 1 − IOU(box, centroid)$

  我们对k的各种值运行k均值,并绘制出具有最接近质心的平均IOU,请参见图2。我们选择k = 5作为模型复杂度和高召回率之间的良好折衷。群集质心与手工挑选的锚框明显不同。短而宽的盒子更少,而高而窄的盒子则更多。

  我们将平均IOU与我们的聚类策略最接近的先验框进行比较,并在表1中手工挑选了锚框。在5个先验框时,质心的表现与9个锚框相似,平均IOU分别为61.0和60.9。如果我们使用9个质心,则平均IOU会更高。这表明使用k均值生成边界框可以更好地表示模型,从而使任务更易于学习。

  直接位置预测。在YOLO中使用锚定框时,我们会遇到第二个问题:模型不稳定性,尤其是在早期迭代期间。大多数不稳定性来自于预测盒子的\((x,y)\)位置。在区域提议网络中,网络预测值\(t_x\)\(t_y\),并且将\((x,y)\)中心坐标计算为:

$x=(t_x * w_a)-x_a$
$y=(t_x * h_a)-y_a$

  例如,\(t_x = 1\)的预测将使该框向右移动锚定框的宽度,\(t_x = -1\)的预测将使该框向左移动相同的量。
  此公式不受限制,因此任何锚定框都可以终止于图像中的任意点,而不管预测该框的位置如何。通过随机初始化,该模型需要很长时间才能稳定以预测合理的偏移量。
  并非预测偏移量,我们采用YOLO的方法,预测相对于网格单元位置的位置坐标。这将真值限制在0到1之间。我们使用逻辑斯蒂激活函数将网络的预测限制在此范围内。
  网络会在输出特征图中的每个单元上预测5个边界框。网络为每个边界框预测\(t_x\)\(t_y\)\(t_w\)\(t_h\)\({to}\)共5个坐标。如果单元格从图像的左上角偏移了\((c_x,c_y)\)并且先验边界框的宽度和高度为\(p_w\)\(p_h\),则预测对应于:

  由于我们限制了位置预测,因此参数化更易于学习,从而使网络更加稳定。与带有锚框的版本相比,使用尺寸簇以及直接预测边界框中心位置可使YOLO提升近5%。
  细粒度特征。经过修改的YOLO可以预测13×13特征图上的检测结果。尽管这对于大型对象已经足够,但它可能受益于用于定位较小对象的更细粒度的特征。Faster R-CNN和SSD都在网络中的各种特征图上运行其建议网络,以获得各种分辨率。我们采用了不同的方法,只是添加了一个直通层,从前面的层带来了26×26分辨率的特征。
  与ResNet中的标识映射类似,直通层通过将相邻要素堆叠到不同的通道而不是空间位置中,从而将高分辨率要素与低分辨率要素连接在一起。这会将26×26×512特征图转换为13×13×2048特征图,可以将其与原始特征串联。我们的探测器在此扩展的特征图上运行,因此可以访问细粒度的特征。这将使性能提高至少1%。
  多尺度培训。原始的YOLO使用448×448的输入分辨率。通过添加锚框,我们将分辨率更改为416×416。但是,由于我们的模型仅使用卷积和池化层,因此可以随时调整其大小。我们希望YOLOv2能够在不同尺寸的图像上运行,因此我们将其训练到模型中。
  我们不固定输入图像的大小,而是每隔几次迭代就更改网络。每10批我们的网络就会随机选择一个新的图像尺寸。由于我们的模型下采样了32倍,因此我们从以下32的倍数中提取:{320,352,...,608}。因此,最小的选项是320×320,最大的是608×608。我们将网络调整为该尺寸并继续训练。
  这种制度迫使网络学习各种维度的输入以预测良好。这意味着同一网络可以预测不同分辨率的检测。网络在较小的尺寸下运行速度更快,因此YOLOv2可以在速度和准确性之间轻松权衡。
  在低分辨率下,YOLOv2可以用作便宜而相当准确的检测器。在288×288的分辨率下,它的mAP运行速度超过90 FPS,几乎与Fast R-CNN一样好。这使其成为较小GPU,高帧率视频或多个视频流的理想选择。
  在高分辨率下,YOLOv2是在VOC 2007上具有78.6 mAP的先进检测器,同时仍以实时速度运行。有关YOLOv2与VOC 2007上其他框架的比较,请参见表3。

  进一步的实验。我们训练了YOLOv2在VOC 2012上进行检测。表4显示了YOLOv2与其他最新检测系统的比较性能。YOLOv2达到了73.4 mAP,而运行速度却比其他方法快得多。我们还在COCO上进行了训练,并与表5中的其他方法进行了比较。在VOC度量标准(IOU = 0.5)上,YOLOv2获得44.0 mAP,与SSD和Faster R-CNN相当。

3.更快
  我们希望检测是准确的,但我们也希望它是快速的。大多数检测应用程序,例如机器人技术或自动驾驶汽车,都依赖于低延迟预测。为了最大程度地提高性能,我们从底层开始将YOLOv2设计得更快速。
  大多数检测框架都依赖VGG-16作为基本特征提取器。VGG-16是一个功能强大,准确的分类网络,但它不必要地复杂。VGG-16的卷积层需要306.9亿个浮点运算,才能在的单个图像上进行单次通过。
  YOLO框架使用基于Googlenet架构的自定义网络。网络比VGG-16更快,仅使用85.2亿次操作进行正向传递。但是,其准确性比VGG16稍差。对于单作,224×224分辨率的排名前5位的精度,YOLO的自定义模型在ImageNet为88.0%,而VGG-16则为90.0%。
  Darknet-19。我们提出了一种新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计的先前工作以及该领域的常识的基础上。与VGG模型类似,我们在每个池化步骤之后都使用3×3滤波器,并使通道数量翻倍。遵循网络中网络(NIN)的工作之后,我们使用全局平均池进行预测,并使用1×1过滤器压缩3×3卷积之间的特征表示。我们使用批量归一化来稳定训练,加快收敛速度,并使模型正规化。
  我们的最终模型称为Darknet-19,具有19个卷积层和5个maxpooling层。有关完整说明,请参见表6。Darknet-19仅需要55.8亿次操作来处理图像,但在ImageNet上达到72.9%的top-1精度和91.2%的top-5精度。

  分类训练。我们使用随机梯度下降法在标准ImageNet 1000类分类数据集上训练网络160轮,使用Darknet神经网络框架,起始学习率为0.1,多项式率衰减为4的幂,权重衰减为0.0005,动量为0.9。在训练期间,我们使用标准的数据增强技巧,包括随机裁剪,轮换以及色相,饱和度和曝光偏移。
  如上所述,在以224×224的图像进行初始训练后,我们以较大的尺寸448对网络进行了微调。对于此微调,我们使用上述参数进行训练,但只进行了10轮,并且学习速率为\({10}^{−3}\)。在这种更高的分辨率下,我们的网络可实现76.5%的top-1精度和93.3%的top-5精度。
  检测训练。我们通过删除最后一个卷积层并改为在三个3×3卷积层上分别添加1024个滤镜,再加上最后一个1×1卷积层(具有我们需要检测的输出数量)来修改该网络以进行检测。对于VOC,我们预测5个框,每个框具有5个坐标,每个框20个类,因此有125个过滤器。我们还从最后的3×3×512层到倒数第二个卷积层添加了一个直通层,以便我们的模型可以使用细粒度特征。
  我们为网络训练了160轮,起始学习率为\({10}^{−3}\),然后在60和90轮将其除以10。我们使用0.0005的权重衰减和0.9的动量。我们使用与YOLO和SSD类似的数据增强方法,并进行随机裁剪,颜色偏移等。我们在COCO和VOC上使用相同的训练策略。

4.更强
  我们提出了一种联合训练分类和检测数据的机制。我们的方法使用标记为检测的图像来学习特定于检测的信息,例如边界框坐标预测和对象性以及如何对常见对象进行分类。它使用仅带有类别标签的图像来扩展它可以检测到的类别数量。
  在训练期间,我们混合了来自检测和分类数据集的图像。当我们的网络看到标记为要检测的图像时,我们可以基于完整的YOLOv2损失函数向后传播。当它看到分类图像时,我们仅从体系结构中特定于分类的部分反向传播损失。
  这种方法提出了一些挑战。检测数据集仅具有通用对象和通用标签,例如“狗”或“船”。分类数据集的标签范围更广更深。ImageNet有一百多种犬,包括“诺福克梗”,“约克夏梗”和“贝灵顿梗”。如果要对两个数据集进行训练,则需要一种一致的方式来合并这些标签。
  大多数分类方法在所有可能的类别上使用softmax层来计算最终概率分布。使用softmax假定类是互斥的。这带来了合并数据集的问题,例如,您不希望使用此模型将ImageNet和COCO合并,因为“诺福克梗”和“狗”类不是互斥的。
  相反,我们可以使用多标签模型来合并不假定互斥的数据集。这种方法忽略了我们对数据了解的所有结构,例如,所有COCO类都是互斥的。
  分层分类。ImageNet标签是从WordNet中提取的,WordNet是一个语言库,它构建概念及其相关性。在WordNet中,“诺福克梗”和“约克夏梗”都是“梗”的下位词,“梗”是“猎狗”的一种,这是“狗”的一种,是“犬”的一种,等等。大多数分类方法假定标签的结构平坦,但是对于组合数据集,结构正是我们所需要的。
  由于语言很复杂,WordNet的结构是有向图,而不是树。例如,“狗”既是“犬”的类型,又是“家畜”的类型,它们都是WordNet中的同义词集。我们不使用完整的图结构,而是通过根据ImageNet中的概念构建层次树来简化问题。
  为了构建该树,我们检查ImageNet中的视觉名词,并查看它们通过WordNet图到达根节点(在本例中为“物理对象”)的路径。许多同义词集在图中只有一条路径,因此首先我们将所有这些路径添加到树中。然后,我们迭代检查剩下的概念,并添加使树长得尽可能小的路径。因此,如果一个概念有两个到根的路径,一个路径会给树增加三个边缘,而另一个路径只会增加一个边缘,那么我们选择较短的路径。
  最终结果是WordTree,这是视觉概念的分层模型。 为了用WordTree执行分类,我们在给定同义集的情况下,针对该同义集的每个下位词的概率,预测每个节点的条件概率。 例如,在“ terrier”节点,我们预测:

$Pr(Norfolk terrier|terrier)$
$Pr(Yorkshire terrier|terrier)$
$Pr(Bedlington terrier|terrier)$
$...$

  如果要计算特定节点的绝对概率,我们只需沿着树到根节点的路径,再乘以条件概率。 因此,如果我们想知道图片是否为诺福克梗,我们可以计算:

$Pr(Norfolk terrier) = Pr(Norfolk terrier|terrier)$
$∗Pr(terrier|hunting dog)$
$∗...∗$
$∗Pr(mammal|Pr(animal)$
$∗Pr(animal|physical object)$

  出于分类目的,我们假设图像包含一个对象:\(Pr(physical object)=1\)。为验证此方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有中间节点,这将标签空间从1000扩展到了1369。在训练过程中,我们在树上传播了真值标签,因此,如果将图像标记为“诺福克梗”,它也会被标记为 “狗”和“哺乳动物”等。为了计算条件概率,我们的模型预测了1369个值的向量,并且我们计算了所有具有相同概念的下义词的系统集的softmax,请参见图5。

  使用与以前相同的训练参数,我们的分层Darknet-19达到71.9%的top-1准确性和90.4%的top-5准确性。尽管添加了369个其他概念,并且我们的网络预测了树结构,但我们的准确性仅下降了一点。以这种方式执行分类也有一些好处。对于新的或未知的对象类别,性能会正常降低。例如,如果网络看到一条狗的图片,但不确定它是哪种类型的狗,它仍将以较高的置信度预测“狗”,但在下义词中会散布较低的置信度。
  该配方也可用于检测。现在,我们不用假设每个图像都有一个对象,而是使用YOLOv2的对象预测器为我们提供\(Pr(physical object)\)的值。检测器预测边界框和概率树。我们向下遍历树,在每次拆分时采用最高的置信度,直到达到某个阈值并预测该对象类。
  数据集与WordTree组合。我们可以使用WordTree以明智的方式将多个数据集组合在一起。我们仅将数据集中的类别映射到树中的同义词集。图6显示了使用WordTree组合ImageNet和COCO的标签的示例。WordNet非常多样化,因此我们可以对大多数数据集使用此技术。

  联合分类和检测。现在我们可以使用WordTree合并数据集,我们可以在分类和检测上训练我们的联合模型。我们想训练一个超大型探测器,因此我们使用COCO检测数据集和完整ImageNet版本中的前9000个类来创建组合数据集。我们还需要评估我们的方法,以便我们添加ImageNet检测挑战中我们尚未包含的所有类。此数据集的相应WordTree具有9418个类。ImageNet是一个更大的数据集,因此我们通过对COCO进行过采样来平衡数据集,以使ImageNet仅大4倍。
  使用此数据集,我们训练YOLO9000。我们使用基本的YOLOv2架构,但是仅使用3个先验框而不是5个先验框来限制输出大小。当我们的网络看到检测图像时,我们会像往常一样反向传播损耗。对于分类损失,我们仅反向传播等于或高于标签相应水平的损失。例如,如果标签为“ dog”,则我们确实会将树中的预测错误分配给“ German Shepherd”和“ Golden Retriever”之间的树,因为我们没有该信息。
  当看到分类图像时,我们仅反向传播分类损失。为此,我们只需要找到预测该类最高概率的边界框,然后仅在其预测树上计算损失即可。我们还假设,预测框与真值框的重叠量至少为0.3 IOU,并且我们根据此假设反向传播对象损失。
  通过这次联合培训,YOLO9000学会了使用COCO中的检测数据来查找图像中的对象,并且学会了使用ImageNet中的数据对这些对象进行各种各样的分类。
  我们在ImageNet检测任务上评估YOLO9000。ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000仅看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000总体获得19.7 mAP,在检测数据中从未见过任何标记的不相交的156个对象类获得16.0 mAP的性能。该mAP高于DPM所获得的结果,但是YOLO9000在不同的数据集上进行了仅部分监督的训练。它还同时实时检测9000个其他对象类别。

  当我们在ImageNet上分析YOLO9000的性能时,我们会看到它很好地学习了新的动物种类,但在学习服装和设备等类别方面却步履维艰。新动物更容易学习,因为客观性预测可以从COCO中的动物得到很好的概括。相反,COCO没有任何类型的服装的边界框标签,仅有人的,因此YOLO9000很难为“太阳镜”或“游泳裤”等类别建模。

5.结论
  我们介绍实时检测系统YOLOv2和YOLO9000。YOLOv2是最先进的,并且在各种检测数据集中比其他检测系统要快。此外,它可以在各种图像尺寸下运行,以在速度和精度之间提供平滑的折衷。
  YOLO9000是一个实时框架,可通过联合优化检测和分类来检测9000多个对象类别。我们使用WordTree合并来自各种来源的数据,并使用联合优化技术在ImageNet和COCO上同时进行训练。YOLO9000是朝着缩小检测和分类之间的数据集大小差距迈出的重要一步。
  我们的许多技术都在对象检测之外推广。ImageNet的WordTree表示形式为图像分类提供了更丰富,更详细的输出空间。使用分层分类的数据集组合在分类和细分领域中将很有用。像多尺度训练这样的训练技术可以在各种视觉任务中提供好处。
  对于未来的工作,我们希望使用类似的技术进行弱监督的图像分割。我们还计划使用更强大的匹配策略(在训练过程中为分类数据分配弱标签)来改善检测结果。计算机视觉拥有大量的标记数据。我们将继续寻找方法,将不同的数据源和数据结构整合在一起,以建立更强大的视觉世界模型。

参考文献(略)

以上。翻译不当之处请指正!

posted @ 2021-02-03 17:56  Marvin-wen  阅读(1092)  评论(2编辑  收藏  举报