YOLO V1原理详解

简介: YOLO V1原理详解

d1d4b32e72c64dada21c48c2bd6b470b.pngYOLO系列是=一阶段目标检测算法(其中YOLO v1—YOLO v5基于Anchor based,从YOLO v6开始基于Anchor Free)。与以Faster R-CNN为代表的二阶段算法相比,一阶段算法不需要region proposal阶段,直接产生物体的类别概率和位置坐标值。

因此,一阶段算法有更快的检测速度。但是一个网格(grid)只预测有限个bbox,覆盖率较低,精度相较于二阶段算法较低。

YOLO V1是该系列的基础,更高的网络皆由此做出改变,下面对YOLO V1进行总结:

✨1 网络结构

YOLO v1将图像划分成多个网格,然后为每一个网格同时预测边界框并给出相应概率(一个全卷积神经网络端到端实现检测物体)。

网络结构如图所示:

72d4d7649cf047e2a5710026b8c40cd7.png

图1 网络结构

其中输入维度是448x448x3,输出7x7x30的特征图。具体结构件上图。

该网络中,存在参数量来十分巨大的问题。使用卷积实现7x7x1024维度到4096维度过程中,产生的参数量十分巨大。因此事实上作者是在中间加一层,使维度先由7x7x1024变化为256x1,最终形成4096x1。但是这样维度仍然很大,该问题在yolo v1中并没有得到解决。

✨2 检测原理

d1d4b32e72c64dada21c48c2bd6b470b.png

🐬2.1 网络输出

上图中,经过网络输出维度是7x7x30。相信很多人不明白这是如何来的和这代表着什么。

首先,7x7由原图448下采样64倍得到,代表着将图像7x7等分。接下来,我们会在7x7个得到每个网格中同时预测边界框并给出相应概率。

30是候选框的预测参数(20+2*(4+1):20代表类别数量,(这里以Pasical Voc数据集为例,该数据集共20个类别)。每个网格预测2个bounding bbox,每个bounding bbox包含一个置信度C,一个矩形框参数(Cx, Cy, w, h)

💫 2.1.1 置信度C

置信度C分为两部分:

  1. 边界框是否含有目标,如果有Pr(Object)=1,如果没有为Pr(Object)=0。
  2. 边界框的准确定,这部分计算与真实框之间的IOU。

最终置信度C将两部分结合,公式如下:

🚵‍♀️ 2.1.2 矩形框参数

8e6ad3624a2a46b889dc246676b1b5dc.png

==C_x和C_y==是中心点相对网格的偏移,一般在0-1之间。 如果==w和h==采用原图中物体框的宽和高,那肯定远远大于1,这样在训练计算损失时,会导致计算C_x,C_y和w,h两部分差异过大。因此,我们取w和h为==原图中物体框的宽和高与原图宽和高的比==,公式如下:

🐬2.2 流程

测试时:

  1. 每个预测框根据类别置信度选取值最大的那个类别作为其预测标签,设置其值为Pr(class)
  2. 根据矩形框参数计算每一个bbox的位置(此时共有7x7x2=98个bbox)(边界框回归
  3. 计算每个bbox的score:

060c5e7493534261b9639c8396806fb8.png

  1. 设置阈值,将小于该阈值的score排除。
  2. 对剩下的预测框进行nms处理(单独总结),得到结果

训练与预测不同,只需要根据预测的参数计算损失即可:

  1. 利用网络输出的特征图找到正样本和负样本。
  2. 利用正样本和负样本参数计算置信度损失、类别损失和边界框回归损失(负样本只参与置信度损失)

👻 2.3 边界框回归

假设有一个预测框K,其预测的置信度为C,矩形框参数,我们的目的是将预测参数映射成原图中bbox的坐标。

中心坐标计算公式:

9605acfab2bd4e27bcfae8131f78c4a5.png

其中,, 如图3所示, stride是特征图相对于原图的下采样倍率

宽和高计算公式:

其中是原图的宽和高。

✨3 损失函数

最后,再介绍一下损失函数,公式如下:

36f8684d69624dfab957f77deaf6aa18.png

第一个是中心坐标误差,第二个高宽误差,第三个是包含目标的边界框的置信度误差,第四个是不包含目标的边界框的置信度误差,第五个是包含目标单元格的分类误差项。

所有的误差都采用均方差,但是不同的误差权重不同,如第一项和第二项的定位误差权重为5,第三项和第四项的置信度误差权重为0.5。

❤️ 3.1 中心坐标误差和高宽误差

其中代表第i个单元格的第j个预测的bbox存在该目标。

同时我们注意到这里的w和h都是带根号,这是因为较小的边界框的坐标误差应该要比较大的边界框要更敏感。为了保证这一点,将网络的边界框的宽与高预测改为对其平方根的预测。

=====================================================================

Pasical Voc中,训练集标注的是原图中检测物体的位置(xmin, ymin, xmax, ymax),与损失函数需要的不符,需要进行处理:

将(xmin, ymin, xmax, ymax)转化为center_x, center_y, w, h

ba18d08a94a247bc894fe4375251723d.png

原图中心点映射到特征图中

  1. 计算偏差,得到与矩形框参数对应的参数Cx, Cy
  2. 计算与矩形框对应的参数w和h:
  3. =====================================================================

🎄3.2 置信度误差

第三项是包含目标的边界框的置信度误差,很多地方说是预测框与真实框计算的IOU,但这这应该是从训练集label中生成的,感觉有些问题。

这里猜测是1,使我们预测的可以在优化中不断趋近1。

第四项是不包含目标的边界框的置信度误差,是0,使后面预测的趋近于0。

🍕3.3 包含目标单元格的分类误差项

第五项是包含目标单元格的分类误差项,其中为目标真实分类,是预测分类。

🥓 4 YOLO v1不足

  1. 当某个框内存在两个物体,预测结果只能存在一个。
  2. 精度较低,尤其对小目标预测效果差。
  3. 参数量大
  4. 没有采用BN层来防止梯度消失和梯度爆炸的问题
  5. 线性输出器可能导致输出的C_x, C_y不满足属于0到1的条件,或w和h不满足大于0的条件。
相关文章
|
机器学习/深度学习 编解码 算法
【动手学计算机视觉】第九讲:传统目标检测之DPM模型
DPM模型在我心里的印象一直都非常深刻,不仅是因为它非常经典,此外,它是我进入CV领域看的第一篇文章。还记得当初开始做项目时,老师就发给我一篇文章,并反复声明,要认真研究,好好学习。我反复把这篇文章看了很多遍,也把源码看了几遍,真是深深的被这个神作惊叹到了。真不愧为传统目标识别领域的经典之作,虽然时间过去很多年,特征提取加机器学习这一套在效率上远不如深度学习,但是DPM的影响力和思想依然非常有生命力,从后面深度学习模型中经常可以看到DPM的身影,DPM的原文从2009年至今引用已经超过8000次,它的价值可见一斑,下面就来介绍一下这个经典的目标检测模型。
【动手学计算机视觉】第九讲:传统目标检测之DPM模型
|
机器学习/深度学习 编解码 算法
yolo原理系列——yolov1--yolov5详细解释
yolo原理系列——yolov1--yolov5详细解释
2258 0
yolo原理系列——yolov1--yolov5详细解释
|
机器学习/深度学习 数据可视化 算法
ECA-Net:深度卷积神经网络的高效通道注意力
最近,**通道注意力机制**已被证明在提高深度卷积神经网络 (CNN) 的性能方面具有巨大潜力。然而,大多数现有方法致力于开发更复杂的注意力模块以获得更好的性能,这不可避免地增加了模型的复杂性。为了克服性能和复杂性权衡的悖论,**本文提出了一种高效通道注意 (ECA) 模块,该模块仅涉及少量参数,同时带来明显的性能增益**。通过剖析 SENet 中的通道注意模块,我们凭经验表明**避免降维对于学习通道注意很重要**,**适当的跨通道交互可以在显着降低模型复杂度的同时保持性能**。因此,**我们提出了一种无需降维的局部跨通道交互策略,可以通过一维卷积有效实现**。此外,**我们开发了一种自适应选
4060 0
ECA-Net:深度卷积神经网络的高效通道注意力
|
机器学习/深度学习 编解码 算法
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
3011 0
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
|
机器学习/深度学习 算法 计算机视觉
深度学习目标检测系列:一文弄懂YOLO算法|附Python源码
本文是目标检测系列文章——YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣。
55928 0
|
机器学习/深度学习 算法 数据挖掘
|
7月前
|
机器学习/深度学习 人工智能 编解码
工业织物缺陷目标检测数据集(1000+高精度标注样本)| AI训练适用于目标检测任务
工业织物瑕疵检测并非简单的目标检测问题,而是一个融合了弱特征感知、噪声抑制与细粒度识别的综合挑战。本文介绍的数据集,正是围绕这一核心难点构建,具备较高的工程与研究价值。 无论是用于工业落地,还是作为算法验证基准,该数据集都为复杂弱纹理场景下的智能视觉检测研究提供了可靠支撑。 随着更先进的模型结构与训练策略不断涌现,基于此类真实工业数据集的探索,将持续推动智能制造向更高精度、更高可靠性方向发展。
工业织物缺陷目标检测数据集(1000+高精度标注样本)| AI训练适用于目标检测任务
|
XML 数据格式 Python
Labelimg标注自己的数据集,及如何划分训练集和验证集,应用于Yolov5
Labelimg标注自己的数据集,及如何划分训练集和验证集,应用于Yolov5
4572 0
|
网络协议 Java 应用服务中间件
在spring boot中配置HTTP/2
在spring boot中配置HTTP/2
在spring boot中配置HTTP/2
|
计算机视觉
YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
1832 4