YOLOV10实时端到端目标检测

news2024/10/6 12:26:40

代码地址:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection

论文地址:https://arxiv.org/pdf/2405.14458

本文介绍了YOLO系列目标检测器在实时和高效方面的优势,但是仍然存在一些缺陷,包括依赖非极大值抑制(NMS)后处理导致部署效率降低,以及模型架构设计还有待进一步优化。提出了一种一致双赋值策略( consistent dual assignment),用于无需NMS的YOLO训练,可以在保持检测性能的同时提高部署效率。提出了一种全面的高效-高精度驱动的模型设计策略,从效率和精度两个角度对YOLO的各个组件进行了优化设计。基于上述方法,提出了新一代实时端到端目标检测器YOLOv10,在不同模型规模下,YOLOv10都能实现业界最优的计算效率和检测精度权衡。在COCO数据集上进行了大量实验,结果表明YOLOv10在各种模型规模下均显著优于其他先进的检测器,如在相似mAP水平下,YOLOv10-S/X比RT-DETR-R18/R101加速1.8/1.3倍。


就在昨天yolo的第10个版本来了,是不是yolov9都还没有吃透,这紧接着yolov10就来了

Introduction

这篇文章主要讨论了两个方面来推进实时端到端目标检测任务中YOLO系列模型的性能-效率权衡:

提出了一种称为"一致双赋值( consistent dual assignment)"的方法,用于YOLO模型的无NMS训练。这种方法在训练时保留了one-to-many赋值的丰富监督信息,而在推理时则采用one-to-one赋值避免使用NMS后处理,从而获得更高的推理效率。
提出了一种"全面的效率-精度驱动"的模型设计策略。在效率方面,引入了轻量级分类头、空间-通道解耦下采样和基于rank-guided的块设计等技术减少计算冗余。在精度方面,探索了大核卷积和部分自注意力模块来提高模型能力。


Related Work

Real-time object detectors.回顾了YOLO系列模型的发展历程,包括YOLOv1到YOLOv9,以及其他一些重要的实时检测器如PPYOLOE、RTMDet、YOLO-MS、Gold-YOLO等。
End-to-end object detectors. 介绍了基于Transformer的DETR及其变体(如Deformable DETR、DINO、RT-DETR等)如何实现端到端目标检测。另一方面也提到了一些基于CNN的端到端检测器,如OneNet、DeFCN、FCOS等。
这部分概括了YOLO系列和一些其他实时端到端检测器的最新进展,为接下来提出的YOLOv10工作做铺垫。同时也指出了现有工作在后处理(依赖NMS)和模型架构设计方面的不足,为作者的工作方向提供了动机。


Methodology

Consistent Dual Assignments for NMS-free Training

3.1节介绍了作者提出的一种称为"一致双赋值"(Consistent Dual Assignments)的训练策略,使YOLO模型能够在训练时享有丰富的监督信号,同时在推理时免去NMS后处理,实现真正的端到端检测,提升部署的推理效率。主要内容包括:

双标签赋值(Dual Label Assignments)

为YOLO模型引入另一个one-to-one分支,与原有的one-to-many分支共同优化。前者避免了冗余预测,后者提供丰富监督。在推理时只使用one-to-one分支的预测。

与一对多分配不同,一对一匹配仅将一个预测分配给每个GT,从而避免了 NMS 后处理。然而,它会导致监督薄弱,从而导致精度和收敛速度欠佳。幸运的是,这种缺陷可以通过一对多分配来弥补。为了实现这一目标,作者为 YOLO 引入了双标签分配,以结合两种策略的优点。具体而言,如图2(a)所示。

作者为YOLOs加入了另一个一对一的头。它保留了与原来的一对多分支相同的结构并采用相同的优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个头部与模型共同优化,让backbone和neck享受一对多任务提供的丰富监督。在推理过程中,丢弃一对多的头部,并利用一对一的头部进行预测。这使 YOLO 能够进行端到端部署,而不会产生任何额外的推理成本。此外,在一对一匹配中,作者采用top one selection,这达到了与匈牙利匹配相同的性能,但额外的训练时间更少。

一致匹配度量(Consistent Matching Metric)

引入统一的匹配度量公式,使one-to-one分支的最佳正样本与one-to-many分支一致,从而两个分支可以协调优化,one-to-one分支获得改进的监督对齐。

其中p表示分类得分,\widehat{b}b分别表示prediction和instance的边界框。s表示空间先验,指示预测的锚点是否在实例内。\alpha\beta是两个重要的超参数,用于平衡语义预测任务和位置回归任务的影响。将一对多和一对一指标分别表示为m_{o2m} = m(\alpha_{o2m},\beta _{o2m})m_{o2o} = m(\alpha_{o2o},\beta _{o2o})。这些指标会影响两个heads的标签分配和监督信息。

在双标签分配中,一对多分支比一对一分支提供更丰富的监督信号。直观地说,如果能够协调一对一head和一对多head的监督,就可以将一对一head优化到一对多head优化的方向。因此,一对一head可以在推理过程中提供更好的样本质量,从而获得更好的性能。为此,首先分析了两个head之间的监督差距。

由于训练过程中的随机性,一开始就用相同的值初始化两个head并产生相同的预测来启动检查,即一对一head和一对多head为每个预测-实例对生成相同的pIoU。两个分支的回归目标并不冲突,因为匹配的预测共享相同的目标,并且不匹配的预测将被忽略。因此,监管差距在于不同的分类对象。

给定一个实例,将预测的最大IoU表示为u^{*},最大的一对多和一对一匹配分数分别表示为 m_{o2m}^{*}m_{o2o}^{*}。假设一对多分支产生正样本\Omega,一对一分支选择度量m_{o2o,i}=m_{o2o}^{*}的第i个预测,然后可以推导出分类目标t_{o2m,j}= u^{*}\cdot \frac{m_{o2m,j}}{m_{o2m}^{*}} \leq u^{*}对于j\in \Omega,以及任务对齐损失t_{o2o,i}= u^{*}\cdot \frac{m_{o2o,i}}{m_{o2o}^{*}} = u^{*}。因此,两个分支之间的监督差距可以通过不同分类目标的1-Wasserstein距离得出,即

差距随着t_{o2m,i}的增加而减小,即i\Omega内排名更高。当t_{o2m,i} = u^{*}时达到最小值,即i\Omega中最好的正样本,如图2(a)所示。为了实现这一点,提出了一致的匹配指标,即\alpha_{o2o} = r\cdot \alpha_{o2m}\beta_{o2o} = r\cdot \beta_{o2m},这意味着m_{o2o} = m^{r}_{o2m}。因此,一对多head的最佳正样本也是一对一head的最佳样本。因此,两个head可以一致、和谐地进行优化。为简单起见,默认取r=1,即\alpha_{o2o} = \alpha_{o2m}\beta_{o2o} = \beta_{o2m}。为了验证改进的监督对齐,计算了训练后一对多结果的前 1 / 5 / 10 内的一对一匹配对数。如图 2(b) 所示。在一致匹配指标下改进了对齐。更多的细节可以看论文的附录。


Holistic Efficiency-Accuracy Driven Model Design

3.2节介绍了作者提出的一种全面的效率-精度驱动的模型设计策略,旨在从效率和精度两个角度对YOLO模型的不同组件进行优化,以进一步推进YOLO的性能-效率边界。

Efficiency driven model design. YOLO 中的组件由stem、下采样层、stages with basic building blocks和head组成。stem产生的计算成本很少,因此对其他三个部分进行效率驱动的模型设计。

总结如下:

  • 轻量级分类头-采用深度可分离卷积构建更高效的分类头,降低计算开销。
  • 空间-通道解耦下采样-将下采样操作解耦为通道变换和空间降维两步,以获得更高效率。
  • 基于rank-guided的块设计-分析网络各阶段的冗余程度,对冗余阶段采用更紧凑的基本块结构,如紧凑的逆残差块(CIB)。

(1) Lightweight classification head.在 YOLO 中,分类头和回归头通常共享相同的架构。但是,它们在计算开销方面表现出明显的差异。例如,YOLOv8-S中分类头(5.95G/1.51M)的FLOPs和参数数量分别为2.5×和2.4×回归头(2.34G/0.64M)。然而,在分析了分类误差和回归误差的影响(见表6)后,作者发现回归头对YOLO的性能具有更大的意义。因此,可以减少分类头的开销,而不必担心会严重损害性能。因此,作者简单地为分类头采用轻量级架构,它由两个深度可分离卷积组成,核大小为 3×3,后跟一个 1×1 卷积。

(2) Spatial-channel decoupled downsampling.YOLO 通常利用步幅为 2 的常规 3×3 标准卷积,同时实现空间下采样(从H\times W\frac{H}{2}\times \frac{W}{2})和通道转换(从C2C)。这引入了o(\frac{9}{2}HWC^{2}) 的不可忽略的计算成本和o(18C^{2}) 的参数量。相反,作者提出将空间缩减和信道增加操作解耦,从而实现更有效的下采样。具体来说,首先利用逐点卷积来调制通道维度,然后利用深度卷积进行空间下采样。这将计算成本降低到o(2HWC^{2} + \frac{9}{2}HWC),参数计数为o(2C^{2}+18C)。同时,它在缩减采样过程中最大限度地保留了信息,从而在减少延迟的情况下实现了具有竞争力的性能。

(3) Rank-guided block design.YOLO通常对所有阶段都使用相同的基本构建块,例如YOLOv8中的瓶颈块。为了彻底检验YOLO的这种同质设计,作者利用intrinsic rank来分析每个阶段的冗余性。具体来说,作者计算每个阶段最后一个基本块中最后一个卷积的numerical rank,计算大于阈值的奇异值的数量。图 3(a)给出了YOLOv8的结果,表明深阶段和大模型容易表现出更多的冗余。这一观察结果表明,简单地对所有阶段应用相同的块设计对于最佳容量效率权衡来说是次优的。为了解决这个问题,作者提出了一种rank-guided block设计方案,旨在通过紧凑的架构设计来降低被证明是多余的阶段的复杂性。

作者首先提出了一种compact inverted block(CIB)结构,该结构采用廉价的深度卷积进行空间混合,采用高性价比的逐点卷积进行通道混合,如图3(b)所示。它可以作为高效的基本构建块,例如,嵌入到ELAN结构中。然后,作者提倡以rank-guided block分配策略,以在保持竞争力的同时实现最佳效率。

具体来说,给定一个模型,根据其内在ranks按升序对其所有阶段进行排序。进一步检查了用 CIB 替换leading stage的基本块的性能变化。如果与给定模型相比没有性能下降,将继续替换下一阶段,否则停止该过程。因此,作者可以跨阶段和模型规模实施自适应紧凑模块设计,在不影响性能的情况下实现更高的效率。附录中提供了算法的详细信息。


Accuracy driven model design. 进一步探索了精度驱动设计的大核卷积和自注意力,旨在以最小的成本提高性能。

总结如下:

  • 大核卷积-在深层CIB中使用7x7大核深度可分离卷积,增大感受野,提高小目标检测能力。
  • 部分自注意力(PSA)-提出PSA模块,通过减少注意力头数量降低计算开销,同时引入全局建模能力。

(1) Large-kernel convolution. 采用大核深度卷积是扩大感受野和增强模型能力的有效方法。然而,简单地在所有阶段利用它们可能会在用于检测小物体的浅层特征中引入污染,同时在高分辨率阶段也会带来大量的I/O开销和延迟。因此,作者建议在深阶段利用CIB中的大核深度卷积。具体来说,将 CIB 中第二个3×3深度卷积的核大小增加到7×7。此外,采用结构重参数化技术来引入另一个 3×3 深度卷积分支,以缓解优化问题,而不会产生推理开销。此外,随着模型大小的增加,其感受野自然扩大,使用大核卷积的好处会减少。因此,只对小模型尺度采用大核卷积。

(2) Partial self-attention (PSA).自注意力由于其卓越的全局建模能力而被广泛用于各种视觉任务。但是,它表现出很高的计算复杂性和内存占用。为了解决这个问题,鉴于普遍存在的注意力头冗余,作者提出了一种高效的部分自注意力(PSA)模块设计,如图3(c)所示。

具体来说,在 1×1 卷积之后将通道上的特征均匀地划分为两部分。只将一个部分输入到由多头自注意力模块(MHSA)和前馈网络(FFN)组成的N_{PSA}中。然后将两个部分连接起来,并通过 1×1 卷积融合。此外,按照 [Levit: a vision transformer in convnet’s clothing for faster inference] 将query和key的维度赋值为 MHSA 中值的一半,并将LayerNorm替换为BatchNorm以实现快速推理。此外,PSA仅放置在分辨率最低的Stage 4之后,避免了自注意力的二次计算复杂性带来的过多开销。这样,就可以以较低的计算成本将全局表示学习能力整合到YOLO中,从而很好地增强了模型的能力,提高了性能。


Experiments

作者选择 YOLOv8作为基线模型,因为它具有值得称赞的延迟-准确性平衡以及它在各种模型大小中的可用性。作者采用一致的双重分配进行无NMS训练,并在此基础上进行整体效率精度驱动的模型设计,从而带来了作者的YOLOv10模型。YOLOv10 具有与 YOLOv8 相同的变体,即 N / S / M / L / X。此外,作者通过简单地增加YOLOv10-M的宽度比例因子,推导出了一个新的变体YOLOv10-B。作者在相同的从头开始训练设置下验证了COCO上提出的检测器。

Comparison with state-of-the-arts

如表 1 所示, YOLOv10 在各种型号规模上实现了最先进的性能和端到端延迟。作者首先将 YOLOv10 与基线模型(即 YOLOv8)进行比较。在 N / S / M / L / X 五种变体上,YOLOv10 实现了1.2% / 1.4% / 0.5% / 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.0 AP,参数分别减少 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.8× 和 1.3×。


Model Analyses 

Ablationstudy.

表 2 中介绍了基于 YOLOv10-S 和 YOLOv10-M 的消融结果。可以观察到,无 NMS 训练和一致的双重分配显着降低了 YOLOv10-S 的端到端延迟 4.63ms,同时保持了 44.3% AP 的竞争性能。此外,作者的效率驱动模型设计减少了 11.8 M 参数和 20.8 GFLOPs,YOLOv10-M 的延迟大幅降低了 0.65ms,很好地显示了其有效性。此外,作者的精度驱动模型设计在 YOLOv10-S 和 YOLOv10-M 上实现了 1.8 AP 和 0.7 AP 的显着改进,仅单独只有 0.18 毫秒和 0.17 毫秒的延迟开销,这很好地证明了其优势。


AnalysesforNMS-freetraining.

Dual label assignments.作者提出了无NMS的YOLO的双标签分配,既可以在训练过程中带来对一对多(o2m)分支的丰富监督,又可以在推理过程中带来一对一(o2o)分支的高效。根据 YOLOv8-S(即表 2 中的 #1)验证其优势。具体来说,作者分别引入了仅使用 o2m 分支和仅使用 o2o 分支的训练基线。如表 3 所示,作者的双标签分配实现了最佳的AP-延迟权衡。

Consistent matching metric. 作者引入了一致的匹配指标,使一对一head与一对多head更加和谐。基于 YOLOv8-S(即表 2 中的 #1)在不同的\alpha\beta下验证了它的益处。如表4所示,建议的一致匹配指标,即\alpha_{o2o} = r\cdot \alpha_{o2m}\beta_{o2o} = r\cdot \beta_{o2m},可以达到最优性能,其中\alpha_{o2m} = 0.5\beta_{o2m} = 6。这种改进可归因于监督差距的缩小(方程(2)),这改善了两个分支之间的监督一致性。此外,所提出的一致匹配指标消除了对穷举超参数调整的需要,这在实际场景中很有吸引力。


Analysesforefficiencydrivenmodeldesign. 

通过实验逐步纳入基于YOLOv10-S/M的效率驱动设计元素。作者的基线是 YOLOv10-S/M 模型,没有效率精度驱动的模型设计,即表 2 中的 #2/#6。如表5所示,每个设计组件,包括轻量级分类头、空间通道解耦下采样和rank-guided模块设计,都有助于减少参数计数、FLOPs和延迟。

重要的是,这些改进是在保持竞争性能的同时实现的。

Lightweight classification head.根据表 5 中 #1 和 #2 的 YOLOv10-S 分析了预测的类别和局部误差对性能的影响。具体来说,通过一对一的分配将预测与实例进行匹配。然后,将预测的类别分数替换为实例标签,从而得到的AP^{val}_{w/o c}没有分类误差。同样,将预测的位置替换为实例的位置,从而生成AP^{val}_{w/o r}没有回归误差。如表6所示,AP^{val}_{w/o r}远高于AP^{val}_{w/o c},揭示了消除回归误差可以实现更大的改进。因此,性能瓶颈更多地在于回归任务。因此,采用轻量级分级头可以在不影响性能的情况下实现更高的效率。

Spatial-channel decoupled downsampling.为了提高效率,作者将下采样操作解耦,其中通道维度首先通过逐点卷积 (PW) 增加,然后通过深度卷积 (DW) 降低分辨率,以实现最大的信息保留。作者将其与基于表5中#3的YOLOv10-S的DW空间缩减然后PW通道调制的基线方式进行了比较。如表7所示,作者的下采样策略通过减少下采样过程中的信息丢失,实现了0.7%的AP改善。

Compact inverted block (CIB).作者引入 CIB 作为紧凑的基本构建块。根据表 5 中 #4 的 YOLOv10-S 验证其有效性。具体而言,作者引入倒置残差块(IRB) 作为基线,其可实现次优 43.7% AP,如表 8 所示。然后,作者在它后面附加一个 3×3 的深度卷积 (DW),表示为“IRB-DW”,它带来 0.5% 的 AP 改善。与“IRB-DW”相比,作者的CIB以最小的开销,进一步实现了0.3%的AP改进,表明了它的优势。

Rank-guided block design.作者引入了rank-guided块设计,自适应集成紧凑的块设计,以提高模型效率。根据表 5 中 #3 的 YOLOv10-S 验证其优势。根据内在rank按升序排序的阶段是阶段 8-4-7-3-5-1-6-2,如图 3 所示。如表9所示,当逐渐用高效的CIB替换每个阶段的bottleneck block时,作者观察到从阶段7开始的性能下降。因此,在Stage 8和4中,固有rank较低,冗余度较多,因此可以在不影响性能的情况下采用高效的模块设计。这些结果表明,rank-guided块设计可以作为提高模型效率的有效策略。


Analyses for accuracy driven model design.

精度驱动模型设计的分析。本文介绍了基于YOLOv10-S/M的精度驱动设计元素的逐步集成结果。作者的基线是 YOLOv10-S/M 模型,在纳入了效率驱动设计后,即表 2 中的 #3/#7。如表10所示,采用大内核卷积和PSA模块,在0.03ms和0.15ms的最小延迟增加下,YOLOv10-S的性能分别提高了0.4%和1.4%。请注意,YOLOv10-M 不采用大核卷积(参见表 12)。

Large-kernelconvolution.作者首先根据表 10 中 #2 的 YOLOv10-S 研究了不同内核大小的影响。如表11所示,性能随着内核大小的增加而提高,并在7×7的内核大小附近停滞,表明了大感受野的好处。此外,在训练过程中去除重参数化分支可实现0.1%的AP劣化,显示出其优化效果。此外,作者基于YOLOv10-N / S / M检查了跨模型尺度的大核卷积的好处。如表12所示,由于YOLOv10-M固有的大感受野,它对大型模型(即YOLOv10-M)没有带来任何改进。因此,作者只对小模型采用大核卷积,即YOLOv10-N/S。

Partialself-attention(PSA).作者引入了PSA,通过以最低的成本整合全局建模能力来提高性能。作者首先根据表 10 中 #3 的 YOLOv10S 验证其有效性。具体来说,作者引入了transformer模块,即MHSA,然后是FFN,作为基线,表示为“Trans.”。如表13所示,与它相比,PSA带来了0.3%的AP改善,延迟降低了0.05ms。性能的提高可归因于通过减轻注意力头的冗余,缓解了自注意力中的优化问题。此外,作者还研究了不同N_{PSA}的影响。如表 13 所示,将N_{PSA} 提高到2 AP 可提高 0.2%,但延迟开销为 0.1ms。因此,默认将N_{PSA}设置为 1,以增强模型能力,同时保持高效率。

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

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

相关文章

【Linux】icmp_seq=1 Destination Host Unreachable

执行ping 命令提示:From 192.168.XX.XX icmp_seq1 Destination Host Unreachable 这个错误消息通常表示以下几种情况之一: 网络连接问题:目标主机可能没有连接到网络,或者网络中的某个路由器无法将数据包转发到目标主机。 目标主…

08.1.jenkins安装方法

安装 配置官方下载源 #配置jenkins源 sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key下载jak、jenkins服务 #下载jdk11环境,并且配置yu…

软考之信息系统管理知识点(3)

流水线:是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。 编译得过程 关系数据库是表的集合 …

基于yolov2深度学习网络的昆虫检测算法matlab仿真,并输出昆虫数量和大小判决

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022A 3.部分核心程序 .......................................................... for i 1:12 % 遍历结…

声量 2024 | 从小到大,有哪些好产品曾出现在我们生活里?

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 老段 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦 产品统筹 / bobo 场地支持 / 阿那亚 联合制作 / 声量The Power of Voice 特别鸣谢 / 深夜谈谈播客网络 本期节目录制于第二届「声量The Power of Voice」现场。 在…

【SqL】数据库脚本编写规范和指南

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

读人工智能时代与人类未来笔记13_网络57

1. jun背控制 1.1. 威慑的目的是通过威胁发动盒站来防止盒站 1.2. jun背控制的目的是通过限制甚至废除57(或57类别)本身来防止盒站真 1.2.1. 与盒不扩散相配合,以一整套详尽的条约、技术保障措施、监管和其他控制机制为支撑,所…

02-Linux【基础篇】

一、Linux的目录结构 1.基本介绍 Linux的文件系统采用层级式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录 深刻理解Linux树状文件目录是非常重要的 记住一句经典的话:在Linux世界里&#xff…

Golang | Leetcode Golang题解之第110题平衡二叉树

题目: 题解: func isBalanced(root *TreeNode) bool {return height(root) > 0 }func height(root *TreeNode) int {if root nil {return 0}leftHeight : height(root.Left)rightHeight : height(root.Right)if leftHeight -1 || rightHeight -1 …

二手车经营效率罗盘,用经营效率罗盘玩转二手车生意

课程下载:https://download.csdn.net/download/m0_66047725/89292198 更多资源下载:关注我。 带你了解不一样的二手车圈让二手车经营更高效 课程介绍 随着时代不断发展,二手车行业迎来了快速变革期。二手车有着一车一况、一车一价非标和价…

MCF-Microbial Cell Factories

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Microbial Cell Factories 是一份开放的同行评审期刊,涵盖了与微生物细胞作为重组蛋白和天然产物的生产者或作为工业兴趣的生物转化的催化剂的开发、使用和研究相关的任何主题…

一、Elasticsearch介绍与部署

目录 一、什么是Elasticsearch 二、安装Elasticsearch 三、配置es 四、启动es 1、下载安装elasticsearch的插件head 2、在浏览器,加载扩展程序 3、运行扩展程序 4、输入es地址就可以了 五、Elasticsearch 创建、查看、删除索引、创建、查看、修改、删除文档…

网络拓扑—WEB-IIS服务搭建

文章目录 WEB-IIS服务搭建网络拓扑配置网络IISPC 安装IIS服务配置IIS服务(默认站点)PC机访问网页 配置IIS服务(新建站点)PC机访问网页 WEB-IIS服务搭建 网络拓扑 //交换机忽略不计 IIS服务IP:192.168.1.1 PC机IP&…

wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件

Modown 9.1开心版是一款模板兔开发的wordpress主题可,持续更新多年,优秀的资源下载类主题该模板基于Erphpdown,可以销售软件、视频教程、文章等等,通过主题和插件结合可以实现付费下载、付费阅读等功能,配合模板兔的一…

子比主题ACG美化插件[全开源]

WordPress插件是一种可以扩展和增强WordPress网站功能的应用程序。子比主题ACG美化插件听起来像是一个专门为ACG(动画、漫画、游戏)爱好者设计的美化插件,它可能包含多种功能来改善网站的外观和用户体验。 内置功能开关100意味着这个插件提供…

MySQL主从复制(四):主备切换

一主多从结果: 图中, 虚线箭头表示的是主备关系, 也就是A和A’互为主备, 从库B、 C、 D指向的是主库A。 一主多从的设置, 一般用于读写分离, 主库负责所有的写入和一部分读, 其他的读请求则由从…

几个速度比较快的 Linux 开源镜像站及支持的资源列表

搜狐开源镜像站 https://mirrors.sohu.com/ File Name CPAN/ FreeBSD/ QpenBSD/ RockyL apache/ archlinux/ centos/ ceph/ cygwin/ debian/ debian–cd/ debian-security/ deepin/ deepin-cd/ docker-ce/ fedora/ fedora-epel/ gentoo/ lib/ mysql/ nginx/ opensuse/ php/ ubu…

Three.js 研究:1、如何让物体动起来

1、制作模型动画 2、模型动画在代码中的调用 使用这个例子进行修改,使他能动作webgl_animation_skinning_morph.html 制作好的模型放到如下路径 /three.js-master/examples/models/gltf/无标题.gltf修改加载模型文件的地址 修改动画名称 运行 点击动画后&…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

kimi :系统框架 实力学习

学海无涯,你,准备好了吗? 学习一个新的嵌入式系统架构,你"只"需要 - 1 - 手册/速查函数(对于比较大的架构,F12往往返回多个结果,增加混乱); 2 - 源代码和VS&am…