【目标检测】Co-DETR:ATSS+Faster RCNN+DETR协作的先进检测器(ICCV 2023)


论文:DETRs with Collaborative Hybrid Assignments Training

代码**:https://github.com/Sense-X/Co-DETR

文章目录

  • 摘要
  • 一、简介
  • 二、本文方法
    • 2.1.概述
    • 2.2.协同混合分配训练
    • 2.3. 定制的正 Query 生成
    • 2.4. Co-DETR为何有效
      • 1、丰富编码器的监督
      • 2、通过减少匈牙利匹配的不稳定性来改进跨注意力学习
    • 2.5. 与其他方法的比较
  • 三、实验
    • 1 与先进方法的比较
    • 2.消融研究
    • 3.冲突分析


摘要

在这篇论文中,作者观察到在DETR中将过少的 Query 分配为正样本,采用一对一的集合匹配,会导致对编码器输出的监督稀疏,严重损害编码器的区分特征学习,反之亦然,也会影响解码器中的注意力学习。

为了缓解这个问题,作者提出了一种新颖的协同混合分配训练方案,名为Co-DETR,以从多样的标签分配方式中学习更高效、更有效的基于DETR的检测器。这种新的训练方案可以通过训练多个并行辅助 Head ,以一对多的标签分配方式(如ATSS和Faster RCNN)进行监督,轻松增强端到端检测器中编码器的学习能力。此外,作者通过从这些辅助 Head 中提取正样本坐标,为解码器中的正样本的训练效率进行额外的定制化正样本 Query 。在推理过程中,这些辅助 Head 被丢弃,因此作者的方法不会引入额外的参数和计算成本到原始检测器中,也不需要手工制定的非最大抑制(NMS)。

作者进行了大量实验,以评估所提方法在DETR变种上的有效性,包括DAB-DETR、Deformable-DETR和DINO-Deformable-DETR。在COCO val上,与ViT-L Backbone 网络结合,Co-DETR取得了66.0%的AP,在LVIS val上取得了67.9%的AP,明显优于以往的方法,且模型大小要小得多。

一、简介

目标检测 是计算机视觉中的一个基本任务,要求作者定位物体并对其进行分类。开创性的R-CNN家族和一系列变种,如ATSS、RetinaNet、FCOS和PAA,显著突破了目标检测任务。其中的核心方案是一对多的标签分配,即将每个 GT 框分配给检测器输出中的多个坐标,作为与Proposal、Anchor或窗口中心合作的监督目标。尽管这些检测器表现出有望的性能,但它们严重依赖于许多手工设计的组件,如非极大值抑制过程或Anchor生成。

为了进行更灵活的端到端检测器,DEtection TRansformer(DETR) 提出将目标检测视为一个集合预测问题,并引入了基于Transformer编码器-解码器架构的一对一集合匹配方案。通过这种方式,每个 GT 框只会被分配给一个特定的 Query ,不再需要多个手工设计的编码先验知识的组件。这种方法引入了灵活的检测流程,并鼓励许多DETR变种进一步改进它。然而,普通的端到端目标检测器的性能仍然不如具有一对多标签分配的传统检测器。

在本文中,作者试图使基于DETR的检测器优于传统检测器,同时保持其端到端的优点。为了解决这一挑战, 作者关注一对一集合匹配的直观缺点,即它探索了较少的正 Query 。这将导致严重的低效训练问题。 作者从两个方面详细分析了这一问题,即编码器生成的潜在表示和解码器中的注意力学习

作者首先比较了Deformable-DETR和一对多标签分配方法之间的潜在特征的可区分性得分,其中 作者简单地用ATSS Head替换了解码器。每个空间坐标中的特征 L2-范数用于表示可区分性得分。给定编码器的输出F∈RC×H×W ,作者可以得到可区分性得分图S∈R1×H×W 。当相应区域中的得分较高时,可以更好地检测到物体。

在这里插入图片描述

如图2所示,作者通过在可区分性得分上应用不同的阈值来展示IoF-IoB曲线(IoF:前景交叉,IoB:背景交叉)。ATSS中的更高IoF-IoB曲线表明更容易区分前景和背景。图2中的示例显示,过少的正 Query 也会影响注意力学习,增加解码器中的更多正 Query 可以稍微缓解这个问题。

作者进一步在图3中可视化了可区分性得分图S。显然,一对一集合匹配中的一些显著区域的特征被充分激活,但在一对一集合匹配中探索较少。这一重要观察激发了作者提出一个简单但有效的方法,即协同混合分配训练方案(Co-DETR)。Co-DETR的关键见解是使用多样化的一对多标签分配来提高编码器和解码器的训练效率和有效性

具体而言,作者将这些 Head 与Transformer编码器的输出集成在一起。这些 Head 可以通过多样化的一对多标签分配进行监督,例如ATSS、FCOS和Faster RCNN。不同的标签分配丰富了编码器输出的监督,迫使它具有足够的区分度,以支持这些 Head 的训练收敛

为了进一步提高解码器的训练效率,作者巧妙地编码了这些辅助 Head 中正样本的坐标,包括正Anchor和正Proposal。它们被发送到原始解码器作为多组正 Query ,以预测预分配的类别和边界框。每个辅助 Head 中的正坐标都作为一个独立的组,与其他组隔离。

多样化的一对多标签分配可以引入丰富的(正 Query , GT )对以提高解码器的训练效率。请注意,在推理过程中只使用原始解码器,因此所提出的训练方案只在训练期间引入额外的开销。

在这里插入图片描述
如图3所示,Co-DETR极大地缓解了一对一集合匹配中编码器特征学习不足的问题。作为一种即插即用的方法,作者轻松地将其与不同的DETR变种结合使用,包括DAB-DETR、Deformable-DETR和DINO-Deformable-DETR。

在这里插入图片描述
正如图1所示,Co-DETR实现了更快的训练收敛速度,甚至具有更高的性能。在12轮训练中,作者将基本的Deformable-DETR的性能提高了5.8%的平均精度(AP),在36轮训练中提高了3.2%的AP。最先进的DINO-Deformable-DETR与Swin-L结合,仍然可以在COCO val上将性能从58.5%提高到59.5%的AP。令人惊讶的是,结合ViT-L Backbone网络,作者在COCO test-dev上实现了66.0%的AP,在LVIS val上实现了67.9%的AP,建立了新的最先进的检测器,而模型规模要小得多


二、本文方法

2.1.概述

在这里插入图片描述
按照标准的DETR,输入image 经过 Backbone网络和编码器以生成潜在特征。然后,多个预定义的物体 Query 通过交叉注意力与它们在解码器中进行交互。作者引入Co-DETR来通过协同混合分配训练方案定制的正 Query 生成来改善编码器中的特征学习和解码器中的注意力学习。

2.2.协同混合分配训练

为了缓解解码器中较少的正 Query 而导致的对编码器输出的稀疏监督,作者结合了不同的一对多标签分配范式,例如ATSS和Faster R-CNN,与多功能的辅助 Head 。不同的标签分配丰富了对编码器输出的监督,迫使它具有足够的区分度来支持这些 Head 的训练收敛。

具体来说,给定编码器的潜在特征 F,通过多尺度适配器转化为特征金字塔 {F1,…FJ}J 表示具有22+J 下采样Stride的特征图。与ViTDet类似,特征金字塔由单尺度编码器中的单个特征图构建,比如双线性插值和3×3卷积进行上采样。至于多尺度编码器,只对多尺度编码器特征 F 中最粗糙的特征进行下采样,以构建特征金字塔。

定义具有相应标签分配方式AK 的K个Head :第 i 个Head ,将 {F1,…FJ} 输入获得预测值, Ai 用于计算 Pi 中的正负样本的监督目标。将G表示为 GT 集,这个过程可以被表达为:

在这里插入图片描述

其中{pos}和{neg}表示由Ai 确定的对集。j 表示在 {F1,…FJ} 中的特征索引。Bi{pos} 是正空间坐标的集合。Pi{pos}和Pi{neg} 是相应坐标中的监督目标,包括类别和回归偏移量

不同的head和标签分配方式如下表:
在这里插入图片描述

损失函数可以定义为:

在这里插入图片描述

负样本的回归损失被丢弃。K个辅助 Head 的优化的训练目标可以如下定义:

在这里插入图片描述

2.3. 定制的正 Query 生成

一对一的集合匹配范式,每个 GT 框只会被分配给一个特定的 Query 作为监督目标。正Query过少会导致Transformer解码器中的跨注意力学习效率低下Co-DETR 根据每个辅助 Head 中的标签分配 Ai 精心生成足够多的定制正 Query。
具体而言,第i 个辅助 Head 中的正坐标集合 Bi{Pos}∈RMix4,其中Mi 是正样本的数量额外的定制正Query Qi∈RMixC可以通过以下方式生成:

在这里插入图片描述

其中PE(·)代表位置编码,并根据索引对 (j,Fj 中的正坐标或负坐标)从E(·)中选择相应的特征。

结果,有K + 1组 Query 为单一的一对一集合匹配分支做出贡献,具体来说,第i 个辅助分支中第 l个解码器层的损失可以表达为:

在这里插入图片描述

P ‾ \overline{\text{P}} Pi,l 是第 i 个辅助分支中第个 l 解码器层的输出预测。最终,Co-DETR的训练目标是:

在这里插入图片描述
其中 L ‾ \overline{\text{L}} Ll dec 代表原始的一对一集合匹配分支中的损失,λ1和λ2 是平衡系数.

2.4. Co-DETR为何有效

Co-DETR显著改进了基于DETR的检测器。接下来,作者尝试从定性和定量两方面调查其有效性。作者基于使用ResNet-50 Backbone网络的Deformable-DETR,并使用36轮的设置进行了详细分析

1、丰富编码器的监督

直观地说,正 Query 过少会导致监督稀疏,因为每个 GT 只有一个 Query 通过回归损失进行监督。一对多标签分配方式中的正样本接收更多的位置监督,有助于增强潜在特征的学习

为了进一步探讨稀疏监督如何阻碍模型训练,作者详细研究了编码器产生的潜在特征。作者引入了IoF-IoB曲线来量化编码器输出的可区分性得分。具体来说,给定编码器的潜在特征F,受到图3中特征可视化的启发,作者计算了IoF (前景交叉) 和IB (背景交叉)。给定Level-j 处的编码器特征Fj∈RC×Hj×wj,首先计算L2范数 F ^ \widehat{F} F j∈R1×Hj×wj,然后将其调整为图像大小HxW。可区分性得分D(F)通过对所有Level的分数进行平均计算:

在这里插入图片描述
图3中可视化了ATSS、Deformable-DETR和作者的Co-Deformable-DETR的可区分性得分。与Deformable-DETR相比,ATSS和Co-Deformable-DETR都具有更强的区分关键目标区域的能力,而Deformable-DETR几乎被背景干扰

在这里插入图片描述

2、通过减少匈牙利匹配的不稳定性来改进跨注意力学习

匈牙利匹配是一对一集合匹配中的核心方案。跨注意力是帮助正 Query 编码丰富目标信息的重要操作。匈牙利匹配引入了不可控制的不稳定性,因为在训练过程中,分配给同一图像中特定正 Query 的 GT 会发生变化

在这里插入图片描述

图5提供了不稳定性的比较,本文方法有助于更稳定的匹配过程。此外,为了量化跨注意力优化的程度,作者还计算了关注分数的IoF-IoB曲线。与特征可区分度得分计算类似,作者为注意力分数设置不同的阈值,以获取多个IoF-IoB对。可以在图2中查看Deformable-DETR、Group-DETR和Co-Deformable-DETR之间的比较。作者发现,具有更多正 Query 的DETR的IoF-IoB曲线通常高于Deformable-DETR,这与作者的动机一致。

2.5. 与其他方法的比较

Group-DETR、H-DETR和SQR通过具有重复组和重复 GT 框的一对一匹配来执行一对多分配。Co-DETR明确为每个 GT 分配了多个空间坐标作为正 Query 。因此,这些密集的监督信号直接应用于潜在特征图,使其更具区分性。

虽然这些对手引入了更多的正 Query但由匈牙利匹配实现的一对多分配仍然受到一对一匹配的不稳定性问题的困扰。作者的方法受益于即插即用的一对多分配的稳定性,并继承了它们的正 Query 与 GT 框之间的特定匹配方式。

Group-DETR和H-DETR未能揭示一对一匹配和传统一对多分配之间的互补性。据作者所知,作者是第一个对具有传统一对多分配和一对一匹配的检测器进行定量和定性分析的研究,这有助于作者更好地理解它们的差异和互补性,从而可以自然地通过利用即插即用的一对多分配设计来提高DETR的学习能力,而不需要额外的专门的一对多设计经验。

重复的物体 Query 不可避免地会为解码器带来大量的负 Query 和显著增加GPU内存消耗。然而,作者的方法只处理解码器中的正坐标,因此内存消耗较少,如表7所示。

在这里插入图片描述

三、实验

在这里插入图片描述
表2和表3对Co-DETR在不同的DETR变种上的有效性和泛化能力进行了实证分析(结果由mmdetection复现)。

首先,作者将协作混合分配训练应用于具有C5特征的单尺度DETR,较长的训练过后,Conditional-DETR和DAB-DETR都比Baseline提高了2.4%和2.3%的AP。对于多尺度特征的DeformableDETR,检测性能从37.1%显著提高到42.9%的AP。

1 与先进方法的比较

与DeformableDETR++和DINO配对,其中K = 2。此外,作者采用了质量Focal Loss和NMS来进行作者的Co-DINO-Deformable-DETR。作者在COCO val上报告了比较结果,如表4所示。

在这里插入图片描述

与其他竞争对手相比,作者的方法收敛速度快得多。例如,只使用ResNet-50 Backbone网络的Co-DINO-Deformable-DETR在12个Epoch内就可以轻松达到52.1%的AP。作者的Swin-L方法可以在1×scheduler下获得58.9%的AP,甚至超过其他最先进的3×scheduler框架。

更重要的是,最佳模型Co-DINO-Deformable-DETR++在36个Epoch的训练下,使用ResNet-50可以实现54.8%的AP,使用Swin-L可以实现60.7%的AP,超越了所有使用相同 Backbone网络的现有检测器,差距明显。
在这里插入图片描述

作者还展示了Co-DETR在长尾LVIS检测数据集上的最佳结果。具体而言,作者使用了与COCO相同的Co-DINO-Deformable-DETR++作为模型,但选择了FedLoss作为分类损失,以弥补不平衡数据分布的影响。

在这里,作者只应用边界框监督并报告目标检测结果。比较结果见表6。Co-DETR与Swin-L在LVIS val和minival上分别取得了56.9%和62.3%的AP,超越了使用MAE预训练的ViT-H和GLIPv2的ViTDet分别+3.5%和+2.5%的AP。作者进一步在这个数据集上对Objects365预训练的Co-DETR进行了微调。
在这里插入图片描述

2.消融研究

消融实验在具有ResNet-50 Backbone网络的Deformable-DETR上进行的。作者默认选择辅助Head的数量K为1,并将总批量大小设置为32。

选择辅助Head的标准

在这里插入图片描述

作者进一步探讨了在表7和表8中选择辅助Head的标准。表8中的结果显示,任何具有一对多标签分配的辅助Head都可以稳定地提高Baseline性能,而ATSS获得了最佳性能。作者发现,当选择K小于3时,随着K的增加,准确性持续提高。值得注意的是,当K=6时性能下降,作者推测这是由于辅助Head之间的严重冲突引起的。如果特征学习在不同的辅助Head之间不一致,那么当K变大时,连续改进将被破坏。

总之,作者可以选择任何一个Head作为辅助Head,当K≤2时,作者将ATSS和Faster-RCNN视为实现最佳性能的常规做法。作者不使用太多不同的Head,例如6个不同的Head,以避免优化冲突。

3.冲突分析

当在不同的辅助Head中为相同的空间坐标分配不同的前景框或将其视为不同的背景时,会导致冲突,从而使检测器的训练变得混乱。作者首先定义Head Hi 和Head Hj 之间的距离,以及Hi 到平均距离来衡量优化冲突,如下所示:

在这里插入图片描述
在这里插入图片描述

其中,KL、D、I、C分别指的是KL散度、数据集、输入图像和类激活图(CAM)。作者计算了K>1的多个辅助Head之间的平均距离以及K=1时DETR Head和单一辅助Head之间的距离。作者发现当K=1时,每个辅助Head的距离度量是微不足道的,这与作者在表8中的结果一致:当K=1时,DETR Head可以与任何Head共同改进

当K增加到2时,距离度量略有增加,如表7所示,作者的方法实现了最佳性能。当K从3增加到6时,距离度量急剧增加,表明这些辅助Head之间的严重优化冲突导致了性能下降。然而,具有6个ATSS的Baseline可以达到49.5%的AP,并且通过将ATSS替换为6个不同的Head可以降低到48.9%的AP。因此,作者推测过多不同的辅助Head,例如超过3个不同的Head,会加剧冲突。总之,优化冲突受到不同辅助Head的数量以及这些Head之间的关系的影响。

01、是否应该添加不同的Head?

使用两个ATSS Head(49.2%的AP)进行协作训练仍然可以提高一个ATSS Head(48.7%的AP)的模型,因为根据作者的分析,ATSS是DETR Head的补充。

此外,引入一个不同于原始 Head 的多样化和互补的辅助Head,例如Faster-RCNN,可以带来更好的增益(49.5%的AP)。

02、每个组件的效果

在这里插入图片描述
每个组件的消融效果,如表9所示。引入辅助Head显著提高了性能,因为密集的空间监督使编码器特征更具判别性。另外,引入定制的正 Query 也对最终结果做出了显著贡献,同时提高了一对一集合匹配的训练效率。

03、与更长的训练计划的比较

在这里插入图片描述
如表10所示,作者发现Deformable-DETR不能从更长的训练中受益,因为性能会饱和。相反,Co-DETR大大加速了收敛速度,并提高了性能的峰值。

04、辅助分支的性能
在这里插入图片描述
令人惊讶的是,作者观察到Co-DETR对辅助Head也带来了持续的增益,如表11所示。这意味着作者的训练范式有助于更具判别性的编码器表示,从而提高了解码器和辅助Head的性能。

05、原始正 Query 和定制正 Query 的分布差异在这里插入图片描述
作者在图7a中可视化了原始正 Query 和定制正 Query 的位置。作者每张图像只显示一个对象(绿色框)。由解码器中的匈牙利匹配分配的正 Query 标记为红色。

用蓝色和橙色标记了从Faster-RCNN和ATSS中提取的正 Query ,这些定制 Query 分布在实例的中心区域周围,并为检测器提供了足够的监督信号。

作者在图7b中计算了原始 Query 和定制 Query 之间的平均距离。原始负 Query 和定制正 Query 之间的平均距离明显大于原始和定制正 Query 之间的距离。由于原始 Query 和定制 Query 之间的分布差距很小,因此在训练过程中不会遇到不稳定性问题。

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

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

相关文章

集成学习方法之随机森林-入门

1、 什么是集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。 2、 什么是随机森林 在机器学习中&…

Axi接口的DDR3:参数,时序,握手机制

参考 AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?_axi wrap-CSDN博客 还有官方手册,名字太长想起来再写。 Transaction/Burst/Transfer/Beat Transaction指一次传输事务,实际上包括了address phase, data phase与response ph…

记录:Unity脚本的编写4.0

目录 前言导入音乐编写脚本 前言 之前使用脚本对uniry中的模型进行了控制,诸如使用键盘控制对象模型的移动或者使用鼠标对对象模型进行角度的切换(或者是类似的东西),而我们在游戏的过程中,总是伴随着一些好听的bgm&a…

读书笔记之《敏捷测试从零开始》(一)

大家好,我是rainbowzhou。 子曰:学而时习之,不亦说乎?今天我想和大家分享一本测试书籍——《敏捷测试从零开始》。以下为我的读书笔记: 精彩片段摘录: 焦虑往往来自于对比,当你在自己的圈子里面…

Django学习笔记——文件上传(界面还怪好看得嘞)

定义文件上传函数 #文件上页面 def uploadFileIndex(request):return render(request, "uploadFile.html")#文件上传接口 def uploadFile(request):if request.method POST and request.FILES[file]:uploaded_file request.FILES[file]fs FileSystemStorage()# 选…

YOLOv8优化:独家创新(Partial_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

💡💡💡本文独家改进:独家创新(Partial_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐 Partial_C_Detect | 亲测在多个数据集能够实现大幅涨点 💡💡💡Yolov8魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提…

【NPM】vuex 数据持久化库 vuex-persistedstate

在 GitHub 上找到:vuex-persistedstate。 安装 npm install --save vuex-persistedstate使用 import { createStore } from "vuex"; import createPersistedState from "vuex-persistedstate";const store createStore({// ...plugins: [cr…

Unity 通过jar包形式接入讯飞星火SDK

最近工作上遇到了要接入gpt相关内容的需求,简单实现了一个安卓端接入讯飞星火的UnitySDK。 或者也可以接入WebSocket接口的。本文只讲安卓实现 我使用的Unity版本为2021.3.27f1c2 Android版本为4.2.2 1.下载SDK 登陆讯飞开放平台下载如图所示SDK 2.新建安卓工程…

目标检测应用场景—数据集【NO.15】叶片虫害检测

写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!今天分享…

Java实现ORM第一个api-FindAll

经过几天的业余开发,今天终于到ORM对业务api本身的实现了,首先实现第一个查询的api 老的C#定义如下 因为Java的泛型不纯,所以无法用只带泛型的方式实现api,对查询类的api做了调整,第一个参数要求传入实体对象 首先…

nodejs+wasm+rust debug及性能分析

文章目录 背景v8引擎自带的profilelinux的perf采集wasm三方库性能分析编译debug版本wasmrust程序debug调试异常模型正常模型结论优化 参考 Node使用火焰图优化CPU爆涨 - 掘金 【Node.js丨主题周】理解perf 与火焰图-腾讯云开发者社区-腾讯云 Easy profiling for Node.js Applic…

【1419. 数青蛙】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 代码实现1&#xff1a;我自己写的比较挫&#xff0c;但是比较简单。 class Solution { public:int minNumberOfFrogs(string croakOfFrogs) {unordered_map<char,int> hash;hash[c]…

word修改公式默认字体并打出漂亮公式

文章目录 word公式简介传统方法1——mathtype传统方法2——word自带公式编辑器最简洁方法——更改word自带公式字体快捷方式效果展示 word公式简介 word自带的公式字体Cambria Math不可否认很丑&#xff0c;要打出latex格式的漂亮字体很困难。使用Markdown工具很多只能导出为不…

MSVCR100.dll丢失修复方法,MSVCR100.dll丢失的解决方法

今天我要和大家分享的是&#xff1a;msvcr100.dll丢失的6种解决方法。 首先&#xff0c;让我们来了解一下msvcr100.dll丢失的原因。msvcr100.dll是Microsoft Visual C 2010的一个组件&#xff0c;它包含了许多运行库文件&#xff0c;这些文件是许多应用程序所必需的。当msvcr1…

算法、语言混编、分布式锁与分布式ID、IO模型

一、算法初识 数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构&#xff08;数据的组织形式&#xff09;&#xff0c;写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题&#xff0c;使用不同的算法&#xff0c;也…

编译原理-词法分析器

文章目录 对于词法分析器的要求概念词法分析器的功能和输出形式 词法分析器的设计词法分析器的结构单词符号的识别&#xff1a;超前搜索状态转换图 正规表达式和有限自动机正规式和正规集确定有限自动机&#xff08;DFA&#xff09;非确定有限自动机&#xff08;NFA&#xff09…

【经典PageRank 】02/2 算法和线性代数

系列前文&#xff1a;【经典 PageRank 】01/2 PageRank的基本原理-CSDN博客 一、说明 并非所有连接都同样重要&#xff01; 该算法由 Sergey 和 Lawrence 开发&#xff0c;用于在 Google 搜索中对网页进行排名。基本原则是重要或值得信赖的网页更有可能链接到其他重要网页。例…

【数据结构练习题】消失的数字 --- 三种解法超详解

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;数据结构练习题 &#x1f388;相关博文&#xff1a;添加逗号 消失的数字 1. &#x1f388;题目2. &#x1f388;解题思路✨方法一&#xff1a;先排序&#xff0c;再找缺失的值✨方法二&#xff1a;按位…

scrapy的安装和使用

一、scrapy是什么&#xff1a;Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架&#xff0c;可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序 二、scrapy的安装&#xff1a;pip install scrapy -i https://pypi.douban.com/…

如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)

文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot&#xff08;阶段一&#xff09;配合SpringBoot&#xff08;阶段二&#xff09;1.EnableLakerFeignClients2.Lak…