YOLO9000: Better, Faster, Stronger

来源:互联网 发布:拓扑发现 泛洪算法 编辑:程序博客网 时间:2024/05/16 12:01

Abstract

作者提出YOLO9000,在速度相当的情况下,YOLO9000比ResNet 和 SSD 获得更高的精度。并且,作者提出一种joint training 的方法,把detection dataset 和classification dataset 结合起来,产生一种检测9000种类别的detector.


Introduction

目前来说,公开的detection dataset 的数据量相对于classification dataset 的数据量来说要少。而且,标注for detection比 for classification 要麻烦,所以要贵一些。

作者在本文的贡献:1. 介绍YOLOv2, 加入各种trick 来提升YOLO.

                                 2. 提出了一种dataset combination 方法,并提出 joint training 算法.



Better

Batch Normalization

对所有的conv层采用BN能够让网络更好的收敛,同时可以替代掉一些其他形式的regularization,而且可以去掉防止overfitting的dropout层。最终提升2% mAP。

 

High Resolution Classifier

YOLOv2为了提高分辨率for detection,先fine-tune theclassification network at the full 448x448 resolution for 10 epochs onImageNet. 然后 fine-tune the resulting network on detection. 最终提升4% mAP.

 

Convolutional With Anchor Boxes

预测偏移(offsets) 而不是直接预测坐标(coordinates) 能够简化问题,让网络更加容易学习。

YOLOv2将输入从448x448改为416x416,是为了获得奇数的locationsin feature map so threre is a single center cell. 最终输出的featuremap 为13x13. YOLO 只预测98个boxes, YOLOv2加入了anchor 策略后,可以预测上千个boxes, recall 从81% 提升到88%, 虽然mAP从69.5 降到了69.2.

 

Dimnsion Clusters

在设置anchor 的比例时,相比于直接手工的设计比例,先用k-means聚类对原训练集进行聚类后再设置比例,能够获得更好的IOU,因为这相当于增加了一些先验信息。而获得更好的IOU,则有助于网络的训练。而在k-means选择现在度量距离的时候,并不是直接选择欧氏距离,而是选择 d(box, centroid) = 1 – IOU(box, centoid), 因为我们关心的是IOU,这无关于box的大小,而欧氏距离会受box大小的影响。最终选择k =5.

 

Direct location prediction

采用anchor的策略之后,YOLO的预测公式使得模型的训练不稳定,尤其是在刚开始的时候。所以作者调整了预测的公式,并预测5个bounding box with (tx, ty, tw, th, to),如下图所示:



pw, ph 是bounding box prior 的width 和 height.

 

当对参数的取值进行了约束之后,网络就更容易学习了,且学习得更好。最终提高了5% 的性能。

 

 

Fine-Grained Features

为了解决物体尺寸有大有小问题,Faster RCNN 和 SSD 采用的是在多层的不同分辨率的feature map 上进行预测。但是YOLO则还是采用13x13 的feature map上,但另外增加了一个passthrough layer 将一个earlier layer at 26x26 resolution 连接到 最末端的13x13的 feature map上。具体是,类似于ResNet的 identitymappings,将 26x26x512的feature map 转换成 13x13x2048的feature map. 最终提高1%的性能。

 

Multi-Scale Training

YOLOv2是fully convolutionalnetwork,所以对输入是没有限制的。于是,作者采用了multi-scale training。具体的是,网络是一个权值共享的网络,但是输入的图片大小可以是{320, 352, …, 608} ,训练时每10个batches 随机选取一种size。这样使得模型不需要固定一种输入尺寸,选取小尺寸时,可以获得更快的速度,大尺寸可以获得更高的精度。十分灵活。





Faster

VGG-16 性能很好,但是结构有点过于冗余了。对于一个224x224的输入,VGG-16需要30.69billion 的浮点运算,而GoogleNet只要 8.52 billion. 精度方面top-5, VGG-16是90%,GoogleNet为88%。作者提出了一个新的网络结构,命名Darknet-19.

 

Darknet-19

包含19个conv和5个maxpool,需要5.58 billion浮点运算,top-5精度91.2%。

基本采用3x3 filter 和 double the number of channels after every pooling step.

采用 global average pooling 和 1x1 filter, 为了压缩 featuremap.

采用 BN to stabilize training, speed up convergence, and regularize themodel.

 

Training for classification

1.      1000 class, ImageNet, 224x224

2.      SGD, 160 epochs, base lr = 0.5,power = 4, weight decay = 0.0005, momentum = 0.9.

3.      采用data augmentation: random crops, rotations, and hue(色调),saturation(饱和度), and exposure shifts.

4.      fine-tune for 10 epochs, baselr = 0.001, 448x448.. top-5 精度 93.3%

 

Training for detection

1.      移除了最后的conv, 另外增加3个3x3x1024 的conv,每个conv后还另外增加1x1的filter,数量为 the number of output we need for detection. 举个例子,预测5个box,有5个坐标和20个种类,则是number= 5x(5+20) = 125.此外,还增加 passthrough layer 从倒数第二个卷积层到最后一个卷积层。

2.      160 epochs, base lr = 0.001, 在60和90 epoch 缩小10倍, weightdecay = 0.0005, momentum = 0.9.

 

 

Stronger

YOLOv2结合了detection 和classificationdataset,对于detection 数据,后向传播完整的loss, 而classification数据,后向传播部分的loss。此外,由于一些标签不是互相独立的,例如,”Norfolk terrier”和“YorkShire terrier” 同样属于 “dog”,所以需要建立一种 multi-label的model。

 

Hierarchical classification

 

WordNet是一种图型的结构,因为有些标签属于多个种类,例如 “dog”属于”canine”又属于”domesitc animal”。为了简化问题,作者提出一种分层次的树。

ImageNet里大多数词是只有一条路径的,所以先把这些词加到树里面。再对于剩下的有多条路径的词,把他们添加树里,并且只选择一条且仅一条最短的路径。最种构造作者提出的这种WordTree。取ImageNet的1000类,则构成了1369个节点,每个节点预测一个条件概率,例如:


而某一种类的概率则表示成:



在训练的时候,如果ground truth标注为”Norfolk terrier”,则它也会被标注为”dog”, “mammal”(沿着路径).

 

这样就能够把1000类扩展到1369类了,同时分类的性能在top-1和top-5标准下只是稍微的降低了一点。而这种方式,有一个好处,就是,输入一张“dog”的图,YOLOv2可以预测出它是狗 with high confince,即使没办法分类它具体是什么狗(它的下义)。

 

Dataset combination with WordTree

这种WordTree可以方便拓展结合其他数据库,例如,结合ImageNet和COCO.





Joint classification and detection

 

作者取了ImageNet 的top9000种类,并结合COCO, 最终WordTree 产生9418类。为了平衡数据集,取样本时COCO:ImageNet = 4:1.

在训练YOLO9000时,作者采用了3个prior而不是之前的5个。

对于detction图片则正常反向传播loss 。并且,标签为”dog”的只传播”dog”及路径以上的loss,没法传播下义的loss,因为我们并不知道他是不是金毛或其他狗。

对于classification图片只传播相应的label loss。

YOLO9000在ImageNet上测试,获得16.0mAP,其中156种类在训练时没有从ImageNet中抽取样本。

 

Conclusion

作者创新的地方主要在:

1. YOLO9000,提出WordTree,便于合并detection和classification dataset,这能迁移到其他领域,比如segmentation.

2. Multi-scale training,有助于解决处理不同尺度的视觉任务。

作者将在未来将这些技术应用到weakly supervised的 segmentation上。

 

 



个人感觉:这个文章在介绍YOLOv2的时候,像是在看实验技术报告……因为介绍了各种trick和具体的训练策略。但是创新的地方还是很有趣的,比如YOLO9000提出的WordTree,以及Multi-scale training,不同的输入,原来是可以共享一个网络的。

 

本文是个人的读书笔记,同时参考了大神的博文,感谢大神的分享:

http://blog.csdn.net/hysteric314/article/details/53909408





0 0
原创粉丝点击