YOLO 超详细入门02 v2 (含代码及原文) |
您所在的位置:网站首页 › yolov2的anchor › YOLO 超详细入门02 v2 (含代码及原文) |
文章目录
前言
背景
总结
一、YOLOv2改进之框架
1.1 网络架构
1.2 Batch Normalization
二、YOLOv2改进方法之尺寸相关
2.1 High Resolution Classifier(高分辨率的分类器)
原因
步骤
2.2 Fine-Grained Features(细粒度特征)
原因
步骤
2.3 Multi-Scale-Training(多尺度训练)
原因
训练细节
三、YOLOv2改进方法之Anchor Box
3.1 Convolutional With Anchor Boxes(带anchor的卷积)
原因
想法
为什么采用416 x 416大小的输入代替原来的448 x 448?
3.2 Dimension Clusters(维度聚类)
目的
公式
思路
效果
3.3 Direct location prediction(直接位置预测)
四、YOLOv1 vs YOLOv2 输出
五、YOLO9000
5.1 策略和方式
5.2 Loss
5.3 Word Tree
原因
思想
输出及效果
前言
代码地址:Github:ultralytics/yolov3 【建议先读】《YOLO 超详细入门(含开源代码)——网络结构、细节、目标损失函数、优点》笔者在阅读《YOLO9000:Better, Faster, Stronger》原文后,根据自身理解及查阅资料,以入门角度尽可能想要还原论文细节,水平有限,欢迎交流。 背景 SSD 是 YOLOv1的强大竞争对手,它在当时展示了更高的实时处理精度。与基于区域的检测器相比,YOLO 的坐标定位误差更高,recall(召回率:衡量定位所有目标物体的好坏程度)更低。YOLOv2 是YOLO的第二个版本,其目标是显着提高准确性,同时使其更快。 YOLOv2 在 YOLOv1的基础上做了许多改进,其中在 VOC2007 资料集上的mAP 由 63.4% 提升到 78.6%,并且保持检测速度。从预测更准确(Better),速度更快(Faster),识别物体更多(Stronger)这三个方面进行了改进。其中识别更多目标物体也就是扩展到能够检测9000种不同物体,称之为YOLO9000。 总结 Better:准确度提升。 主要手段有: Batch Normalization(批归一化)1.2 High Resolution Classifier(高分辨率的分类器)2.1 Fine-Grained Features(细粒度特征)2.2 Multi-Scale-Training(多尺度训练)2.3 Anchor Box(锚盒)3.1 Dimension Cluster(维度聚类)3.2 Direct location prediction(直接位置预测)3.3 Faster:速度提升。 主要手段:GoogleNet+DarkNet 1.1 Stronger:识别种类提升。 主要手段:YOLO9000 5 一、YOLOv2改进之框架 1.1 网络架构
原型设计与 VGG16 一致,主要采用3x3卷积, 2x2 maxpooling层 (feature map维度降低两倍, channles增加两倍)。 与NIN (Network in Network) 类似,Darknet-19最终采用global avgpooling做预测。 在3x3卷积层之间使用1x1卷积层来压缩 feature map channles 以降低模型计算量和参数 (parameters)。 每个卷积层后面同样使用了 batch normalization 层以加快收敛速度,降低模型over-fitting。 1.2 Batch Normalization原理等可参考:《Batch Normalization(BN)超易懂!图文详解——目的,原理,本质,有效性,副作用》 在每层卷积层的后面都加入 batch normalization 层,不再使用dropout,使得模型在 mAP 上提升了2.4%。 二、YOLOv2改进方法之尺寸相关 2.1 High Resolution Classifier(高分辨率的分类器) 原因因为大部分的检测模型是使用 ImageNet 分类数据集上pre-train的模型,YOLOv1 采用 224x224 的图片分类器,但因为分辨率比较低,不利于检测模型。因此YOLO2 提高分辨率至 448x448 并在test数据集上进行 fine-tuning(微调)。 步骤如果直接切换图片尺寸即分辨率大小,模型可能难以快速地对高分辨率的图片进行反应。因此,YOLO 训练由 2 个阶段组成。我们训练一个像 VGG16 这样的分类器网络。然后我们用卷积层替换全连接层,并对其进行端到端的重新训练以进行目标检测。 Pre-training步骤如下: 先采用 224x224 的 ImageNet 图像数据集进行约160个 epoch的训练,然后再将输入图像的尺寸更改为 448x448 再训练10个 epoch。训练完的这个 pre-train model也就可以适用高分辨率的图像输入了。 最后再拿这个model 在test数据集上 fine-tuning。最终使得mAP提升了3.7%。 2.2 Fine-Grained Features(细粒度特征)我们知道,卷积层会逐渐减小空间维度。随着相应分辨率的降低,也就更难检测到小物体。 YOLOv2 图片输入大小为 416 x 416,经过5次 maxpooling 后得到13x13 的feature map,并以此 feature map 采用卷积做预测,如此已经可以达到检测大物体的作用。但如果需要检测小物体,则还需要更精细的 feature map,因此 YOLOv2 提出了一种 passthrough 层以利用更精细的 feature map。 它将 26 × 26 × 512 层使用按行列隔行采样的方法,抽取 2x2 的局部区域,然后将其转化为 channel 维度,便可以巧妙地reshape为 13 × 13 × 2048。然后与原始的 13 × 13 ×1024 输出层连接。现在我们在新的 13 × 13 × 3072 层上应用卷积滤波器来进行预测,相当于做了一次特征融合,有利于检测小的目标。 2.3 Multi-Scale-Training(多尺度训练) 原因由于模型仅使用卷积层和池化层,因此可以随时调整输入的大小。为了使 YOLOv2 在不同大小的图像上运行时具有鲁棒性,作者针对不同的输入大小训练了模型,就是在训练的过程中每间隔一定的 iterations 后改变输入的图片大小。 训练细节
ps:原文中anchor也被称为prior box以表示对目标检测的最佳anchor的选择。 原因YOLOv1在训练过程中学习适应不同物体的形状比较困难,导致其在精度定位方面表现不佳。其早期训练容易受到不稳定梯度的影响。首先,YOLO对bounding box进行随机预测。这些随机的预测可能对部分目标的检测有效果,但对另一些目标识别却很糟糕,从而导致陡然的梯度变化。在早期的训练中,预测会在专门研究什么形状上去探索,尝试,甚至竞争。 **为了识别对训练数据具有最佳覆盖率的 top-K 边界框,我们对训练数据运行 K-means 聚类来定位 top-K 聚类的质心。**在许多问题域中,边界框具有很强的模式。在 Faster R-CNN 和 SSD 中,Anchor Box 的尺寸是手动选择的,有一定的主观性。若能选取合适的 Anchor Box,可以使模型更容易学习并预测出准确的 bounding box。例如,在自动驾驶中,最常见的 2 个边界框则是不同距离的汽车和行人。 公式聚类目的为提高选取的 Anchor Box 和同一个聚类下的 ground truth 之间的 IoU,采用的距离公式如下: d ( b o x , c e n t r o i d ) = 1 − I o U ( b o x , c e n t r o i d ) d(box,centroid) = 1-IoU(box,centroid) d(box,centroid)=1−IoU(box,centroid) p s : 1. c e n t r o i d 为聚类时被选作中心的 b o u n d i n g b o x ps:1.centroid为聚类时被选作中心的bounding\ box ps:1.centroid为聚类时被选作中心的bounding box 2. b o x 为其他的 b o u n d i n g b o x 2.box为其他的bounding\ box 2.box为其他的bounding box 思路
在训练集边界框上针对各种 k 值运行k-means 聚类,并绘制具有最近质心的平均 IOU,但作者没有使用欧几里德距离,而是使用边界框和质心之间的 IOU,公式如上。
![]() YOLO9000 是在 YOLOv2 的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。 目标检测 label 的成本比分类数据集高很多(物体类别、框出物体在图片中的位置),因此分类数据集比检测数据集的数量多很多。 而边界框的预测又不依赖于类别检测,因此 YOLO 可以在分类和检测数据集上的联合训练。 5.1 策略和方式联合训练策略方式: 对于testing data(检测数据集),用来学习预测物体的边界框 (bounding box)、置信度 (confidence) 以及物体(class)分类,而对于分类数据集仅用来学习(class)分类,但这样一来便可以大大扩充模型所能检测的物体种类。 训练方式: 首先在检测数据集上训练一定的epoch,待预测框的 loss 基本稳定后,再联合分类数据集、检测数据集进行交替训练。同时为了分类、检测数据量平衡,作者对 COCO 数据集进行了上采样,使得 COCO、ImageNet 数据总数的比例为 4:1。 5.2 Loss 计算 loss 方式: 若是检测样本,按照 YOLOv2 的 loss 计算误差。若是分类样本,只计算分类误差。 5.3 Word Tree联合数据集训练遇到的问题: 类别之间不一定是互斥关系,例如人与女生。所以作者提出了一种层级分类方法 (Hierarchical classification),根据类别之间的从属关系建立一种树结构word Tree。 思想正如我们所看到的,所有的类都在根(physical object)下。作者在 WordTree 上训练了 Darknet-19 模型。作者从 WordTree 中提取了 1000 类 ImageNet 数据集,并将所有中间节点添加到其中,从而将标签空间从 1000 扩展到 1369,并将其称为WordTree1k。现在,darknet-19 的输出层大小变为 1369 而不是 1000。
预测输出为confidence: Pr(physical object)、bounding box位置、一个树状机率图。最终,通过联合训练策略,YOLO9000 可以快速的检测出超过 9000个类别的物体,总值 mAP 为19.7%。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |