本文介绍的是2017年IEEE发布的文章YOLO9000:Better, Faster, Stronger.
资源获取:https://pjreddie.com/darknet/yolo/
YOLO9000是一个可以检测超过9000个对象的实时目标检测系统,性能优越。
INTRIDUCTION
目前很多目标检测方法都受限于小的目标类。相对于分类和标记任务,数据集有限,最常见的检测数据集包含数千到数十万张带有数十到数百个标签的图像 ,而分类数据集有数百万个图像,包含数万或数十万个类别。 因此作者想把检测扩展至目标分类的级别,但是标记检测所用的图像代价很大,所以采用一个新方法:使用目标分类的层次视图将不同的数据集结合在一起。
提出了一种联合训练算法可以在检测和分类数据上训练目标检测器,使用被标记的检测图像学习精确定位目标,使用分类图像增强词汇量和鲁棒性。
BETTER
YOLO相对于其他检测系统有很多缺点,如定位错误多,低召回率等,所以YOLOv2 对他的提高聚焦于维持分类精确度的同时提高召回率和定位准确度。
计算机视觉领域倾向于更深更大的网络,但这就会运行很慢,YOLOv2 简化了网络,试图精确度和快速同时兼得。结果总结如表Table2:
Batch Normalization:
在YOLO的所有卷积层添加batch normalization,mAP得到超过2%的性能提高,batch normalization可以显著提高收敛性,消除对其它正则化的需求,有助于正则化模型,可以去除dropout而不用担心过拟合问题。
High Resolution Classifier:
YOLO在224*224的图片上训练分类网络然后为了检测增加分辨率到448。YOLOv2首先在ImageNet上以448*448的分辨率微调分类网络10个epochs,使网络有时间调整滤波器使得对高分辨率的输入图像也能工作良好,然后微调网络用于检测。该高分辨率分类网络提高mAP4%。
Convolutional With Anchor Boxes:
YOLO在卷积特征提取器的顶部用完全连接层预测锚框的坐标,Faster R-CNN使用手工提取的先验预测锚框(非坐标),RPN in Faster R-CNN仅仅使用卷积层预测anchor boxes 的偏移和置信度,可以预测特征图中每个位置的偏移;预测偏移简化了问题使网络更容易学习。
但我们不预测偏移,YOLOv2移除了YOLO的完全连接层,使用anchor boxes预测锚框:首先去除一个池化层使网络卷积层的输出有更高的分辨率,再收缩网络去操作416维的图片,而非448,这样就可以再特征图里获得奇数个位置,使得只有一个中心cell,对大目标预测更好,而非周围的四个定位点。YOLO的卷积层使用32的下采样,所以输出特征图变为13*13.和Yolo一样,目标预测仍然预测真实标签和box的IOU,类预测预测有一个目标在类中的条件概率。
使用Anchor Boxes:我们得到精确度的轻微下降,但是预测的BOXES可以超过1000(YOLO98个),没有Anchor Boxes,得到69.5mAP,召回率81%,使用Anchor Boxes:,得到69.2mAP,召回率88%。
Dimension Clusters:
使用anchor boxes时由于box维度手工设计,如果我们有更好的先验知识,网络能更容易学习预测。但我们没有选择手工先验,我们在训练中使用k-means clustering 让boxes自动寻找好的先验,其中如果使用标准的欧式距离,大boxes会比小boxes产生更多的错误,所以我们使用如下公式计算距离。
使用不同的K值评估与最近的质心的平均IOU,选择K=5,使得模型复杂度和召回率都比较好。
与我们以前的CLUSER方法和手工ANCHOR BOXES比较平均IOU,如表1,在5个先验时,平均IOU61.0,9个先验时anchor boxes 平均IOU60.9,表明使用k-means生成锚框使得模型有更好的表示,更容易学习。
Direct location prediction:
使用anchor boxes时有模型不稳定性的问题,尤其在早期迭代过程中。不稳定主要来源于预测box的(x,y)定位,RPN使用随机的初始化使得模型需要很长时间才能稳定去预测偏移。
我们和YOLO一样不预测偏移,而是预测相对于网格cell位置的定位坐标,使用逻辑回归限制真实值落在0和1 之间。网络在特征图的每个cell预测5个锚框,每个锚框5个坐标,tx,ty,tw,th,to,当cell偏移左上角(cx,cy),锚框有先验宽高pw,ph时,预测响应为:
与使用锚框的版本相比,使用Dimension Clusters:以及 Direct location prediction:边界框中心位置将 YOLO 提高了近 5%。
Fine-Grained Features.
修正的YOLO在13*13的特征图上预测,对大目标良好,但进一步细粒度特征可以使其对小目标检测更好,我们添加一个传递层以 26 × 26 的分辨率从较早的层中引入特征。
类似于ResNet 中的恒等映射,传递层通过把邻近特征堆叠在不同的通道上而非空间位置上,把高分辨率特征和低分辨率特征结合起来,把26*26*512的特征图映射为13*13*2048,与最初的特征相连。.我们的检测器运行在这个扩展的特征图上,以便访问细粒度的特征。提高 1% 的性能。
Multi-Scale Training.
因为我们的模型只使用卷积层和池化层,所以可以随意的改变大小,我们想要YOLOV2能够足够强健地运行在不同大小的图像上,所以我们每经过一些迭代改变网络。每10batches网络随意地选择新的图像维度继续训练,因为我们用32的下采样,所以使用维度32的倍数{320,352,,,,608}。
这意味着同样的网络可以在不同的分辨率上预测检测,在小尺寸上运的更快,所以 YOLOv2 在速度和准确性之间提供了一个简单的权衡。
Further Experiments.
与其他方法相比展示出可比较的性能,73.4mAP,运行的更快。
在 VOC 指标 (IOU = .5) 上,YOLOv2 获得 44.0 mAP,与 SSD 和 Faster R-CNN 相当。
FASTER
很多检测框架使用VGG-16作为特征提取器,但他很复杂,YOLO使用Googlenet结构,操作更快,但精确度轻微下降。
Darknet-19
我们使用这个网络作为YOLOv2的分类模型,使用3*3滤波器,在每一个池化层后把通道数量翻倍,使用全局平均池化做预测,在3*3的卷积层之间1*1滤波器压缩特征,使用batch normalization稳定训练,加速收敛,正则化模型。 模型有19个卷积层,5个最大池化层,结构如表6.requires 5.58 billion operations to process an image yet achieves 72.9% top-1 accuracy and 91.2% top-5 accuracy on ImageNet
Training for classification.
使用ImageNet的1000类分类数据集160epochs训练网络,使用SGD,开始lr=0.1,使用Darkenet nn framework,多项式速率衰减为 4 次方,权重衰减为 0.0005,动量衰减为 0.9。训练中,使用标准数据增强。
在最初的224*224的训练后,微调网络到448,训练10epochs,lr=10e-3,更高的分辨率达到top1精确度76.5%,top5 93.3%.
Training for detection
除去最后的卷积层添加3个有1024滤波器的3*3的卷积层,然后是1个1*1卷积层,输出和我们检测需要的一样。对于VOC,添加一个传递层在最后的3*3*512的层到倒数第二个卷积层,使得特征细粒度。
训练网络160epochs,lr=10e-3,在60和90epochs时除以10,使用权重衰减0.005,动量0.9,在COCO和VOC数据集使用一样的训练策略。
STRONGER
使用标记为检测的图像来学习检测特定的信息,如边界框坐标预测和对象以及如何对常见对象进行分类。使用只有类标签的图像扩展用于检测的类别数量。
训练中混合检测和分类数据集,当网络遇到检测图像时,基于整个YOLOv2损失函数反向传播,当遇到分类图像时,仅仅从结构的具体分类的部分反向传播损失。如果我们想在两个数据集上进行训练,我们需要一种联合的方式来合并这些标签。有些方法使用softmax layer,加沙类互相排斥,但实质不是,所以我们使用一个多标签模型结合数据集。
Hierarchical classification.
我们计算所有是同一概念的下位词的 sysnset 的 softmax。
为了构建 WordTree1k,我们添加了所有将标签空间从 1000 扩展到 1369 的中间节点。尽管添加了 369 个额外的概念并让我们的网络预测树结构,但我们的准确度仅略有下降。
公式也适用于检测。现在,我们不再假设每个图像都有一个对象,而是使用 YOLOv2 的对象性预测器来为我们提供 P r(物理对象)的值。检测器预测边界框和概率树。我们向下遍历树,在每次拆分时采用最高置信度路径,直到达到某个阈值并预测该对象类别。
Dataset combination with WordTree.
使用 wordtree结合数据集。WordNet 非常多样化,因此我们可以将这种技术用于大多数数据集。
Joint classification and detection.
使用coco检测数据集和ImageNet中的前90000个类创建一个数据集,为了评估,添加不包含在Imagenet中的类,该数据集对应的 WordTree 有 9418 个类。 ImageNet 是一个更大的数据集,因此我们通过对 COCO 进行过采样来平衡数据集,以便 ImageNet 仅以 4:1 的因子大。
使用YOLOv2,使用3个先验框而不是5限制输出尺寸,当我们的网络看到检测图像时,我们会像往常一样反向传播损失。对于分类损失,我们只在标签的相应级别或更高级别上反向传播损失。.当看到分类图像时,只反向传播分类损失。
使用这种联合训练,YOLO9000 学习使用 COCO 中的检测数据在图像中查找对象,并学习使用 ImageNet 中的数据对各种这些对象进行分类。
我们在 ImageNet 检测任务上评估 YOLO9000。 ImageNet 的检测任务与 COCO 共享 44 个对象类别,这意味着 YOLO9000 只看到大多数测试类别的分类数据。YOLO9000 总体上获得了 19.7 mAP,在它从未见过任何标记检测数据的不相交的 156 个对象类上获得了 16.0 mAP。
YOLO9000 能很好地学习新的动物物种(coco中),但在学习类别(如服装和设备)上很难,
5.conclusion
引入YOLOV2,YOLO9000,YOLOV2是一个快速的检测系统,可以运行在不同尺寸的图片上,速度和精确度有保障。
YOLO9000是一个检测实时框架,使用联合优化检测分类,可以检测超过9000个目标,使用WORDTREE结合不同源的数据集。YOLO9000 是朝着缩小检测和分类之间的数据集大小差距迈出的重要一步。
对于未来的工作,我们希望使用类似的技术进行弱监督图像分割。我们还计划使用更强大的匹配策略来改进我们的检测结果,以便在训练期间为分类数据分配弱标签。计算机视觉拥有大量标记数据。我们将继续寻找将不同来源和数据结构结合在一起的方法,以构建更强大的视觉世界模型。