YOLO算法详解
-
- 论文背景
-
- 实验结果
- 算法简介
-
- 神经网络结构
- 优点:
- 不足
- 算法细节
- 训练
-
- 训练参数
论文背景
论文全称:You Only Look Once: Unified, Real-Time Object Detection
论文链接:https://arxiv.org/abs/1506.02640
论文日期:2016.5.9
本文提出了一个目标检测算法,YOLO,将目标检测问题视为一个回归问题,是一阶段的神经网络结构,直接输入整张图片进行预测,是一个端到端的训练。
YOLO算法的突出特点就是速度快,提供了一种提高检测算法速度的新思路,通过单一神经网络进行预测,每秒可以实时处理45帧图片,45 FPS,一个更小的结构,fast YOLO,155 FPS。
实验结果
YOLO的定位误差很大,但是不会将背景预测为对象。
算法简介
神经网络结构
将检测问题构架为一个回归问题,直接从图像像素到边界框坐标和类概率。
单个神经网络同时预测多个边界框和这些框是对应于所有类别的概率。
优点:
- 速度快,不需要复杂的进程,可以处理实时视频。同时检测准确率高。
- YOLO在预测时全局了解了图片。不同于滑窗和区域提取技术,YOLO在训练和测试期间会观测整个图像,并且明确地记录了关于类及其外观的背景信息。 与Fast R-CNN相比,YOLO的背景错误数量不到Fast R-CNN的一半。
- YOLO学习对象的一般化表示。 在对自然图像进行训练并对原图进行测试时,YOLO的表现优于DPM和R-CNN等顶级检测方法。 由于YOLO具有高度可推广性,因此在应用于新域或意外输入时不太可能发生故障。
不足
- 准确率落后最新的算法,对小目标的定位不够精确。
算法细节
将输入的图片分为SxS个格子,一般取S=7,若一个对象的中心在其中一个格子内,这个格子被用于进行检测对象。
每一个网格单元都会预测B个边界框以及每个框的置信度分数,一般取B=2。置信度分数代表一个模型的置信度好坏,是否一个边界框包含一个物体并且边界框预测的准确性。
置信度:
如果没有对象,则置信度分数为0,否则就是IoU的值。
每个边界框包含5个预测值,x, y, w, h 和置信度。(x, y)代表边界框的中点,h,w分别代表边界框相对于整张图片的高度与宽度。
预测类别概率:
最后会产生S ×S ×(B ∗5 + C)个张量。
初始化卷积神经网络提取整张图片的特征,全连接层预测输出概率与坐标。
24层的卷积层中3×3的卷积核与1×1的卷积核交替使用,最后连接两层全连接层。
训练
预训练使用前20个卷积层,后面接着平均池化层和一个全连接层。在ImageNet 2012验证集上达到了top-5 88% 的准确率。
增加卷积层与全连接层均能增强检测准确率。同时增加输入图片分辨率也可以提高准确率。
最后预测类别概率与边界框坐标,首先归一化边界框的高度与宽度,同时我们将边界框x和y坐标参数化为特定网格单元位置的偏移,因此它们也在0和1之间。
最后一层使用线性激活函数,其它层使用leaky ReLU:
使用平方求和误差进行优化,但它并不完全符合我们最大化平均精度的目标。它权衡了定位误差,同时分类误差也不理想。 此外,在每个图像中,许多网格单元不包含任何对象。 这将这些单元格的“置信度”分数推向零,通常会压制包含对象的单元格的渐变。 这可能导致模型不稳定,导致在早期训练出现分歧。
本文增加了从边界框坐标预测的损失,并且降低了由每一个不包含对象的边界框的置信度预测的损失函数。
损失函数:
i:网格
j:边界框
YOLO预测每个网格单元有多个边界框。 在训练时,我们只希望一个边界框预测器负责每个对象。 我们根据哪个预测具有基于真实标签的最高当前的IOU,将一个预测器指定为“负责”以预测对象。 这导致了边界框预测器的特殊性。 每个预测器都能更好地预测某些大小,宽高比或对象类别,从而提高整体查全率(recall)。
训练参数
batch size of 64,
a momentum of 0.9 and a decay of 0.0005
learning rate: first epochs from10−3 to10−2
10−2 for 75 epochs
10−3 for 30 epochs
finally 10−4 for 30 epochs
dropout layer with rate = .5.(在第一个全连接层之后)
data augmentation: scaling/adjust the exposure and saturation.
与其他算法的主要区别就是删除了区域提取部分的操作,只使用单一神经网络,加快了检测速度。