Abstract
YOLO9000:先进的可检测超过9000种物体类别的目标检测系统。
首先提出了对YOLO的一些改进,既新颖又有对以前工作的参考。改进后的模型YOLOv2在PASCAL VOC和COCO等标准检测任务中处于技术领先地位。使用一种新颖的多尺度训练方法,同一个YOLOv2模型可以以不同的尺寸运行(指输入图片的尺寸),在速度和准确性之间获得一个较好的折衷。在67 FPS时,YOLOv2在VOC 2007上的mAP为76.8 ,在40 FPS时,YOLOv2的mAP为78.6,超越了最先进的方法,例如Faster R CNN with ResNet and SSD的更快的RCNN,同时运行速度仍然显着提高。
最后提出了联合训练 object detection 和 classification 的方法。使用这种方法可以同时在 COCO 的 detection dataset 和 ImageNet 的 classfication dataset 上训练YOLO9000。Our joint training allows YOLO9000 to predict detections for object classes that don’t have labelled detection data.我们在ImageNet detection task上验证了我们的方法,尽管只有200类中的44个检测数据,YOLO9000在 ImageNet detection交叉验证集上的mAP为19.7。在不属于COCO的156个类别中,YOLO9000 的mAP为16.0。
YOLO9000可以实时预测超过9000种不同对象类别的检测结果。
1 Introduction
通过目标检测应该具有快速、准确、识别范围广的特性。自神经网络引入以来,检测框架越来越准,越来越快。但很多检测方法依然局限于小部分目标。
与分类和标记等其他任务的数据集想比,目标检测的数据集是有限的。最常见的检测数据集包含成千上万到数十万个具有几十到几百个标签(类别)的图像。分类数据集具有数以百万计的数十万或数十万个类别的图像。
对图片进行 detection 所需的标记比 classification 和 tagging 要高很多,因此近期可能看不到和classification规模相同的detection的数据集。
我们提出了一种方法,利用已有的大量的 classification data 来扩展detection system的范围。Our method uses a hierarchical view of object classification that allows us to combine distinct datasets together.
我们还提出了一种联合训练算法,使其可以在检测和分类数据上训练物体检测器。 我们的方法利用标记的detection images来学习精确定位目标,同时使用classification images来增加词汇量和鲁棒性。
使用这种方法我们训练了YOLO9000,这是一种实时目标检测器,可以检测超过9000种不同的对象类别。 首先,我们改进YOLO基础检测系统,改进出最先进的实时检测器YOLOv2。 然后,我们使用我们的数据集组合方法和联合训练算法来训练来自ImageNet的9000多个类的模型以及COCO的检测数据。
2 Better
与最先进的检测系统相比,YOLO存在各种各样的缺点。 YOLO与Fast R-CNN相比的误差分析表明,YOLO产生了大量的定位误差。 此外,与region-proposal-based method相比,YOLO召回率相对较低。 因此,我们主要关注于提高召回率和定位准确性,同时保持分类准确性。
计算机视觉通常趋向于更大,更深的网络。更好的性能通常依赖于训练更大的网络或将多个模型组合在一起。作者希望检测系统既准确又快速,YOLOv2简化网络,使结果的表示更容易被学出来。作者将以往工作中的各种创意与自己的创意融合在一起,以提高YOLO的表现。 如表2。
Batch Normalization
BN算法可以显著提高收敛性,同时不需要其他形式的正则化。 通过在YOLO中的所有卷积图层上添加BN,使mAP中获得了2%以上的改进,同时还使模型正则化。使用了BN后可以在模型中去掉Dropout,还不会产生过拟合。
High Resolution Classifier
目前先进的检测方法,都使用了在ImageNet上预训练的分类器。从AlexNet开始,大多数分类器都只处理小于256x256的图片。最初YOLO分类器的分辨率为224x224,现现在想要提高到448x448来做目标检测。这意味着网络需要同时学习目标检测并适应新输入分辨率。
为了适应新的分辨率,YOLO v2的分类网络以448*448的分辨率先在ImageNet上进行Fine Tune,Fine Tune10个epochs,让网络有时间调整他的滤波器(filters),好让其能更好的运行在新分辨率上,还需要调优用于检测的Resulting Network。最终通过使用高分辨率,mAP提升了4%。
Convolutional With Anchor Boxes
YOLO在卷积层的特征提取器上有全连接层,因此能直接预测bounding box的坐标。Faster R-CNN不直接预测bounding box的坐标,而是使用人工挑选的先验边界框。Faster R-CNN中的region proposal network(RPN)仅使用卷积层来预测 anchor boxes 的偏移量和置信度。由于预测层是卷积的,所以RPN在特征映射中的每个位置预测这些偏移。预测偏移量而不是坐标可使问题简化,并使网络更容易学习。
作者去掉了YOLO的全连接层,使用anchor boxes 来预测 bounding boxes。首先去掉了网络中的一个pooling layer,使卷积层的输出具有更高的分辨率。还将网络缩减,使其在416x416而不是448x448的输入图片上工作。We do this because we want an odd number of locations in our feature map so there is a single center cell.图片中的物体,尤其是大的物体,往往会占据图片的中心,因此有一个位于图片中心的单个位置来预测这样的物体是很好的选择。YOLO的卷积层采用32这个值来对图片降采样,所以通过选择416x416用作输入尺寸最终能输出一个13x13的Feature Map。
在处理anchor boxex时,我们将类别预测机制和空间位置预测分离开,为每个anchor box都预测类别和lobjectness。在YOLO之后,objectness prediction仍然是预测真实边界框和proposed box之间的IOU,class prediction预测的该类别的条件概率。
使用anchor boxex使准确率稍有下降,YOLO每幅图片只预测98个bounding boxes,而这个model中可以预测超过1000个bounding boxex。没有anchor boxes时,模型的mAP为69.5,召回率为81%,使用anchor boxex时,mAP为69.2,召回率为88%,尽管mAP减少,召回率的增加意味着我们的模型有更大的改进空间。
Dimension Clusters
在YOLO中使用anchor boxes时遇到了两个问题,第一个,边界框的维数是人工挑选的。网络可以在学习中调整边界框的大小,但如果挑选更好的先验边界框,神经网络更容易学习并给出好的预测。
作者在训练集的bounding boxes上使用k-means聚类来自动选择好的先验边界框。如果使用Euclidean distance的标准k-means,大边界框会比小边界框产生更多的误差。
作者想要的是好的先验边界框能够得到好的IOU,这与边界框的尺寸是无关的。因此距离度量用的是:
\[d(box,centroid) = 1 - IOU(box,cetroid)\]
作者使用多个k的值运行了k-means,画出了距离最近中心的平均IOU,如Figure 2 所示。选择k=5作为模型复杂度和准确率的一个较好的tradeoff。聚类中心和人工挑选的anchor boxes有很大不同,高而窄的边界框更多,矮而宽的边界框更少。
Table 1比较了到最近的聚类中心的IOU和到人工挑选的anchor boxes的IOU。At only 5 priors the centroids perform similarly to 9 anchor boxes with an average IOU of 61.0 compared to 60.9. If we use 9 centroids we see a much higher average IOU. 这表明使用k-means生成我们的边界框可以更好地表示模型并使其更容易学习。
Direct location prediction
在YOLO中使用anchor boxes时遇到了第二个问题:model instability,尤其是在前几个iterations。大多数不稳定性都来自预测框(x,y)位置,在region proposal networks中网络预测tx和ty值,(x,y)中心坐标由下式计算:
\[\begin{array}{l}
x = ({t_x}*{w_a}) - {x_a}\\
y = ({t_y}*{h_a}) - {y_a}
\end{array}\]
例如,tx=1的预测值将会使框向右移动anchor boxes的宽度,tx=-1会使框向左移动anchor box的宽度。如果随机初始化,模型需要很长时间才能稳定以预测合理的偏移。
作者不预测偏移量,还是沿用YOLO的方法预测相对于网格单元位置的位置坐标,这就让Ground Truth的值介于0到1之间。而为了让网络的结果能落在这一范围内,网络使用一个 Logistic Activation来对于网络预测结果进行限制,让结果介于0到1之间。
网络在每一个网格单元中预测出5个Bounding Boxes,每个Bounding Boxes有五个坐标值tx,ty,tw,th,to,他们的关系见下图(Figure3)。假设一个网格单元对于图片左上角的偏移量是(cx,cy),Bounding Boxes Prior的宽度和高度是pw,ph,那么预测的结果见下图右面的公式
\[\begin{array}{l}
{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})
\end{array}\]
由于限制了位置预测,参数更容易被学得,网络更稳定。
Using dimension clusters along with directly predicting the bounding box center location improves YOLO by almost 5% over the version with anchor boxes.
Fine-Grained Features
YOLO修改后的feature map为13x13,这个尺寸对检测图片中尺寸大物体来说足够了,同时使用这种细粒度的特征对定位小物体的位置可能也有好处。Faster F-CNN、SSD都使用不同尺寸的Feature Map来取得不同范围的分辨率,而YOLO采取了不同的方法,YOLO加上了一个Passthrough Layer来取得之前的某个26*26分辨率的层的特征。这个Passthrough layer能够把高分辨率特征与低分辨率特征联系在一起,联系起来的方法是把相邻的特征堆积在不同的Channel之中,这一方法类似于ResNet的Identity Mapping,从而把26x26x512的featur map变成为13x13x2048。YOLO中的检测器位于扩展后(expanded )的Feature Map的上方,所以他能取得细粒度的特征信息,这提升了YOLO 1%的性能。
Multi-Scale Training
初始的YOLO使用448x448分辨率,为使用anchor boxes将分辨率改为416x416。 However, since our model only uses convolutional and pooling layers it can be resized on the fly。作者希望YOLOv2能够鲁棒地运行于其他分辨率,因此把这个想法也训练到网络中。
作者没有修改输入图片的尺寸,而是每几个iterations后改变网络。每10个batches后网络随机选择新的图片维度。网络降采样的参数为32,因此所选的尺寸也为32的倍数,{320,352,......,608},因此最小为320x320,最大为608x608,网络自动改变尺寸并继续训练。
这使网络学习如何对各种不同输入尺寸的图片作出好的预测。网络在较小的分辨率下运行较快,YOLOv2在速度和准确性上达到了一个好的tradeoff。
在低分辨率下,YOLOv2可作为一种计算量较小,相当准确的检测器工作。 在288×288的分辨率下,它的运行速度超过90 FPS,而MAP几乎与Fast R-CNN一样好。 这使其成为小型GPU,高帧率视频或多视频流的理想选择。
在高分辨率下YOLOv2是一款先进的检测器,在VOC 2007上具有78.6 mAP的性能,同时仍以高于实时速度运行。 Table 3 Figure 4.
Further Experiments
在VOC 2012上训练。 YOLOv2的mAP达到73.4,运行速度比其他方法快。在COCO上训练YOLOv2,YOLOv2的mAP达到了44.0 mAP,与SSD和Faster R-CNN相当。
![](https://images2018.cnblogs.com/blog/1298001/201804/1298001-20180403200241520-662385013.png)
3. Faster
多数检测系统框架将VGG-16作为基本的feature extractor,VGG-16强大而且分类准确,但过于复杂。传入单幅224x224图片时VGG-16的卷积层需要306.9亿次浮点运算。
YOLO框架使用基于GoogLeNet的自定义网络,它比GG-16快,一次前向过程需要85.2亿次浮点运算,准确率只比VGG-16略低。 For single-crop, top-5 accuracy at 224 × 224, YOLO’s custom model gets 88.0% ImageNet compared to 90.0% for VGG-16.
Darknet-19
YOLOv2基于一个新的分类模型,与VGG-16类似,大部分使用3x3 filters并在每次pooling后将channel数量翻倍。与NIN(Network in Network)类似,使用全局平均pooling来作预测,并使用1x1的filters来压缩3x3卷积之间的特征表示。使用Batch Normalization来使训练稳定、加速收敛、使模型规范化。
最终模型Darknet-19有19个卷积层和5个maxpooling层。见Table 6。Darknet-19处理一张图片只需要55.8亿次浮点运算,在ImageNet上达到了72.9%的top-1准确率和91.2的top-5准确率。
Training for classification
网络在ImageNet 1000类分类数据集上,训练了160个epochs,使用随机梯度下降,初始学习率为0.1, polynomial rate decay with a power of 4, weight decay of 0.0005 and momentum of 0.9 using the Darknet neural network framework。
训练时使用了标准的数据增强方法:随机裁剪,旋转,变换颜色(hue),变换饱和度(saturation),变换曝光度(exposure shifts)。
在最初的224x224图片上训练后,作者把网络调整到了更大的尺寸448x448,使用上面的参数训练了10个epochs,初始学习率改为0.001。高分辨率下,网络的top-1准确率为76.5%,top-5准确率为93.3%。
Training for detection
网络去掉了最后一层卷积层,加上了三个3x3的卷积层,每层都有1024个filters,每个卷积层后都有一个1x1的卷积层, 输出数量为需要检测的输出数量(We modify this network for detection by removing the last convolutional layer and instead adding on three 3 × 3 convolutional layers with 1024 filters each followed by a final 1 × 1 convolutional layer with the number of outputs we need for detection.)对于VOC,一个网格单元预测5个框,一个框需要5个坐标,每个框有20类,所以需要125个filters。网络还添加了从最后的3×3×512层和第二层到最后一层卷积层之间的passthrough layer,以便我们的模型可以获取细粒度特征。
网络训练了160个epochs,初始学习率为0.001,在60个和90个epochs后依次除以10, weight decay of 0.0005 and momentum of 0.9。使用和YOLO、SSD类似的数据增强方法,对COCO和VOC训练时采取相同的策略。
4. Stronger
作者提出一种在分类数据和目标检测数据下联合训练的机制。使用目标检测标签的图片来学习检测特定信息,如边界框坐标预测和objectness以及如何对常见对象进行分类。使用仅有分类标签的图片来扩展其检测的类别数量。
训练时使用混合的detection和classification数据集。当网络遇到目标检测标签的图片时,用完整的YOLOv2 loss funcion来进行back propagation。当遇到类别标签的图片时,仅对整个结构中分类的loss function进行反向传播。(为什么要混合,先用detection再用classification有什么区别)
此方法遇到了一些问题,检测数据集只有粗粒度的标记信息,像“猫“、“ 狗”之类,而分类数据集的标签信息则更细粒度,更丰富。比如狗这一类就包括”哈士奇“”牛头梗“”金毛狗“等等。所以如果想同时在监测数据集与分类数据集上进行训练,那么就要用一种一致性的方法融合这些标签信息。再者,用于分类的方法,大多是用softmax layer方法,softmax意味着分类的类别之间是互斥的。而盲目地混合数据集训练,就会出现比如:检测数据集的分类信息中”狗“这一分类,在分类数据集合中,就会有的不同种类的狗”哈士奇“”牛头梗“”金毛“这些分类,这两种数据集之间的分类信息不相互独立。所以使用一种多标签的model来混合数据集,假设一个图片可以有多个分类信息,并假定分类信息必须是相互独立的规则可以被忽略。
Hierarchical classification
ImageNet的标签是从WordNet中提取的,这是一个结构概念及其相互关系的语言数据库。Most approaches to classification assume a flat structure to the labels however for combining datasets, structure is exactly what we need.
WordNet的结构是一个直接图表(directed graph),而不是树型结构。因为语言是复杂的,狗这个词既属于‘犬科’又属于‘家畜’两类,而‘犬科’和‘家畜’两类在wordnet中则是同义词,所以不能用树形结构。
作者希望根据ImageNet中包含的概念来建立一个分层树,为了建立这个分层树,首先检查ImagenNet中出现的名词,再在WordNet中找到这些名词,再找到这些名词到达他们根节点的路径(在这里设为所有的根节点为实体对象(physical object))。在WordNet中,大多数同义词只有一个路径,所以首先把这条路径中的词全部都加到分层树中。接着迭代地检查剩下的名词,并尽可能少的把他们添加到分层树上,添加的原则是取最短路径加入到树中。
最后的结果是WordTree,一个视觉概念的分层模型。 为了使用WordTree进行分类,我们预测每个节点的条件概率,以得到synset的每个同义词下标的概率。 例如,在terrier node我们预测:
Pr(Norfolk terrier|terrier)
Pr(Yorkshire terrier|terrier)
Pr(Bedlington terrier|terrier)
为了计算某一结点的绝对概率,只需要对这一结点到根节点的整条路径的所有概率进行相乘。所以比如你想知道一个图片是否是Norfolk terrier的概率,则进行如下计算:
Pr(Norfolk terrier) = Pr(Norfolk terrier|terrier)
∗Pr(terrier|hunting dog)
∗...∗
∗Pr(mammal|Pr(animal)
∗Pr(animal|physical object)
相当于一串条件概率相乘。假定Pr(physical object)=1
为了验证这一个方法,在WordTree上训练Darknet19的model,使用1000类的ImageNet进行训练,为了建立WordtTree 1K,把所有中间词汇加入到WordTree上,把标签空间从1000扩大到了1369。在训练过程中,如果有一个图片的标签是”Norfolk terrier“,那么这个图片还会获得”狗“(dog)以及“哺乳动物”(mammal)等标签。总之现在一张图片是多标记的,标记之间不需要相互独立。为了计算条件概率,我们的模型预测了1369个值的向量,并且我们计算了相同概念的下标的所有sysnsets上的softmax,参见Figure 5。
使用相同的训练参数,这种分层结构的Darknet19达到71.9%top-1精度和90.4%top-5精确度,精度只有微小的下降。
以这种方式进行分类也有一些好处。 对于新的或未知的对象类别性能会降低。 例如,如果网络看到一张狗的照片,但不确定它是什么类型的狗,它仍然可以高度置信地预测“狗”,但在下面的子类中有较低的置信度。
该方法也适用于detection。 现在,网络不是假定每个图像都有一个对象( 即Pr(physical object)=1 ),而是使用YOLOv2的objectness predictor给我们Pr(physical object)的值。 检测器预测边界框和概率树。 我们遍历树,在每次分割中采用最高置信度路径,直到达到某个阈值,然后我们预测该对象的类别。
Dataset combination with WordTree
作者可以用WordTree以合理的方式将多个数据集组合在一起,只需将数据集中的类别映射到树的中synsets即可。Figure 6显示了一个使用WordTree组合来自ImageNet和COCO的标签的示例。WordNet非常多样化,所以我们可以将这种技术用于大多数数据集。
Joint classification and detection
目标是训练一个extremely large scale detector,使用COCO detection datasets和ImageNet中的top 9000类组成联合数据集,为了评估此方法,还加入了ImageNet detection challenge中未包括进去的一些类。混合后的数据集的WordTree有9418类,由于ImageNet比COCO大得多,因此我们对COCO进行了oversampling使得COCO和ImageNet数据量比为1:4。
使用此数据集训练YOLO9000,用的是基础的YOLOv2架构,但只有3个priors而不是5个来限制输出大小。当网络遇到检测数据集中的图片时则正常地反向传播,对于分类误差,只对这一级或以上标签的loss反向传播。 For example, if the label is “dog” we do assign any error to predictions further down in the tree, “German Shepherd” versus “Golden Retriever”, because we do not have that information. 当遇到分类数据集图片的时候,只使用分类的loss功能进行反向传播。为此我们只用概率最高的bounding boxes并计算其loss,我们还假设预测框与的真实边界框重叠的IOU至少为0.3,并且基于这个假设对objectness loss进行反向传播。
使用联合训练法,YOLO9000使用COCO检测数据集学习检测图片中的物体的位置,使用ImageNet分类数据集学习如何从大量的类别中进行分类。
为了评估这一方法,使用ImageNet Detection Task对训练结果进行评估。
ImageNet detection task与COCO有44个类型相同,这意味着对于大多数测试类别,YOLO9000都只看到过classification数据而没有看到过detection数据。 YOLO9000在整个数据集中mAP为19.7,其中在不相交的、它从未见过任何标记的检测数据156个类别中mAP为16.0。这个mAP高于DPM的结果,但YOLO9000仅在部分监督下接受不同数据集的训练。它也能同时实时检测9000个其他类别。
虽然YOLO9000对动物的识别性能很好,但是对类别为”sungalsses“或者”swimming trunks“这些衣服或者装备的类别,它的识别性能不是很好,见Table 7。这跟数据集的数据组成有很大关系。COCO中没有任何衣服的bounding box label。
5. Conclusion
YOLOv2在各种检测数据集中都是最先进的,并且比其他检测系统更快。 此外,它可以在各种图像尺寸下运行,达到速度和准确性之间的tradeoff。
YOLO9000是一个实时框架,通过联合优化检测和分类来检测超过9000个对象类别。 我们使用WordTree将各种来源的数据和我们的联合优化技术相结合,在ImageNet和COCO上同时进行训练。 YOLO9000 is a strong step towards closing the dataset size gap between detection and classification.
我们的许多技术都是在目标检测之外推广的。 ImageNet的WordTree表示为图像分类提供了更丰富,更详细的输出空间。 使用分层分类的数据集组合可以用在分类和分割领域。 像多尺度训练这样的训练技术对各种视觉任务有好处。