当前位置: 首页 > news >正文

【目标检测】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 之间的分布差距很小,因此在训练过程中不会遇到不稳定性问题。

相关文章:

【目标检测】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、通过减少…...

iOS QQ登录SDK升级后报错Duplicate interface definition for class ‘TencentOAuth‘修复

起因 最近发现QQ登录SDK sdk-Lite3.3.8 TencentOpenAPI 在部分手机上会崩溃到初始化位置_tencentOAuth [[TencentOAuth alloc] initWithAppId:appid andDelegate:self];, 比如:iPhone6p 版本12.5.4,iPhone8p 版本14.1,iPad版本1…...

laravel中锁以及事务的简单使用

一、首先来说一下什么是共享锁?什么是排他锁? 共享:我可以读 写 加锁 , 别人可以 读 加锁。 排他:只有我 才 可以 读 写 加锁 , 也就是说,必须要等我提交事务,其他的才可以操作。 二、简单例子实现加锁 锁…...

Vue+openlayers+projs4实现坐标转换

一、背景 有一堆点数据,需要在地图上标记,只知参考北京54坐标系或西安80坐标系,但具体是哪种不清楚,这时候就需要坐标转换。ps:EPSG:3857(openlayers参照的坐标系) 二、思路 1、研…...

09 创建型模式-建造者模式

1.建造者模式介绍: 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…...

4.9 多协议标记交换MPLS

思维导图: 前言: **4.9 多协议标记交换MPLS笔记** 1. **定义与背景**: - MPLS (多协议标记交换) 是一种由 IETF 开发的新协议。 - “多协议”意味着 MPLS 的上层可以使用多种协议。 - 该协议综合了多家公司的技术,如 C…...

【经历】在职8个月->丰富且珍贵

在职8个月->丰富且珍贵 2021-3~2021-11:面试进入一家做400电话的公司,我进入公司时,加上我只有四个人(老板、人事、业务),开发只有我,所以:产品~设计~前端~后端~测试~上线~维护~培训,只有我自…...

使用GH(命令行)在本地提出Github上的issue、PR,合并PR

使用GH(命令行)在本地提出Github上的issue、PR,合并PR 前言 Github上的一些操作使用Git命令是无法完成的,因此正常流程就是在网页端进行。等一下,你让程序员用网页进行?果然,有命令行工具可以…...

@Scheduled定时器

Scheduled定时器 一、基本使用二、参数说明fixedDelayfixedRateinitialDelaycron 三、cron 表达式参数说明实用性的案例 四、Scheduled注意事项五、配置文件1、fixedDelay2、fixedRate3、cron 一、基本使用 Scheduled // 由Spring定义,用于将方法设置为调度任务。…...

Xshell+screen解决ssh连接 服务器掉线的问题

Linux screen命令解决SSH远程服务器训练代码断开连接后运行中断_linux screen ssh-CSDN博客 Linux命令之screen命令_linux screen_恒悦sunsite的博客-CSDN博客 使用教程: 这里粗略介绍一下 (1)xshell xftp(xshell点这个&#…...

coding_v3

面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 数组/字符串 1.LC88【合并两个有序数组】 def solve(nums1, m, nums2, n):p1, p2 m-1, n-1tail m n -1while p1 > 0 or p2 > 0:if p1 -1:nums1[tail] nums2[p2]p2…...

Elasticsearch:什么是余弦相似度?

余弦相似度是数据科学、文本分析和机器学习领域的基本概念。 如果你想知道什么是余弦相似度或者它如何在现实世界的应用程序中使用,那么你来对地方了。 本指南旨在让你深入了解相似性是什么、其数学基础、优点及其在不同领域的各种应用。读完本指南后,你…...

【每日一题Day352】LC1726同积元组 | 哈希表+排列组合

同积元组【LC1726】 给你一个由 不同 正整数组成的数组 nums ,请你返回满足 a * b c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素,且 a ! b ! c ! d 。 思路 求出所有二元组的积及其出现次数,假设某个积出现的次…...

react中在js文件里定义的变量,如何在less文件里去使用该变量

在 React 中,如果在 JS 文件中定义了变量,可以使用 CSS Modules 的方式将变量导出到 LESS 文件中。 以下是示例代码: // index.js import React from react; import styles from ./styles.module.less;const color red;function App() {re…...

TIA博途中通过SCATTER指令实现将字节BYTE拆分成单个位的具体方法示例

TIA博途中通过SCATTER指令实现将字节BYTE拆分成单个位的具体方法示例 例如: 我们想判断某个字节中各个位的状态是1还是0 ,如何实现呢? 这里介绍通过SCATTER指令拆分字节的方法,仅供大家参考。 首先,我们先了解以下SCATTER指令的基本功能和使用方法: 如下图所示,在基本指…...

网络协议--ARP:地址解析协议

4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址。数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的。一个网络如以太网可以同时被不同的网络层使用。例如&#…...

pdf导出实例(itestpdf)

依赖 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency>工具类 package or…...

关于CW32单片机pack包安装 KEIL IAR

CW32 系列微控制器软件开发工具入门 芯片包 1. 下载芯片包 官方下载链接&#xff1a;武汉鑫源半导体 2. 安装芯片包 双击芯片包.pack文件 支持 CW32F 系列的 IDE 支持 CW32F 系列的工具链&#xff1a; • • EWARM v7.70 或更高版本 MDK-ARM v5.17 或更高版本 2.1 EW…...

memcpy内存拷贝函数

目录 一、memcpy内存拷贝函数 注意事项 二、memcpy与strcpy对比 三、模拟实现memcpy函数 四、memcpy函数不能进行两块存在内存重叠的空间的内存拷贝 五、改进my_memcpy函数 一、memcpy内存拷贝函数 头文件&#xff1a;string.h 函数原型&#xff1a;void* memcpy(void* …...

数组模拟堆

文章目录 QuestionIdeasCode Question 维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x &#xff1b; PM&#xff0c;输出当前集合中的最小值&#xff1b; DM&#xff0c;删除当前集合中的最小值&#xff08;数…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...