YOLO学习全家桶

一、YOLO算法的核心思想

YOLO系列的核心思想是将目标检测转变为回归问题,利用整张图片作为网络的输入,通过神经网络,得到边界框的位置及其所属的标签。

1、YOLO系列算法的步骤

(1)划分图像:YOLO将输入图像划分为一个固定大小的网络

(2)预测边界框和类别:对于每个网络,YOLO预测出固定数量(通常为5个或3个)的边界框。每个边界框由5个主要属性描述:边界框的位置(中心坐标和宽高)和边界框包含的目标的置信度(confinence和类别)

(3)单次前向传递:YOLO通过一个卷积神经网络(CNN)进行单词前向传递,同时预测所有边界框的位置和类别。相比于其他目标检测算法,如基于华东窗口或区域提议的方法,YOLO具有更快的速度,因为它只需要一次前向传递即可完成预测。

(4)损失函数:YOLO使用多任务损失函数来训练网络。该损失函数包括位置损失、置信度损失和类别损失。位置损失衡量预测边界框和真实边界框之间的位置差异。置信度损失衡量边界框是否正确地预测了目标,并惩罚背景框的置信度。类别损失衡量目标类别的预测准确性。

(5)非最大抑制:在预测的边界框中,可能存在多个相互重叠的框,代表同一个目标。为例消除冗余的边界框,YOLO使用非最大抑制算法,根据置信度和重叠程度筛选出最佳的边界框。

2.Backbone、Neck和Head

物体检测器的结构开始被描述为三个部分:Backbone、Neck和Head。下图显示了一个高层次的Backbone、Neck和Head图。

Backbone负责从输入图像中提取有用的特征。它通常是一个卷积神经网络(CNN),在大规模的图像分类任务中训练,如ImageNet。骨干网络在不同尺度上捕捉层次化的特征,在较早的层中提取层次的特征(如边缘和纹理),在较深的层中提取高层次的特征(如物体部分和语义信息)。

Neck是连接Bakcbone和Head的一个中间部件。它聚集并细化骨干网提取的特征,通常侧重于加强不同尺度的空间和语义信息。颈部可能包括额外的卷积层、特征金字塔(FPN)或其他机制,以提高特征的代表性。

Head是物体检测器的最后组成部分。它负责根据Backbone和Neck提供的特征进行预测。它通常由一个或多个特定任务的子网络组成,执行分类、定位,以及最近的实例分割和姿态估计。头部处理颈部提供的特征,为每个候选物产生预测。最后,一个后处理步骤,如非极大值抑制(NMS),过滤掉重叠的预测,只保留置信度最高的检测。

二、YOLO系列的算法

1、YOLOv1(2016)

论文地址:https://arxiv.org/pdf/1506.02640.pdf

1.1 模型介绍

在YOLOv1提出之前,R-CNN系列算法在目标检测领域中独占鳌头。R-CNN系列检测精度高,但是由于其网络结构是双阶段的特点,使得它的检测速度不能满足实时性,饱受诟病。为例打破这一僵局,涉及一种速度更快的目标检测器是大势所趋。

2016年,Joseph Redmon等人提出了一种单阶段的目标检测网络,它的检测速度非常快,每秒可以处理45帧图片,能够轻松地实时运行。因此,作者将其取名为You Only Look Once。

YOLO的核心思想就是把目标检测转变成一个回归问题,利用整张图作为网络的输入,仅仅经过一个神经网络,得到bounding box(边界框)的位置和所属的类别。

1.2 网络结构

现在看来,YOLOv1的网络结构十分清晰,是一种传统的one-satge的卷积神经网络:

网络输入:448*448*3的彩色图片

中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征

全连接层:由两个全连接层组成,用来预测目标的位置和类别的概率值

网络输出:7*7*30的预测结果

1.3 实现细节

(1)检测策略

YOLOv1采用的是"分而治之"的策略,将一张图片平均分为7*7个网络,每个网格分别负责预测中心点落在该网格内的目标。在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个PRN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7*7个网格,这49个网络就相当于是目标检测的感兴趣区域。通过这种方式,我们就不需要再额外设计一个PRN网络,这正是YOLOv1作为单阶段网络的简单快捷之处。

具体实现过程如下:

①.将一幅图像分成(S*S)个网格,如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。

②.每个网格都要预测B个bounding box,每个bounding box要预测(x,y,w,h)和confindence共5个值。

③.每个网格还要预测一个类别信息,记为C个类

④.总的来说,S*S个网格,每个网格要预测B个bounding box,还要预测C个类。网络输出就是一个S*S*(5*B+C)的张量。

在实际过程中,YOLOv1把一张图片划分为7*7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7*7*30

(2)目标损失函数

损失由三部分组成,分别是:坐标预测损失、置信度预测损失、类别预测损失。

1、使用的是差方和误差。需要注意的是,w和h在进行误差计算的时候取得是它们的平方根,原因是对不同大小的bounding box预测中,相比于大bounding box预测偏一点,小box预测偏一点更不能忍受。而差方和误差函数中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个比较取巧的办法,就是将bounding box的w和h。

2、定位误差比分类误差更大,所以增加对定位误差的惩罚,使n=0.5

3、在每个图象中,许多网格单元不包含任何标值。训练时就会把这些网格里的框的"置信度"分数推到零,这往往超过了包含目标的框的梯度。从而可能导致模型不稳定,训练早期发散。因此要减少了不包含目标的框的置信度预测的损失,使n=0.5

1.4 性能表现

(1)优点

1、YOLO检测速度非常快。标准版本的YOLO可以每秒处理45张图像;YOLO的极速版本可以处理150帧图像。这就意味着YOLO可以小于25毫秒延迟,实时地处理视频。对于欠实时系统,在准确率保证的情况下,YOLO速度快于其他方法。

2、YOLO实时检测的平均精度是其他实时检测系统的两倍。

3、迁移能力强,能运用到其他新的领域(比如艺术品目标检测)

(2)局限性

1、YOLO对相互靠近的物体,以及很小的群体检测效果不好,这是因为一个网络只预测了2个框,并且都只属于同一类。

2、由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。

3、YOLO对不常见的角度的目标泛化性性能偏弱。

2 YOLOv2(论文地址:https://arxiv.org/pdf/16/1612.08242.pdf#page=4.24)

2.1 改进部分

YOLOv2在YOLO的基础上,保持速度的优势同时,检测可到达9000个类别。这些改进有以下几点:

(1)在所有卷积层上的批量归一化改善了收敛性,并作为一个正则器来减少过拟合;

(2)高分辨率分类器在YOLOv1以224*224的分辨率对模型进行了预训练基础上,以分辨率448*448对模型进行了10次微调,调高了网络在高分辨率输入下的性能。

(3)完全卷积。去掉了密集层,采用了全卷积结构。

(4)使用Anchor来预测边界盒。使用一组先验框Anchor,这些Anchor具有预定义的形状,用于匹配物体的原型形状,每个网格单元都定义了多个Anchor,系统预测每个Anchor的坐标和类别。网络输出的大小与每个网格单元的Anchor数量成正比。

(5)维度聚类。挑选好的Anchor有助于网络学习预测更加准确的边界盒。作责对训练中的边界盒进行了k-means聚类,以找到更好的先验。亚目选择了五个Anchor,在召回率和模型复杂性之间进行了良好的权衡。

(6)直接预测位置。预测了相对于网络单元的位置坐标,网络为每个单元预测了五个bounding box,每个bounding box有五个值tx,ty,tw,th,to。

(7)细粒度的特征。YOLOv2去掉了一个池化层,对于416*416的输入图像,得到13*13的特征图。

(8)多尺度训练。由于YOLOv2不使用全连接层,输入可以是不同的尺寸。为了使YOLOv2对不同的输入尺寸具有鲁棒性,作者随机训练模型,每10批改变尺寸。

2.2 网络结构

YOLOv2采用Darknet-19作为特征提取网络,器整体结构如下:

改进后的YOLOv2:Darknet-19,总结如下:

①.与VGG相似,使用了很多3*3卷积核;并且每一次池化后,下一层卷积核的通道数=池化输出的通道*2

②.在每一层卷积后,都增加了BN层进行预处理

③.采用了降维的思想,把1*1的卷积置于3*3之间,用来压缩特征

④.在网络最后的输出上增加了一个global aveage pooling层

⑤.整体上采用了19个卷积层,5个池化层。

为了更好的说明,将Darkent-19与YOLOv1、VGG16网络进行对比:

VGG-16:大多数检测网络框架都是以VGG-16作为基础特征提取器,它功能强大,准确率高,但是计算复杂度较大,所以速度会相对较慢。

YOLOv1:基于GoogLeNet的自定义网络,比VGG-16的速度快,但是精度稍不如VGG-16

Darknet-19:速度方面,处理一张图片仅需要55.8亿次运算,相比于VGG306.9亿次,速度快了近6倍。精度方面,在ImageNet上的测试精度为:top1准确率为72.9%,top2的准确率为91.2%。

2.3 性能表现

在VOC2007数据集上进行测试,YOLOv2在速度为67fps时,精度可以达到76.8mAP;在速度为40fps时,精度可以达到78.6mAP。

相对于YOLOv1而言,不足之处在于,没有进行多尺度特征的结合预测,传递模块的使用在提升细粒度特征的同时也对特征的空间,分布产生了一定影响,以及对小目标的检测能力没有明显提升。

3.YOLOv3(论文地址:https://arxiv.org/pdf/1804.02767.pdf)

3.1 模型介绍

特征提取部分采用Darknet-53网络结构代替原来的Darknet-19,利用特征金字塔网络结构实现了多尺度检测,分类方法使用逻辑回归替代了softmax,在兼顾实用性的同时保证了目标检测的准确性。

从YOLOv1到YOLOv3,每一代性能的提升都与backbone(骨干网络)的改进密切相关。在YOLOv3中,作责不仅提供了darknet-53,还提供了轻量级的tiny-darknet。如果你想检测精度与速度兼备,可以选择darknet-53作为backbone-53;如果你想达到更快的检测速度,精度方面可以妥协。那么tiny-darkent是你很好的选择。

3.2 网络结构

YOLOv3借助残差网络的思想,YOLOv3将原来的darknet-19改进为darknet-53.整体结构如下:

Darknet-53主要由1*1和3*3的卷积层组成,每个卷积层之后包含一个批量归一化和一个Leaky ReLU,加入这两部分的目的是为了防止过拟合。卷积层、BN层以及LeakyReLU共同组成Darknet-53的基本CBL。因为在Darknet-53中包含53个这样的CBL,所以称其为Darknet-53.

为了更好的理解此图,下面对主要单元进行说明:

CBL:一个卷积层、一个BN层和一个Leaky ReLU组成的基本卷积单元。

res unit:输入通过两个CBL后,再与原输入进行add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸。

ResX:X个残差组件。

concat:将Darknet-53的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的add操作是不一样的,拼接会扩张张量的维度,而add直接相加不会导致张量维度的改变。

最后面的蓝色立方体表示三种尺度的输出。

与Darknet-19相比,Darknet-53主要做了如下改进:

① 没有采用最大池化层,转而采用步长为2的卷积层进行下采样。

② 为了防止过拟合,在每个卷积层之后加入了一个BN层和一个Leaky ReLU

③ 引入了残差网络的思想,目的是为了让网络可以提取到更深层的特征,同时避免出现梯消失或爆炸

④ 将网络的中间层和后面某一层的上采样进行张量拼接,达到多尺度特征融合的目的

3.3 改进部分

(1)输入部分

Mosaic数据扩增:将四张不同的训练图像随机拼接在一起,形成一张马赛克图像。这种方式可以帮助模型学习并适应不同的场景、目标形状和尺度变化。

自适应锚框计算:引入自适应锚框计算的机制,指在更好地适应各种目标的尺寸和长宽比例变化。

初始锚框定义:首先,根据训练地标注框,选择初始的锚框。可以使用一些聚类算法(k-means)对标注框进行聚类,以确定一组代表性的锚框。

锚框调整:

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
yolov8网络结构图如引用所示,它包括以下个主要组成部分和改进点: 1. 输入:接受输入图像的尺和通道数。 2. 提取特征层:利用卷积和池化操作逐渐减小特征图的尺寸,同时提取图像的特征信息。 3. Darknet-53主干网络:yolov8借鉴了ResNet的思想,使用了残差连接,可以设计深层网络,并解决梯度消失问题。Darknet-53是yolov8主要的特征提取模块,由多个卷积层和残差块组成。 4. Neck层:包括多个c2f模块,这是yolov8的主要思想结构。c2f模块用于将底层特征和高层特征进行融合,提高检测性能。 5. Head层:包括多个检测头,每个检测头负责预测不同尺度的目标框和类别概率。每个检测头由卷积层、上采样层、卷积层和最终的预测层组成。 通过以上的结构,yolov8可以实现对图像中目标的快速检测和定位。借鉴了ResNet的思想,同时引入了c2f模块进行特征融合,使得模型更加深层且准确性更高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Yolov 8源码超详细逐行解读+ 网络结构细讲(自我用的小白笔记)](https://blog.csdn.net/chenhaogu/article/details/131647758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [YOLOv8详解全流程捋清楚-每个步骤](https://blog.csdn.net/Albert233333/article/details/130044349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值