从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】

作者:Juan R. Terven 、Diana M. Cordova-Esparaza

摘要:YOLO已经成为机器人无人驾驶汽车视频监控应用的核心实时物体检测系统。我们对YOLO的演变进行了全面的分析,研究了从最初的YOLO到YOLOv8每次迭代的创新和贡献。我们首先描述了标准指标和后处理;然后,我们讨论了每个模型的网络结构和训练技巧的主要变化。最后,我们总结了YOLO发展的基本经验,并提供了对其未来的看法,强调了提高实时物体检测系统的潜在研究方向。

1. 简介

实时物体检测已经成为众多应用中的一个重要组成部分,横跨自主车辆、机器人、视频监控和增强现实等各个领域。在各种物体检测算法中,YOLO(You Only Look Once)框架因其在速度和准确性方面的显著平衡而脱颖而出,能够快速、可靠地识别图像中的物体。自成立以来,YOLO系列已经经历了多次迭代,每次都是在以前的版本基础上解决局限性并提高性能(见图1)。本文旨在全面回顾YOLO框架的发展,从最初的YOLOv1到最新的YOLOv8,阐释每个版本的关键创新、差异和改进。

本文首先探讨了原始YOLO模型的基本概念和架构,这为YOLO系列的后续进展奠定了基础。随后,我们深入探讨了从YOLOv2到YOLOv8每个版本中引入的改进和提高。这些改进包括各个方面,如网络设计、损失函数的修改、锚框的调整和输入分辨率的扩展。通过研究这些发展,对YOLO框架的演变及其对物体检测的影响有一个整体的理解。

除了讨论每个YOLO版本的具体进展外,本文还强调了在整个框架的发展过程中出现的速度和准确性之间的权衡问题。这强调了在选择最合适的YOLO模型时,考虑具体应用的背景和要求的重要性。最后,我们设想了YOLO框架的未来方向,触及了进一步研究和发展的潜在途径,这将塑造实时物体检测系统的持续进展。

2. YOLO在不同领域的应用

YOLO的实时物体检测能力在自主车辆系统中是非常宝贵的,能够快速识别和跟踪各种物体,如车辆、行人[1, 2]、自行车和其他障碍物[3, 4, 5, 6]。这些能力已被应用于许多领域,包括用于监控的视频序列中的动作识别[7][8]、体育分析[9]和人机交互[10]。

YOLO模型已被用于农业,以检测和分类作物[11, 12]、害虫和疾病[13],协助精准农业技术和自动化耕作过程。它们还被用于生物识别、安全和面部识别系统中的面部检测任务[14, 15]。

在医学领域,YOLO已被用于癌症检测[16, 17]、皮肤分割[18]和药片识别[19],从而提高诊断的准确性和更有效的治疗过程。在遥感领域,它已被用于卫星和航空图像中的物体检测和分类,有助于土地利用绘图、城市规划和环境监测[20, 21, 22, 23]。

安防系统已经将YOLO模型整合到视频资料的实时监控和分析中,允许快速检测可疑活动[24]、社会距离和脸部面具检测[25]。这些模型还被应用于表面检测,以检测缺陷和异常,加强制造和生产过程的质量控制[26, 27, 28]。

在交通应用中,YOLO模型已被用于车牌检测[29]和交通标志识别[30]等任务,促进了智能交通系统和交通管理解决方案的发展。它们已被用于野生动物检测和监测,以识别濒危物种,用于生物多样性保护和生态系统管理[31]。最后,YOLO已被广泛用于机器人应用[32, 33]和无人机的物体检测[34, 35]。

3. 物体检测指标和非极大值抑制NMS

平均精度(AP),传统上称为平均精度(mAP),是评价物体检测模型性能的常用指标。它测量所有类别的平均精度,提供一个单一的数值来比较不同的模型。COCO数据集没有对AP和AP进行区分。在本文的其余部分,我们将把这个指标称为AP。

在YOLOv1和YOLOv2中,用于训练和基准测试的数据集是PASCAL VOC 2007和VOC 2012[36]。然而,从YOLOv3开始,使用的数据集是微软COCO(Common Objects in Context)[37]。对于这些数据集,AP的计算方法是不同的。以下各节将讨论AP背后的原理,并解释它是如何计算的。

3.1 AP

AP指标是基于精度-召回指标,处理多个对象类别,并使用Intersection over Union(IoU)定义一个积极的预测。

Precision和Recall:精确率衡量的是模型正面预测的准确性,而召回率衡量的是模型正确识别的实际正面案例的比例。精确率和召回率之间通常有一个权衡;例如,增加检测到的对象的数量(更高的召回率)会导致更多的假阳性(更低的精确率)。为了考虑到这种权衡,AP指标包含了精度-召回曲线,该曲线将精度与不同置信度阈值的召回率作了对比。这个指标通过考虑精度-召回曲线下的面积,对精度和召回进行了平衡的评估。

处理多个物体类别:物体检测模型必须识别和定位图像中的多个物体类别。AP指标通过单独计算每个类别的平均精度(AP),然后取所有类别中这些AP的平均值来解决这个问题(这就是为什么它也被称为平均平均精度)。这种方法确保了对每个类别的模型性能进行单独评估,从而对模型的整体性能提供了更全面的评估。

IoU:物体检测的目的是通过预测边界框来准确定位图像中的物体。AP指标包含了 "联合体上的交集"(IoU)措施,以评估预测的边界盒的质量。IoU是预测界线盒和地面真实界线盒的交集面积与联合面积之比(见图2)。它衡量的是地面实况和预测边界盒之间的重叠程度。COCO基准考虑了多个IoU阈值,以评估模型在不同定位精度水平上的表现。

3.2 计算AP

在VOC和COCO数据集中,AP的计算方法是不同的。在这一节中,我们将描述它是如何在每个数据集上计算的。

VOC数据集

这个数据集包括20个物体类别。为了计算VOC中的AP,我们遵循以下步骤:

  1. 对于每个类别,通过改变模型预测的置信度阈值,计算出精确-召回曲线
  2. 使用精度-召回曲线的内插11点抽样,计算每个类别的平均精度(AP)
  3. 通过取所有20个类别中的AP的平均值来计算最终的平均精度(AP)

COCO数据集

这个数据集包括80个对象类别,并使用更复杂的方法来计算AP。它没有使用11点插值,而是使用101点插值,也就是说,它计算了从0到1的101个召回阈值的精度,增量为0.01。另外,AP是通过对多个IoU值进行平均而不是只对一个IoU值进行平均得到的,除了一个常见的AP指标,即AP50    ,它是单个IoU阈值为0.5的AP。COCO中计算AP的步骤如下:

  1. 对于每个类别,通过改变模型预测的置信度阈值,计算出精确-召回曲线
  2. 使用101-recall阈值计算每个类别的平均精度(AP)
  3. 在不同的交叉联合(IoU)阈值下计算AP,通常从0.5到0.95,步长为0.05。更高的IoU阈值需要更准确的预测才能被认为是真阳性
  4. 对于每个IoU阈值,取所有80个类别的AP的平均值
  5. 最后,通过平均每个IoU阈值计算的AP值来计算总体AP

AP计算的差异使得我们很难直接比较两个数据集的物体检测模型的性能。目前的标准使用COCO AP,因为它对一个模型在不同的IoU阈值下的表现有更精细的评估。

3.3 非极大值抑制 (NMS)

非极大值抑制(NMS)是物体检测算法中使用的一种后处理技术,用于减少重叠边界盒的数量,提高整体检测质量。物体检测算法通常会在同一物体周围产生多个具有不同置信度分数的边界框。NMS过滤掉多余的和不相关的边界盒,只保留最准确的边界盒。算法1描述了该程序。图3显示了一个包含多个重叠边界框的物体检测模型的典型输出和NMS之后的输出。

4. YOLO: You Only Look Once

Joseph Redmon等人的YOLO发表在CVPR 2016[38]。它首次提出了一种实时的端到端物体检测方法。YOLO这个名字代表了 "你只看一次",指的是它是与之前的方法相比,YOLO只需通过一次网络就能完成检测任务,而之前的方法要么使用滑动窗口,要么使用分类器,每个图像需要运行数百次或数千次,更先进的方法则将任务分为两步,第一步检测有物体或候选框的可能区域,第二步对候选框进行分类。另外,YOLO使用了一个更直接的输出,只基于回归来预测检测输出,而Fast R-CNN[39]则使用了两个单独的输出,一个是概率的分类,一个是方框坐标的回归。

4.1 YOLOv1如何工作?

YOLOv1通过同时检测所有的边界框,统一了物体检测步骤。为了实现这一目标,YOLO将输入图像划每个边界框的预测由五个值组成:Pc、bx、by、bh、bw ,其中Pc是bounding box的置信度分数,反映了模型对bbox包含物体的置信度以及bbox的精确程度。bxby坐标是方框相对于网格单元的中心,bhbw是方框相对于整个图像的高度和宽度。YOLO的输出是一个S×S×(B×5+C)的张量,可以选择用非最大抑制(NMS) 来去除重复的检测结果。

在最初的YOLO论文中,作者使用了PASCAL  VOC数据集[36],该数据集包含20个(C  = 20);一个7×7(= 7)网格最多预测两个类(B = 2),输出7×7×30预测结果。

 YOLOv1在PASCAL VOC2007数据集上取得了63.4的平均精度(AP)。

4.2 YOLOv1网络架构

YOLOv1架构包括24个卷积层,然后是两个全连接层,用于预测bbox坐标和概率。除了最后一个层使用线性激活函数外,所有层都使用了漏整流线性单元激活[40]。受GoogLeNet[41]和Network in Network[42] 的启发,YOLO使用1×1卷积层来减少特征图的数量并保持相对较低的参数数量。作为激活层,表1描述了YOLOv1的架构。作者还介绍了一个更轻的模型,称为快速YOLO,由九个卷积层组成。

4.3 YOLOv1训练

作者使用ImageNet数据集[43]在224x224的分辨率下对YOLO的前20层进行了预训练。然后,他们用随机初始化的权重增加了最后四层,并在448x448的分辨率下用PASCAL VOC 2007和VOC 2012数据集[36]对模型进行了微调,以增加细节,实现更准确的物体检测。对于增强,作者使用了最多为输入图像大小20%的随机缩放和平移,以及HSV色彩空间中上端系数为1.5的随机曝光和饱和度。

YOLOv1使用了一个由多个和平方误差组成的损失函数,如图5所示。在该损失函数中、 λcoord = 5是一个比例因子,赋予边界框预测更多的重要性,而λnoobj = 0.5是一个比例因子,降低不包含物体的框的重要性。λnoobj = 0.5是一个比例因子,它降低了不包含物体的bbox的重要性。

4.4 YOLOv1优缺点

YOLO的简单结构,加上其新颖的全图像单次回归,使其比现有的物体检测器快得多,允许实时性能。然而,虽然YOLO的表现比任何物体检测器都快,但与最先进的方法如快速R-CNN[39]相比,定位误差更大。造成这种限制的主要原因有三个:

  1. 它在网格单元中最多只能检测到两个相同类别的物体,限制了它预测附近物体的能力
  2. 它在预测训练数据中未见的长宽比物体时很吃力
  3. 由于下采样层,它只能从粗略的物体特征中学习

5. YOLOv2:更好、更快、更强

YOLOv2由Joseph Redmon和Ali Farhadi发表在CVPR 2017[44]。它包括了对原始YOLO的一些改进,使其更好,保持相同的速度,也更强大,能够检测9000个类别!这些改进有以下几点:

  1. 在所有卷积层上的批量归一化改善了收敛性,并作为一个正则器来减少过拟合;
  2. 高分辨率分类器,和YOLOv1一样,他们在ImageNet 以224x224的分辨率对模型进行了预训练。然而,这一次,他们在分辨率为448 x 448的ImageNet上对模型进行了10次微调,提高了网络在高分辨率输入下的性能;
  3. 完全卷积。他们去掉了密集层,采用了全卷积架构;
  4. 使用Anchor来预测边界盒。他们使用一组先验框Anchor,这些Anchor具有预定义的形状,用于匹配物体的原型形状,如图6所示。每个网格单元都定义了多个Anchor,系统预测每个Anchor的坐标和类别。网络输出的大小与每个网格单元的Anchor数量成正比;
  5. 维度聚类。挑选好的Anchor有助于网络学习预测更准确的边界盒。作者对训练中的边界盒进行了k-means聚类,以找到好的先验。他们选择了五个Anchor,在召回率和模型复杂性之间进行了良好的权衡;
  6. 直接预测位置。与其他预测偏移量的方法不同[45],YOLOv2遵循同样的理念,预测了相对于网格单元的位置坐标。网络为每个单元预测了五个bounding box,每个bounding box有五个值tx , ty , tw , th , to ,其中to 相当于YOLOv1的Pc,最终得到的bounding box坐标如图7所示;
  7. 细粒度的特征。与YOLOv1相比,YOLOv2去掉了一个池化层,对于416×416的输入图像,得到13×13的特征图,结构细节见图表2;
  8. 多尺度训练。由于YOLOv2不使用全连接层,输入可以是不同的尺寸。为了使YOLOv2对不同的输入尺寸具有鲁棒性,作者随机训练模型,每十批改变输入尺寸(从320 × 320到608 × 608)。

通过所有这些改进,YOLOv2在PASCAL VOC2007数据集上取得了78.6%的平均精度(AP),而YOLOv1则取得了63.4%。

5.1 YOLOv2架构

YOLOv2使用的骨干架构被称为Darknet-19,包含19个卷积层和5个maxpooling层。与YOLOv1的架构类似,它受到Network in Network[42]的启发,在3×3之间使用1×1 3×3之间的卷积,以减少参数的数量。此外,如上所述,他们使用批量归一化来规范化并帮助收敛。

5.2 YOLO9000是一个更强大的YOLOv2

作者在同一篇论文中介绍了一种训练联合分类和检测的方法。它使用来自COCO[37]的检测标记数据来学习bounding box坐标,并使用来自ImageNet的分类数据来增加它能检测的类别数量。在训练过程中,他们将这两个数据集结合起来,这样当使用检测训练图像时,它反向传播检测网络,而当使用分类训练图像时,它反向传播架构的分类部分。结果是一个能够检测超过9000个类别的YOLO模型,因此被称为YOLO9000。 

6. YOLOv3

YOLOv3[46]于2018年由Joseph Redmon和Ali Farhadi发表在ArXiv。它包括重大的变化和更大的架构,以便在保持实时性能的同时与最先进的技术接轨。在下文中,我们描述了相对于YOLOv2的变化。

  1. bounding box预测。与YOLOv2一样,该网络为每个bounding box预测四个坐标tx、ty、tw和th;然而,这次YOLOv3使用逻辑回归为每个bounding box预测一个目标分数。这个分数与ground truth重合度最高的Anchor来说是1,对于其他Anchor来说是0。与Faster R-CNN[45]相比,YOLOv3只为每个ground truth分配一个Anchor。另外,如果没有为一个对象分配Anchor,它只会产生分类损失,而不会产生定位损失或置信度损失;
  2. 类预测。他们没有使用softmax进行分类,而是使用二元交叉熵来训练独立的logistic分类器,并将问题作为多标签分类来提出。这种变化允许给同一个bounding box分配多个标签,这可能发生在一些标签重叠的复杂数据集上[47]。例如,同一个物体可以是一个人和一个男人;
  3. 新的骨干网络。YOLOv3的特点是一个更大的特征提取器,由53个卷积层组成,带有Res残余连接。第6.1节更详细地描述了该架构;
  4. 空间金字塔池(SPP)。 虽然在论文中没有提到,但作者还在骨干中加入了一个改进的SPP块[48],它连接了多个最大集合输出,而没有子采样(stride = 1),每个内核大小不同的k×k,其中k=1、5、9、13,允许更大的感受野。这个版本被称为称为YOLOv3-spp,是表现最好的版本,将AP50提高了2.7%;
  5. 多尺度预测。与特征金字塔网络[49]类似,YOLOv3在三个不同尺度上预测三个bounding box。第6.2节描述了多尺度预测机制的更多细节;
  6. Bounding box先验。与YOLOv2一样, 作者也使用k-means来确定Anchor的bounding box预设。不同的是, 在YOLOv2中,他们每个单元共使用了五个先验盒,而在YOLOv3中,他们使用了三个不同尺度的先验盒。

6.1 YOLOv3架构

YOLOv3中提出的架构主干被称为Darknet-53。它用全连接层取代了所有的max-pooling层,并增加了Res残差连接。总的来说,它包含53个卷积层。图8显示了该架构的细节。

Darknet-53骨干网获得了与ResNet-152相当的Top-1和Top-5的准确率,但速度几乎为2倍。

6.2  YOLOv3多尺度预测

除了更大的结构,YOLOv3的一个基本特征是多尺度预测,即在多个网格尺寸下的预测。这有助于获得更精细的方框,并大大改善了对小物体的预测,而这正是YOLO以前版本的主要弱点之一。

图9所示的多尺度检测架构的工作原理如下:第一个标记为y1的输出相当于YOLOv2的输出,其中一个13×13的网格定义了输出。第二个输出y2是由串联后的输出与(Res × 8)后的输出相连接。这些特征图有不同的尺寸,即13×13和26×26,所以在连接之前有一个上采样操作。最后,使用一个上采样操作,第三个输出y3将26×26的特征图与52×52的特征图连接起来。对于有80个类别的COCO数据集,每个尺度提供了一个形状为N×N×[3×(4+1+80)]的输出张量。其中N×N是特征图(或网格单元)的大小,3表示每个单元的方框,4+1包括四个坐标和置信度得分。4+1包括四个坐标和置信度得分。

6.3  YOLOv3结果

当YOLOv3发布时,物体检测的基准已经从PASCAL VOC变成了Microsoft COCO[37]。因此,从这里开始, 所有的YOLO都在MS COCO数据集中进行评估。YOLOv3-spp在20FPS的情况下,平均精度AP为36.2%, AP50 为60.6%,达到了当时的最先进水平,速度快了2倍。

7. Backbone, Neck和Head

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

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

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

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

在其余的YOLO模型中,我们将使用Backbone, Neck和Head来描述架构。

8. YOLOv4

两年过去了,YOLO没有新版本。直到2020年4月,Alexey Bochkovskiy、Chien-Yao Wang和Hong-Yuan Mark Liao在ArXiv发布了YOLOv4[50]的论文。起初,不同的作者提出一个新的YOLO "官方 "版本让人感觉很奇怪;然而,YOLOv4保持了相同的YOLO理念——实时、开源、端到端和DarkNet框架——而且改进非常令人满意,社区迅速接受了这个版本作为官方的YOLOv4。

YOLOv4试图通过试验许多被归类为bag-of-freebiesbag-of-specials的变化来找到最佳平衡。bag-of-freebies是指只改变训练策略和增加训练成本但不增加推理时间的方法,最常见的是数据增强。另一方面,bag-of-specials是指稍微增加推理成本但显著提高准确率的方法。这些方法的例子有扩大感受野[48, 51, 52],结合特征[53, 49, 54, 55],以及后处理[56, 40, 57, 58]等等。

我们将YOLOv4的主要变化总结为以下几点:

  • 一个带有bag-of-specials集成的增强型架构。作者尝试了多种骨干架构, 如ResNeXt50[59] 、EfficientNet-B3[60]和Darknet-53。表现最好的架构是对Darknet-53的修改,采用跨阶段部分连接(CSPNet)[61],以Mish激活函数[57]作为骨干(见图11)。对于颈部,他们使用了YOLOv3-spp中的修改版空间金字塔集合(SPP)[48]和YOLOv3中的多尺度预测,但用修改版的路径聚合网络(PANet)[62]代替FPN,以及修改的空间注意模块(SAM)[63]。最后,对于检测头,他们使用YOLOv3中的锚。因此,该模型被称为CSPDarknet53-PANet-SPP。添加到Darknet-53中的跨阶段部分连接(CSP)有助于减少模型的计算量,同时保持相同的精度。与YOLOv3-spp中一样,SPP块在不影响推理速度的情况下增加了感受野。修改后的PANet版本将特征串联起来,而不是像原PANet论文中那样将其添加;
  • bag-of-freebies的高级训练方法。除了常规的增强,如随机亮度、对比度、缩放、裁剪、翻转和旋转,作者还实现了马赛克增强,将四张图像合并为一张,允许检测其通常背景之外的物体,同时也减少了对大批量正常化的小批量的需求。对于正则化, 他们使用了DropBlock[64] , 作为Dropout[65]的替代品,但用于卷积神经网络以及类标签平滑[66, 67]。对于检测器,他们增加了CIoU 损失[68]和Cross mini-bath normalization (CmBN),用于收集整个批次的统计数据,而不是像常规批次归一化中的单个小批次[69];
  • 自我对抗性训练(SAT。为了使模型对扰动更加稳健,对输入的图像进行对抗性攻击,以创造一个欺骗性,即gound truth不在图像中,但保持原始标签以检测正确的对象;
  • 用遗传算法进行超参数优化。为了找到用于训练的最佳超参数,他们在前10%的时期使用遗传算法,并使用余弦退火调度器[70]来改变训练期间的学习率。它开始缓慢地降低学习率,然后在训练过程的一半时快速降低,最后略微降低。

 表3列出了骨干网和检测器的最终选择的BoF和BoS。

8.1 YOLOv4结果

在MS COCO数据集test-dev 2017上进行评估,YOLOv4在NVIDIA V100上实现了43.5%的AP和65.7%的AP50,速度超过了50 FPS。

9. YOLOv5

YOLOv5[72]是在YOLOv4之后几个月于2020年由Glenn Jocher发布。在写这篇文章时,还没有关于YOLOv5的科学论文,但从代码中,我们知道它使用了YOLOv4部分描述的许多改进,主要区别是它是用Pytorch而不是Darknet开发的。YOLOv5是开源的,由Ultralytics积极维护,有250多个贡献者,并经常有新的改进。YOLOv5很容易使用、培训和部署。Ultralytics提供了一个iOS和Android的移动版本,以及许多用于标签、培训和部署的集成。

YOLOv5 提供了五个版本: YOLOv5n( 纳米级)、YOLOv5s( 小型)、YOLOv5m( 中型)、YOLOv5l(大型)和YOLOv5x(特大型)。

在撰写本文时,YOLOv5发布的版本是7.0版,包括能够进行分类和实例分割的YOLOv5版本。

9.1 YOLOv5结果

在MS COCO数据集test-dev 2017上进行评估,YOLOv5x在图像大小为640像素的情况下实现了50.7%的AP。使用32 个批次的大小,它在NVIDIA V100 上可以达到200 FPS 的速度。使用更大的输入尺寸1536 像素, YOLOv5实现了55.8%的AP。

10. Scaled-YOLOv4

在YOLOv4 的一年后, 同一作者在CVPR 2021 上展示了Scaled-YOLOv4 [73] 。与YOLOv4 不同, Scaled YOLOv4是在Pytorch而不是Darknet中开发的。主要的创新之处在于引入了扩大和缩小的技术。扩大规模意味着以降低速度为代价来制作一个增加精度的模型;另一方面,缩小规模需要制作一个增加速度而牺牲精度的模型。此外,按比例缩小的模型需要更少的计算能力,可以在嵌入式系统上运行。

缩小的架构被称为YOLOv4-tiny;它是为低端GPU设计的,在Jetson TX2上能以46 FPS运行,在RTX2080Ti上能以440 FPS运行,在MS COCO上达到22%的AP。

扩大的模型架构被称为YOLOv4-large,其中包括三种不同尺寸的P5、P6和P7。这个架构是为云计算GPU设计的,取得了最先进的性能,超过了所有以前的模型[74, 75, 76],在MS COCO上的AP为56%。

11. YOLOR

YOLOR[77]由YOLOv4的同一研究小组于2021年5月发表在ArXiv。它代表着你只学习一个表征。在这篇论文中,作者采用了一种不同的方法;他们开发了一种多任务学习方法,旨在通过学习一般的表征和使用子网络来创建特定任务的表征,为各种任务(如分类、检测、姿势估计)创建一个单一的模型。洞察到传统的联合学习方法经常导致次优特征的产生,YOLOR旨在通过编码神经网络的隐性知识来克服这一问题,以应用于多个任务,类似于人类使用过去的经验来处理新问题。结果显示,将隐性知识引入神经网络有利于所有的任务。

在MS COCO数据集test-dev 2017上进行评估,YOLOR在NVIDIA V100上以30 FPS的速度取得了55.4%的AP和73.3%的AP50。

12. YOLOX

YOLOX[78]于2021年7月发表在ArXiv上,由Megvii Technology的研究团队开发。它以Pytorch为基础,以Ultralytics的YOLOV3为起点,有五个主要变化:无锚结构、多阳性、解耦头、高级标签分配和强增强。它取得了最先进的结果。

2021年,在Tesla V100上以50.1%的AP和68.9%的FPS实现了速度和准确性的最佳平衡。在下文中,我们描述了YOLOX相对于YOLOv3的五个主要变化:

  1. 无锚(Anchor-free)。自YOLOv2以来,所有后续的YOLO版本都是基于锚点的检测器。YOLOX受到CornerNet[79]、CenterNet[80]和FCOS[81]等最先进的无锚物体检测器的启发,回到了一个无锚结构,简化了训练和解码过程。与YOLOv3基线相比,无锚的AP增加了0.9;
  2. 多重正样本(Multi positives)。为了弥补因缺乏锚点而产生的巨大不平衡,作者使用了中心采样[81],他们将中心3×3的区域作为正例区域。这种方法使AP增加了2.1点;
  3. 解耦头(Decoupled head)。在[82, 83]中显示,分类置信度和定位精度之间可能存在错位。由于这个原因,YOLOX将这两者分离成两个头(如图12所示),一个用于分类任务,另一个用于回归任务,将AP提高了1.1 分,并加快了模型收敛。
  4. 高级标签分配。在[84]中,有研究表明,当多个对象的bounding box重叠时,ground truth标签分配可能存在模糊性,并将分配程序表述为最佳传输(OT)问题。YOLOX在这项工作的启发下,提出了一个简化的版本,称为simOTA。这一变化使AP增加了2.3分;
  5. 强化增强。YOLOX使用MixUP[85]和Mosaic增强。作者发现,在使用这些增强后,ImageNet预训练不再有好处。强势增强使AP增加了2.4分;

13. YOLOv6

YOLOv6[86]于2022年9月由美团视觉人工智能部发布在ArXiv。与YOLOv4和YOLOv5类似,它为工业应用提供了各种不同尺寸的模型。跟随基于锚点的方法[78, 81]的趋势,YOLOv6采用了无锚点的检测器。该模型的主要创新之处总结如下:

  1. 一个基于RepVGG[87]的新骨架,称为EfficientRep,比以前的YOLO骨架使用更高的并行性。对于颈部, 他们使用PAN[62] 增强了RepBlocks[87] 或CSPStackRep[61]Blocks , 用于大型模型。而受YOLOX的启发,他们开发了一个高效的解耦头;
  2. 使用TOOD[88]中介绍的任务排列学习方法进行标签分配;
  3. 新的分类和回归损失。他们使用了一个分类VariFocal损失[89]和一个SIoU[90]/GIoU回归损失;
  4. 一个用于回归和分类任务的自我蒸馏策略;
  5. 使用RepOptimizer[92]和信道明智蒸馏[93]的检测量化方案,有助于实现更快的检测器。

13.1 YOLOv6结果

在MS COCO数据集test-dev 2017上进行评估,YOLOv6-L在NVIDIA Tesla T4上实现了52.5%的AP和70%的AP50 ,速度约为50 FPS。

14. YOLOv7

YOLOv7[94]由YOLOv4和YOLOR的同一作者于2022年7月发表在ArXiv。当时,在5 FPS到160 FPS的范围内,它的速度和准确度超过了所有已知的物体检测器。与YOLOv4一样,它只使用MS COCO数据集进行训练,没有预训练的骨干。YOLOv7提出了一些架构上的变化和一系列的免费包,在不影响推理速度的情况下提高了准确率,只影响了训练时间。

YOLOv7的架构变化是:

  • 扩展高效层聚合网络(E-ELAN。ELAN[95]是一种策略,通过控制最短的最长梯度路径,让深度模型更有效地学习和收敛。YOLOv7提出的E-ELAN适用于具有无限叠加计算块的模型。E-ELAN通过洗牌和合并cardinality结合不同组的特征,在不破坏原始梯度路径的情况下增强网络的学习;
  • 基于串联的模型的模型缩放。缩放通过调整一些模型属性来生成不同大小的模型。YOLOv7的架构是一个基于串联的架构,其中标准的缩放技术,如深度缩放,导致过渡层的输入通道和输出通道之间的比例变化,这反过来又导致了模型的硬件使用量的减少。YOLOv7提出了一种新的基于串联模型的缩放策略,其中块的深度和宽度以相同的因素进行缩放,以保持模型的最佳结构。

YOLOv7中使用的bag-of-freebies包括:

  • 计划中的重新参数化卷积。和YOLOv6一样,YOLOv7的架构也是受到重新参数化卷积(RepConv) 的启发[87]。然而,他们发现RepConv中的身份连接破坏了ResNet[53]中的残差和DenseNet[96]中的串联。出于这个原因,他们删除了身份连接,并称之为RepConvN;
  • 对辅助头进行粗略的标签分配,对主导头进行精细的标签分配。主导头负责最终输出,而辅助头则协助训练;
  • conv-bn-activation中的批量归一化。这将批量归一化的平均值和方差整合到推理阶段的卷积层的偏置和权重中;
  • YOLOR[77]中启发的隐性知识;
  • 指数移动平均线作为最终推断模型。

14.1 YOLOv4YOLOR的比较

在这一节中,我们强调了YOLOv7与同一作者以前开发的YOLO模型相比的改进之处。

与YOLOv4相比,YOLOv7实现了参数减少75%,计算量减少36%,同时平均精度(AP)提高了1.5%。与YOLOv4-tiny相比,YOLOv7-tiny设法将参数和计算量分别减少39%和49%,同时保持相同的AP。最后,与YOLOR相比,YOLOv7的参数数量和计算量分别减少了43%和15%,同时AP也略微增加了0.4%。

14.2 YOLOv7结果

在MS COCO数据集test-dev 2017上评估,YOLOv7-E6在输入尺寸为1280像素的情况下,在NVIDIA V100上取得了55.9%的AP和73.5%的AP50 ,速度为50 FPS。

15. DAMO-YOLO

DAMO-YOLO[97]由阿里巴巴集团于2022年11月发表在ArXiv。受到当前技术的启发,DAMO-YOLO包括以下内容:

  1. 一个神经架构搜索NAS。他们使用了阿里巴巴开发的一种叫做MAE-NAS[98]的方法来自动寻找一个有效的架构;
  2. 一个大的颈部。受GiraffeDet[99]、CSPNet[61]和ELAN[95]的启发,作者设计了一个可以实时工作的脖子,称为Efficient-RepGFPN;
  3. 一个小头。作者发现,大头和小头能产生更好的性能,他们只留下一个线性层用于分类,一个用于回归。他们把这种方法称为ZeroHead;
  4. AlignedOTA标签分配。动态标签分配方法,如OTA[84]和TOOD[88],由于比静态方法有明显的改进,已经得到普及。然而,分类和回归之间的错位仍然是一个问题,部分原因是分类和回归损失之间的不平衡。为了解决这个问题,他们的AlignOTA方法在分类成本中引入了焦点损失[75],并使用预测和ground truth的IoU作为软标签,使每个目标都能选择对齐的样本,并从全局角度解决这个问题;
  5. 知识的提炼。他们提出的策略包括两个阶段:教师在第一阶段指导学生,学生在第二阶段独立进行微调。此外,他们在蒸馏方法中加入了两项增强功能:对齐模块,它将学生的特征调整为与教师的特征相同的分辨率,以及通道动态温度,它将教师和学生的特征归一化,以减少实际价值差异的影响;

作者生成了名为DAMO-YOLO-Tiny/Small/Medium的比例模型,在NVIDIA V100上,最佳模型在233 FPS下的AP达到了50.0%。

16. YOLOv8

YOLOv8[100]由开发YOLOv5的公司Ultralytics于2023年1月发布。由于在撰写本文时,还没有关于YOLOv8的论文,我们需要深入了解与其他YOLO版本相比的架构决策。按照目前的趋势,YOLOv8是无锚的,减少了箱体预测的数量,加快了非极大值抑制(NMS)的速度。此外,YOLOv8在训练过程中使用了马赛克增强功能;但是,由于已经发现如果在整个训练过程中使用这种增强功能可能是有害的,所以在最后10个epoch中禁用了这种功能。

YOLOv8可以从命令行界面(CLI)运行,也可以作为一个PIP包安装。此外,它还配备了多个用于贴标、培训和部署的集成。

YOLOv8 提供了五个版本: YOLOv8n( 纳米级)、YOLOv8s( 小型)、YOLOv8m( 中型)、YOLOv8l(大型)和YOLOv8x(特大型)。

16.1 YOLOv8结果

在MS COCO数据集test-dev 2017上进行评估,YOLOv8x在图像大小为640像素的情况下实现了53.9%的AP( 相比之下,YOLOv5在相同的输入大小上为50.7%),在NVIDIA A100和TensorRT上的速度为280 FPS。

17. PP-YOLOPP-YOLOv2PP-YOLOE

PP-YOLO模型一直在与我们描述的YOLO模型平行发展。然而,我们决定将它们归为一个部分,因为它们从YOLOv3开始,一直在逐步改进以前的PP-YOLO版本。尽管如此,这些模型在YOLO的发展过程中还是很有影响力的。与YOLOv4和YOLOv5相似的PP-YOLO[76]是基于YOLOv3的。它于2020年7月由百度公司的研究人员发表在ArXiv上。该作者使用了PaddlePaddle[101]深度学习平台,因此它的PP名称。遵循我们从YOLOv4开始看到的趋势,PP-YOLO增加了十个现有的技巧来提高检测器的准确性,保持速度不变。根据作者的说法,本文的目的不是要介绍一个新的物体检测器,而是要展示如何一步一步地建立一个更好的检测器。PP-YOLO使用的大部分技巧都与YOLOv4中使用的技巧不同,重合的技巧使用了不同的实现。PP-YOLO关于YOLOv3的变化是:

  1. ResNet50-vd骨干网取代了DarkNet-53骨干网,其架构在最后阶段增加了可去形成的卷积[102],并提炼出预训练模型,在ImageNet上具有更高的分类精度。这个架构被称为ResNet5-vd-dcn;
  2. 更大的批次规模以提高训练的稳定性,他们从64个到192个,同时更新了训练计划和学习率;
  3. 对训练过的参数保持移动平均数,并使用它们来代替最终的训练值;
  4. DropBlock只适用于FPN;
  5. 在另一个分支中增加了一个IoU损失,以及用于边界盒回归的L1损失;
  6. 增加了一个IoU预测分支,以衡量定位精度和IoU感知损失。在推理过程中,YOLOv3乘以分类概率和客观性分数来计算最终的检测结果,PP-YOLO也乘以预测的IoU来考虑定位精度;
  7. 类似于YOLOv4的网格敏感方法被用来改善网格边界的包围盒中心预测;
  8. 矩阵NMS[103]被使用,它可以并行运行,使得它比传统的NMS更快;
  9. CoordConv[104]用于FPN的1×1卷积,并用于检测头的第一个卷积层。CoordConv允许网络学;
  10. 空间金字塔集合法只用于顶部特征图,以增加骨干的感受野。

17.1 PP-YOLO的增量和预处理

PP-YOLO使用了以下增强和预处理:

  1. 混合训练[85],权重从Beta(α, β)分布中取样,其中α = 1.5,β = 1.5;
  2. 随机色彩失真;
  3. 随机展开;
  4. 随机裁剪和随机翻转,概率为0.5;
  5. RGB通道的z-score规范化,其平均值为[0.485, 0.456, 0.406],标准偏差为
    [0 . 229 , 0 . 224 , 0 . 225];
  6. 从[320, 352, 384, 416, 448, 480, 512, 544, 576, 608]中均匀地抽取多种图像尺寸。

17.2 PP-YOLO结果

在MS COCO数据集test-dev 2017上进行评估,PP-YOLO在NVIDIA V100上取得了45.9%的AP和65.2%的AP50,73 FPS。

17.3 PP-YOLOv2

PP-YOLOv2[105]于2021年4月发表在ArXiv上,对PP-YOLO增加了四项改进,在NVIDIA V100上69FPS时,性能从45.9%AP提高到49.5%AP。PP-YOLOv2关于PP-YOLO的变化如下:

  1. 骨干网从ResNet50改为ResNet101;
  2. 路径聚合网络(PAN而不是类似于YOLOv4的FPN;
  3. Mish激活函数。与YOLOv4和YOLOv5不同,他们只在检测颈部应用mish激活函数,以保持骨干的ReLU不变;
  4. 较大的输入尺寸有助于提高小物体的性能。他们将最大的输入尺寸从608扩大到768,并将每个GPU 的批量大小从24张图像减少到12张。输入尺寸从[320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768]中均匀抽取;
  5. 一个修改过的IoU意识到的分支。他们修改了使用软标签格式而不是软权重格式的IoU意识到的损失计算方法。

17.4 PP-YOLOE

PP-YOLOE[106]于2022年3月在ArXiv发表。它在PP-YOLOv2的基础上增加了改进,在NVIDIA V100上实现了51.4%的AP,78.1 FPS的性能。PP-YOLOE关于PP-YOLOv2的主要变化是:

  1. 无锚。在[81, 80, 79, 78]的工作推动下,PP-YOLOE使用了一个无锚的架构;
  2. 高效任务排列头(ET-head。与YOLOX的分类头和位置头解耦不同,PP-YOLOE反而使用了基于TOOD的单一头,以提高速度和准确性;
  3. 任务对准学习(TAL。YOLOX是第一个提出任务错位问题的人,在这种情况下,分类置信度和定位准确度并不一致。为了减少这个问题,PP-YOLOE实施了TOOD[88]中提出的TAL,其中包括动态标签分配与任务对齐损失相结合;
  4. 新的骨干和颈部。受TreeNet[107]的启发,作者用RepResBlocks修改了骨干和颈部的结构,结合了剩余和密集连接;
  5. VarifocalVFL)和Distribution focal lossDFL。VFL[89]使用目标分数对阳性样本的损失进行加权,对那些具有高IoU的样本给予更高的权重。这在训练过程中优先考虑了高质量的样本。同样,两者都使用IoU意识到的分类分数(IACS)作为目标,允许分类和定位质量的联合学习,导致训练和推理之间的一致性。另一方面,DFL[108]将Focal Loss从离散标签扩展到连续标签,使结合质量估计和类别预测的改进表征成功优化。这使得真实数据中的灵活分布得到了准确的描述,消除了不一致的风险。

和以前的YOLO版本一样,作者通过改变背脊和颈部的宽度和深度,生成了多个比例的模型。这些模型被称为PP-YOLOE-s(小型)、PP-YOLOE-m(中型)、PP-YOLOE-l(大型)和PP-YOLOE-x(特大型)。

18. 讨论

本文研究了15个YOLO版本,从最初的YOLO模型到最新的YOLOv8。表4提供了所讨论的YOLO版本的概况从这个表中,我们可以确定几个关键的模式:

  • 锚Anchor:最初的YOLO模型相对简单,没有采用锚点,而最先进的模型则依赖于带有锚点的两阶段检测器。YOLOv2采用了锚点,从而提高了边界盒的预测精度。这种趋势持续了五年,直到YOLOX引入了一个无锚的方法,取得了最先进的结果。从那时起,随后的YOLO版本已经放弃了锚的使用;
  • 框架:最初,YOLO是使用Darknet框架开发的,后续版本也是如此。然而,当Ultralytics将YOLOv3 移植到PyTorch时,其余的YOLO版本都是使用PyTorch开发的,导致了增强功能的激增。另一个利用的深度学习语言是PaddlePaddle,一个最初由百度开发的开源框架;
  • 骨干Backbone:YOLO模型的骨干架构随着时间的推移发生了重大变化。从由简单的卷积层和最大集合层组成的Darknet架构开始,后来的模型在YOLOv4中加入了跨阶段部分连接(CSP),在YOLOv6和YOLOv7中加入了重新参数化,并在DAMO-YOLO中加入了神经架构搜索;
  • 性能:虽然YOLO模型的性能随着时间的推移有所提高,但值得注意的是,它们往往优先考虑平衡速度和准确性,而不是只关注准确性。这种权衡是YOLO框架的一个重要方面,允许在各种应用中进行实时物体检测。

18.1 在速度和准确性之间进行权衡

YOLO系列的物体检测模型一直专注于平衡速度和精度,旨在提供实时性能而不牺牲检测结果的质量。随着YOLO框架在各种迭代中的发展,这种权衡一直是一个反复出现的主题,每个版本都试图以不同的方式优化这些相互竞争的目标。在最初的YOLO模型中,主要重点是实现高速物体检测。该模型利用单一的卷积神经网络(CNN)直接预测输入图像中的物体位置和类别,实现实时处理。然而,这种对速度的强调导致了准确性的妥协,主要是在处理小物体或具有重叠边界盒的物体时。

随后的YOLO版本在保持框架的实时性的同时,引入了完善和增强功能来解决这些限制。例如,YOLOv2( YOLO9000)引入了锚定框和穿透层,以改善物体的定位,从而提高精确度。此外,YOLOv3通过采用多尺度特征提取架构增强了模型的性能,允许在不同尺度上进行更好的物体检测。

随着YOLO框架的发展,速度和准确性之间的权衡变得更加微妙。YOLOv4和YOLOv5等模型引入了创新,如新的网络主干、改进的数据增强技术和优化的训练策略。这些发展导致了准确度的显著提高,但并没有大幅影响模型的实时性能。

从Scaled YOLOv4开始,所有官方的YOLO模型都对速度和精度之间的权衡进行了微调,提供不同的模型比例以适应特定的应用和硬件要求。例如,这些版本通常提供为边缘设备优化的轻量级模型,用精度换取降低的计算复杂性和更快的处理时间。

19 YOLO的未来

随着YOLO框架的不断发展,我们预计以下趋势和可能性将决定未来的发展:

纳入最新技术。研究人员和开发人员将继续利用深度学习、数据增强和训练技术的最先进方法来完善YOLO架构。这种持续的创新过程可能会提高模型的性能、稳健性和效率。

基准的演变。目前用于评估物体探测模型的基准,即COCO 2017,最终可能会被一个更先进、更具挑战性的基准所取代。这反映了前两个YOLO版本中使用的VOC 2007基准的转变,反映了随着模型越来越复杂和准确,需要更多的基准。

YOLO模型和应用的激增。随着YOLO框架的发展,我们预计每年发布的YOLO模型的数量会增加,同时应用也会相应地扩大。随着该框架变得更加通用和强大,它可能会被应用于更多不同的领域,从家用电器设备到自动驾驶汽车。

扩展到新的领域。YOLO模型有可能将其能力扩展到物体检测和分割之外,分支到视频中的物体跟踪和三维关键点估计等领域。随着这些模型的发展,它们可能成为解决更广泛的计算机视觉任务的新解决方案的基础。

对不同硬件的适应性。YOLO模型将进一步跨越硬件平台,从物联网设备到高性能计算集群。这种适应性将使YOLO模型能够在各种情况下部署,这取决于应用程序的要求和限制。此外,通过定制模型以适应不同的硬件规格,YOLO可以被更多的用户和行业所接受和使用。

Reference:

A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 TO YOLOV8 AND BEYOND

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac清理软件cleanmymac x4.14.4破解版,2024年有免费cleanmymac x激活码

​ CleanMyMac X 4.14.4破解版可以快速识别并删除占用磁盘空间的无用文件,提升我们系统的存储空间。它还可以优化启动项、修复系统错误和保护隐私等。总之CleanMyMac X十分强大有需要的赶快下载吧, CleanMyMac X 许可证激活码:ak39840506641bjckr 需要…

Educoder/头歌JAVA——jQuery基础

目录 第1关:jQuery入门 相关知识 环境安装 第一个程序 id选择器 第2关:jQuery基本选择器 相关知识 类选择器 元素选择器 编程要求 第3关:过滤选择器 (一) 相关知识 设置css属性 编程要求 第4关&#xff1…

LLM之RAG实战(四):Self-RAG如何革命工业LLM

论文地址:https://arxiv.org/pdf/2310.11511.pdf Github地址:https://github.com/AkariAsai/self-rag 尽管LLM(大型语言模型)的模型和数据规模不断增加,但它们仍然面临事实错误的问题。现有的Retrieval-Augmented Gen…

Linux本地docker一键部署traefik+cpolar实现远程访问dashboard界面

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

pycharm中如何去除波浪线的设置

pycharm中,碰到恼人的红绿波浪线,打开’file-settings’,然后,参照如图设置,去除’effects’选项:

SQL注入靶场—sqli-labs安装

第一步:从下面的网址下载sqli-labs软件包 ①、、下载安装phpstudy(直接解压安装即可) 链接:https://pan.baidu.com/s/1X8G_qXnTXQh_S3NAF2ux_A 提取码:2693 --来自百度网盘超级会员V4的分享 ①、下载sqli-labs压缩…

看看CHAT是怎么写MPP开发和调度策略

CHAT回复:MPP(Massively Parallel Processing)开发和调度策略是一种并行处理技术,主要用于大规模数据仓库和数据竞赛应用。 1. 数据分布:这是MPP系统的主要特点,也是其能够提高性能和吞吐量的主要原因。通常…

CSS

注释标签的快捷键:Ctrl/ 1,选择器写法 类选择器:重要重要重要 id选择器:样式#定义,结构id调用,只能调用一次 。div就是一个盒子,用来装网页内容的 通配符选择器:不需要调用&#x…

【华为数据之道学习笔记】5-2华为数据湖的特点

华为数据湖是逻辑上对内外部的结构化、非结构化的原始数据的逻辑汇聚。数据入湖要遵从6项入湖标准,基于6项标准保证入湖的质量,同时面向不同的消费场景提供两种入湖方式,满足数据消费的要求。经过近两年的数据湖建设,目前已经完成…

芒果RT-DETR改进实验:深度集成版目标检测 RT-DETR 热力图来了!支持自定义数据集训练出来的模型

💡该教程为改进RT-DETR指南,属于《芒果书》📚系列,包含大量的原创改进方式🚀 💡🚀🚀🚀内含改进源代码 按步骤操作运行改进后的代码即可💡更方便的统计更多实验数据,方便写作 芒果RT-DETR改进实验:深度集成版目标检测 RT-DETR 热力图来了!支持自定义数据集…

c++ qt 窗口开发中 俩按钮组合 配合 显影 已解决

在日常项目中,有这么需求,还想窗口移动,还想 右侧关闭 还能tab栏点击显影的需求,不得使用 qt模拟点击事件 进行功能优化 特大杯 大杯 控制 窗口显影, 咖啡 按钮 显示窗口 可乐 豆浆 不显示窗口 四个按钮的 互斥关…

go学习之网络编程

文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1)协议(tcp/ip)2)OSI与TCP/ip参考模型3)ip地址4)端口(port)介绍5)tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系…

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统)

DevEco Studio 项目鸿蒙(HarmonyOS)资源引用(自定统和系统) 一、操作环境 操作系统: Windows 10 专业版 IDE:DevEco Studio 3.1 SDK:HarmonyOS 3.1 二、资源访问 HarmonyOS应用资源分为两类,一类是应用资源&…

kafka学习笔记--Kafka副本

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

go基础学习

用变量,之前需,先定义,该变量 一个go语言接口的模型:https://gitee.com/goku_black/go-gin-struct-test/blob/master/main.go 1、a和a区别? a是先进行取值,后进行自增。a是先进行自增,后进行取…

引用阿里图标库,不知道对应的图标是什么,可在本地显示图标ui,再也不要担心刚来不知道公司图标对应的是什么了

项目中使用了阿里的图标库,但是无法看到对应显示什么,每次都要去阿里图标库里面找 在下载下来的文件中会发现有两个文件一个是iconfont.css和iconfont.json, 这两个文件的数据可以拿到然后显示在页面上 有两个问题: 1&#xff1a…

Leetcode—230.二叉搜索树中第K小的元素【中等】

2023每日刷题(六十) Leetcode—230.二叉搜索树中第K小的元素 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nul…

Qt 文字描边(基础篇)

项目中有时需要文字描边的功能 1.基础的绘制文字 使用drawtext处理 void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setRenderHint(QPainter::SmoothPixmapTransform, true);painte…

机器人制作开源方案 | 智能助老机器人

作者:刘颖、王浩宇、党玉娟 单位:北京科技大学 指导老师:刘新洋、栗琳 1. 项目背景 1.1 行业背景 随着越来越多的服务机器人进入家庭,应用场景呈现多元化和专业化,机器人产业生态体系正在不断完善,服务…

re:Invent 产品体验与感受分享:Amazon ElastiCache Serverless 缓存的即时扩展

授权说明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道)。 文章目录 前言产品介绍产品使用步骤1.创建缓存服务2.安全组开放访问权限…