隆重向您介绍我们的最新的成果——YOLO 9000,作为当前最先进的实时目标检测系统,YOLO 9000能够识别超过9000类目标。我们对YOLO检测算法做出了许多改进,既加入了新的想法也融合了之前的研究成果,改进后得到的YOLO V2模型是当前在Pascal VOC和COCO数据集上表现最好的模型。YOLO V2采用了多尺度的训练方法,可以使用尺寸变化的图像进行训练,在精度和训练速度之间有着较好的权衡。在FPS为67时,YOLO V2在VOC 2007数据上获得了76.8%的平均准确率。在FPS为40时,YOLO V2获得了78.6%的平均准确率,这比使用ResNet的Faster R-CNN以及SSD算法表现更好,并且YOLO V2有着更快的运行速度。最后,我们提出了一种联合训练目标检测和分类的方法。我们用这种方法同时在COCO目标检测数据集以及ImageNet分类数据集训练YOLO 9000。我们的联合训练方法使得YOLO 9000能够预测没有标记的检测数据的类别。尽管我们只使用了200类中的44类数据,YOLO 9000还是在ImageNet的验证集上取得了19.7%的平均准确率。在COCO数据集没有包含的156类中,YOLO 9000取得了16.0%的平均准确率。但YOLO可以检测的类别远不止200类,它能检测超过9000种目标类别,并且还是实时检测。
通用目标检测应快速、准确,并能识别各种各样的目标。自从引入神经网络以来,检测框架变得越来越快速和准确。然而,大多数的检测方法依然只局限于一小部分对象。当前的目标检测数据集与其他的分类和标记数据集相比是十分有限的。最常见的检测数据集包含数千到数十万张带有几十到数百个标签的图像,而分类数据集有数以百万计的图像和数十万个类别。
我们希望检测能够扩展到对象分类的级别。然而,用于检测的标记图像比用于分类或标记的标记要昂贵得多。因此,在近期我们不太可能看到有和目标分类同量级的目标检测数据集出现。由此我们提出了一种新的方法,利用现有的大量分类数据,扩展现有检测系统的范围。我们的方法使用对象分类的层次视图,允许我们将不同的数据集组合在一起。
我们还提出了一种联合训练算法,使得目标检测器的训练既可以在目标检测数据集上进行,也可以在分类数据集上进行。这种方法利用标记的检测图像来学习精确地定位对象,同时使用分类图像来增加词汇和健壮性。
使用这种方法我们训练了YOLO 9000模型,一个能够检测超过9000种目标的实时目标检测器。首先,我们对YOLO V1进行改进形成了YOLO V2。然后使用数据集结合策略和联合训练算法在来自ImageNet和COCO的数据上训练了YOLO 9000。我们所有的代码和模型都开源在以下网站: http://pjreddie.com/yolo9000/
YOLO V1与最先进的检测系统相比有很多短板,特别是定位错误率高。并且与基于RPN策略的方法相比,YOLO V1的召回率较低。因此,在保证精度的同时,我们将改进的重点放在了提高召回率和定位准确度上。
计算机视觉趋向于使用更大、更深的网络。更好的性能通常源于更大的网络或者集成模型。然而,我们想让YOLO V2在拥有更高精度的同时,还能保持高运行速度。因此我们没有扩展网络,而是简化了网络,然后使特征更容易学习。我们将过去工作中的各种想法与我们自己的新概念结合起来,以提高Yolo的表现。
批处理规范化可以显著提高收敛性,同时消除对其他形式规范化的需要。通过在所有卷积层后添加BN层,我们在平均准确率上获得了超过2%的提升。批处理规范化也有助于规范化模型。通过批处理规范化,我们可以、将Dropout操作从模型中移除而不会导致过拟合。
所有最先进的检测系统都使用在ImageNet上预训练过的分类器。从AlexNet开始,大多数的分类器都使用小于256x256的图像作为输入。YOLO V1使用224x224的图像进行训练,并且在进行检测时将分辨率增加为448x448。这意味着网络必须同时切换到学习对象检测并调整到新的输入分辨率。
我们首先对分类网络进行全分辨率448×448的微调,使其在ImageNet上保持10个周期。这为网络调整卷积核以适应新的输入提供了缓冲时间,然后我们在检测时对生成的网络进行微调。高分辨率分类为我们带来了4%的平均准确率增长。
YOLO V1直接使用卷积特征提取器后的全连接层预测目标的边界框坐标。Faster R-CNN算法使用手动设定的先验框预测边界框坐标,而不是直接进行预测。Faster R-CNN中的RPN网络仅使用卷积层为这些先验框预测置信度和偏移量。由于输出层是卷积层,RPN可以预测特征图中每个位置的偏移量。预测偏移量而不是预测坐标使得问题得以简化,并让网络更容易进行学习。
我们移除了YOLO V1中的全连接层并加入了“先验框机制”。第一,我们去掉了一个池化层,使得网络卷积层的输出拥有更高的分辨率。我们还缩小了网络以使用416x416的输入进行训练,而不再448x448的输入。我们这样做是因为我们想要在特征图中有一个奇数位置,以获得一个单一的中心网格单元。物体,尤其是大型物体,往往占据图像的中心,所以最好在中心有一个位置来预测这些物体,而不是四个位置都在附近。YOLO V1的卷积层将图像缩小32倍,通过使用416x416的输入,我们获得了13x13的特征图。
当我们移动到先验框时,我们也将类预测机制与空间位置分离,而不是为每个先验框预测类和对象。与YOLO V1相同,目标性预测依然预测边界框与真实区域的IOU,而类别预测则预测有目标时的条件概率。
使用先验框使得模型精度略有降低。YOLO V1在每张图像上只预测98个边界框,而使用“先验框”时我们可以预测上千个边界框。在不使用“先验框”时,我们的中间模型获得了69.5%的平均准确率和81%的召回率。而使用“先验框”时,我们获得了69.2%平均准确率和88%的召回率。尽管平均准确度略有降低,但召回率的增加意味着我们的模型有更大的进步空间。
我们在YOLO中使用“先验框”机制时遇到两个问题。第一个是先验框的尺寸是自行指定的。网络可以学会适当地调整边界框,但是如果我们从网络开始选择更好的先验框,我们可以使网络更容易学会预测良好的检测。为了取代手动选择先验框,我们使用k-means聚类算法在训练集的边界框中自动寻找好的先验框。
如果我们使用采用的欧式距离的标准k-means算法,大一点的边界框会比小的边界框产生更多的错误。然后,我们需要的能带来高IOU值的先验框应当是与边界框的大小无关的,因此我们使用以下距离度量:
d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box, centroid) = 1-IOU(box, centroid) d(box,centroid)=1−IOU(box,centroid)
我们使用了具有各种k值的k-means算法并且绘制出了和最接近的簇心的平均IOU变化图(上图)。为了权衡复杂度和高召回率,我们设定:
k = 5 k=5 k=5
簇心与人工选取的先验框有显著差异,有更少的短且宽的盒子和更多的高且薄的盒子。
我们将平均IOU与最接近的先验聚类策略和手工选择的先验框进行比较。只有5个先验点,质心的表现类似于9个先验框,平均IOU为61.0比60.9。如果我们使用9个簇心,会得到更高的平均IOU。以上结果表明,使用k-means算法生成先验框,会使得模型获得更好的表现并且更容易训练。
在YOLO中使用先验框时,我们遇到了第二个问题:模型不稳定性,特别是在早期迭代期间。大多数不稳定因素都来自于对边界框(x,y)坐标的预测。在RPN网络中,通过以下公式来计算tx和ty以及中心坐标:
x = ( t x ∗ w a ) − x a y = ( t y ∗ h a ) − y a x = (t_x * w_a) -x _a \\ y = (t_y * h_a)-y_a x=(tx∗wa)−xay=(ty∗ha)−ya
例如,预测tx = 1的预测将根据先验框的宽度将边界框向右移动,同理,tx=-1将会将其以同样宽度向左移。这个公式是不受约束的,因此任何先验框都可以在图像中的任何点结束,而不考虑框的预测位置。在随机初始化的情况下,模型需要很长时间来稳定预测敏感偏移量。
与预测偏移量不同,我们沿用了YOLO V1中的方法——预测与网格单元位置的相对坐标,这将真实区域限定在0和1二者之间,我们使用逻辑激活来限制网络的预测落在这个范围内。
网络对输出特征图中的每个网格单元预测5个边界框,为每个边界框预测5个坐标:
( t x , t y , t w , t h , t o ) (t_x,t_y,t_w,t_h,t_o) (tx,ty,tw,th,to)如果单元格是来自图像的左上角的(cx,cy)的偏移,以及前面的边界框有宽度pw和高度ph,那么这些预测符合: b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w ∗ e t w b h = p h ∗ e t h P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) = σ ( t o ) b_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w = p_w*e^{t_w}\\ b_h = p_h*e^{t_h}\\ Pr(object) *IOU(b,object) = \sigma(t_o) bx=σ(tx)+cxby=σ(ty)+cybw=pw∗etwbh=ph∗ethPr(object)∗IOU(b,object)=σ(to)由于我们限制了位置预测,参数化更容易学习,使网络更稳定。使用尺寸簇以及直接预测边界框中心位置,与使用先验框的版本相比,YOLO提高了近5%。
改进的YOLO使用13x13的特征图进行检测,虽然这对于大型对象来说已经足够了,但对于本地化较小的对象,它可能会受益于更具细粒度的特性。Faster R-CNN和SSD都在不同的特征图上使用RPN网络以获得一系列的分辨率不同的区域,而我们使用了不同的方法,只是添加了一个从早期层(26x26分辨率)引入特性的直通层。
直通层通过将相邻特征堆叠在不同的通道而不是空间位置,从而将高分辨率特征和低分辨率特征连接起来,这与ResNet中的残差模块相似。这将(26x26x512)的特征图转换为(13x13x2048)的特征图,并且这些图可以通过原始特征连接起来。我们的检测器运行在这个扩展特征图的上层,这样它就可以访问细粒度特征。通过以上操作,模型性能获得了1%的提升。
YOLO V1使用448x448分辨率的图像作为网络输入,引入先验框时我们将输入改为了416x416。然而,因为我们模型只使用卷积和池层,它可以动态地调整大小。与固定输入大小不同,我们在网络训练中,每10次迭代更换一次网络输入,由于采用了32倍的降采样,因此我们从32的倍数中提取相应分辨率。因此最小的选项是320x320,最大的选项是608x608。
YOLO V1和YOLO V2的直观对比:
此节主要内容是将原有的backbone更换为Darknet-19:
我们提出了一种在检测数据集和分类数据集上联合训练的方法。我们的方法使用用于检测的标记图像学习与检测有关的信息,如边界框坐标、是否存在目标等,同时也学习如何分类一般目标。通过只带有分类标签的图像来拓展探测器可探测目标的种类。
在训练时,我们将检测数据集的图像和分类数据集的图像进行混合。当我们的网络看到一个标记为检测的图像时,我们可以基于完整的YOLO V2损失函数进行反向传播。当它看到一个分类图像时,我们只从架构的分类特定部分反向传播丢失。
这种方法带来了一些挑战,检测数据集只有一般的目标和通用的标签,比如“狗”、“船”,而分类数据拥有更精细的分类标签。ImageNet拥有超过100种品种的狗,包括“Norfolk terrier”,、“Yorkshire
terrier“、“Bedlington terrier”等。如果我们想在两个数据集上进行训练,我们需要一种一致的方法来合并这些标签。
大多数分类方法在所有可能的类别中使用一个SoftMax层来计算最终的概率分布。使用SoftMax假定类是互斥的,这给组合数据集带来了问题,例如,您不希望使用此模型组合ImageNet和COCO,因为类“Norfolk Terrier”和“Dog”不是互斥的。
我们可以使用多标签模型来组合不假设互斥的数据集。这种方法与我们所知道的关于数据的所有结构都不同,例如,所有COCO类都是互斥的。
ImageNet标签是从WordNet中提取的,WordNet是一个语言数据库,用于构造概念及其关联方式。在WordNet中,“Norfolk Terrier”和“Yorkshire Terrier”都是“Terrier”的同义词,后者是“狩猎犬”的一种,后者是“狗”的一种,后者是“犬”的一种,等等。大多数分类方法都假定标签为扁平结构,但是为了组合数据集,结构正是我们需要的。
WordNet的结构是有向图,而不是树,因为语言很复杂。例如,“狗”既是“犬”的一种,也是“家畜”的一种,它们都是WordNet中的合成词。我们不使用完整的图结构,而是通过从ImageNet中的概念构建层次树来简化问题。
为了构建这棵树,我们检查ImageNet中的可视名词,并查看它们通过WordNet图到根节点的路径,在本例中是“物理对象”。许多合成集只有一条通过图的路径,因此首先我们将所有这些路径添加到树中。然后我们迭代地检查剩下的概念,并添加尽可能少地增长树的路径。因此,如果一个概念有两条到根的路径,一条路径将向树中添加三条边,另一条只添加一条边,我们选择较短的路径。
最终结果是WordTree,一个视觉概念的层次模型。为了使用WordTree进行分类,我们预测了给定同义词集的每个下义词的概率在每个节点的条件概率。例如,在“Terrier”节点,我们预测:
P r ( N o r f o l k t e r r i e r ∣ t e r r i e r ) P r ( Y o r k s h i r e t e r r i e r ∣ t e r r i e r ) P r ( B e d l i n g t o n t e r r i e r ∣ t e r r i e r ) . . . Pr(Norfolk \ terrier|terrier)\\ Pr(Yorkshire \ terrier|terrier)\\ Pr(Bedlington \ terrier|terrier)\\ ... Pr(Norfolk terrier∣terrier)Pr(Yorkshire terrier∣terrier)Pr(Bedlington terrier∣terrier)...
如果我们想计算一个特定节点的绝对概率,我们只需沿着路径通过树到达根节点,然后乘以条件概率:
P r ( N o r f o l k t e r r i e r ) = P r ( N o r f o l k t e r r i e r ∣ t e r r i e r ) ∗ P r ( t e r r i e r ∣ h u n t i n g d o g ) ∗ . . . ∗ ∗ P r ( m a m m a l ∣ P r ( a n i m a l ) ∗ P r ( a n i m a l ∣ p h y s i c a l o b j e c t ) Pr(Norfolk \ terrier) = Pr(Norfolk \ terrier|terrier)\\ ∗P r(terrier|hunting \ dog)\\ ∗ . . .∗\\ ∗Pr(mammal|Pr(animal)\\ ∗Pr(animal|physical \ object) Pr(Norfolk terrier)=Pr(Norfolk terrier∣terrier)∗Pr(terrier∣hunting dog)∗...∗∗Pr(mammal∣Pr(animal)∗Pr(animal∣physical object)
为了进行分类,我们假设图像包含一个对象:
P r ( p h y s i c a l o b j e c t ) = 1 Pr(physical \ object) = 1 Pr(physical object)=1
为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上对Darknet-19模型进行了训练。为了构建WordTree 1k,我们添加了所有中间节点,这些节点将标签空间从1000扩展到1369。在训练过程中,我们将正式标签标记在树上,这样,如果一个图像被标记为“诺福克猎犬”,它也会被标记为“狗”和“哺乳动物”等。为了计算条件概率,我们的模型预测了一个1369个值的向量,并且我们计算了同一概念下所有同名系统集的SoftMax,如下图:
这种配方也适用于检测。现在,我们不再假设每个图像都有一个对象,而是使用Yolov2的对象性预测器来给出**Pr(physical object)**的值。探测器预测一个边界框和概率树,然后沿着树向下遍历,在每次拆分时采用最高的置信路径,直到达到某个阈值,然后预测该对象类。
我们可以使用WordTree以明智的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的同步集。下图显示了一个使用WordTree将来自ImageNet和COCO的标签的例子。WordNet具有多样标签,因此我们可以将此技术用于大多数数据集。
现在,我们可以使用WordTree组合数据集,我们可以训练我们的联合模型来进行分类和检测。我们想训练一个超大规模的检测器,所以我们使用COCO检测数据集和完整ImageNet发行版的前9000个类创建我们的组合数据集。我们还需要评估我们的方法,以便添加来自ImageNet检测挑战的任何类,这些类还没有包括在内。此数据集的相应WordTree有9418个类,而ImageNet是一个大得多的数据集,因此我们通过对COCO进行过采样来平衡数据集,以便两者比例只比4:1大一点。
我们使用这个数据集来训练YOLO 9000。我们使用基本的YOLO V2架构,但是只有3个优先级而不是5个优先级来限制输出大小。当我们的网络看到一个检测图像时,我们将反向传播损失视为正常。对于分类损失,我们只在标签的相应级别或以上进行反向传播损失。例如,如果标签是“狗”,我们会将任何错误分配给树下的预测,“德国牧羊犬”对“黄金猎犬”,因为我们没有这些信息。
当它看到分类图像时,我们只会反向传播分类丢失。要做到这一点,我们只需找到预测类的最高概率的边界框,然后只计算其预测树上的损失。我们还假设预测框与地面真值标签重叠至少.3个IOU,并基于此假设反向传播物体损失。
通过这项联合训练,YOLO 9000学会了使用Coco中的检测数据在图像中查找对象,并学会了使用ImageNet中的数据对各种各样的对象进行分类。
我们在ImageNet检测任务中评估YOLO 9000。ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO 9000只看到了大部分测试图像的分类数据,而不是检测数据。YOLO 9000获得了19.7%的平均准确率,而在从未见过任何标记数据的不相交的156个对象类上获得了16.0%的平均准确率。该平均准确率高于DPM获得的结果,但YOLO 9000仅在部分监督的情况下接受不同数据集的培训。它还同时检测了9000个其他对象类别,全部都是实时的。
当我们分析YOLO 9000在ImageNet上的表现时,我们看到它很好地学习了动物的新物种,但在学习诸如服装和设备之类的类别时遇到了困难。
在这一节中我们对YOLO V2的算法原理进行了翻译,有任何的问题可以在评论区留言,我会尽快回复,谢谢支持!