YOLO9000: Better, Faster, Stronger

YOLO9000: Better, Faster, Stronger
1.介绍

(1)大多数检测方法受限于小目标

(2)YOLOv2可以检测9000多种不同的物体

更好

(1)由于YOLO的缺点,我们的目标是提高召回和定位,同时保持分类的准确性。
待看:
YOLO与Fast R-CNN的错误分析表明,由大量的定位错误。
YOLO与基于区域候选的方法相比,召回率较低。

(2)
虽然:更好的性能通常取决于训练更大的网络或将多个模型集成在一起。
但是:我们不是扩展我们的网络,而是简化我们的网络,然后使表示更容易学习。

批处理规范化 (Batch Normalization) BN

(1)批处理归一化在收敛方面有显著的改进,同时消除了其他形式正则化的需要。因为神经网络每层输入的分布总是发生变化,通过标准化上层输出,均衡输入数据分布,加快训练速度。可以设置较大的学习衰减率,而不用去在意初始化参数,BN总能快速收敛。

(2)通过在YOLO所有的卷积层上添加批量归一化,我们得到了超过2%的mAP的改进。

(3)批处理规范化还有助于对模型进行规范化

(4)通过批量归一化,我们可以在不进行过拟合的情况下删除dropout(卷积后参数过大,易梯度爆炸,消失,过拟合)

BN的做法是:在卷积池化之后,在激活函数之前,对每个数据进行规范化(均值为0,方差)
在这里插入图片描述

高分辨率的分类器

(1)原始的YOLO先用224*224训练分类器,将分辨率提高到448*448用于训练检测器。 (猜想:分类器模糊一点可能也能识别出类别,检测器可能对定位和边框的要求高一点)这意味着网络必须同时切换到学习目标检测和新的输入分辨率。

在YOLOv2中,首先在ImageNet上以448*448的分辨率对分类网络进行10个迭代的微调。这给了网络时间去调节它的过滤器更好的在高分辨率的图像上工作。

使用anchor box 的卷积

YOLOv2与v1相比
1.去掉全连接层,为了引入anchor box
2.去掉后面的一个池化层(原来2个),为了增加分辨率
3.将输入分辨率调整为416*416,为了后面产生的卷积特征图宽高为奇数,这样就可以产生一个center cell,因为作者观察到大物体通常占据了图像的中心。
4.卷积层降采样(factor=32),输入416,得到13.
5.效果:召回率上升。
v1:recall 81%, mAP 69.5%, bounding box:(7*7*2).
v2:recall 88%,mAP 69.2%, anchor box(13*13*5).
更细的格子划分对小目标更友好。

维度的聚类

(1)使用精选的先验框
开始就选择更好的,更具代表性的先验框维度,网络更容易学到准确的预测位置。(使用 k-means在训练集中聚类得到的anchor box可能更好)

传统的k-means使用的是欧式距离,这就意味着较大的边框比较小的边框产生更多的错误。,为此作者采用的评判标准是IOU得分
d(box, centroid) = 1 - IOU(box, centroid)

在召回率和模型复杂度之间进行了平衡,取k = 5,(其中瘦高的框更多)

直接的位置预测

对应cell距离左上角的的边距为(cx, cy),σ定义为sigmoid激活函数,将函数约束值约束到[0, 1],预定Anchor对应的宽高为(Pw, Ph),(tx, ty,th,tw)是预测的参数
在这里插入图片描述

(1)在YOLO中使用anchor box可能导致模型不稳定中心点可能出现在图像的任何位置,有可能导致回归震荡(来自于(x,y)位置的预测)

(2)由于我们对位置进行了约束,使得参数化更容易学习,网络更加稳定。

(3)与使用anchor box 相比,使用维度聚类和直接位置预测bounding box中心坐标可以提升YOLO 5%的mAP。

Fine-Grained Features(细粒度特性)

(1)改进的YOLO可以在13*13的特征图上预测,这对于大目标来说已经够了,但对于小目标来说,更细粒度的划分可能会带来好处。
(2)Faster R-CNN和SSD都在网络中不同的特征图上运行他们的候选网络,来获得一系列分辨率。

v2采取不同的方法,通过添加一个passthrough layer,获取前一个卷积层26*26分辨率的特征图信息,并将该特征同最后的输出特征(13*13)融合起来,提高小目标的检测能力。
(通过Passthrough 把26*26*512的特征图叠加成13*13*2048的特征图,与原生的深层特征图相连接)

YOLO v2使用扩展后的特征图将mAP提高了1%

在这里插入图片描述

Multi-Scale Training(多尺度训练)

YOLOv1网络使用448*448图像作为输入,v2加入anchor box后输入图像变成416*416.

v2只用到了卷积层和池化层,因此可以动态调整输入图像的尺寸。

和v1训练网络固定输入图像尺寸不同,v2每隔几次迭代后就会微调网络输入图像的尺寸。训练时每迭代10次,就会随机选择新的输入图像的尺寸,因为v2网络使用downsample倍率为32,所以使用32的倍数调整输入图像尺寸{320,352…608}

这种策略让v2网络不得不学着对不同尺寸的图像的输入都要预测的很好,这意味着同一个网络可以胜任不同分辨率的检测任务,在网络训练好以后,在使用时只需根据需求修改cfg文件中的网络输入图像尺寸即可。

v2在检测速度和精度上达到了很好地平衡。

Faster

YOLO框架使用一个基于Googlenet 架构的自定义网络,它的网络比VGG-16快,
操作少,但是精确度与之相比较差

Darknet-19

YOLOv2的分类网络叫做Darknet-19,他对一张224*224的图像做一次前传计算
要做55.8亿次浮点运算在ImageNet上精度为91.2%,比YOLOv1更快,比VGG-16更高。

类似VGG网络,Darknet-19中使用了较多的3*3卷积核,在每一次池化操作后把通道数翻倍(提取特征),也借鉴了Network in Network的思想,使用了全局平均池化,还把1*1的卷积核置于3*3的卷积核之间用来压缩特征。使用BN稳定模型训练,加速收敛并泛化模型。

训练

(1)预训练-训练分类网络(Training for classification)
采用随机梯度下降法SGD,参数设定:

初始学习率-starting learning rate:0.1
多项式速率衰减-polynomial rate decay:4的幂次
权值衰减-weifht decay:0.0005
动量-momentum:0.9

初始训练网络输入224*224,在ImageNet-1000分类数据集上训练了160个epochs,输入分辨率切换到448*448进行fine tune(学习率调整到0.001),训练10个迭代。

(2)数据增广方法(Data augmentation)
采用了常见的数据增广方法:
随机裁剪、旋转:random crops,rotations
色调,饱和度,曝光偏移-hue、saturation、exposure shifts

(3)多分辨率训练
通过初始的224*224训练后,把分辨率上调到了448*448,同样的参数又训练了10个epochs,然后将学习率调整到了 1 0 − 3 10^{-3} 103

(4)训练检测网络-Training for detection
把分类网络改成卷积网络,去掉原网络最后一个卷积层,增加三个3*3(1024 filter)的卷积层,,并且在每个卷积层后面跟一个卷积核尺寸为1*1的卷积层(B*(5+C))
我们用160(10,60,90)个迭代来训练网络,开始学习率为 1 0 − 3 10^{-3} 103

更强

我们提出了一种分类与检测数据联合训练的机制。

(因为分类数据的标注成本较低,甚至很多数据自带标签。然而识别的标签一定要手工标注,
导致很难获得大量的数据。而YOLO的分类和检测本身互相并没有太大的关联性,所以作者
使用ImageNet和COCO数据集联合训练来提升网络的性能。)

我们使用有标签的图像用于检测网络来学习特定的检测信息,如边界框预测和置信度,
以及如何对常见的对象进行分类。

在训练中,我们混合来自检测和分类的数据集图像。
当我们的网络看到用于检测的标签图像时,我们可以基于完整的YOLOv2丢失函数进行反向传播。当遇到分类图像时,我们只是从体系结构的特定的分类部分反向传播。

这种方法的提出遇到了一些挑战,因为分类数据集比检测数据集有更加广泛和更深的标签范围。
如果我们想训练这两个数据集,我们需要一个连贯的方式来合并这些标签。
大多数分类方法都使用一个跨所有类别的softmax层来计算最终的概率分布。
(使用softmax假设这些类是互斥的)
但是这为组合数据集带来了问题,例如其中有的类别并不互斥,因此我们使用一个多标签模型来组合数据集。

层次分类

大多数分类方法都采用标签的扁平化结构,然而对于结合数据集来说,结构才是我们需要的。

WordNet的结构是一个有向图,而不是树,因为语言很复杂。
我们没有使用完整的图结构,而是从ImageNet中的概念构建层次树结构来简化问题。
为了构建这颗树,我们检查ImageNet中的可视名次,并查看他们通过WordNet图到根节点
(在本例中为物理目标)的路径。如果只有一条路径,则首先添加他,如果有多条路径,
我们选择较短的那条路径。

为了使用WordTree进行分类,我们预测每个节点的条件概率,即给定的同义词集合中的下义词。
如果我们想计算一个特定节点的绝对概率,只需沿着树的路径到达根节点,然后乘以条件概率。
在训练期间,我们将真实标签传播到树上,例如一张图像时诺福克梗,他也会被标签为狗,
哺乳动物等。为了计算条件概率,我们的模型预测了一个值为1369的向量,
然后我们计算相同概念的次元组

探测器预测一个边界框以及概率树,我们沿着树向下移动,在每一个分割线上选取最可靠的路径,直到到达某个阈值,然后预测目标类。

数据集和WordTree结合

我们可以使用WordTree以一种合理的方式将多个数据集组合在一起,我们只需将数据集中的类别映射到树上的同义词集中。WordNet是非常多样化,所以我们可以与大多数数据集使用这种技术。

联合分类和检测

现在我们可以使用WordTree组合数据集,在分类和检测上训练我们的联合模型。我们想要训练一个超大规模的检测器,所以我们使用COCO检测数据集和来自完整的ImageNet版本的9000多个顶级类来创建我们的复合数据集。
我们还需要评估我们的方法,因此我们添加了来自
ImageNet的还没有包括在内的挑战类。ImageNet是一个更大的数据集,所以我们通过对COCO进行过采样来平衡数据集,因此ImageNet只比大4:1。

我们使用基本的YOLOv2架构,但是只有3个先验而不是5个先验来限制输出大小。当我们的网络检测一个图像时,正常反向传播损失。对于分类损失,我们只在标签对应的等级上反向传播损失。我们要找到预测类最高概率的边界框,然后计算它的预测树损失。我们还假设,预测框和真实标签至少有3个IOU的重叠,并基于此假设反向传播目标损失。

通过这种联合训练,YOLO9000学会使用COCO中的检测数据,在图像中找到目标,并使用ImageNet的数据对各种目标进行分类。
ImageNet的检测任务与COCO共享44个对象类别,,这意味YOLO9000只看到大部分测试图像的分类数据而没有检测数据。

总结

YOLOv2
(1)比其他检测系统在各种各样的数据集上运行的更加先进,快速。

(2)此外,他可以运行在各种大小的图像上,为速度与精确度提供一个很好平衡。

YOLO9000
(1)通过联合优化检测和分类来检测9000多个目标类别的实时框架。
(基于YOLOv2的一个分类网络)

我们使用WordTree来组合来自不同来源的数据,同时使用我们的联合优化技术在
ImageNet和COCO上进行训练。

YOLO9000是缩小检测和分类数据集大小差异的有力的一步。

使用层次分类的数据集组合在分类和分割领域将是有用的

常识:
参考:
YOLOv2论文理解
YOLOv2 论文解读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值