本专栏致力于深入探讨 目标检测算法,专为零基础或初学者设计,非常适合新手朋友们。在本章节中,我将直接引用李老师的PPT以及网络资源,后续会提供原文链接以便大家查阅。本章节主要从目标检测的基础知识出发,沿着李老师的思路进行延伸讲解,力求做到简单易懂。最近由于开始了996的科研生活,更新有所延迟,请大家谅解。
😃如果您觉得内容有帮助,欢迎点赞、收藏,以及关注我哦!👍
0. YOLO 基础
YOLO(You Only Look Once)是一种实时目标检测算法,以其快速性和准确性而著称。YOLO将输入图像划分为SxS的网格,每个网格预测固定数量的边界框,并计算这些框的置信度分数和类别概率。
本节的出发点就是从YOLOV1 - YOLOV3进行整理带大家理解下YOLO系列的模型。
上一节讨论的SSD中,我们可以看到,它们都是按照预设规则生成所有的锚框。而在RCNN中,使用的是Selective Search方法,仅生成与标签对应的锚框,因此两者的处理方式有所不同。这意味着SSD将背景视作一个物体类别进行预测,从而有效地计算损失,而RCNN则不涉及这一问题。通过这种方式,我们可以理解和SSD在背景处理上具有更系统化的预测机制。同样YOLO也吸收了这一点。将背景作为一种类别。
1. YOLO V1
直接上大菜吧,看看什么是YOLOV1架构:
架构实际上大家看过计算机视觉模型的进展也就那么回事,但是值得关注的是模型的输出这里需要着重看看,因为其输出代表着和真实的label是一致的形态,我们要明确其什么样子的!!!!
主要是观察这个 7×7×30
这是我们要思考的问题。
可以看到会输出一个是 7×7×30 这样的一个矩阵。我们划分的时候会将一个完整的图片S × S 这样的网格或叫grid cell,这个框S是多少最终的输出的维度就是多少。显然这样的方式是希望对输入图的划分想和输出的形态完成一种对应
接着我们继续看这个30是怎么构成的。
在YOLOv1中,网络的输出层负责为每个网格单元预测一系列信息,这些信息合计为30个维度。以下是对这30个维度的详细解释:
-
边界框信息(10个维度):
- 每个网格单元可以预测2个边界框。
- 每个边界框包括以下5个参数:
- (x) 和 (y):表示边界框中心相对于该网格单元左上角的偏移量。因为我们知道当前输出的代表着是哪个gridcell通过观察输出就行,所以我们只需要一个相对位置就可以了,这里需要理解理解
- (w) 和 (h):表示边界框的宽度和高度,通常是相对于整个图像的比例。
- 置信度(Confidence)置信这个后面要详细的讲解下,后面会展开说别急,先点一下
因此,2个边界框总共贡献 2 × 5 = 10 2 \times 5 = 10 2×5=10个维度。
-
类别概率(20个维度):
- YOLOv1在PASCAL VOC数据集上训练,该数据集定义了20个不同的物体类别。
- 每个网格单元输出这20个类别的条件概率,即在网格单元内有物体存在的情况下,该物体属于每个类别的概率。
这30个维度的输出为每个网格单元提供了完整的物体检测信息,包括位置、大小、置信度以及类别概率。这样,YOLOv1能够在一个网格单元中同时预测多个边界框及其类别,从而实现高效的物体检测。
在YOLO中有一个比较重要的点!!!!!!!!就是大家可以看到上图中有三个物体。那么这三个物体的真实边界框的中心点就是物体的中心点,我们可以看到仅仅有三个grid cell是覆盖了中心点的,也就是说只有这三个grid cell用于预测真实的边界框,其他的都是用于预测背景的。实际上就是假设四个类别,那就是狗自行车,和黄色框的小车,其他的grid cell都用于预测 背景,这是一个每一个grid cell都是一个样本,这就是一个极度不均衡的分类问题。
在墨迹两句在 YOLO 中,图像被划分为多个网格,如果将grid cell看成是样本的话,一个图就被分成了多个样本,当然整体是一个卷积的过程不能分离的看,但是模型缺失是按照这个总量计算损失的。这种设计确实导致了一个不平衡的分类问题,因为大多数grid cell实际上都在预测背景,而只有少数grid cell用于预测实际的物体类别。这种不平衡需要在训练过程中通过合适的损失函数设计来进行调整,以确保模型能够有效地学习到物体的特征,而不仅仅是背景。就是增加权重呗,在损失中降低背景的权重。
其实还有一个这个objectness置信度。他实际上就是预测这个grid cell中存在中心点的概率数值。他的真实数值就是如果是背景那就是0 ,如果是中心点在grid cell就是物体就是有一个数值,后面会提到这个怎么计算。
对于用于真实边界框的预测仅仅是包含那三个点的gird cell,哪怕是狗身上的不是中心点的gird cell生成了边界框框住了狗,他们的label也是0.就是除了中心点的gird cell输入会生成这个用于预测真实的边界框框的其他都是用于预测背景的。
大家注意到了为人家不是说的30嘛,这么算下来好像不对啊。少了啊,看下图
还有一个就是这个置信度是怎么算的我说的是在label中的就是按照其是不是物体,然后将预测框和真实锚框的占比,注意这是要结合模型输出计算出来的label。真实的才被称为label。而模型预测的置信度分数则是仅仅是一个概率有点抽象。这里可以理解下。真实的label是通过预测框和真实IOU占比计算的,而模型自身要去估计一个数值。举个例子就是一个人丢篮球真实存在一个概率,但是这个人丢之前要说一个概率。
在具体说说:
在YOLO模型中,置信度(objectness score)反映了grid cell是否包含物体的可能性。具体来说,置信度分数结合了两个因素:
-
物体存在的概率:预测框中是否存在物体,这通常根据grid cell是否覆盖了物体的中心点来决定。
-
预测框与真实框的重叠程度:这通过计算预测框与真实边界框的交并比(IoU,Intersection over Union)来衡量。IoU是预测框与真实框的重叠面积与总面积之比。
在训练过程中,使用到的label,置信度的真实值(label)是通过计算预测框与真实框的IoU来确定的。如果IoU较高,说明预测框与真实框重叠程度高,这样的grid cell被认为更可能包含物体,从而得到较高的置信度。看起来像是透露题实际上不是一个人说一下自己投篮的概率这个是模型预测,真实的则是要按照模型输出的结果和真实的记录计算出的概率才是真实的,目的是磨练模型的预测能力。
而模型输出的置信度则是模型对这个概率的预测。模型需要学习如何估计这个数值,以便在测试时能够合理地预测哪些grid cell可能包含真实物体。
一个人丢篮球时,实际的命中概率是通过之前的投篮水平和现场条件(真实的IoU)来评估的,而他在投篮之前说出的命中概率是一个主观预测(模型输出的置信度)。
C是类别就是20 这个5*2 就是有其中四个是坐标,一个grid cell是否会生成两个预测框。但是仅仅有一组类别概率啊,也就是说最终仅有一个框被用于最终类别的预测,模型会生成预测框后续会选择用哪个框。这个是不是很像之前的那个模型会生成很多框但是仅仅有一个被用于最终的预测,模型在是通过标签在纠正模型的预测概率。模型在预测两个后人为的选择一个用于最终的类别预测。这个需要通过真实框进行纠正的。
虽然说我们将图片划分成grid cell的个数这样的操作和最终的结果进行同时生成,但是这不意味着,一个向量就是一个grid cell生成的,中间还隔着一个卷积神经网络呢,所以每一个向量就是7730中的一个向量机本事都是多层卷积共同作用的结果。
有一个需要关注的细节就是模型一个grid cell会生成,两个预测框,谁和真实框IOU大就用那个,这个和真实框交互的行为就是通过数据在教育锚行什么样的框会被,选择要让他试图去理解一个模式。
模型的损失函数如下:
这个中间的这个东西:
在YOLO模型中, 1 i j o b j = 1 1_{ij}^{obj} = 1 1ijobj=1的含义是指示哪个预测框被选中用于损失计算。具体说明如下:
-
交并比计算:
- 每个grid cell生成一个候选预测框,并计算这些预测框与真实框之间的交并比(IoU)。
-
选择最佳预测框:
- 对于每个真实框,选择IoU最大的预测框。
- 对于这个选择的预测框,设置 1 i j o b j = 1 1_{ij}^{obj} = 1 1ijobj=1,表示它将参与损失计算。
-
忽略其他框:
- 对于其他未被选择的预测框,设置 1 i j o b j = 0 1_{ij}^{obj} = 0 1ijobj=0,表示它们不参与损失计算。
-
损失优化:
- 仅对 1 i j o b j = 1 1_{ij}^{obj} = 1 1ijobj=1的预测框计算回归损失,包括位置、尺寸和类别损失。
这样的机制确保了模型只对最优的预测框进行调整和优化,从而提高检测的准确性和效率。通过这个过程,YOLO能够有效地选择和优化那些最能准确反映真实框的预测框。
这个机制虽然乍看之下似乎通过标签介入泄露了答案,但实际上它是一种强有力的方式来引导模型学习如何做出更好的决策,从而不断地纠正和优化其性能。具体来说:
-
指导模型学习:
- 通过标签和IoU的结合,模型被引导去理解哪些框是“好的”预测。
- 这种通过人为选择的框为模型提供了一个学习的范式,使其能够更好地理解和捕捉图像中的物体特征。
-
学习比较和决策:
- 模型被训练去比较不同的预测框,并学习选择最优框的规则。
- 通过不断的训练和调优,模型能够逐渐掌握选择框的复杂规则,提高检测的准确性。
-
优化模型性能:
- 这种机制不仅纠正了模型的错误预测,还帮助它构建一套更为精确的预测标准。
- 最终,模型能够利用这些标准来更准确地识别和定位物体,而不仅仅依赖于现有的标签。
这种机制的核心在于,它不仅是在引导模型学习具体的预测框,还在促使模型理解选择和比较的深层次规则,从而提升整体的检测能力。
还有就是这个不是要算到置信度的部分了吗,就是真实label的置信度计算方式是通过IOU得到的。而模型的输出的置信度
则是纯预测。比如模型预测他的框和真实框IOU是百分比多少。而真实的label置信度其实就是IOU的占比。如果是背景的话就只0
。重点强调下这个理解问题。需要着重的学习。
之前一直强调本质上,背景的grid cell还是很多的,实际上用于预测正常类别的数值太低了,这是一个类别不均衡的问题。因此需要一个超参数。我们看下就是这个损失
函数中蓝色的部分进行研究的。
思考一下这个生成的框还是太多了,49个会生成98个框,怎么进行删减呢,就是将我们算置信度低的删除一点,有一种比较优质的方式就是将这个列别概率和置信度做乘积会加重这个数值指标,从而删除部分的预测框。进一步的则是按照NMS一样进行删除即可。
在目标检测任务中,模型在训练和测试阶段都会输出边界框的置信度和类别概率。确实,通过将置信度和类别概率相乘,可以得到每个预测边界框的最终置信度评分,这个评分有助于在后处理阶段进行边界框的选择。
以下是此过程的一些关键点:
- 置信度和类别概率:模型通常会输出一个边界框的置信度(表示模型对该框是否包含物体的信任程度)和每个类别的概率(表示该框中物体属于某一类别的概率)。
- 计算最终得分:通过将边界框的置信度与其类别概率相乘,可以得到最终的得分。这一得分反映了模型对边界框中物体类别的整体信任度。
- 边界框选择:在非极大值抑制(NMS)过程中,使用这些最终得分来筛选边界框。那些得分较低的边界框会被过滤掉,仅保留得分最高的框作为最终输出。
这种方法有效地平衡了边界框定位的准确性和类别预测的准确性,确保模型输出的边界框不仅在位置上准确,而且在类别判断上具有较高的可靠性。
OKOK同学们现在你们已经掌握了整体模型的大概了现在我们要进行详细的梳理。
YOLOv1采用了一种独特的方式来进行目标检测,其中关键点包括:
- 物体中心点与Cell的关系:YOLOv1将输入图像划分为一个SxS的网格。每个网格单元(Cell)负责预测其中心落在该单元内的物体。从而,该Cell预测物体的类别及其边界框。
- 标签与置信度:每个Cell具有标签,通常是零表示背景,非零表示它负责的物体。对于中心点落在该Cell的物体,预测标签包括边界框的参数(x, y, w, h)和置信度。置信度通常基于预测边界框与真实边界框的IOU。
- 输出预测与置信度:在推理阶段,模型输出预测边界框及其置信度。置信度代表模型对该预测边界框包含物体的信任程度。
- 非极大值抑制(NMS):由于模型可能产生过多的边界框,使用NMS可以减少冗余框。通过将预测置信度与类别概率相乘得到最终评分,并使用这些评分作为NMS的输入,可以有效提高模型的性能。
虽然在推理阶段公式中包含IOU和概率的计算,但实际上主要是为了评估预测结果的质量,而不是直接计算IOU。通过这种方式,YOLOv1能够以较高的速度和较高的准确性完成目标检测任务。
下面再次讨论下这个置信度在不同时期的问题,主要是我画了一些时间理解这个东西,所以希望大家在这部分少走弯路而已。
2. YOLO V2
YOLOv1 的缺点:
原因:由于其 7 ∗ 7 ∗ 2 7*7*2 7∗7∗2grid cell的设计让网格设计导致模型的最大预测框数量仅有98 ,类别预测则就有49。
四个缺点:图像物体多,200个人就检测不出来。一个网格中包含多个物体类别也不行。对不常见的物体横纵变现不佳。整体性能不行。
YOLOV2的改进:
YOLOv2确实在网络结构上进行了显著的改进,采用了新的主干网络——Darknet-19。以下是关于这些改进的详细说明:
-
主干网络Darknet-19:
- Darknet-19作为YOLOv2的基础网络,提高了模型的效率和性能。
- 使用了 3 × 3 3 \times 3 3×3 和 1 × 1 1 \times 1 1×1卷积核的组合,减少了参数量,同时保持了模型的计算能力。
-
参数量的优化:
- 通过小卷积核的组合,模型能够在保持感受野一致的同时减少参数量。
- 这种设计使得模型更加轻量化,运行速度更快,适合实时应用。
-
批归一化的应用:
- 在网络中增加了批归一化层,帮助稳定训练过程,加速收敛。
- 批归一化也提高了模型的泛化能力,使得模型在不同数据集和环境中表现更加稳定。
通过这些改进,YOLOv2不仅提升了检测速度,还提高了检测的准确性和稳定性。模型的轻量化设计和优化的训练过程使其在各种计算资源环境下都有良好的表现。
很常规的网络书写方式,如果有同学不是很懂1*1 卷积的有效性可以看我轻量化视觉专栏的内容。
原文中提到实现了一种细粒度太则会难过的提取,细粒度特征提取。
实际上就是增加了一个类似于残差层进行了一个残差连接,通过高像素特征弥补抽象特征缺失的部分,同样也可以说成是抽象特征弥补高像素对整体的理解的缺失问题,相互成就呗。
在YOLOv2中,细粒度特征分析通过一种类似于残差连接的方式得以实现。这种设计旨在结合高分辨率特征和抽象特征,以提高模型对物体检测的精确度。具体来说:
-
特征融合:
- 通过引入类似残差连接的结构,将高分辨率的特征与抽象特征进行融合。
- 高像素特征提供了细节信息,而抽象特征则提供了对整体结构的理解。
-
互补特性:
- 高像素特征能够弥补抽象特征在细节上的缺失,使得模型在检测小物体或复杂背景时更具优势。
- 同时,抽象特征可以帮助理解整体语义,从而弥补高像素特征在全局理解上的不足。
-
相互成就:
- 通过这种特征的相互融合,模型能够在不同层次的信息中找到平衡,从而提高整体检测性能。
- 这种设计使得模型能够更好地适应不同的检测任务和场景,实现更高的准确性。
通过结合细粒度和抽象特征,YOLOv2在处理复杂的图像和多样的物体时表现得更加出色,体现了特征融合的强大能力。
还是很巧妙的。
实际上还有其他的改进我们继续看:
新的训练策略的改进:
高分辨率的分类器
在使用高分辨率分类器时,存在一些挑战,特别是当使用预训练的模型时。以下是其中一个关键问题:
- 输入尺寸固定:
- CNN模型通常是在固定尺寸的输入上进行预训练。例如,许多模型是在
224
×
224
224 \times 224
224×224或
256
×
256
256 \times 256
256×256的输入尺寸上训练的。实际上如果输入一个
448
×
448
448 \times 448
448×448 的输入卷积核就要重新训练进行观测,适应新的反噬,从而应对改变。而YOLO的作者是怎么做的呢?
- CNN模型通常是在固定尺寸的输入上进行预训练。例如,许多模型是在
224
×
224
224 \times 224
224×224或
256
×
256
256 \times 256
256×256的输入尺寸上训练的。实际上如果输入一个
448
×
448
448 \times 448
448×448 的输入卷积核就要重新训练进行观测,适应新的反噬,从而应对改变。而YOLO的作者是怎么做的呢?
yolo v2在这个基础上进行了微调,预训练阶段任然是在Imagenet上进行微调。后续的操作是将输入分辨率从224 放大到448。并在imageNet上微调了10个epoch这样的微调模型可以完成更大的图片。提高了百分之4 的map
YOLOv2在YOLOv1的基础上进行了显著的改进,以提高检测的准确性和速度。以下是YOLOv2在预训练和微调阶段的一些关键步骤:
- 预训练阶段:
- YOLOv2首先在ImageNet数据集上进行预训练。这是为了让模型在大量的图像上学习丰富的特征表示,尤其是学习对不同物体类别的识别能力。
- 初始训练是在分辨率为224x224的输入图像上进行的。这是一个常见的输入尺寸,用于许多分类任务,以确保模型能够有效地学习基本特征。
- 分辨率提升:
- 为了增强模型对更大尺寸图像的检测能力,YOLOv2将输入图像的分辨率从224x224提升到448x448。
- 增加输入分辨率使得模型能够捕捉更多细节信息,有助于提高边界框定位的精度和物体识别的准确性。
- 微调阶段:
- 在提升分辨率后,YOLOv2在ImageNet上进行了额外的微调训练,通常为10个epoch。这一阶段旨在让模型适应新的输入尺寸,同时优化其特征提取能力。
- 通过微调,模型能够更好地处理高分辨率图像,在目标检测任务上表现出更高的精度。
- 性能提升:
- 这种策略帮助YOLOv2在更大图像上实现了更高的检测准确性,提升了模型的平均精度(mAP)约4%。这种提升来源于模型对图像细节的捕捉能力增强,以及更好的特征提取。
YOLOv2的这些改进使得它在保持实时检测速度的同时,显著提高了检测精度,适应了更广泛的应用场景。
在 YOLOv2 的训练策略中,确实是将整个 ImageNet 数据集的所有图像都调整到更高的分辨率(448x448),然后在这个新的分辨率上进行微调训练,通常进行 10 个 epoch。
这个过程的目的是为了让模型能够适应更大尺寸的输入图像,从而在目标检测任务中提高其对细节的捕捉能力和整体的检测精度。通过在 ImageNet 上进行微调,模型能够更好地泛化到其他数据集和应用场景中。
还有一个就是输入图像做了微调,具体如何操作的呢具体的细节我们向后看。
可以看到输入是
416
∗
416
416*416
416∗416的图像而输出则是
13
∗
13
13*13
13∗13这里面是一个奇数的输出
448 ∗ 448 448*448 448∗448 则是偶数的。
和yolov1一样输出是N*N则将原始图像就划分成了多少成多少的网格。就是物体中心落在了哪个网格就用哪个网格实现预测。而作者认为大多数的物体的中心会落在整章图片的中心上。
可以看到上图,如果网格偶数则是中心点落在网格中心,那这个点属于哪个网格呢。不管用谁这个点都偏离这个网格很远。所以采用的奇数。
在YOLOv2中,输入图像的尺寸和输出特征图的尺寸之间的关系确实是设计的一部分。这种设计考虑到物体检测的效率和准确性。以下是关于输入和输出尺寸的一些解释:
-
输入尺寸:
- YOLOv2通常使用 416 × 416 416 \times 416 416×416尺寸的输入图像进行训练和预测。
- 输入尺寸的选择是为了平衡计算效率和检测精度。
-
输出尺寸:
- 输出特征图的尺寸为 13 × 13 13 \times 13 13×13,这意味着输入图像被划分为 13 × 13 13 \times 13 13×13的网格。
- 这种划分方式与YOLOv1类似,将整个图像分成网格,每个网格负责预测其范围内的物体。
-
偶数和奇数尺寸:
- 使用奇数尺寸的输出,使得中心网格位于图像的中心,更适合捕捉大多数物体的中心。
- 在YOLOv1中,输出也是 N × N N \times N N×N网格。YOLOv2通过选择奇数来增强对中心物体的定位。
-
物体中心落在网格:
- 作者认为大多数物体的中心会落在整张图片的中心区域,这样的设计使得模型更容易捕捉到物体。
- 这种设计策略提高了模型的检测效率,特别是对于较大和位于中心的物体。
通过这种输入和输出尺寸的设计,YOLOv2能够更有效地检测物体,同时保持较高的计算效率和准确性。
多尺度的训练策略
在多尺度训练中随着,每次加载图像,图像的大小会随着当前的批次进行调整更改,随机选择不同尺度的方式。下图所示,这样的模型能够动态的适应各种规模的图片。变化的输入也会减少过拟合。
训练阶段:
在YOLOv2中,使用锚框(Anchor Boxes)的机制确实是一个重要的改进,与YOLOv1相比,它显著改变了预测框的计算方式。以下是具体的说明:
-
锚框的引入:
- YOLOv2引入了锚框,这些锚框是预定义的形状和大小,用于捕捉不同尺度和长宽比的物体。
- 模型不再直接预测边界框的绝对位置和大小,而是预测相对于这些锚框的微调值。
-
相对位置与微调:
- 预测的 x , y , w , h x, y, w, h x,y,w,h值不再是边界框的具体坐标和尺寸,而是相对于锚框的调整值。
- 例如, x x x和 y y y是相对于网格单元位置的偏移量,而 w w w和 h h h是相对于锚框宽度和高度的比例调整。
-
锚框的多样性:
- YOLOv2使用多个(通常为五种)锚框形态,这些锚框通过聚类分析(如k-means)从训练数据中学习得来。
- 每个网格单元可以预测多个锚框形态,以便更好地适应不同的物体特征。
-
优势:
- 这种方法允许模型学习更复杂的边界框形状和大小,提高了检测不同尺度和长宽比物体的能力。
- 通过减少直接预测的复杂性,模型的训练变得更为稳定,收敛速度更快。
通过使用锚框和相对位置的预测,YOLOv2能够更灵活地处理多种物体形态和复杂场景,提高了整体检测性能。
可以看到每一个box都有自己的独立的类别预测。也就是说一个gridcell可以预测五种类别
可以按照物体的几何特性人为的设定锚框的形状
锚框是设定好的。就是通过每一个gridcel的预测值对锚框的位置进行微调,从而实现
实际上还是和原来的一样,只不是现在的预测框是有一定标准存在的,仅仅是用于修正而已。 之前是由于模型是想咋生成咋生成,现在是模型给你一个框你自己缩小或增大。属于是预制菜你在加点盐啥的。现阶段主要是这样。五个锚框实际上也是对应着五种不同种大类型的。骑车人啥的锚框不一样大。所以NMS解决了相同类别的多个物体。v2则是解决了重叠在一个一起的多种物体。
训练阶段差不多和v1不同的是基于anchor 偏移得到的,IOU最大的预测框保留你和
这里虽然使用了GT就是真实的框进行框选择,哪一个用于最终的框预测,但是不是泄题一定程度上是在纠错。告诉模型再遇到什么样的物体你该用哪一个。而后面的loss中框的预测则是对这种情况的进一步约束,告诉你的框的生成的具体指标是多少。这个和v1一样的是这个行为不参与任何一种输出结果的预测。所以不构成泄题。有点类似于V1中使用哪一个进行最终为最终的预测。对训练数据进行Kmean进行锚框的聚类,从而找到哪些类别能找到一定的通识模式的框。差不多这个就是V2的全部情况了。损失函数啥的这些细节实现的不同可以换成不同的不必太过于追求起结果的问题。
3. YOLO V3
我们直接看这个架构的细节就知道改了哪里了:
可以看到在这个模型中国呢主干网络采用了Darknet53 进一步增强了模型的性能。类似于resnet 的网络,由多种残差块构成。 可以看到主干模型中特征图在不断的缩小,但是通道数却在增加。可以看到步长为2,这就是空间尺寸减少,而通道数翻倍通道数加深可以强制网络学习高层特征,就是高度抽象吗,用于分类,因为最终的抽象特征变相而言是对整体图的理解。但是仅仅适用于分类,其分辨力最终的比如右上角的
13
∗
13
∗
255
13*13*255
13∗13∗255分辨率太低了。小物体在这个过程中就卷没了被忽视了。显然这个不是和小物体。实际上有点像SSD增加了残差连接的SSD。仅仅是实现的流程不同而已。大分辨率就是每一种特征图分工不同。比如小图用于预测大物体,就像CNN不同层一样一定程度上实现分工的不同。能够结合不同层特征优势综合考量定位。剩下的部分和V2都是一样的.
在YOLOv2中,CBL层指的是一种特定的层组合,通常包括卷积(Convolution)、批归一化(Batch Normalization)和激活函数(Leaky ReLU)。这个组合在YOLOv2中被广泛应用,以提高网络的训练效率和性能。具体来说:
- 卷积层(C):
- 卷积层用于提取图像的空间特征,它通过卷积核滑动图像来捕获局部特征。
- 批归一化(B):
- 批归一化层对卷积层的输出进行归一化处理,标准化输出,使得后续层的输入分布更加稳定,从而加速训练过程并提高模型的收敛性。
- Leaky ReLU(L):
- Leaky ReLU是一种激活函数,允许小幅负输出(通过一个小斜率),相比于传统ReLU,减少了“神经元死亡”的问题(即长期负输入导致神经元不更新)。
这种CBL层组合在网络结构中提供了强大的特征提取能力,同时有效地提高了训练稳定性和模型性能。通过这种组合,YOLOv2能够实现快速且准确的物体检测。
训练阶段:
低分辨率锚框比较大,小分辨率锚框比较小。这样做的目的就是为了分工,让模型去预测不同规模的物体。实现分工。
输出的预测框这么多怎么进行匹配哪个框和真实的框进行los计算呢。实际上还是IOU计算的逻辑。去计算哪个框的IOU和模型最大。同样他引入负样本的概念,用于和真实框对比的叫正例大于某个阈值的叫正样本,0.5黄色的都是正样本,但是只有红色的IOU最大所以红色的事正样本黄色的被忽略。同样低于0.5就是负样本了。负样本会参与到置信度的计算看上面的公式。不需要模型进行预测置信度啥的二十可以看到直接使用0或者1进行计算。
7. 总结
对了对了,对这些内容感兴趣的朋友们,通过点赞、收藏和关注来表达你们的支持是对我的极大鼓励,如果你感觉还不错的话也可以打赏一杯咖啡钱,非常感谢大家!有任何问题或建议,欢迎随时通过私信与我交流。期待你们的积极参与和反馈。
下一小节将着重说明YOLO系列的算法进行详细的阐述,👏欢迎大家观看哦