【深度学习】YOLO-World: Real-Time Open-Vocabulary Object Detection,目标检测

介绍一个酷炫的目标检测方式:

论文:https://arxiv.org/abs/2401.17270
代码:https://github.com/AILab-CVC/YOLO-World

文章目录

  • 摘要
  • Introduction
  • 第2章 相关工作
    • 2.1 传统目标检测
    • 2.2 开放词汇目标检测
  • 第3章 方法
    • 3.1 预训练公式:区域-文本对
    • 3.2 模型架构
    • 3.3 可重参数化的视觉-语言路径聚合网络(RepVL-PAN)
    • 3.4 预训练方案
  • 4. 实验
    • 4.1 实现细节
    • 4.2 预训练
    • 4.3 消融实验
    • 4.6 可视化
  • 5 结论
  • 实际测试例子demo
  • 帮助、问询

摘要

YOLO-World是一种实时开放词汇目标检测系统,它通过视觉-语言建模和大规模数据集上的预训练,增强了YOLO(You Only Look Once)系列检测器的开放词汇检测能力。具体来说,该研究提出了一个新的可重新参数化的视-语路径聚合网络(RepVL-PAN)和区域-文本对比损失函数,以促进视觉和语言信息之间的交互。YOLO-World在零样本方式下检测广泛对象类别方面表现出色,并且效率很高。在具有挑战性的LVIS数据集上,YOLO-World在V100上达到了52.0 FPS的帧率和35.4的AP值,这在准确性和速度方面都超过了当前许多最先进的方法。此外,经过微调的YOLO-World在多个下游任务上,包括目标检测和开放词汇实例分割,都取得了显著的性能。

在这里插入图片描述

Introduction

目标检测是计算机视觉中一个长期存在且基础性的挑战,其在图像理解、机器人技术和自动驾驶等领域有着众多应用。随着深度神经网络的发展,许多研究工作已经取得了重大突破,取得了显著的目标检测成果。尽管这些方法取得了成功,但它们仍然存在一定局限性,因为它们只能处理具有固定词汇表的目标检测,例如 COCO 数据集中的 80 个类别。一旦确定和标记了对象类别,训练好的检测器只能检测那些特定的类别,从而限制了开放场景的能力和适用性。

最近的研究已经探索了流行的视觉语言模型来解决开放词汇检测问题,通过从语言编码器(例如 BERT)中提炼词汇知识来实现 [8, 13, 48, 53, 58]。然而,由于训练数据的稀缺性以及词汇的有限多样性,这些基于提炼的方法受到了很大限制,例如 OV-COCO 只包含 48 个基本类别。一些方法则将目标检测训练重新构建为区域级视觉语言预训练,并在规模上训练开放词汇对象检测器 [24, 30, 56, 57, 59]。然而,这些方法仍然在实际场景中检测方面遇到困难,存在两个方面的问题:(1)计算负担重,(2)边缘设备的部署复杂。以前的工作已经展示了大型检测器的有希望的性能,但尚未探索将小型检测器预训练以赋予它们开放识别能力的可能性。

在本文中,我们介绍了 YOLO-World,旨在实现高效的开放词汇目标检测,并探索大规模预训练方案,将传统的 YOLO 检测器推向新的开放词汇世界。与先前的方法相比,所提出的 YOLO-World 具有显著的高效性和高推理速度,并且易于部署到下游应用中。具体来说,YOLO-World 遵循标准的 YOLO 架构,并利用预训练的 CLIP 文本编码器来编码输入文本。我们进一步提出了可重新参数化的视觉语言路径聚合网络(RepVL-PAN),以便更好地连接文本特征和图像特征进行更好的视觉-语义表示。在推理过程中,文本编码器可以被移除,并且文本嵌入可以重新参数化为 RepVL-PAN 的权重,以实现高效的部署。我们进一步研究了基于区域-文本对比学习的开放词汇预训练方案,该方案将检测数据、定位数据和图像-文本数据统一为区域-文本对。在大量的区域-文本对上预训练的 YOLO-World 展现出了强大的大词汇检测能力,而训练更多的数据将带来对开放词汇能力的更大提升。

此外,我们探索了一个提示-然后-检测的范式,以进一步提高实际场景中开放词汇目标检测的效率。正如图 2 所示,传统的目标检测器侧重于具有预定义和训练类别的固定词汇(闭集)检测。而以前的开放词汇检测器则使用文本编码器对用户的提示进行在线词汇编码,并检测对象。值得注意的是,这些方法往往倾向于使用具有沉重骨干(例如 Swin-L)的大型检测器来增加开放词汇容量。相比之下,提示-然后-检测范式首先对用户的提示进行编码以构建离线词汇表,该词汇表随着不同需求而变化。然后,高效的检测器可以在不重新编码提示的情况下即时推断离线词汇表。对于实际应用,一旦我们训练好了检测器,即 YOLO-World,我们就可以预编码提示或类别以构建离线词汇表,然后无缝地将其集成到检测器中。

我们的主要贡献可以总结为三个方面:

  • 我们介绍了 YOLO-World,一个具有高效性的最新开放词汇目标检测器,适用于实际应用。
  • 我们提出了可重新参数化的视觉语言 PAN,以连接视觉和语言特征,并提出了一种开放词汇区域-文本对比预训练方案。
  • 在大规模数据集上预训练的 YOLO-World 展示了强大的零次表现,并在 LVIS 上实现了 35.4 的 AP 和 52.0 的 FPS。预训练的 YOLO-World 可轻松适应下游任务,例如开放词汇实例分割和指涉对象检测。此外,YOLO-World 的预训练权重和代码将开源,以促进更多实际应用的发展。

第2章 相关工作

2.1 传统目标检测

目前流行的目标检检测研究主要集中在固定词汇量(闭集)检测上,即在预定义类别的数据集上训练目标检测器,例如COCO数据集[26]和Objects365数据集[46],然后检测固定类别集合中的目标。在过去的几十年里,传统目标检测的方法主要可以分为三类:基于区域的方法、基于像素的方法和基于查询的方法。基于区域的方法[11, 12, 16, 27, 44],如Faster R-CNN[44],采用两阶段框架进行建议生成[44]和感兴趣区域(RoI)分类和回归。基于像素的方法[28, 31, 42, 49, 61]倾向于是单阶段检测器,它们在预定义的锚点或像素上进行分类和回归。DETR[1]首次通过变换器[50]探索目标检测,并激发了大量基于查询的方法[64]。在推理速度方面,Redmon等人提出了YOLO[40-42],它利用简单的卷积架构实现实时目标检测。一些工作[10, 23, 33, 52, 55]提出了各种架构或设计来改进YOLO,包括路径聚合网络[29]、交叉阶段部分网络[51]和重参数化[6],这进一步提高了速度和精度。与以前的YOLO相比,本文中的YOLO-World旨在检测超出固定词汇的目标,并具有强大的泛化能力。

2.2 开放词汇目标检测

开放词汇目标检测(OVD)[58]作为现代目标检测的新趋势已经出现,旨在检测超出预定义类别的目标。早期工作[13]遵循标准OVD设置[58],通过在基类上训练检测器并评估新的(未知的)类别。然而,这种开放词汇设置可以评估检测器检测和识别新目标的能力,但在开放场景中仍然受限,并且由于在限定数据集和词汇量上的训练,缺乏对其他领域的泛化能力。受图像-语言预训练[19, 39]的启发,近期的工作[8, 22, 53, 62, 63]将开放词汇目标检测形式化为图像-文本匹配,并利用大规模图像-文本数据扩大训练词汇量。OWL-ViTs[35, 36]通过检测和定位数据集对简单的视觉变换器[7]进行微调,并建立了具有可观性能的简易开放词汇检测器。GLIP[24]提出了一种基于短语定位的开放词汇检测预训练框架,并在零样本设置中进行评估。Grounding DINO[30]将定位预训练[24]融入到检测变换器[60]中,实现了跨模态融合。多种方法[25, 56, 57, 59]通过区域-文本匹配统一了检测数据集和图像-文本数据集,并通过大规模图像-文本对预训练检测器,实现了有希望的性能和泛化。然而,这些方法通常使用像ATSS[61]或DINO[60]这样的重型检测器以Swin-L[32]作为骨架,导致了较高的计算需求和部署挑战。相比之下,我们提出了YOLO-World,致力于实现高效的开放词汇目标检测,具备实时推理能力和更易于下游应用部署。与同样探索基于YOLO[58]的开放词汇检测的ZSD-YOLO[54]不同,YOLO-World引入了一个新颖的YOLO框架,采用有效的预训练策略,增强了开放词汇性能和泛化能力。

第3章 方法

3.1 预训练公式:区域-文本对

传统目标检测方法,包括YOLO系列[20],是在实例标注Ω = {B_i, c_i}_i=1^N上训练的,包含了边界框{B_i}和类别标签{c_i}。在本文中,我们将实例标注重新公式化为区域-文本对Ω = {B_i, t_i}_i=1^N,其中t_i是与区域B_i对应的文本。具体来说,文本t_i可以是类别名称、名词短语或对象描述。此外,YOLO-World将图像I和文本T(一组名词)作为输入,并输出预测边界框{B_k}和相应的对象嵌入向量{e_k}(e_k ∈ R^D)。

3.2 模型架构

在这里插入图片描述

所提出的YOLO-World的整体架构如图3所示,包含一个YOLO检测器、一个文本编码器和一个可重参数化的视觉-语言路径聚合网络(RepVL-PAN)。给定输入文本,YOLO-World中的文本编码器将其编码为文本嵌入向量。YOLO检测器中的图像编码器从输入图像中提取多尺度特征。然后我们利用RepVL-PAN通过利用图像特征和文本嵌入向量之间的跨模态融合来增强文本和图像的表示。

YOLO检测器。YOLO-World主要基于YOLOv8[20]开发,包含一个用作图像编码器的Darknet骨架[20, 43]、一个用于多尺度特征金字塔的路径聚合网络(PAN),以及一个用于边界框回归和对象嵌入向量的头部。

文本编码器。给定文本T,我们采用由CLIP[39]预训练的Transformer文本编码器提取相应的文本嵌入向量W = TextEncoder(T) ∈ R^C×D,其中C是名词数量,D是嵌入维度。与纯文本的语言编码器[5]相比,CLIP文本编码器提供了更好的视觉-语义能力,以连接视觉对象和文本。当输入文本是标题或提及表达式时,我们使用简单的n-gram算法提取名词短语,然后将其输入文本编码器。

文本对比头。遵循以前的工作[20],我们采用带有两个3×3卷积层的解耦头来回归边界框{b_k}和对象嵌入向量{e_k},其中K表示对象数量。我们提出了一个文本对比头,通过以下方式获得对象-文本相似度s_k,j:
[ s_{k,j} = \alpha \cdot \text{L2-Norm}(e_k) \cdot \text{L2-Norm}(w_j)^\top + \beta ]
其中,L2-Norm(·)是L2规范化,并且w_j ∈ W是第j个文本嵌入向量。此外,我们添加了具有可学习的缩放因子α和平移因子β的仿射变换。L2规范化和仿射变换都对区域-文本训练的稳定性至关重要。

在线词汇训练。在训练期间,我们为含有4张图像的每个马赛克样本构建一个在线词汇表T。具体来说,我们对马赛克图像中涉及的所有积极名词进行采样,并从相应的数据集中随机抽取一些消极名词。每个马赛克样本的词汇表最多包含M个名词,M默认设置为80。

使用离线词汇的推理。在推理阶段,我们提出了一种使用离线词汇的提示然后检测策略以进一步提高效率。如图3所示,用户可以定义一系列自定义提示,其中可能包括标题或类别。然后我们利用文本编码器对这些提示进行编码,获得离线词汇嵌入。离线词汇允许避免针对每一输入的计算,并提供根据需要调整词汇的灵活性。

3.3 可重参数化的视觉-语言路径聚合网络(RepVL-PAN)

图4展示了所提出的RepVL-PAN的结构,该结构遵循[20, 29]中的自顶向下和自底向上路径来建立特征金字塔{P3,P4,P5},使用多尺度图像特征{C3,C4,C5}。此外,我们提出了文本引导的CSPLayer(T-CSPLayer)和图像池化注意力(I-Pooling Attention),以进一步增强图像特征和文本特征之间的交互,这可以改善视觉-语义表示,以提升开放词汇能力。在推理时,离线词汇嵌入可以被重参数化为卷积或线性层的权重进行部署。

文本引导CSPLayer。如图4所示,在自顶向下或自底向上融合后,使用交叉阶段局部层(CSPLayer)。我们通过将文本指导融入多尺度图像特征,扩展了[20]的CSPLayer(也称为C2f)来形成文本引导的CSPLayer。具体来说,给定文本嵌入W和图像特征(X_l \in R^{H×W×D} (l \in {3,4,5})),我们在最后的暗瓶颈模块后使用最大化sigmoid注意力,通过以下公式将文本特征聚合入图像特征:
[X’l = X_l \cdot \delta(\max{j \in {1…C}}(X_lW\top_j))\top,]
其中更新后的(X’_l)与交叉阶段特征进行连接作为输出。σ表示sigmoid函数。

图像池化注意力。为了用图像感知信息增强文本嵌入,我们提出图像池化注意力,通过聚合图像特征来更新文本嵌入。我们不直接在图像特征上使用交叉注意力,而是利用在多尺度特征上的最大池化来获取3×3区域,最终得到总共27个补丁代币(\tilde{X} \in R^{27×D})。然后通过以下方式更新文本嵌入:
[W’ = W + \text{MultiHead-Attention}(W, \tilde{X}, \tilde{X})]

3.4 预训练方案

在本节中,我们展示了在大规模检测、定位和图像-文本数据集上预训练YOLO-World的训练方案。

学习自区域-文本对比损失。给定马赛克样本I和文本T,YOLO-World输出K个目标预测({B_k, s_k}{k=1}^K)以及注释(\Omega = {B_i, t_i}{i=1}^N)。我们遵循[20]并利用任务对齐标签分配[9]来匹配预测与真实标注,并为每个正预测分配一个文本索引作为分类标签。基于这个词汇,我们通过在目标-文本(区域-文本)相似度和目标-文本分配之间的交叉熵,构造区域-文本对比损失(L_{\text{con}})。此外,我们还采用IoU损失和分布式焦点损失对边界框回归进行训练,总训练损失定义为:(L(I) = L_{\text{con}} + \lambda_I \cdot (L_{\text{iou}} + L_{\text{dfl}})),其中(\lambda_I)是指示因子,当输入图像I来自检测或定位数据时设置为1,来自图像-文本数据时设置为0。考虑到图像-文本数据集包含噪声边框,我们只为准确边界框的样本计算回归损失。

使用图像-文本数据的伪标签。我们提出一种自动标注方法来生成区域-文本对,而不是直接使用图像-文本对进行预训练。具体来说,标注方法包含三个步骤:(1)提取名词短语:我们首先使用n-gram算法从文本中提取名词短语;(2)伪标注:我们采用预训练的开放词汇检测器,如GLIP[24],为每个图像给定的名词短语生成伪边界框,从而提供粗略的区域-文本对。(3)过滤:我们采用预训练的CLIP[39]来评估图像-文本对和区域-文本对的相关性,并过滤掉相关性低的伪注释和图像。我们进一步通过使用非极大值抑制(NMS)等方法过滤冗余边界框。我们建议读者参考附录了解详细方法。通过上述方法,我们从CC3M[47]样本中抽样并标注了246k图像,共获得821k伪注释。

4. 实验

在本节中,我们通过在大规模数据集上预训练所提出的YOLO-World,并在LVIS基准和COCO基准上以零样本方式评估YOLO-World(第4.2节),展示了所提出YOLO-World的有效性。我们还评估了YOLO-World在COCO、LVIS上用于目标检测的微调性能。

4.1 实现细节

YOLO-World基于MMYOLO工具箱[3]和MMDetection工具箱[2]开发。遵循[20],我们提供了三个不同延迟要求的YOLO-World变体,例如小(S)、中(M)和大(L)。我们采用开源的CLIP[39]文本编码器和预训练权重来编码输入文本。除非特别说明,我们在一台NVIDIA V100 GPU上测量所有模型的推理速度,不使用额外加速机制,例如FP16或TensorRT。

4.2 预训练

实验设置。在预训练阶段,我们采用AdamW优化器[34],初始学习率为0.002,权重衰减为0.05。YOLO-World在32个NVIDIA V100 GPU上预训练了100个周期,总批量大小为512。在预训练期间,我们遵循以前的工作[20],采用颜色增强、随机仿射、随机翻转和带4张图像的马赛克进行数据增强。预训练期间文本编码器保持冻结。

预训练数据。对于YOLO-World的预训练,我们主要采用包括Objects365(V1)[46]、GQA[17]、Flickr30k[38]在内的检测或定位数据集,如表1所规定。遵循[24],我们从GoldG[21](GQA和Flickr30k)中排除了来自COCO数据集的图像。用于预训练的检测数据集的注释包含边界框和类别或名词短语。另外,我们还通过图像-文本对扩展了预训练数据,即CC3M†[47],我们通过第3.4节讨论的伪标签方法为其标注了246k图像。

零样本评估。预训练后,我们直接在LVIS数据集[14]上以零样本方式评估所提出的YOLO-World。LVIS数据集包含1203个目标类别,比预训练检测数据集的类别多得多,可以衡量大词汇量检测的性能。遵循之前的工作[21, 24, 56, 57],我们主要在LVIS minival[21]上评估,并报告固定AP[4]进行比较。预测的最大数量设置为1000。

LVIS目标检测的主要结果。在表2中,我们将所提出的YOLO-World与最近的最先进方法[21, 30, 56, 57, 59]在LVIS基准上进行了零样本比较。考虑到计算负担和模型参数,我们主要与那些基于轻量级骨干网络,例如Swin-T[32]的方法进行比较。值得注意的是,YOLO-World在零样本性能和推理速度方面都超越了以前的最先进方法。与GLIP、GLIPv2和Grounding DINO相比,后者纳入了更多数据,例如Cap4M(CC3M+SBU[37]),即使YOLO-World的模型参数较少,也在预训练O365和GolG上获得了更好的性能。与DetCLIP相比,YOLO-World实现了可比性能(35.4对34.4),同时推理速度提高了20倍。实验结果还表明,小型模型,例如带有13M参数的YOLO-World-S,可用于视觉-语言预训练并获得强大的开放词汇能力。

4.3 消融实验

我们提供了广泛的消融研究,从两个主要方面分析YOLO-World,即预训练和架构。除非特别说明,我们主要基于YOLO-World-L进行消融实验,并在LVIS minival上进行Objects365的零样本评估。

预训练数据。在表3中,我们评估了使用不同数据预训练YOLO-World的性能。与仅在Objects365上训练的基线相比,添加GQA可以显著提高性能,在LVIS上增加了8.4 AP。这一改进可归因于GQA数据集提供的丰富文本信息,可以增强模型识别大词汇量目标的能力。添加CC3M样本的一部分(完整数据集的8%)可以进一步带来0.5 AP的提升,以及在稀有目标上的1.3 AP提升。表3表明,添加更多数据可以有效地提高在大词汇量场景下的检测能力。此外,随着数据量的增加,性能继续提高,凸显了利用更大更多样化的数据集进行训练的好处。

RepVL-PAN上的消融。表4展示了所提出的YOLO-World的RepVL-PAN,包括文本引导的CSPLayers和图像池化注意力,对零样本LVIS检测的有效性。具体来说,我们采用了两种设置,即(1)预训练在O365上和(2)预训练在O365和GQA上。与仅包含类别注释的O365相比,GQA包含丰富的文本,特别是以名词短语的形式。如表4所示,所提出的RepVL-PAN将基线(YOLOv8-PAN[20])在LVIS上提高了1.1 AP,并且在LVIS的稀有类别(APr)方面的改进尤为显著,这些类别难以检测和识别。此外,当YOLO-World在GQA数据集上进行预训练时,改进更为显著,实验表明所提出的RepVL-PAN在丰富的文本信息下表现更好。

4.6 可视化

我们提供了预训练的YOLO-World-L在三种设置下的可视化结果:(a)我们执行LVIS类别的零样本推理;(b)我们输入自定义提示,带有细粒度类别和属性;(c)提及检测。可视化结果还展示了YOLO-World具有强大的泛化能力,以适应开放词汇场景以及提及能力。

LVIS上的零样本推理。图5展示了基于LVIS类别的可视化结果,这些结果是由预训练的YOLO-World-L以零样本方式生成的。预训练的YOLO-World展现了强大的零样本迁移能力,并能够在图像中尽可能地检测到更多对象。

使用用户的词汇推理。在图6中,我们探索了YOLO-World与我们定义的类别的检测能力。可视化结果展示了预训练的YOLO-World-L还展示了(1)细粒度检测(即检测一个对象的部分)和(2)细粒度分类(即区分不同子类别的对象)的能力。

提及目标检测。在图7中,我们利用一些描述性(区别性)名词短语作为输入,例如,站立的人,来探索模型是否能够定位图像中与我们给定输入匹配的区域或对象。可视化结果显示了短语及其对应的边界框,证明了预训练的YOLO-World具有提及或基础定位能力。这一能力可以归因于我们提出的使用大规模训练数据的预训练策略。

5 结论

我们提出了YOLO-World,这是一个尖端的实时开放词汇检测器,旨在提高现实世界应用中的效率和开放词汇能力。在本文中,我们重新塑造了流行的YOLO作为视觉-语言YOLO架构,用于开放词汇预训练和检测,并提出了RepVL-PAN,它将视觉和语言信息与网络连接起来,并且可以为高效部署重新参数化。我们进一步提出了有效的使用检测、定位和图像-文本数据的预训练方案,以赋予YOLO-World强大的开放词汇检测能力。实验结果展示了YOLO-World在速度和开放词汇性能方面的优越性,并指出了在小型模型上进行视觉-语言预训练的有效性,这为未来研究提供了有益的见解。我们希望YOLO-World能成为解决现实世界开放词汇检测问题的新基准。

实际测试例子demo

https://huggingface.co/spaces/stevengrove/YOLO-World

帮助、问询

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电容隔离型±10V输入隔离放大器特点:ISOC 124P

产品特点: 50KHz(-3dB)高带宽与ISO 124P隔离器Pin-Pin兼容 低成本小体积,标准DIP16Pin阻燃材料封装 精度等级:0.01级,全量程内非线性度0.01% 信号输入与输出之间:3000VDC隔离耐压 电源范围:4.5V~18V 双极运算:Vo10V 方便易用,固定单位增益配置…

ubuntu安装nginx以及开启文件服务器

1. 下载源码 下载页面:https://nginx.org/en/download.html 下载地址:https://nginx.org/download/nginx-1.24.0.tar.gz curl -O https://nginx.org/download/nginx-1.24.0.tar.gz2. 依赖配置 sudo apt install gcc make libpcre3-dev zlib1g-dev ope…

【分治算法】Strassen矩阵乘法Python实现

文章目录 [toc]问题描述基础算法时间复杂性 Strassen算法时间复杂性 问题时间复杂性Python实现 个人主页:丷从心. 系列专栏:Python基础 学习指南:Python学习指南 问题描述 设 A A A和 B B B是两个 n n n \times n nn矩阵, A A…

CICD流水线 发布应用到docker镜像仓库

准备工作 1.先注册免费的镜像仓库 复制链接: https://cr.console.aliyun.com/cn-beijing/instances 实施 1. 新建流水线,选择模板 2.添加流水线源,及是你的代码仓库, 选择对应分支. 3.代码检查以及单元测试,这个步骤可以不用动它. 4. …

AI的力量感受(附网址)

输入 科技感的 二维码,生成如下,还是可以的 输入金属感 的芯片,效果就很好了 金属感 打印机,细节丰富,丁达尔效应 就有点跑题了 金属感 扫码仪 还有点像 3D 封装长这样,跑题比较严重 总之,AI还…

如何使用生成式人工智能撰写关于新产品发布的文章?

利用生成式人工智能撰写新产品发布文章确实是一种既有创意又高效的内容生成方式。以下是如何做到这一点的指南,附带一些背景信息: • 背景:在撰写文章之前,收集有关您的新产品的信息。这包括产品的名称、类别、特点、优势、目标受…

朗汀留学美国生物医学工程专业留学部分录取案例合集

满怀期待的憧憬与金榜题名的喜悦交织着未来的掌声,捧在手心里的不仅仅是一份一份努力浇灌的录取通知,更是一起拼搏走过的岁月沉淀。 我们感恩每一位朗汀留学的学生和家长,是你们的支持与信任,让我们有机会共享此刻的荣耀&#xff…

数据挖掘及其近年来研究热点介绍

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

jdk目录结构

jdk目录详解 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者 编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 JDK(J…

【数据结构】考研真题攻克与重点知识点剖析 - 第 6 篇:图

前言 本文基础知识部分来自于b站:分享笔记的好人儿的思维导图与王道考研课程,感谢大佬的开源精神,习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析,本人技术…

爱普生语音芯片的特点与应用市场

随着物联网与智能家居的普及,越来越多的电子产品有了语音播报的需求。但是很多客户没有类似的开发经验或者他们的产品内部只能承载一个蜂鸣器。这样的情况下要如何实现快速的产品升级呢?下面让我们来看一下差普生语音芯片是如果帮助客户的。目前爱普生语音芯片分为…

Redis 的主从复制、哨兵和cluster集群

目录 一. Redis 主从复制 1. 介绍 2. 作用 3. 流程 4. 搭建 Redis 主从复制 安装redis 修改 master 的Redis配置文件 修改 slave 的Redis配置文件 验证主从效果 二. Redis 哨兵模式 1. 介绍 2. 原理 3. 哨兵模式的作用 4. 工作流程 4.1 故障转移机制 4.2 主节…

记录一次内网渗透过程

0x01 前言: 一切以学习为主,记录一次小小的攻击过程 本次是通过外网漏洞撕开的口子,主要通过一下方式 拿到了目标资产 nday扫一扫 弱口令爆一爆 上传接口找一找 后台上传找一找 数据库弱口令 关注新day,有了立马在资产里面…

K8s学习三(Pod与探针)

深入学习Pod Pod配置文件 写一个自己的配置文件,nginx-po.yaml apiVersion: v1 #api文档版本 kind: Pod #资源类型对象,也可以配置为像Development,StatefulSet这一类的对象 metadata: # Pod相关的元数据,用于描述Pod的数据name: nginx-po…

深度比较Vue 3.0中的computed和watch属性用法与最佳实践

摘要:在Vue 3.0中,computed和watch属性是用于处理数据逻辑的重要工具。本文将详细对比这两个属性的工作原理、适用场景以及使用时的注意事项,旨在帮助开发者更有效地选择和使用它们。 一、computed属性 computed属性是Vue 3.0中用于计算数据…

【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

D. Constructing the Array Codeforces Round 642 (Div. 3)

题目链接:Problem - 1353D - Codeforceshttps://codeforces.com/problemset/problem/1353/D 题目大意: 往空的数组里从1~n填数字,每次填最长的空区间的中间位置(位置向下取整)。 思路: 用二分判断放每一个数…

【信贷后台管理之(五)】

文章目录 目录结构一、面包屑组件封装二、退出登录接口联调三、申请列表的菜单路由3.1 路由创建,表格编写3.2 列表接口调用3.3 出生日期转变3.4 申请状态3.5 申请列表的操作3.5.1 编辑删除提交操作3.5.2 禁用状态3.5.3 操作接口3.5.4 搜索查询3.5.5 申请列表分页功能…

探索Python爬虫:解析网页数据的神奇之旅

在当今数字化时代,信息的获取变得比以往任何时候都更加便捷。然而,即使在互联网上,获取数据也需要通过正确的工具和技术。Python爬虫就是这样一种强大的工具,它可以让我们轻松地从互联网上收集数据,并将其转化为有用的…

DFS-0与异或问题,有奖问答,飞机降落

代码和解析 #include<bits/stdc.h> using namespace std; int a[5][5]{{1,0,1,0,1}}; //记录图中圆圈内的值&#xff0c;并初始化第1行 int gate[11]; //记录10个逻辑门的一种排列 int ans; //答案 int logic(int x, int y, int op){…