SSD是YOLO的强大竞争对手,它一方面证明了实时处理的更高准确性。与基于区域的探测器相比,YOLO的定位误差更高,召回率(衡量所有物体的定位效果)更低。YOLOv2是YOLO的第二个版本,目的是在提高准确性的同时又要使其更快。
精度提升
批量标准化
在卷积层中添加批处理规范化。这消除了辍学的需求,并将mAP提升了2%。
高分辨率分类器
YOLO培训分为两个阶段。首先,我们训练像VGG16这样的分类器网络。然后,我们用卷积层替换完全连接的层,并端到端对其进行重新训练以进行对象检测。YOLO用224×224图片,然后是448×448图片来训练分类器,以进行物体检测。YOLOv2从224×224张图片开始进行分类器训练,但随后以更少的时间间隔再次以448×448张图片重新分类器。这使检测器的训练更加轻松,并将mAP提高4%。
卷积与锚框
如YOLO论文所述,早期训练易受不稳定梯度的影响。最初,YOLO在边界框上进行任意猜测。这些猜测可能对某些对象有效,但对另一些对象则不利,从而导致陡峭的梯度变化。在早期的培训中,关于哪种形状要专门进行预测是相互斗争的。
在现实生活中,边界框不是任意的。汽车的形状非常相似,行人的长宽比约为0.41。
由于我们只需要一个猜测就对了,因此,如果我们从现实生活中常见的各种猜测开始,初始训练将更加稳定。
更多样化的预测
例如,我们可以创建5个具有以下形状的锚框。
5个锚盒
代替预测5个任意边界框,我们预测到上面每个锚定框的偏移量。如果我们限制偏移值,则我们可以保持预测的多样性,并使每个预测着眼于特定形状。因此初始培训将更加稳定。在本文中,锚点也称为先验。
这是我们对网络所做的更改:
1、删除负责预测边界框的完全连接的层。
2、我们将类预测从单元格级别移到边界框级别。现在,每个预测都包括边界框的4个参数,1个框的置信度得分(客观性)和20个类概率。即5个具有25个参数的边界框:每个网格单元125个参数。与YOLO一样,客观性预测仍可预测地面实况和拟议方框的IOU。
3、为了生成形状为7×7×125的预测,我们用三个3×3卷积层替换最后一个卷积层,每个卷积层输出1024个输出通道。然后,我们应用最后的1×1卷积层将7×7×1024输出转换为7×7×125。(有关详细信息,请参阅DarkNet上的部分。)
使用卷积滤波器进行预测。
4、将输入图像的大小从448×448更改为416×416。这将创建一个奇数空间尺寸(7×7 vs. 8×8网格单元)。图片的中心通常被大物体占据。使用奇数网格单元,可以更确定对象所属的位置。
5、删除一个池化层,以使网络的空间输出为13×13(而不是7×7)。
锚框的mAP从69.5略微降低到69.2,但召回率从81%提高到88%。即,即使精度略有降低,但也会增加检测所有地面真实物体的机会。
维度聚类
在许多问题域中,边界框具有很强的模式。例如,在自动驾驶中,两个最常见的边界框将是距离不同的汽车和行人。为了确定对训练数据具有最佳覆盖范围的前K个边界框,我们在训练数据上运行K-均值聚类,以找到前K个聚类的质心。
(Image modified form a k-means cluster)
由于我们是在处理边界框而不是点,因此无法使用规则的空间距离来测量数据点距离。毫不奇怪,我们使用IoU。
在左侧,我们使用不同数量的群集(锚)在锚点和地面真值框之间绘制平均IoU。随着锚点数量的增加,精度提高趋于平稳。为了获得最佳回报,YOLO安排了5位主播。在右侧,显示5个锚点的形状。从COCO数据集中选择紫色蓝色矩形,而从VOC2007中选择黑色边框矩形。在这两种情况下,我们都有更多的细线和细线锚,这表明现实中的边界框不是任意的。
除非我们比较YOLO和YOLOv2,否则我们现在将YOLOv2称为YOLO。
直接位置预测
我们对锚的偏移量进行预测。但是,如果不受限制,我们的猜测将再次随机化。YOLO会预测5个参数
(tx,ty,tw,th和to),并应用sigma函数来限制其可能的偏移范围。
这是可视化。下面的蓝色框是预测的边界框,虚线矩形是锚点。
通过使用k均值聚类(维数聚类)和本节中提到的改进,mAP增加5%。
细粒度的功能
卷积层逐渐减小空间尺寸。随着相应分辨率的降低,很难检测到小物体。其他对象检测器(如SSD)可从功能图的不同层定位对象。因此,每一层都以不同的规模专长。YOLO采用了另一种称为直通的方法。它将26×26×512层重塑为13×13×2048。然后与原始的13×13×1024输出层连接。现在,我们在新的13×13×3072层上应用卷积滤波器进行预测。
多尺度训练
删除完全连接的图层后,YOLO可以拍摄不同尺寸的图像。如果宽度和高度加倍,我们将只进行4倍的输出网格单元,因此进行4倍的预测。由于YOLO网络对输入进行了32次下采样,因此我们只需要确保宽度和高度为32的倍数即可。在训练期间,YOLO会拍摄尺寸为320×320、352×352,…和608×608(带有 第32步)。
对于每10批,YOLOv2随机选择另一个图像大小来训练模型。这充当数据增强,并迫使网络针对不同的输入图像尺寸和比例进行良好的预测。另外,我们可以使用较低分辨率的图像进行目标检测,但要以准确性为代价。在低GPU功耗的设备上,这可能是一个不错的折衷方案。YOLO以288×288的速度在90 FPS的条件下运行,其mAP几乎与Fast R-CNN一样。在高分辨率下,YOLO在VOC 2007上达到了78.6 mAP。
精度
这是应用到目前为止讨论的技术之后的准确性提高:
不同检测器的精度比较:
速度提升
GoogLeNet
VGG16在224×224图像上单遍需要306.9亿个浮点运算,而定制GoogLeNet则需要85.2亿浮点运算。我们可以用定制的GoogLeNet代替VGG16。但是,YOLO为ImageNet的前5个准确性付出了代价:准确性从90.0%下降到88.0%。
DarkNet
我们可以进一步简化所使用的主干CNN。Darknet仅需要55.8亿次操作。借助DarkNet,YOLO在ImageNet上可达到72.9%的top-1准确性和91.2%的top-5准确性。Darknet主要使用3×3过滤器提取特征,并使用1×1过滤器减少输出通道。它还使用全局平均池进行预测。这是详细的网络描述:
我们用三个3×3卷积层替换最后一个卷积层(交叉部分),每个输出1024个输出通道。然后,我们应用最后的1×1卷积层将7×7×1024输出转换为7×7×125。(5个边界框,每个框具有4个参数,1个客观分数和20个条件类概率)
YOLO with DarkNet
训练
YOLO用ImageNet 1000类分类数据集进行了160个时期的训练:使用随机梯度下降法,其初始学习率为0.1,多项式率衰减为4的幂,权重衰减为0.0005,动量为0.9。在初始训练中,YOLO使用224×224图像,然后以10−3的学习速率将448×448图像重播10个历元。训练后,分类器的top-1准确性为76.5%,top-5准确性为93.3%。
然后,将完全连接的层和最后的卷积层移除以用于检测器。YOLO添加了3个3×3卷积层,每个层具有1024个滤镜,随后是最后的1×1卷积层,具有125个输出通道。(5个框预测每个都有25个参数)YOLO还添加了一个穿通层。YOLO将网络训练为160个时期,起始学习率为10-3,然后在60和90个时期将其除以10。YOLO使用0.0005的权重衰减和0.9的动量。
分类
用于对象检测的数据集具有的类别类别远少于用于分类的类别。为了扩展YOLO可以检测的类别,YOLO提出了一种在训练过程中混合来自检测和分类数据集的图像的方法。它使用对象检测样本训练端到端网络,同时反向传播分类样本中的分类损失以训练分类器路径。这种方法遇到一些挑战:
1、我们如何合并来自不同数据集的类标签?特别是,对象检测数据集和不同的分类数据集使用不同的标签。
2、任何合并的标签都不得互斥,例如ImageNet中的诺福克梗和COCO中的dog。由于它不是互斥的,因此我们不能使用softmax来计算概率。
层次分类
无需赘述,YOLO会将不同数据集中的标签组合在一起,形成树状结构WordTree。子代与其父代形成is-a关系,就像双翼飞机就是飞机。但是,合并的标签现在不是互斥的。
将COCO和ImageNet标签组合到分层WordTree中
让我们使用1000类ImageNet简化讨论。我们没有在平面结构中预测1000个标签,而是创建了相应的WordTree,其中有1000个离开节点用于原始标签,而369个节点用于其父类。最初,YOLO预测双翼飞机的班级得分。但是现在有了WordTree,它就可以预测双翼飞机的得分,因为它是一架飞机。
因为
我们可以应用softmax函数来计算概率
从自己和兄弟姐妹的分数来看。区别在于,YOLO为每个父母的孩子执行了多个softmax操作,而不是一个softmax操作。
然后,通过使WordTree向上,从YOLO预测中计算出类别概率。
对于分类,我们假设已经检测到物体,因此Pr(物理物体)= 1。
层次结构分类的一个好处是,当YOLO无法区分飞机的类型时,它会给飞机打高分,而不是强迫飞机进入子分类之一。
当YOLO看到分类图像时,它仅反向传播分类损失以训练分类器。YOLO找到了一个边界框,该边界框预测了该类别的最高概率,并计算了分类损失以及来自父母的损失。(如果将一个对象标记为双翼飞机,则也将其视为标记为飞机,飞机,车辆……。)这鼓励模型提取它们共有的特征。因此,即使我们从未训练过特定类别的对象以进行对象检测,我们仍然可以通过归纳来自相关对象的预测来进行此类预测。
在物体检测中,我们将Pr(物理物体)设置为等于盒子置信度得分,该得分测量盒子是否具有物体。YOLO遍历树,在每次拆分时都采用最高的置信度,直到达到某个阈值为止,并且YOLO会预测该对象类别。
YOLO9000
YOLO9000将YOLO扩展为使用带有9418节点WordTree的分层分类来检测9000类以上的对象。它结合了COCO的样本和ImageNet的前9000类。YOLO为每个COCO数据采样了四个ImageNet数据。它学习使用COCO中的检测数据查找对象,并使用ImageNet样本对这些对象进行分类。
在评估过程中,YOLO会在知道如何分类但未经培训直接定位的类别(即COCO中不存在的类别)上测试图像。YOLO9000从具有200个类别的ImageNet对象检测数据集中评估其结果。它与COCO共享约44个类别。
因此,数据集包含156个类别,这些类别从未直接进行过如何定位的训练。YOLO为相关对象类型提取相似的功能。因此,我们可以仅通过特征值来检测这156个类别。
YOLO9000在这156个类别中总体获得19.7 mAP和16.0 mAP。
YOLO9000在COCO中未发现的新动物种类中表现良好,因为它们的形状可以很容易地从其父类中泛化。
但是,COCO没有针对任何类型服装的边框标签,因此该测试在诸如“太阳镜”等类别中难以解决。
YOLOv3(后续)
原文:https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088