集智书童 | YOLOv10开源|清华用端到端YOLOv10在速度精度上都生吃YOLOv8和YOLOv9

news2024/11/15 6:55:16

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。

原文链接:YOLOv10开源|清华用端到端YOLOv10在速度精度上都生吃YOLOv8和YOLOv9

在过去几年中,YOLO系列模型已成为实时目标检测领域的主导范式,这得益于它们在计算成本和检测性能之间的有效平衡。研究行人探索了YOLOs的架构设计、优化目标、数据增强策略等,取得了显著的进展。然而,对非最大值抑制(NMS)的后处理依赖阻碍了YOLOs的端到端部署,并不利影响推理延迟。此外,YOLOs中各种组件的设计缺乏全面彻底的检查,导致明显的计算冗余并限制了模型的能力。这导致了次优的效率,同时存在相当大的性能提升潜力。在这项工作中,作者从后处理和模型架构两方面进一步推进了YOLOs的性能效率边界。

为此,作者首先提出了无需NMS训练的YOLOs的一致性双重分配,这同时带来了有竞争力的性能和低推理延迟。此外,作者引入了针对YOLOs的整体效率精度驱动模型设计策略。作者从效率和精度角度全面优化了YOLOs的各种组件,大大减少了计算开销并增强了能力。作者努力的成果是新一代的实时端到端目标检测YOLO系列模型,命名为YOLOv10。广泛的实验表明,YOLOv10在各种模型规模上均实现了最先进的性能和效率。例如,YOLOv10-S在COCO上的类似AP下比RT-DETR-R18快1.8倍,同时享受2.8倍更少的参数和FLOPs。与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。

代码:https://github.com/THU-MIG/yolov10。

1. 引言

实时目标检测一直是计算机视觉研究领域的一个重点,旨在在低延迟下准确预测图像中物体的类别和位置。它被广泛应用于各种实际应用中,包括自动驾驶,机器人导航,物体跟踪等。近年来,研究行人一直致力于设计基于CNN的目标检测器以实现实时检测。其中,YOLOs因其性能和效率之间的巧妙平衡而越来越受欢迎。YOLOs的检测流程包括两部分:模型前向过程和NMS后处理。然而,这两者仍存在不足,导致次优的准确度-延迟边界。

具体来说,YOLO通常在训练过程中采用一对多的标签分配策略,其中一个 GT 物体对应于多个阳性样本。尽管这种方法取得了优越的性能,但它需要在推理过程中使用NMS来选择最佳的阳性预测。这降低了推理速度,并使性能对NMS的超参数敏感,从而阻碍了YOLO实现最优的端到端部署。解决这个问题的一条途径是采用最近引入的端到端DETR架构。例如,RT-DETR提出了一种有效的混合编码器和非确定性最小 Query 选择,将DETR推向了实时应用领域。然而,部署DETR的固有复杂性阻碍了它在准确性和速度之间达到最优平衡的能力。另一条途径是探索基于CNN的检测器的端到端检测,这通常利用一对一的分配策略来抑制冗余预测。然而,它们通常引入额外的推理开销或达到次优性能。

此外,模型架构设计对于YOLO来说仍然是一个基本挑战,它在准确性和速度上表现出重要影响。为了实现更高效和有效的模型架构,研究行人探索了不同的设计策略。为加强特征提取能力,提出了各种主要计算单元作为主干,包括DarkNet,CSPNet,EfficientRep和ELAN等。对于特征融合部分,研究了PAN,BiC,GD和RepGFPN等,以增强多尺度特征融合。此外,还研究了模型缩放策略和重参化技术。尽管这些努力取得了显著的进展,但从效率和准确性的角度来看,对YOLO中各个组件的全面检查仍然缺乏。因此,YOLO中仍然存在相当大的计算冗余,导致参数使用效率低下和次优效率。此外,由此产生的受限模型能力也导致了性能不佳,为准确性的提升留下了很大的空间。

在这项工作中,作者旨在解决这些问题,并进一步推进YOLO在准确性与速度边界上的发展。作者针对检测流程中的后处理和模型架构。为此,作者首先通过提出一种一致的二元分配策略来解决后处理中的冗余预测问题,该策略用于无需NMS的YOLO,具有双重标签分配和一致匹配度量。它允许模型在训练期间享受丰富且和谐的监督,同时在推理过程中省去NMS,以实现高效竞争力。其次,作者提出了一个整体效率-准确性驱动的模型设计策略,通过对YOLO中各个组件的全面检查来实现模型架构。为了提高效率,作者提出了轻量级分类头、空间通道解耦降采样和排名引导的块设计,以减少表现出的计算冗余并实现更高效的架构。对于准确性,作者探索了大型核卷积,并提出了有效的部分自注意力模块来增强模型能力,在低成本下挖掘性能提升的潜力。

基于这些方法,作者成功实现了一系列不同模型规模的实时端到端检测器的新家族,即YOLOv10-N / S / M / B / L / X。在标准的目标检测基准测试上的大量实验,例如COCO,证明了YOLOv10可以在各种模型规模上显著超越之前的最佳模型,在计算精度权衡方面表现出色。

如图1所示,在相似性能下,YOLOv10-S / X分别比RT-DETR-R18 / R101快1.8倍 / 1.3倍。与YOLOv9-C相比,YOLOv10-B在相同性能下延迟降低了46%。此外,YOLOv10显示出高效的参数利用率。YOLOv10-L / X比YOLOv8-L / X分别高出0.3 AP和0.5 AP,而参数数量则分别减少了1.8倍和2.3倍。YOLOv10-M与YOLOv9-M / YOLO-MS相比,实现了相似的AP,但参数数量分别减少了23% / 31%。作者希望作者的工作能够启发该领域的进一步研究和进步。

2.  Methodology

2.1 Consistent Dual Assignments for NMS-free Training

在训练过程中,YOLO系列方法通常利用TAL为每个实例分配多个正样本。采用一对一多分配产生了丰富的监督信号,促进了优化并实现了卓越的性能。然而,这需要YOLO依赖于NMS后处理,这导致了部署时次优的推理效率。尽管之前的工作探索了一对一匹配以抑制冗余预测,但它们通常引入了额外的推理开销或导致次优性能。在本工作中,作者提出了一种无需NMS的YOLO训练策略,采用双重标签分配和一致的匹配度量,实现了高效率和有竞争力的性能。

双重标签分配

与一对一多分配不同,一对一匹配只为每个地面真相分配一个预测,避免了NMS后处理。然而,这导致了较弱的监督,导致次优的准确性和收敛速度。幸运的是,这种缺陷可以通过一对一多分配来弥补。为此,作者为YOLO引入了双重标签分配,以结合两种策略的优点。

具体来说,如图2.(a)所示,作者在YOLO中增加了一个一对一的 Head 。它与原始一对一多分支保持相同的结构和采用相同的优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个 Head 与模型联合优化,使得主干和 Neck 能够享受到一对一多分配提供的丰富监督。

在推理过程中,作者丢弃一对一多 Head ,并利用一对一 Head 进行预测。这使得YOLO能够端到端部署,而不会产生任何额外的推理成本。此外,在一对一匹配中,作者采用顶部选择,其性能与匈牙利匹配[4]相同,但额外的训练时间更少。

一致的匹配度量

2.2. Holistic Efficiency-Accuracy Driven Model Design

除了后处理之外,YOLOs的模型架构也对效率-准确度权衡提出了重大挑战[45; 7; 27]。尽管以前的工作探索了各种设计策略,但对YOLOs中各种组件的全面检查仍然缺乏。因此,模型架构展现出不可忽视的计算冗余和受限的能力,这阻碍了其实现高效率和性能的潜力。在这里,作者从效率和准确度两个方面全面进行YOLOs的模型设计。

以效率为导向的模型设计

YOLO中的组件包括Stem、下采样层、带有基本构建块的阶段和 Head 。Stem产生的计算成本很少,因此作者仅对其他三个部分进行以效率为导向的模型设计。

  1. 为了解决这个问题,作者提出了一种秩引导的块设计方案,旨在通过紧凑型架构设计减少被显示为冗余的阶段的复杂性。作者首先提出了一个紧凑型倒置块(CIB)结构,它采用廉价的深度卷积进行空间混合和高效的一维卷积进行通道混合,如图3(b)所示。它可以作为高效的基本构建块,例如嵌入ELAN结构[58; 20](图3(b))。然后,作者提倡一种秩引导的块分配策略,在保持竞争力的同时实现最佳效率。

    具体来说,对于给定的模型,作者根据它们的内在秩将所有阶段升序排序。作者进一步检查用CIB替换领先阶段的基本块时性能的变化。如果没有与给定模型相比的性能退化,作者就继续替换下一个阶段,否则停止该过程。因此,作者可以在不同阶段和模型规模上实现自适应紧凑块设计,提高效率而不损害性能。由于篇幅限制,作者在附录中提供算法的细节。

准确度驱动的模型设计。作者进一步探索了大核卷积和自注意力用于准确度驱动的模型设计,旨在以最小的成本提升性能。

3. Experiments

3.1. Implementation Details

作者选择YOLOv8作为 Baseline 模型,因为它在延迟和准确度之间取得了令人称赞的平衡,并且有多种模型尺寸可供选择。作者采用了持续的二元分配以实现无需NMS的训练,并基于此进行了整体效率与准确度驱动的模型设计,从而推出了YOLOv10模型。YOLOv10与YOLOv8具有相同的变体,即N/S/M/L/X。

此外,作者通过简单增加YOLOv10-M的宽度扩展因子,导出了一个新变体YOLOv10-B。作者在与[20; 59; 56]相同的从头开始训练的设置下,在COCO数据集上验证了所提出的检测器。此外,所有模型的延迟都在T4 GPU上使用TensorRT FP16进行测试,遵循[71]的方法。

3.2 Comparison with state-of-the-arts

如表1所示,YOLOv10在各种模型规模上均取得了最先进的性能和端到端延迟。作者首先将YOLOv10与作者的 Baseline 模型进行比较,即YOLOv8。在N / S / M / L / X五个变体上,YOLOv10实现了1.2% / 1.4% / 0.5% / 0.3% / 0.5%的AP提升,参数减少了28% / 36% / 41% / 44% / 57%,计算量减少了23% / 24% / 25% / 27% / 38%,延迟降低了70% / 65% / 50% / 41% / 37%。

与其他YOLO模型相比,YOLOv10在准确性和计算成本之间也显示出优越的权衡。特别是对于轻量和小型模型,YOLOv10-N / S比YOLOv6-3.0-N / S分别高出1.5 AP和2.0AP,参数减少了51% / 61%,计算量分别减少了41% / 52%。对于中型模型,与YOLOv9-C / YOLO-MS相比,YOLOv10-B / M在相同或更好的性能下,延迟分别降低了46% / 62%。

对于大型模型,与Gold-YOLO-L相比,YOLOv10-L具有68%的更少参数和32%的更低延迟,同时AP显著提高了1.4%。此外,与RT-DETR相比,YOLOv10在性能和延迟上均取得了显著提升。值得注意的是,在类似性能下,YOLOv10-S / X的推理速度分别是RT-DETR-R18 / R101的1.8x和1.3x。这些结果充分证明了YOLOv10作为实时端到端检测器的优越性。

作者还使用原始的一对多训练方法将YOLOv10与其他YOLO模型进行了比较。在这种情况下,作者考虑了模型的向前过程性能和延迟(Latency),遵循[56, 20, 54]。如表1所示,YOLOv10在不同模型规模上也展示了最先进的性能和效率,这表明了作者的架构设计是有效的。

3.3 Model Analyses

消融研究

作者在表2中基于YOLOv10-S和YOLOv10-M展示了消融实验结果。可以观察到,作者的无需NMS的训练与一致的双重分配显著降低了YOLOv10-S的端到端延迟4.63ms,同时保持了44.3% AP的竞争力表现。

此外,作者以效率为导向的模型设计导致YOLOv10-M减少了1180万参数和20.8 GFIOPs,延迟减少了0.65ms,充分展示了其有效性。进一步地,作者以准确率为导向的模型设计为YOLOv10-S和YOLOv10-M分别实现了1.8 AP和0.7 AP的显著改进,仅增加了0.18ms和0.17ms的延迟开销,充分证明了其优越性。

对无需NMS训练的分析

针对效率驱动的模型设计分析

作者基于YOLOv10-S/M进行了实验,逐步融入效率驱动的的设计元素。作者的 Baseline 模型是未采用效率-精度驱动的模型设计YOLOv10-S/M,即表2中的#2/#6。如表5所示,包括轻量级分类头、空间-通道解耦下采样和排序引导的块设计在内的每个设计组件都有助于减少参数数量、FLOPs和延迟。重要的是,这些改进是在保持竞争力性能的同时实现的。

  • 如表9所示,当作者逐步在每个阶段用高效的CIB替换瓶颈块时,从第7阶段开始观察到性能退化。在内在排序较低且冗余更多的第8和第4阶段,作者可以采用高效的块设计而不牺牲性能。这些结果表明,排序引导的块设计可以作为提高模型效率的有效策略。

针对准确度驱动的模型设计分析

作者基于YOLOv10-S/M逐步集成准确度驱动设计元素的结果。作者的 Baseline 模型是融入了效率驱动设计的YOLOv10-S/M模型,即表2中的#3/#7。如表10所示,采用大核卷积和PSA模块使得YOLOv10-S的模型性能显著提升,分别提高了0.4% AP和1.4% AP,而延迟的增加最小,分别为0.03ms和0.15ms。需要注意的是,对于YOLOv10-M(见表12),作者没有采用大核卷积。

4 Implementation Details

此外,作者将YOLOv10-M的宽度扩展因子增加到1.0以获得YOLOv10-B。对于PSA,作者在SPPF模块之后采用,并为FFN采用扩展因子为2。对于CIB,作者还为倒置瓶颈块结构采用2的扩展比率。[59, 56]在COCO数据集上报告了不同目标尺度和IoU阈值的标准平均精度(AP)。

此外,作者遵循[71]建立端到端的速度基准。由于NMS的执行时间受输入影响,因此作者在COCO验证集上测量延迟,与[71]一样。作者在验证期间采用了与检测器相同的NMS超参数。在后期处理中附加了TensorRT efficientNMSPlugin,并且省略了I/O开销。作者报告了所有图像的平均延迟。

5. 连贯匹配度量的详细推导

进一步地,证明可以通过一致的匹配度量来实现最小的监督差距。

6. Details of Rank-Guided Block Design

7 More Results on COCO

8 More Analyses for Holistic Efficiency-Accuracy Driven Model Design

作者注意到,由于模型规模较小,降低YOLOv10-S(表2中第2个)的延迟尤为具有挑战性。然而,如表2所示,作者以效率为导向的模型设计仍然在不过度牺牲性能的情况下实现了5.3%的延迟降低。这为进一步的以准确度为导向的模型设计提供了有力支持。采用作者整体效率-准确度驱动的模型设计,YOLOv10-S在仅有0.05ms延迟开销的情况下,实现了更好的延迟-准确度权衡,显示出2.0%的AP提升。

此外,对于规模更大、冗余性更多的YOLOv10-M(表2中第6个),作者的效率驱动模型设计如表2所示,实现了相当可观的12.5%的延迟降低。当与准确度驱动的模型设计结合时,作者观察到YOLOv10-M的AP显著提升了0.8%,同时延迟也减少了0.48ms。这些结果充分证明了作者设计策略在不同模型规模上的有效性。

9 Visualization Results

图4展示了作者YOLOv10在复杂且具有挑战性的场景下的可视化结果。可以看出,YOLOv10在各种困难条件下都能实现精确检测,例如低光照、旋转等。它还展示了在检测多种且密集排列的物体(如瓶子、杯子和人)方面的强大能力。这些结果表明其性能卓越。

10 Contribution, Limitation, and Broader Impact

贡献。 总的来说,作者的贡献主要体现在以下三个方面:

  1. 作者提出了一种新颖的一致性双重分配策略,用于无需NMS的YOLO。设计了一种双重标签分配方法,通过一对多分支在训练过程中提供丰富的监督信息,以及通过一对一分支在推理过程中实现高效率。此外,为了确保两个分支之间的和谐监督,作者创新性地提出了连贯匹配度量,这可以很好地减少理论上的监督差距,并带来性能的提升。

  2. 作者提出了一种整体效率-精度驱动的模型设计策略,用于YOLO的模型架构。作者展示了新型轻量级分类头、空间-通道解耦降采样和排名引导的块设计,这些设计大大减少了计算冗余并实现了高效率。作者进一步引入了大核卷积和创新的部分自注意力模块,这些模块在低成本的条件下有效地提升了性能。

  3. 基于上述方法,作者推出了YOLOv10,这是一个新的实时端到端目标检测器。广泛的实验表明,YOLOv10与其他先进检测器相比,在性能和效率权衡方面达到了最先进水平。局限性。 由于计算资源的限制,作者没有在大规模数据集上进行YOLOv10的预训练,例如Objects365 [47]。此外,尽管作者在无需NMS的训练下使用一对一 Head 可以获得具有竞争力的端到端性能,但与使用NMS的一对多训练相比,仍然存在性能差距,特别是在小型模型中更为明显。例如,在YOLOv10-N和YOLOv10-S中,使用NMS的一对多训练的性能比无需NMS的训练分别高出1.0% AP和0.5% AP。作者将在未来的工作中探索进一步缩小差距并实现更高性能的方法。

11 Conclusion

在本文中,作者针对YOLO系列检测 Pipeline 中的后处理和模型架构进行了研究。对于后处理,作者提出了持续的双重分配以实现无需NMS的训练,从而实现高效的端到端检测。对于模型架构,作者引入了整体效率-精度驱动的模型设计策略,改进了性能与效率之间的权衡。这些改进带来了YOLOv10,这是一个新的实时端到端目标检测器。大量实验表明,与其它先进检测器相比,YOLOv10在性能和延迟方面均达到了最先进水平,充分展示了其优越性。

参考

[1].YOLOv10: Real-Time End-to-End Object Detection

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

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

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

相关文章

图像处理之基于标记的分水岭算法(C++)

图像处理之基于标记的分水岭算法(C) 文章目录 图像处理之基于标记的分水岭算法(C)前言一、基于标记点的分水岭算法应用1.实现步骤:2.代码实现 总结 前言 传统分水岭算法存在过分割的不足,OpenCV提供了一种…

图片提取表格要怎么做?7个软件教你快速进行图片识别

图片提取表格要怎么做?7个软件教你快速进行图片识别 要从图片中提取表格,您可以使用以下七款软件来快速进行图片识别和表格提取: 1.一键识别王:这是一款专业的OCR(光学字符识别)软件,可以帮助…

在通过跨网文件交换时,如何保障科研结构核心研究数据?

当今科研领域,数据如同生命线,支撑着每一个突破性发现的诞生。随着国际合作的加深,跨网文件交换成了常态,但这也为科研机构的核心研究数据安全带来了一系列挑战。想象一下,那些精心搜集和分析的宝贵数据,在…

【Typescript】通过变量的值即可获取变量的类型【typeof 变量】

注意:只要变量的类型准确,则typeof获取变量的类型就不会错 enum Test {a "a0",b "b0" }// 这里的a是一个变量的值 let a: Test.a "a0" as Test.a// 这里的typeof a是一个类型【Test.a】 let x: typeof a Test.a

【C++】开源:RabbitMQ安装与配置使用(SimpleAmqpClient)

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#x1…

Jlink卡死 JFlash keil 盗版JLINK

现象:用Keil打开Jlink配置页,会卡死。 解决方法:用旧版本的Jlink软件,因为淘宝买的很多JLINK下载器是盗版的,不支持新版本的JLINK软件。到https://www.segger.com/downloads/jlink下载旧版本的软件。 如果必须要用新版…

重量and体积,不要在傻傻的花冤枉钱寄快递了!

寄快递时有没有遇到过明明不重却被按体积收费的情况?别急,今天就来给大家揭秘快递收费的奥秘! 实际重量和体积重量! 首先,我们要明白两个概念:实际重量和体积重量。实际重量就是你看到的物品重量&#xf…

安装vllm的时候卡主:Collecting vllm-nccl-cu12<2.19,>=2.18 (from vllm)

按照vllm的时候卡主: ... Requirement already satisfied: typing-extensions in /home/wangguisen/miniconda3/lib/python3.10/site-packages (from vllm) (4.9.0) Requirement already satisfied: filelock>3.10.4 in /home/wangguisen/miniconda3/lib/python…

推荐二轮电动车仪表盘蓝牙主芯片方案-HS6621CGC

随着国内二轮电动车的火热开启,电动车的智能化程度越来越高;电动车的智能操控需求也越来越高,现在介绍蓝牙控制面板的一些功能;例如:定位(GNSS),设防,实时上报数据&#…

ctfshow web入门 web306--web310源码审计

web306 这和之前的完全不一样了 <?php #error_reporting(0); session_start(); require service.php;$username$_POST[userid]; $userpwd$_POST[userpwd]; $servicenew service();$user$service->login($username,$userpwd); if($user){setcookie(user,base64_encode(…

JAVA中的代理:代理的作用+静态代理的实现+动态代理的实现

JAVA中的代理&#xff1a;代理的作用静态代理的实现动态代理的实现 一、代理的作用二、静态代理实现方式2.1 实现原理2.2 示例 三、动态代理 一、代理的作用 代理是一种设计模式 主要目的&#xff1a;提供了对目标对象另外的访问方式 代理的好处&#xff1a; 目标对象可以间…

告别低效率||智能BI财务分析软件

在当今信息爆炸的时代&#xff0c;财务数据作为企业运营的核心&#xff0c;其处理和分析的效率直接关系到企业的决策速度和市场竞争力。奥威BI软件凭借其卓越的性能和智能化的分析功能&#xff0c;为企业提供了一套高效、准确的财务分析解决方案。 奥威BI软件在财务分析中的优…

从0开始回顾ElasticSearch

1 elasticsearch概述 1.1 elasticsearch简介 官网: https://www.elastic.co/ ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的…

angr使用学习(持续更新)

首先我是直接在kali中安装的&#xff0c;也是边练边学的。 嗯&#xff0c;要在纯净python环境&#xff0c;所以是在 virtualenv 虚拟环境里&#xff0c;也不是特别会用这个&#xff0c;按照教程一步步做的 source venv/bin/activate 进入了对应环境 退出是 deactivate en,ipy…

重生之 SpringBoot3 入门保姆级学习(06、属性绑定)

重生之 SpringBoot3 入门保姆级学习&#xff08;06、属性绑定&#xff09; 2.3.1 使用 ConfigurationProperties2.3.2 使用 EnableConfigurationProperties 2.3.1 使用 ConfigurationProperties application.properties 文件书写相关配置 pig.id1 pig.name王萍 pig.age21方法一…

Sping源码(九)—— Bean的初始化(非懒加载)— ConversionService

序言 经过前面一系列的加载、解析等准备工作&#xff0c;此刻refresh方法的执行已经来到了尾声&#xff0c;接下来我们用几篇文章着重的介绍一下Bean的初始化 代码 着重看refresh()主流程中的finishBeanFactoryInitialization()方法。 finishBeanFactoryInitialization 方法…

python深入探索斐波那契数列:代码示例与不满足的外围条件

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、斐波那契数列的初步实现 二、外围条件的不满足情况 总结 一、斐波那契数列的初步实现 …

二叉树——堆的实现

一.前言 前面我们讲解了二叉树的概念以及二叉树的存储结构&#xff1a;https://blog.csdn.net/yiqingaa/article/details/139224974?spm1001.2014.3001.5502 今天我们主要讲讲二叉树的存储结构&#xff0c;以及堆的实现。 二.正文 1.二叉树的顺序结构及实现 1.1二叉树的顺序…

五款屏幕监控软件测评,哪一款屏幕监控软件适合企业

市场上有多款屏幕监控软件&#xff0c;其中一些因其实用的功能、良好的用户体验和广泛的用户基础而获得了较高的市场占有率和口碑。以下几款是较为受欢迎且功能全面的屏幕监控软件&#xff1a; 1、安企神软件&#xff1a; 领取7天试用版&#xff1a;https://work.weixin.qq.co…

【NumPy】关于numpy.sort()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…