动态头部:统一目标检测头部与注意力

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

ai阅读论文_论文速读_论文阅读软件-网易有道速读

创新点是什么?

这篇文档的创新点是提出了一种统一的方法,将对象检测头和注意力机制结合起来。作者在文中提出了一种称为Dynamic Head的方法,通过引入注意力机制来动态地选择和调整不同的对象检测头,以适应不同的任务和场景。这种方法可以提高对象检测的性能和效率。

摘要

在目标检测中,定位与分类相结合的复杂性导致了各种方法的蓬勃发展。以前的工作试图提高在不同的目标检测头的性能,但未能呈现一个统一的视图。在本文中,我们提出了一种新的动态头部框架来统一目标检测头部和注意力。通过在尺度感知的特征层次之间、空间感知的空间位置之间以及任务感知的输出通道内连贯地组合多重自注意机制,该方法显著提高了目标检测头的表征能力,且不增加任何计算开销。进一步的实验证明了该方法在COCO基准上的有效性和有效性。使用标准的ResNeXt-101- DCN骨干网,我们大大提高了流行的目标检测器的性能,并实现了新的最先进的54.0 AP。此外,使用最新的变压器骨干网和额外的数据,我们可以将当前最好的COCO结果推到60.6 AP的新记录。代码将在https://github.com/microsoft/DynamicHead上发布。

1. 介绍

在计算机视觉应用中,目标检测是为了回答“什么物体在哪里”的问题。如何提高目标检测头的性能已成为现有目标检测工作中的一个关键问题。

开发一个好的目标探测头所面临的挑战可以概括为三类。首先,头部应该是尺度感知的,因为在一个图像中经常存在多个具有不同尺度的物体。其次,头部应该有空间意识,因为物体通常是移动的

在不同的视角下,梨的形状、旋转和位置都有很大的不同。第三,头部需要是任务感知的,因为物体可以有不同的表示(例如,边界框[12],中心[28]和角点[33]),它们拥有完全不同的目标和约束。我们发现最近的研究[12,35,28,31,33]只侧重于以各种方式解决上述问题之一。如何形成一个能同时解决所有这些问题的统一的头脑,仍然是一个悬而未决的问题。

在本文中,我们提出了一种新的检测头,称为动态头,将尺度感知、空间感知和任务感知统一在一起。如果我们将主干的输出(即检测头部的输入)视为维度为×space ×channel的三维张量,我们发现这样一个统一的头部可以被视为一个注意学习问题。一个直观的解决方案是在这个传感器上建立一个完全的自关注机制。然而,该优化问题求解难度大,计算成本高。

相反,我们可以在特征的每个特定维度上分别部署注意力机制,即关卡智能、空间智能和渠道智能。尺度感知注意力模块仅部署在级别维度上。它学习各种语义层次的相对重要性,以便根据单个对象的规模在适当的层次上增强特征。空间感知注意力模块在空间维度(即高度×width)上进行部署。它在空间分配中学习连贯的判别表征。任务感知注意力模块部署在通道上。它根据对象的不同卷积核响应,指导不同的特征通道分别支持不同的任务(例如,分类、盒回归和中心/关键点学习)。

通过这种方式,我们显式地实现了检测头的统一注意机制。虽然这些注意机制分别应用于特征张量的不同维度,但它们的表现可以相互补充。在MS-COCO基准上进行了广泛的实验证明我们方法的有效性。它为学习更好的表示提供了巨大的潜力,可用于改进各种目标检测模型,AP增益为1.2% ~ 3.2%。使用标准ResNeXt- 101-DCN骨干网,该方法在COCO上实现了54.0%的AP。此外,与EffcientDet[27]和SpineNet[8]相比,动态头部的训练时间只有1/20,但性能更好。此外,利用最新的变压器主干和来自自我训练的额外数据,我们可以将当前最佳COCO结果推向60.6 AP的新记录(详见附录)。

2. 相关工作

近年来的研究主要从尺度感知、空间感知和任务感知等方面对目标检测器进行改进。

Scale-awareness。由于自然图像中经常存在不同尺度的物体,因此许多研究都认识到尺度感知在物体检测中的重要性。早期的工作已经证明了利用图像金字塔方法进行多尺度训练的重要性[6,24,25]。代替图像金字塔,特征金字塔[15]被提出,通过连接下采样卷积特征的金字塔来提高效率,并已成为现代目标检测器的标准组件。然而,不同层次的特征通常是从网络的不同深度提取的,这导致了明显的语义差距。为了解决这一差异,[18]提出从特征金字塔开始,通过自下而上的路径增强来增强下层的特征。后来[20]通过引入平衡采样和平衡特征pyra- mid对其进行了改进,最近[31]提出了一种基于改进的三维卷积的金字塔卷积同时提取尺度和空间特征。

在这项工作中,我们在检测头中提出了一个尺度感知的注意,这使得各种特征级别的重要性自适应于输入。

空间意识。以往的研究试图通过提高物体检测中的空间意识来提高语义学习。已知卷积神经网络在学习图像中存在的空间变换方面是有限的[41]。一些工作通过增加模型能力(大小)[13,32]或涉及昂贵的数据增强[14]来缓解这个问题,导致推理和训练的计算成本极高。后来,提出了新的卷积算子来改进空间变换的学习。[34]提出使用相关卷积从指数扩展的接受野中聚合上下文信息。[7]用ad-提出了可变形卷积对空间位置进行采样

额外的自学补偿。[37]通过引入学习到的特征幅度,重新制定了偏移量,并进一步提高了其能力。

在这项工作中,我们提出了检测头部的空间意识注意,它不仅将注意力应用于每个spa位置,而且还自适应地将多个特征级别聚合在一起以学习更具判别性的表征。

Task-awareness。目标检测起源于两阶段范式[39,6],该范式首先生成目标提案,然后将提案分为不同的类别和背景。[23]通过引入区域建议网络(RPN)将这两个阶段形成一个单一的卷积网络,形式化了现代两阶段框架。后来,一级目标探测器[22]因其效率高而流行起来。[16]通过引入特定于任务的分支进一步改进了ar架构,以超越两级检测器的精度,同时保持先前的一级检测器的速度。

最近,越来越多的研究发现,物体的各种表征可能会潜在地提高性能。[12]首先证明了结合对象的绑定盒和分割掩码可以进一步提高性能。[28]提出使用中心表示以逐像素预测的方式解决目标检测问题。[35]进一步提高了基于中心的方法的性能,根据对象的统计特征自动选择阳性和阴性样本。后来,[33]将目标检测作为具有代表性的关键点来简化学习。[9]进一步提高了性能,通过检测每个对象作为一个三元组,而不是一对关键点,以减少错误的预测。最近,[21]提出了从每个边界的极值点提取边界特征来增强点特征,并存档了最先进的性能。

在这项工作中,我们在检测头中提出了一个任务感知的注意力,它允许注意力部署在信道上,它可以自适应地支持各种任务,无论是单/两级探测器,还是基于框/中心/关键点的探测器。

更重要的是,在我们的头部设计中,所有这些属性都被整合到一个统一的注意机制中。据我们所知,这是第一个通用的检测头框架,它朝着理解注意力在目标检测头的成功中所起的作用迈出了一步。

3. 我们的方法

3.1. 动机

为了在统一的对象分析中同时实现尺度感知、空间感知和任务感知检测头,我们需要大致了解以前对目标检测头的改进。

给定特征金字塔中不同层次的特征Fin = {Fi}Li=1的连接,我们可以使用上采样或下采样来调整连续层次特征的大小,使其接近中位数水平特征的规模。重新缩放的特征金字塔可以表示为一个四维张量f∈RL×H×W ×C,其中L表示金字塔中的层级数,H、W、C分别表示中位层级特征的高度、宽度和通道数。我们进一步定义S = H ×W将张量重塑为三维张量F∈RL×S×C。基于这种表示,我们将探讨每个张维的作用。

•物体尺度的差异与不同层次的特征有关。改善不同层次F的表征学习有助于目标检测的尺度感知。•不同物体形状的各种几何变换与不同空间位置的特征有关。改进F在不同空间位置上的表征学习有利于目标检测的空间感知。•不同的对象表示和任务可以与不同渠道的特征相关联。改善不同通道的表征学习有助于目标检测的任务感知。

在本文中,我们发现在一个有效的注意学习问题中,上述所有方向都是可以统一的。我们的工作是第一次尝试将所有三个维度的多重关注结合起来,形成一个统一的头部,以最大限度地提高它们的改进。

3.2. 动态头部:与注意力统一

给定特征张量F∈R ,大小为L×S×C,应用自注意的一般模拟为:

其中π(·)为注意函数。这种注意力功能的一个na¨ıve解决方案是由完全连接的层实现的。但是,由于张量的高维,直接学习所有维度上的注意函数在计算上是昂贵的,而且实际上是负担不起的。

相反,我们将注意功能转换为三个连续的注意,每个注意只关注一个角度:

式中πL(·)、πS(·)、πC(·)分别是作用于维度L、S、C上的三个不同的注意函数。

尺度感知注意力πL。我们首先引入尺度感知注意,根据不同尺度的语义重要性动态融合特征。

其中f(·)是1 ×1convolutional层近似的线性函数,σ(x) = max(0, min(1, x+12))是hard-sigmoid函数。

PAGE 4

空间意识注意力πS。我们采用另一种基于融合特征的空间感知注意模块,对空间位置和特征层次之间一致共存的判别区域进行聚焦。考虑到S的高维性,我们将该模块分解为两步:首先通过可变形卷积使注意力学习变得稀疏[7],然后在相同的空间位置跨层聚集特征:

其中,K为稀疏采样位置的个数,pk +∆p K为自学习空间偏移量∆p K移位的位置,以聚焦于判别区域,∆m K为位置pk处的自学习重要标量。两者都是从F的中位数水平的输入特征中学习到的。

任务感知注意力π。为了实现联合学习和概括对象的不同表示,我们在最后部署了任务感知注意力。它动态地切换功能的on和OFF通道,以支持不同的任务:

其中Fc是c-th通道的特征片,[α 1, α2, β1, β2]T = θ(·)是一个学习控制激活阈值的超函数。θ(·)的实现与[3]类似,首先对l ×S维进行全局平均池化降维,然后使用两个全连接层和一个归一化层,最后应用移位的sigmoid函数将输出归一化为[−1,1]。

最后,由于上述三种注意机制是顺序应用的,我们可以多次嵌套公式2,从而有效地将多个πL, πS和πC块堆叠在一起。我们的动态头部(即Dy-头部简化)模块的详细配置如图2 (a)所示。

作为总结,我们提出的动态头部的目标检测的整个范例如图1所示。任何一种骨干网络都可以用来提取特征金字塔,将其进一步调整为相同的尺度,形成一个三维张量F∈RL×S×C,然后作为动态头部的输入。接下来,将包括尺度感知、空间感知和任务感知在内的几个Dy- Head块依次堆叠。动态头部的输出可用于对象检测的不同任务和表示,如分类、中心/盒回归等。

在图1的底部,我们显示了每种类型的注意力的输出。我们可以看到,由于域的差异,来自主干的初始特征映射是有噪声的

ImageNet训练。经过我们的尺度感知注意模块后,特征图对前景物体的尺度差异更加敏感;在进一步通过我们的空间感知注意模块后,特征地图变得更加稀疏,并集中在前景物体的可鉴别空间位置上。最后,通过我们的任务感知关注模块,特征映射根据不同下游任务的需求重新形成不同的激活。这些可视化很好地展示了每个注意模块的有效性。

3.3. 推广到现有的检测器

在本节中,我们演示了如何将所提出的动态头集成到现有的检测器中,以有效地提高其性能。

单程探测器。单级检测器通过从特征图中密集采样来预测目标位置,简化了检测器的设计。典型的一级检测器(如RetinaNet[16])由提取密集特征的骨干网和多个任务特定的子网分支组成,分别处理不同的任务。如前所述[3],目标分类子网络的行为与边界框重构有很大不同移位子。与这种传统方法有争议的是,我们只在主干上附加一个统一的分支,而不是多个分支。由于我们的多重注意力机制的优势,它可以同时处理多个任务。这样可以进一步简化体系结构,提高效率。最近,无锚的单级探测器变体变得流行起来,例如,FCOS[28]、ATSS[35]和RepPoint[33]将目标重新制定为中心和关键点,以提高性能。与retanet相比,这些方法需要在分类分支或回归分支上附加一个中心预测或关键点预测,这使得任务特定分支的构建变得不容易。相比之下,部署动态head更加灵活,因为它只将各种类型的预测附加到head的末尾,如图2 (b)所示。

两级探测器。两阶段检测器利用区域建议和roi池[23]层从骨干网络的特征金字塔中提取中间表示。为了配合这一特征,我们首先在roi池层之前的特征金字塔上应用我们的尺度感知注意力和空间感知注意力,然后使用我们的任务感知注意力来替换原始的完全连接的层,如图2 (c)所示。

3.4. 与其他注意机制的关系

可变形。可变形卷积[7,37]通过引入稀疏采样,显著改进了传统卷积层的变换学习。它已被广泛应用于目标检测主干,以增强特征表示。虽然它很少用于目标检测头,但我们可以将其视为我们表示中的S子维的单独建模。我们发现在主干中使用的可变形模块可以与所提出的动态头部互补。事实上,使用ResNext-101-64x4d骨架的可变形变体,我们的动态头部实现了新的最先进的目标检测结果。

非本地。非局部网络[30]是利用注意力模块来提高目标检测性能的先驱工作。然而,它使用一种简单的点积公式,通过融合来自不同空间位置的其他像素的特征来增强像素特征。这种行为可以被视为只对我们的表示中的L×S子维度进行建模。

transformer。最近,有一种趋势是将transformer模块从自然语言处理引入到计算机视觉任务中[29]。前期工作[2,38,5]在改进对象方面显示出良好的效果

检测。Transformer提供了一个简单的解决方案,通过应用多头完全连接层来学习不同模式的交叉注意对应和融合功能。这种行为可以看作是在我们的表示中只建模这些×C子维度。

上述三种类型的注意仅部分地对特征张量中的子维度进行建模。作为一个统一的设计,我们的动态头部将不同维度的关注结合到一个连贯有效的实现中。下面的实验表明,这种专门的设计可以帮助现有的目标检测器取得显着的增益。此外,与现有解决方案中的隐式工作原理相比,我们的注意力机制明确地解决了目标检测的挑战。

4. 实验

我们根据常用的设置在MS-COCO数据集[17]上评估了我们的方法。MS-COCO包含从网络上收集的约160K图像的80个类别。数据集被分成train2017、val2017和test2017三个子集,分别有118K、5K和41K张图像。标准平均精度(AP)指标用于报告不同IoU阈值和对象尺度下的结果。在我们所有的实验中,我们只在train2017图像上进行训练,没有使用任何额外的数据。对于烧蚀研究的实验,我们在val2017子集上评估了性能。当与最先进的方法进行比较时,我们在测试开发子集上报告从测试服务器返回的正式结果。

4.1. 实现细节

我们基于流行的Mask R-CNNbenchmark[12]的实现,将动态头块作为插件实现。如果没有特别提到,我们的动态头部是使用ATSS框架进行训练的[35]。所有模型都使用一个计算节点进行训练,每个计算节点有8个v100gpu,每个计算节点有32GB内存。

培训。我们使用ResNet-50作为所有消融研究的模型主干,并使用标准的1x配置对其进行训练。其他模型使用[12]中介绍的标准2x训练配置进行训练。我们使用初始学习率为0.02,权重衰减为1e−4,动量为0.9。在67%和89%的训练阶段,学习率下降了0.1倍。采用随机水平翻转的标准增广。为了与以往使用多尺度输入训练的方法相比,我们还对选择性模型进行了多尺度训练。

推理。为了与使用测试时间延长的最新方法进行比较,我们还评估了我们的方法.多尺度测试的最佳模型。其他技巧,如模型EMA、马赛克、混合、标签平滑、软nmr或自适应多尺度测试[25],都没有使用。

4.2. 消融实验。

注意模块的有效性。我们首先通过逐步将不同成分添加到基线中,对动态头块中的不同成分的有效性进行对照研究。如表1所示,“L。”、“年代。”、“C。分别表示我们的尺度感知注意力模块、空间感知注意力模块和任务感知模块。我们可以观察到,单独将每个组件添加到基线实现中,可以提高0.9AP, 2.4 AP和1.3 AP的性能。由于空间感知注意力模块在三个模块中占主导地位,因此预计会看到空间感知注意力模块的收益最大。当我们把两个“L”加在一起时。和“S”到基线,它不断提高2.9 AP的性能。最后,我们的全动态头部块显着提高了3.6AP的基线。实验表明,不同的组件作为一个相干模块工作。

注意学习的有效性。然后,我们在动态头部模块中验证了注意学习的有效性。图3显示了在我们的尺度感知注意力模块中,在不同级别的特征上学习到的缩放(通过将高分辨率的学习权重除以低分辨率的学习权重计算)的趋势。直方图是使用来自theCOCO val2017子集的所有图像计算的。可以清楚地看到,我们的尺度感知注意模块倾向于将高分辨率特征图(图中“5级”紫色直方图)调节到低分辨率,将低分辨率特征图(图中“1级”蓝色直方图)调节到高分辨率以平滑化

尺度差异形成了不同的特征层次。这证明了规模意识注意学习的有效性。

图4显示了使用不同数量(即2、4、6)的注意力模块块前后的特征图输出。在应用我们的注意力模块之前,从主干提取的特征图噪声很大,无法聚焦在前景对象上。随着特征图经过更多的关注模块(如图所示,从block2到block 6),我们可以明显地看到,特征图覆盖了更多的前景物体,并且更准确地聚焦于它们的判别空间位置。这种可视化很好地证明了空间意识注意学习的有效性

头部深度的效率。我们通过控制深度(块数)来评估动态头的效率。如表2所示,我们改变了使用的DyHead块的数量(例如,1、2、4、8、10块),并将它们的性能和计算成本(GFLOPs)与基线进行比较。我们的动态头部可以通过堆叠更多的方块来增加深度,直到8。值得注意的是,我们的2块方法已经以更低的计算成本超过了基线。同时,即使有6个区块,与主干的计算成本相比,计算成本的增量可以忽略不计,同时大大提高了准确性。它证明了我们方法的有效性。

现有目标检测器的泛化。我们通过将动态头部插入流行的目标检测器来评估其泛化能力,例如Faster- RCNN[23]、RetinaNet[16]、ATSS[35]、FCOS[28]和reppoints[33]。这些方法代表了各种各样的目标检测框架(例如,两阶段vs单阶段,基于锚点vs无锚点,基于框的vs基于点的)。如表3所示,我们的动态头显着提高了所有流行的目标检测器1.2 ~ 3.2 AP。这证明了我们方法的通用性。

4.3. 与技术水平的比较

我们比较了动态头部与几种标准骨干和最先进的目标检测器的性能。

与不同的骨干合作。首先对动态头部与不同骨架的兼容性进行了分析。如表4所示,我们通过将动态头部与ResNet-50、ResNet-101和ResNeXt-101骨干网相结合来评估目标检测器的性能,并与最近具有类似配置的方法(包括Mask R-CNN[12]、Cascade-RCNN[1]、FCOS[28]、ATSS[35]和BorderDet[21])进行比较。我们的方法一直比以前的方法有很大的优势。与最好的检测器BorderDet相比[21]

在相同的设置下,我们的方法在ResNet-101骨干网和theResNeXt-64x4d-101骨干网上的性能分别高出1.1 AP和1.2 AP,由于COCO基准测试中的挑战,这种改进是显著的。

与最先进的探测器相比。我们将这些方法与最先进的检测器进行了比较[35,31,21,4,2,27,8],包括一些并行工作[38,5]。如表5所示,我们将这些现有的工作总结为两类:一类使用多尺度训练,另一类使用多尺度训练和多尺度测试。

与只进行多尺度训练的方法相比,我们的方法在52.3 AP时达到了新的水平,只需要2倍的训练计划。与EffcientDet[27]和spinenet[8]相比,我们的方法更具竞争力,学习效率更高,训练时间明显缩短了1/20。与利用transformer模块作为注意力的最新工作[2,38,5]相比,我们的动态头部优于这些方法,增益大于2.0 AP,而训练时间比他们少。这表明我们的动态头部可以将不同角度的多种关注模式连贯地组合成一个统一的头部,从而提高了效率和有效性。

我们进一步将我们的方法与使用多尺度训练和多尺度测试的测试时间增加(TTA)的最新结果[35,21,4,38,5]进行了比较。我们的动态头有助于实现新的最先进的结果在54.0 AP,这明显优于1.3 AP的并发最佳方法。

5. 结论

在本文中,我们提出了一种新的目标检测头,它将尺度感知、空间感知和任务感知集中在一个框架中。提出了一种关注目标检测头的新观点。作为一个插件模块,动态头可以灵活地集成到任何现有的目标检测框架中,以提高其性能

曼斯。此外,它是有效的学习。研究表明,目标检测头部注意力的设计和学习是一个值得关注的研究方向。如何使全注意力模型易于学习和高效计算,以及如何在头部设计中系统地考虑更多的注意模式以获得更好的性能,这些工作只是迈出了一步,还有待进一步改进。

附录

提交后,我们不断改进我们的表现。近年来,变压器作为视觉主干网已成为研究的热点,并显示出良好的性能。当使用最新的transformerbackbone[19]、额外的数据和增加的输入大小来训练我们的动态头部时,我们可以进一步提高COCO基准上的当前SOTA。

配合变压器骨干。我们的动态头部与最新的基于变压器的骨干,如[19]合作。如表6所示,我们的动态头部与[1]竞争,这需要额外的掩模接地值来帮助提高性能。同时,与我们框架中使用的基线方法[35]相比,我们进一步将其性能提高了2.5 AP。这很好地证明了我们的动态头部与基于变压器的骨干相补充,可以进一步提高其在下游目标检测任务中的性能。

配合更多的输入和额外的数据。我们发现我们的动态头部可以进一步受益于更大的输入尺寸和使用自我训练方法生成的额外数据[40]。我们将最大图像边长从1333增加到2000,并使用最小图像边长从480到1200不等的多尺度训练。与4.1节中描述的训练方案类似,我们避免使用更多的技巧来确保可重复性。如表7所示,与最新作品[10,36]相比,我们的动态头具有显著的增益,并且在不使用额外掩膜接地真值的情况下与[19]的性能相匹配。同时,我们的动态头部所需的训练时间不到这些工作的1/3。这证明了我们卓越的效率和效力。皮毛,

因此,我们按照[40]在Im- ageNet数据上生成伪标签,并将其用作额外的数据。我们的动态头可以在很大程度上受益于大规模数据,并进一步提高COCO最先进的结果,达到60.6 AP的新纪录。

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

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

相关文章

JS前端高频面试

JS数据类型有哪些,区别是什么 js数据类型分为原始数据类型和引用数据类型。 原始数据类型包括:number,string,boolean,null,undefined,和es6新增的两种类型:bigint 和 symbol。&am…

STM32—启用按键

​ 目录 1 、电路构成及原理图 2、编写实现代码 main.c main.h key.c 3、代码讲解 4、 烧录到开发板调试、验证代码 5、检验效果 本人使用的是朗峰 STM32F103 系列开发板,此笔记基于这款开发板记录。 1 、电路构成及原理图 重要!一定先用短路…

LabVIEW轨道交通列车牵引制动试验平台

LabVIEW轨道交通列车牵引制动试验平台 概述 面对城市轨道交通领域对于高效、准确牵引制动系统的迫切需求,开发了一套基于LabVIEW软件与硬件相结合的试验平台。该平台模拟列车的牵引、制动等工况,通过高精度的数据采集与实时图形化展示,提升…

工具:clang-format使用

Visual Studio 在扩展-》管理扩展-》联机-》搜索Format on Save (for VS2022)插件,并安装 安装需要关闭VS,安装后重新打开vs。 这样每次保存源文件时就会自动调用vs默认的clang-format.exe对源码进行缩进,空格等进行格式化 如果想使用自定…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

leetcode hot100单词拆分

在本题中&#xff0c;我们是要把一个字符串&#xff0c;判断是否能用给的字符串数组中的单词进行拆分&#xff0c;如果可以则返回true&#xff0c;不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑&#xff0c;就是用物品&#xff08;给的字符串数组中…

数据分析(二)自动生成分析报告

1. 报告生成思路概述 怎么快速一份简单的数据分析报告&#xff0c;注意这个报告的特点&#xff1a; --网页版&#xff0c;可以支持在线观看或者分享HTML文件 --标题&#xff0c;动图&#xff0c;原始数据应有尽有 --支持交互&#xff0c;比如plotly交互画面&#xff0c;数据…

索引聚簇因子clustering_factor太大导致不走索引

查询条件超过一个月就不走索引&#xff1a; 检查表的block数和数据行数&#xff1a; select blocks,num_rows from dba_tables where table_name‘MS_MZXX’;blocks:618687 num_rows:20335462 查看聚簇因子clustering_factor的数&#xff1a;select clustering_factor from d…

力扣OJ题——随机链表的复制

题目&#xff1a; 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 要求&#xff1a;构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中…

Vulhub 练习 DC-4靶机完整复现

1.工具 kali:攻击机 IP地址&#xff1a;192.168.200.4 DC-4&#xff1a;靶机 IP地址&#xff1a;暂时未知 2.注意 这里搭建环境两台机器应该选用同类的网络连接方式&#xff1a;这里两台的连接方式为模式 二、信息收集 1.主机发现 找寻同网段下存活的主机&#xff08;可…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

在我们开始探索人工智能的世界时&#xff0c;了解如何与之有效沉浸交流是至关重要的。想象一下&#xff0c;你手中有一把钥匙&#xff0c;可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词&#xff08;prompts&#xff09;。无论你是AI领域的新手&#…

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

Windows系统中定时执行python脚本

背景&#xff1a;本地Windows系统指定目录下会有文件的修改新增&#xff0c;这些变化的文件需要定时的被上传到git仓库中&#xff0c;这样不需要每次变更手动上传了。 首先编写一个检测文件夹下文件变化并且上传git仓库的python脚本(确保你已经在E:\edc_workspace\data_edc_et…

一键安装ROS适用于Ubuntu22/20/18

一键安装ROS适用于Ubuntu22/20/18 1、简介 ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;是一个用于机器人软件开发的框架。它提供了一套工具和库&#xff0c;用于机器人应用程序的开发、测试和部署。ROS是由美国斯坦福大学机器人实验室&…

笔试题详解(C语言进阶)

前言 欢迎阅读本篇文章&#xff01;本篇文章通过一个笔试题来加强我们对C语言的理解&#xff0c;希望对你有帮助。后续我会写一个栏目&#xff0c;集合我见到的C语言题目&#xff0c;进行分析讲解。 1、题目一 判断下面程序的输出结果&#xff1a;(下面说的地址4/8字节是因为对…

Docker部署Halo容器并结合内网穿透实现公网访问本地个人博客

文章目录 1. Docker部署Halo1.1 检查Docker版本如果未安装Docker可参考已安装Docker步骤&#xff1a;1.2 在Docker中部署Halo 2. Linux安装Cpolar2.1 打开服务器防火墙2.2 安装cpolar内网穿透 3. 配置Halo个人博客公网地址4. 固定Halo公网地址 本文主要介绍如何在CentOS 7系统使…

JAVAEE初阶 网络编程(十一)

HTTP协议 一. GET和POST方法二. Post和Get的区别三. HTTP协议中的请求报头部分1. Host2.Content-Length3.Content-Type4.User-Agent5. Referer6.Cookie 一. GET和POST方法 Get方法应用场景有很多,比如下列这个例子. Post方法主要应用在上传和登录上. 一般来说,Get方法没有body,…

百度百科词条在网络推广中的六大作用

也许很多网友都发现了&#xff0c;在网上查资料&#xff0c;百科词条往往是优先展示的。一方面因为百科是搜索引擎自身的平台&#xff0c;另一方面就是因为百科信息权威&#xff0c;网友认可度高。所以企业开展网络营销&#xff0c;百科营销是一块重要阵地。 也有的企业认为百科…

Autosar-Mcal配置详解-GPT

3.3.1添加GPT模块 方法与添加Dio相似&#xff0c;可参加Dio模块添加方法。 3.3.2 创建、配置GPT通道 1)根据需求创建GPT通道&#xff08;即创建几个定时器&#xff09; 本例中创建了3个定时器通道&#xff1a;1ms&#xff0c;100us&#xff0c;OsTimer。 2)配置GPT通道 配置T…

Android全新UI框架之常用ComposeUI组件

在Compose中&#xff0c;每个组件都是一个带有Composable注解的函数&#xff0c;被称为Composable。Compose已经预置了很多基于MD设计规范的Composable组件。 在布局方面&#xff0c;Compose提供了Column、Row、Box三种布局组件(感觉跟flutter差不多)&#xff0c;类似于传统视图…