YOLO9000:Better, Faster, Stronger
YOLO做的是,是将目标检测的包围盒预测和类别预测做成一个统一的过程,更快,效果也不错;但是定位不准,小物体检测效果不佳。
Abstract
- YOLO9000:先进,实时的目标检测方法,可检测9000多类物体
- 多尺度训练方法( multi-scale training),相同的YOLOv2模型可以以不同的大小下运行,在速度和精度之间提供了一个简单的折衷。
- mAP表现更好:67FPS,在VOC 2007上76.8 mAP,在40 FPS,78.6mAP;而且速度更快。
- 提出了一种联合训练目标检测和分类的方法,使用该方法在COCO目标检测数据集和Imagenet图像分类数据集上,训练出了YOLO9000
- 可以检测出更多的类别,即使这些类别没有在目标检测的数据集中出现
【多尺度训练的方法可以借鉴,更好的权衡,YOLO9000主要是预测的类别多,对我们的作用似乎不大】
Introduction
- 目标检测数据集的标注困难,而且价格昂贵
- 利用已有的分类数据集,来拓展目标检测的范围【分类数据集做检测】。利用对象分类的分层视图,使得可以将不同数据集组合到一起
- 提出一种联合训练的方法,可以在【检测数据集和分类数据集】上训练目标分类器
- 用标记的目标检测数据集优化定位精度,利用分类图像来增加其vocabulary和robustness
- 先将YOLO优化成YOLOv2,再用联合方法训练出YOLO9000
Main improvement
1 Better
1.1 The disadvantages of YOLO
- 更大的定位误差【相比于FastR-Cnn】
- 更低的召回率【相对于region proposal-based methods】
所以希望在保持分类准确率的基础上,优化定位误差和召回率。【这里需要补充召回率之类的量化指标】
1.2 Method
- 计算机视觉更好的效果往往取决于更大的模型或是多模型的整合。
- 我们想要又准又快,将网络简化使其更容易学习特征而不是把模型变大。
- 采用了许多方法将性能优化,步骤如下。
- Batch Normalization:加速收敛,添加到卷积层中,可以提高mAP,去掉dropout还可以防止过拟合
- High Resolution Classifier(高分辨率分类器):原本的YOLO是在224 * 224上面训练,然后更改增加为448 * 448用于检测,需要学会检测的同时适应输入分辨率的变化,最后在448*448进行了10个epoch的微调训练
- Convolutional With Anchor Boxes:去掉全连接层,用anchorbox预测包围盒。mMP下降,召回率变大。
YOLO直接通过全连接网络预测包围盒坐标,FastRCnn使用的是 hand-picked priors,他利用region proposal network所在的卷积层预测anchor boxes的偏移和置信度(需要补充anchorbox的基本概念),简化,方便学习。 - Dimension Clusters:anchorbox的大小是通过人工设置,最开始选择的priors影响很大。采用kmeans算法自动选择好的priors
- Direct location prediction:模型不稳定的问题,预测包围盒的xy坐标。还是直接预测相对的坐标而不是偏移。
- Fine-Grained Features:好像是对特征图的一些分辨率进行了操作
- Multi-Scale Training:每训练十次,重新选一个输入维度,之后可以通过分辨率与准确率进行权衡。
效果很好
2 Faster
想要又准有更快,YOLO使用的网络架构是基于googlenet,比VGG-16块,但是准确率差了一点。
提出了一种新的网络架构Darknet-19,表现很好,又快又准,训练大概用160epoches。
3 Stronger
提出了一种对分类和检测数据进行联合训练的机制。
存在的问题是,大多数分类数据集采用的是softmax;来预测类别,不同类别之间是互相排斥的。
解决方法:
- 简化地构建分层词汇树,然后预测条件概率
分类是是默认Pr(physical object)=1,
而目标检测则是预测出Pr(physical object)的数值。 - 将数据集与Wordtree结合
- 联合训练
conclusion
- YOLOv2是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像大小下运行,以在速度和精度之间提供平滑的折衷。
- YOLO9000是一个实时框架,通过联合优化检测和分类,可检测9000多个对象类别。我们使用WordTree合并来自不同来源的数据,并使用我们的联合优化技术在ImageNet和CoCo上同时进行训练。【半监督学习】
更新补充
- anchorbox:经过后来的了解学习,anchorbox就是从标注好的包围盒中,找出这些包围盒比较常见的尺寸作为预设的尺寸,然后后面再这个的基础上进行微调。
- batch normalization:批标准化,为了使得数据相差不会过大,因为过大的数据容易出现饱和,导致激活函数不敏感
yolo与yolov2预测包围盒的区别的详细了解
- YOLO利用全连接层直接预测包围盒的坐标和置信度等信息
- FastRcnn使用RPN网络预测anchorbox的偏移,因为预测层是卷积的,所以可在特征图上进行预测
- YOLOv2将448大小的照片先变成416【为了将featuremap改成奇数,可以保证物体的中心落在其中心】,每个网格的大小为32 * 32,划分成13 * 13个网格,不仅预测了偏移,还预测了置信度和类别,利用这个方法可以提高召回率
kmeans选取包围盒尺寸
- 在训练集的包围盒
- 得到他们的尺寸
- 然后用kmeans算法,距离定义为1-iou
- iou的计算,将包围盒的左上角重叠后进行计算,只与大小有关,与位置无关
具体的预测细节
- RPN预测的公式如下:
在tx=1或是-1时,偏移比较大,导致模型不稳定 - yolov2采用的方法
sigmoid函数,要么0,要么1,使得模型更稳定,用 e t e^t et对长宽
Fine-Grained Features的在了解
这里是像resnet将前面的特征和后面的特征进行拼接,从而获得细粒度信息,具体在代码解读中有说道