YOLOV10实时端到端目标检测

代码地址: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.mzph.cn/bicheng/15104.shtml

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

相关文章

[240525] VMware Pro 个人可免费使用 | 人机交互角度 解释 AI 同事出错虽多但深得青睐之奥义

目录 VMware Workstation Pro 个人可免费使用人机交互研究 ChatGPT 52%回答失实,78%逻辑不一致然却备受青睐之奥义 VMware Workstation Pro 个人可免费使用 VMware 宣布 Fusion Pro(Mac)和 Workstation Pro(Windows 和 Linux&…

纯度高的安卓和混血安卓

安卓阵营纯安卓和改装安卓,纯安卓好用,权限控制力度做到很小,每相权限都交用户控制,权限控制层面可以精确到文件夹和文件,剪切板读和写,而且有精确权限追踪功能,国产高度定制安卓系统只有粗糙访…

React useState修改对象

在 React 中,useState 是一个 Hook,它可以让函数组件拥有状态。当想要改变一个对象类型的状态时,我们需要使用展开运算符(...)或者 Object.assign 来确保状态是正确地更新。 以下是一个使用 useState 来更新对象的例子…

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少,前端code的键盘都起火星子了。来了4个外包支持,1个后端3个前端,还是不够用啊。刚好趁这个机会稍微学习下vue,其实之前环境也配置过了,所以这里就不分享环境配置了,主要分享下新建…

基于单片机电梯控制系统设计与实现

摘 要: 介绍了电梯控制系统架构 , 指出了该系统的硬件设计和控制系统的软件设计以及系统调试 , 使系统可根据按键 要求完成载客任务,为电梯控制系统的优化提供了参考 。 关键词 : 电梯控制 ; 单片机 ; 系统设计 0 引言 在高层建筑中发挥…

Java开发大厂面试第22讲:Redis 是如何保证系统高可用的?它的实现方式有哪些?

高可用是通过设计,减少系统不能提供服务的时间,是分布式系统的基础也是保障系统可靠性的重要手段。而 Redis 作为一款普及率最高的内存型中间件,它的高可用技术也非常的成熟。 我们今天分享的面试题是,Redis 是如何保证系统高可用…

GPT-4o之多模态

前言 想必,很多小伙伴都知道GPT-4o已经发布了,一手基于多模态的问答显示,看起来挺厉害的(也就是看起来, )。然后,我就顺手看了看什么是多模态。 简介 多模态(Multimodal&#xff…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展,工控软件的应用越来越广泛,它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件? 工控软件是指用于工业控制系统的软件,主要应用于各种生产过程控制、自动化…

标准库算法

欢迎访问我的博客首页。 标准库算法 1. 查找对象的算法2. 其它只读算法3. 二分搜索算法4. 写容器元素的算法5. 划分与排序算法6. 通用重排操作7. 排列算法8. 有序序 列的 集合算法9. 最 小值和 最大值10. 数值算法11. 参考 Pred 表示返回值为布尔类型的可调用对象。 1. 查找对…

Python序列的概念与使用-课后作业[python123题库]

序列的概念与使用-课后作业 一、单项选择题 1、关于Python组合数据类型,以下描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬…

Flutter 中的 DecoratedBox 小部件:全面指南

Flutter 中的 DecoratedBox 小部件:全面指南 在Flutter中,DecoratedBox是一个功能丰富的小部件,它为子组件提供了多种装饰效果,如背景色、边框和阴影。通过DecoratedBox,你可以轻松地为任何小部件添加装饰&#xff0c…

PLSQL连接Linux Oracle21c

PLSQL连接Linux Oracle21c 一、安装PLsql 下载官网 https://www.allroundautomations.com/registered-plsqldev/ 二、Oracle Instant Client下载 使用plsql连接oracle的时候是需要本地先安装oracle客户端,英文名就是Oracle Instant Client。 官方下载地址&…

初出茅庐的小李博客之用MQTT.fx软件进行消息发布与订阅【 基于EMQX Cloud】

MQTT.fx软件使用简单介绍 MQTT.fx 的软件界面如下图所示,最上方为 MQTT Broker 连接地址栏,及其连接配置。其下方功能 Tabs 含有 Publish 发布栏、Subscribe 订阅栏、Scripts 脚本栏、Broker Status 状态消息栏、Log 日志信息控制栏。 连接之前要明确几…

【Linux系列】软链接使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

深入编程逻辑:从分支到循环的奥秘

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、编程逻辑的基石:分支与循环 分支逻辑详解 代码案例:判断整数是…

函数的拓展

7.1.1 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 function log(x.y){ y y || Worldl console.log(x,y); }log(hello) //hello World log(hello,Chine) //hello Chine log(hello,) //hello World上面的代码检查函数…

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK? UE官方给我们提供了很多对于IK处理的节点,比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等,但是看到这,很多人就好奇了,什么是IK? 首先我们来看看虚幻小白人的骨…

[图解]产品经理创新之阿布思考法

0 00:00:00,000 --> 00:00:01,900 那刚才我们讲到了 1 00:00:02,730 --> 00:00:03,746 业务序列图 2 00:00:03,746 --> 00:00:04,560 然后怎么 3 00:00:05,530 --> 00:00:06,963 画现状,怎么改进 4 00:00:06,963 --> 00:00:09,012 然后改进的模式…

【Spring Security + OAuth2】授权

Spring Security OAuth2 第一章 Spring Security 快速入门 第二章 Spring Security 自定义配置 第三章 Spring Security 前后端分离配置 第四章 Spring Security 身份认证 第五章 Spring Security 授权 第六章 OAuth2 文章目录 Spring Security OAuth21、基于request的授权1…

一条命令安装Metasploit Framework

做安全渗透的人都或多或少的使用kali-Linux系统中msfconsole命令启动工具,然而也经常会有人遇到这样那样的问题无法启动 今天我们就用一条命令来重新安装这个工具 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/met…