YOLOv2与YOLO9000算法详解

YOLOv2与YOLO9000算法详解

论文背景

论文全称:YOLO9000: Better, Faster, Stronger
论文链接:https://arxiv.org/abs/1612.08242
论文日期:2016.12.25

首先在YOLO算法的基础上进行了改进,称为 YOLOv2。
在YOLOv2算法的基础上,对数据集进行了融合,提出一个实时检测算法,能识别超过9000类对象,算法被称为YOLO9000。

本文提出了一种能联合训练目标检测与分类的方法,这种联合训练允许YOLO9000预测没有检测数据标签的对象类的检测。
既能保证检测速度,又能保证准确率:

  • At 67 FPS, YOLOv2 gets 76.8 mAP on VOC 2007.
  • At 40 FPS, YOLOv2 gets 78.6 mAP。

算法简介

相对于分类任务,目标检测任务的数据集图片数目以及标签更小,同时检测的标签图片比分类的标签图片更昂贵。因此,我们不太可能在不久的将来看到与分类数据集具有相同规模的检测数据集。

本文希望能提出一种新的方法,能利用原有的分类数据集来拓展检测系统。因此使用一种目标分类问题中的分层观念,这样就允许将不同的数据集结合起来。

本文也提出一种联合训练的方法,在检测与分类数据上均训练目标检测器。提取标签检测图像,以便学习精确定位对象,同时考虑分类图像以增加其词汇量和鲁棒性。

之前的算法只能检测少部分的对象。YOLO9000能检测9000类样本。

算法细节

优化方向:

  • YOLO与Faster RCNN相比,YOLO有很显著的定位误差;
  • 相对区域检测算法,YOLO有更低的查全率(recall)。

神经网络结构改进:

  • 不进行神经网络尺寸的扩大,而进行神经网络的简化,从而使表示更容易学习。

YOLOv2

BN:
在所有的卷积层都加入了BN(局部正则化),准确率提高了2% mAP。在加入BN之后,可以移除dropout。

High Resolution Classifier:
输入图片由224×224调整至448×448,准确率提高了4% mAP。

Convolutional With Anchor Boxes:
YOLO直接使用全连接层预测边界框的坐标,而不是使用手工挑选的标签预测边界框
FasterR-CNN使用RPN预测偏移与锚框的置信度。因为预测层是卷积层,在特征图的每一个位置都要预测偏移,因此预测偏移比预测坐标要简单。

移除YOLO的全连接层,并且使用锚框来预测边界框,首先消除一个池化层,使卷积层输出分辨率更高。
同时还使用神经网络处理416×416的输入图片,而不是448×448。
我们需要在特征图上有奇数个位置,因此只有一个中心单元格,尤其是大目标,会占据图片的中心,因此最好在中心有一个位置来预测这些物体而不是四个位于其附近的物体。 YOLO的卷积层将图像采样为32倍,因此通过使用416的输入图像,我们得到13×13的输出特征图。

当我们移动到锚框时,我们还将类预测机制与空间位置预测分离,预测每个锚箱的类和对象。 在YOLO之后,对象预测仍然预测相对于真实标签的IOU,并且类预测在给定存在对象的情况下预测该类的条件概率。
在使用锚框之后,准确率有了轻微的下降,但是查全率得到了提高

Dimension Clusters:
使用锚框时,遇到了两个问题,首先是边界框尺寸的选择。不使用手工提取的方法,而是使用 k-means 算法。
在这里插入图片描述
如果我们使用具有欧几里德距离的标准k-means算法,那么较大的框会产生比较小的框更多的误差。 然而,我们真正想要的是能够获得良好IOU分数的先验,这与框尺寸的大小无关。 因此,对于我们使用的距离度量:
在这里插入图片描述
当K=5时,既能保证模型的复杂度,又能保证一个高的查全率。

我们将平均IOU与我们的聚类策略中最接近的先验和表1中的手工挑选的锚框进行比较。 只有5个先验,质心的表现类似于9个锚框,平均IOU为61.0相对于60.9。 如果我们使用9个质心,我们会看到更高的平均IOU。这表明使用 k-means 生成我们的边界框会以更好的表示方式启动模型,使任务更容易学习。
在这里插入图片描述

Direct location prediction:
YOLO算法的锚框有一个问题:模型不稳定性,尤其是在早期的迭代中。这些不稳定性来源于对边界框中心点(x, y)的定位。
在区域提取算法中,中心点的坐标表示为:
在这里插入图片描述
之前 YOLO的方法,网络不会预测偏移量,而是根据 YOLO 中的网格单元的位置来预测坐标,这就让 Ground Truth 的值介于 0 到 1 之间。而为了让网络的结果能落在这一范围内,网络使用一个 Logistic Activation 来对于网络预测结果进行限制,让结果介于 0 到 1 之间。
在YOLOv2算法中,每个单元格都预测5个边界框,每个边界框预测5个坐标, tx, ty, tw, th, 与 to.
在这里插入图片描述

在这里插入图片描述
使用维度群集以及直接预测边界框中心位置可以比使用锚框的的YOLO提高几乎5%。

Fine-Grained Features:
优化的YOLO在13x13的特征图上预测检测器,对于大尺寸的物体可以很有效地检测,但是细粒度的特征对于小尺寸对象很有效。Faster R-CNN 与 SSD都是在不同的特征图上运行他们的候选区域神经网络。
本文采用不同的方法,只需添加一个passthrough层,它可以从26 x 26分辨率的早期层中获取特征。
passthrough层通过将相邻特征堆叠到不同的通道而不是空间位置,将较高分辨率的特征与低分辨率特征连接起来,类似于ResNet中的标识映射。
转换26 × 26 × 512特征图到13 × 13 × 2048特征图,可以和原始特征连接起来。

Multi-Scale Training:
首先转换448×448的分辨率为416×416的输入。
不固定输入图片的尺寸,每10个batch就任意改变输入图片的尺寸,下采样因子为32,最小的输入为320,最大的输入是608。

实验结果:
在这里插入图片描述

在这里插入图片描述

Darknet-19 神经网络结构:
在这里插入图片描述

Training for classification:
训练Imagenet数据集,共有1000个类别,初始输入图片尺寸为224 × 224,设置学习率为0.1,利用随机梯度下降的方法,训练160个epoch,多项式衰减速率的幂为4,权重衰减指数为0.005,momentum 参数为0.9。输入图片采用标准的数据增强方法,包括随机裁剪,旋转以及色度,亮度的调整等。
在微调时,输入图片尺寸为448 × 448,参数和初始训练大致相同,但是只训练10个epoch,学习率设置为0.001。
利用高分辨率的图片输入,最终神经网络实现了a top-1 accuracy of 76.5% and a top-5 accuracy of 93.3%。

Training for detection:
在检测时,移除了神经网络的最后一层卷积层,而是加入3个3×3的卷积层,每个卷积层有1024个filter,而且每个后面都连接一个1×1的卷积层,1×1卷积的filter个数根据需要检测的类来定。比如对于VOC数据,由于每个grid cell我们需要预测5个box,每个box有5个坐标值和20个类别值,所以每个grid cell有125个filter。然后将最后一层3 × 3 × 512层与倒数第二层连接起来,从而最后一层卷积层可获得细粒度的特征。
训练时采用0.001的学习率训练160个epoch,并且在第60与90个epoch时将学习率除以10。设置权重衰减指数为0.005,momentum 参数为0.9。使用与之前一样的数据增强方法。

YOLO9000

分级分类:
检测数据集标签只有粗略的分类,但是分类数据集标签有精细的分类。可以融合标签。本文采用了一种多标签模型。

某种类别的概率可分为多种概率的乘积:
在这里插入图片描述
其中:
在这里插入图片描述

多个softmax分类:
在这里插入图片描述
利用树形结构进行标签融合:
在这里插入图片描述

联合训练:
YOLOv2对于每个grid cell采用5个box prior,而YOLO9000只采用3个。从而限制输出尺寸。
通过这种联合训练,YOLO9000使用COCO中的检测数据在图像中查找对象,并使用来自ImageNet的数据对各种对象进行分类。

猜你喜欢

转载自blog.csdn.net/woduitaodong2698/article/details/85566567