动态头部:统一目标检测头部与注意力
摘要
在目标检测中,定位与分类相结合的复杂性导致了各种方法的蓬勃发展。以前的工作试图提高在不同的目标检测头的性能,但未能呈现一个统一的视图。在本文中,我们提出了一种新的动态头部框架来统一目标检测头部和注意力。通过在尺度感知的特征层次之间、空间感知的空间位置之间以及任务感知的输出通道内连贯地组合多重自注意机制,该方法显著提高了目标检测头的表征能力,且不增加任何计算开销。进一步的实验证明了该方法在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∈RL×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模块从自然语言处理引入到计算机视觉任务中[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倍。采用随机水平翻转的标准增广。为了与以往使用多尺度输入训练的方法相比,我们还对选择性模型进行了多尺度训练。
推理。为了与使用测试时间延长的最新方法进行比较,我们还评估了我们的方法
PAGE 6
多尺度测试的最佳模型。其他技巧,如模型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),我们可以明显地看到,特征图覆盖了更多的前景物体,并且更准确地聚焦于它们的判别空间位置。这种可视化很好地证明了空间意识注意学习的有效性
PAGE 7
头部深度的效率。我们通过控制深度(块数)来评估动态头的效率。如表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的新纪录。
相关文章:
动态头部:统一目标检测头部与注意力
摘要 在目标检测中,定位与分类相结合的复杂性导致了各种方法的蓬勃发展。以前的工作试图提高在不同的目标检测头的性能,但未能呈现一个统一的视图。在本文中,我们提出了一种新的动态头部框架来统一目标检测头部和注意力。通过在尺度感知的特…...
【状态估计】深度传感器与深度估计算法(1/3)
深度传感器与深度估计算法 深度传感器概念 获得空间中目标位置或距离的传感器,按接收的媒介波来源可分为主动式和被动式两大范畴,主动式包括激光雷达、雷达、超声波传感器等,被动式主要为单目、多目相机等,同时两大类可组合为混…...
ClickHouse从入门到精通(高级)
第1章 Explain查看执行计划 第2章 建表优化 第3章 ClickHouse语法优化规则 第4章 查询优化 第5章 数据一致性(重点) 第6章 物化视图 第7章 MaterializeMySQL引擎 第8章 常见问题排查...
什么是Docker的容器编排工具,它们之间有何不同?
随着Docker容器技术的广泛应用,容器编排工具成为了自动化部署、扩展和管理容器化应用程序的关键组件。这些工具提供了一种抽象层,帮助开发者和管理员更高效地管理大量的Docker容器,确保它们在不同的主机和环境中能够可靠地运行。目前…...
qml之Control类型布局讲解,padding属性和Inset属性细讲
1、Control布局图 2、如何理解? *padding和*Inset参数如何理解呢? //main.qml import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 1.4 import QtQml 2.12ApplicationWindow {id: windowvisible: …...
【Jvm】性能调优(拓展)Jprofiler如何监控和解决死锁、内存泄露问题
文章目录 Jprofiler简介1.安装及IDEA集成Jprofiler2.如何监控并解决死锁3.如何监控及解决内存泄露(重点)4.总结5.后话 Jprofiler简介 Jprofilers是针对Java开发的性能分析工具(免费试用10天), 可以对Java程序的内存,CPU,线程,GC,锁等进行监控和分析, 1.安装及IDEA集成Jprofil…...
运行错误(竞赛遇到的问题)
在代码提交时会遇见这样的错误: 此处运行错误不同于编译错误和答案错误,运行错误是指是由于在代码运行时发生错误,运行错误可能是由于逻辑错误、数据问题、资源问题等原因引起的。这些错误可能导致程序在运行时出现异常、崩溃。 导致不会显示…...
nodename nor servname provided, or not known
异常信息 在 Maven 打包过程中出现的 nodename nor servname provided, or not known 异常通常是由于 Maven 无法解析某个域名,这可能是因为网络问题、DNS 解析失败或者 Maven 配置中指定的仓库地址错误导致的。这个问题通常出现在 Maven 试图从远程仓库下载依赖时 …...
前端vue金额用逗号分隔
实现效果 代码 template部分 <el-input v-model"state.val"></el-input><div>{{ priceFor(state.val) }}</div> js部分 const state reactive({ val: });const priceFor (val)> {if(!val){return }else if(val.length<4){return…...
vulvhub-----Hacker-KID靶机
打靶详细教程 1.网段探测2.端口服务扫描3.目录扫描4.收集信息burp suite抓包 5.dig命令6.XXE漏洞读取.bashrc文件 7.SSTI漏洞8.提权1.查看python是否具备这个能力2.使用python执行exp.py脚本,如果提权成功,靶机则会开放5600端口 1.网段探测 ┌──(root…...
遨博I20协作臂关节逆解组Matlab可视化
AUBO I20协作臂关节逆解组Matlab可视化 前言1、RTB使用注意点2、代码与效果2.1、完整代码2.2、运行效果 总结 前言 注意:请预先配置好Matlab和RTB机器人工具箱环境,本文使用matlab2022b和RTB10.04版本 工作需要,使用matlab实现对六轴机械臂…...
力扣题目训练(15)
2024年2月8日力扣题目训练 2024年2月8日力扣题目训练507. 完美数520. 检测大写字母521. 最长特殊序列 Ⅰ221. 最大正方形237. 删除链表中的节点115. 不同的子序列 2024年2月8日力扣题目训练 2024年2月8日第十五天编程训练,今天主要是进行一些题训练,包括…...
PCB差模辐射是如何产生的
在电路应用中,高频时钟信号往往会采用差分线传输模式,其优点是在提高速率的同时减小功耗和提高抗扰度,因此,差模辐射就成为电路正常工作的结果,是电流流过导体形成的环路所产生,差模辐射模型可以被模拟为一个小环形天线,对于一个面积为A的小环路,载有电流Idm,在远场中…...
车载诊断协议DoIP系列 —— 协议中术语解释和定义
车载诊断协议DoIP系列 —— 协议中术语解释和定义 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…...
【退役之重学前端】关于在控制台得到undefined的事
在浏览器控制台中,undefined 会时不时地,在我不想看到的地方出现。如果你遇到相同的问题,在这篇博客中你会得到答案。 先来看代码块 function test(){} test()//undefined再看下一个代码块 function test(){return 1; } test()//1再来看一个…...
指数和估计六大问题
1955年英国著名数学家R.A.Rankin在牛津大学出版的数学刊物Quart.J.Math.发表了论文(现 FRS D.R.Heath-Brown为主编),专门讲van der Corput方法产生的指数对理论(1933年E.Phillips提出的精彩理论,好友曲阜师范大学毕业中…...
【软件相关】基于Alist挂载云盘到本地文件资源管理器
文章目录 0 前言1 Alist挂载云盘2 RaiDrive配置3 rclone配置 0 前言 因为最近在研究各种云盘存储影视资源的方法,无意间看到一个教程是利用软件将云盘挂载到本地的资源管理器,这样就能实现类似本地文件操作的方式来操作云盘文件,还是有点意思…...
Java多线程系列——锁
0.引言 在并发编程中,锁是一种重要的同步机制,用于控制对共享资源的访问。Java 提供了多种锁的实现,每种锁都有不同的特性和适用场景。本文将深入介绍 Java 中常见的锁类型,包括内置锁、显式锁、读写锁等,并讨论它们的…...
蓝牙BLE学习-GAP
1.概述 GAP层(Generic access profile-通用访问配置文件)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式的一种,而且也是最简单的一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的…...
算法训练营day28(补), 贪心算法2
//122. 买卖股票的最佳时机 II func maxProfit(prices []int) int { result : 0 //利润总和 for i : 1; i < len(prices); i { if prices[i]-prices[i-1] > 0 { result result (prices[i] - prices[i-1]) } } return result } //55. 跳跃游戏 func canJump(nums []…...
Vue核心基础4:绑定样式、条件渲染、列表渲染
1 绑定样式 【代码】 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>绑定样式</title><s…...
go-zero读取mysql部分字段
读取部分字段,使用函数 QueryRowPartialCtx 。 假设有如下一张表: CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ctime DATETIME);要读取字段 ctime 值。 定义一结构体: type X struct {state int db:"…...
反转一个单链表
反转一个单链表 题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 需要虚拟节点么? 答:不需要,因为没有删除节点,只是改变了节点的指向。 遍…...
拿捏c语言指针(中)
前言 书接上回 拿捏c语言指针(上) 此篇主要讲解的是指针与数组之间的爱恨情仇,跟着我的脚步一起来看看吧~ 创造不易,可以帮忙点点赞吗 如有差错,欢迎指出 理解数组名 数组名是首元素地址 例外 1.sizeof࿰…...
鸿蒙语言ArkTS(更好的生产力与性能)
ArkTS是鸿蒙生态的应用开发语言 ArkTS提供了声明式UI范式、状态管理支持等相应的能力,让开发者可以以更简洁、更自然的方式开发应用。 同时,它在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检…...
VBA技术资料MF120:打印固定标题行列
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
MongoDB聚合运算符:$add
$add运算符将将数字相加或将数字和日期相加。如果参数之一是日期,则 $add会将其他参数视为毫秒,并添加到日期中。 语法 { $add: [ <expression1>, <expression2>, ... ] }参数可以是任何有效的表达式,只要能否解析为数值或日期…...
《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_4
《剑指Offer》笔记&题解&思路&技巧&优化_Part_4 😍😍😍 相知🙌🙌🙌 相识😢😢😢 开始刷题1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列2. LCR 14…...
数据库第四次实验
目录 1.建立数据表并插入数据 2 视图的创建 2.1 行列子集视图的创建 2.2 多表视图 2.3视图上建立视图 2.4分组视图 2.5带表达式的视图 3 删除视图 4 查询视图 5 更新视图 5.1 修改某一个属性 5.2 删除一条数据 5.3 插入…...
基于PPNSA+扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于PPNSA扰动算子的车间调度最优化matlab仿真,可以任意调整工件数和机器数,输出甘特图和优化收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行…...
UnityShader——06UnityShader介绍
UnityShader介绍 UnityShader的基础ShaderLab UnityShader属性块介绍 Properties {//和public变量一样会显示在Unity的inspector面板上//_MainTex为变量名,在属性里的变量一般会加下划线,来区分参数变量和临时变量//Texture为变量命名//2D为类型&…...
人工智能学习与实训笔记(一):零基础理解神经网络
人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、什么是神经网络模型 二、机器学习的类型 2.1 监督学习 2.2 无监督学习 2.3 半监督学习 2.4 强化学习 三、网络模型结构基础 3.1 单层网络 编辑 3.2 多层网络 3.3 非线性多层网络…...
LeetCode刷题小记 一、【数组】
LeetCode刷题小记 一、【数组】 文章目录 LeetCode刷题小记 一、【数组】写在前面1. 数组1.1 理论基础1.2 二分查找1.3 移除元素1.4 有序数组的平方1.5 长度最小的子数组1.6 螺旋矩阵II Reference 写在前面 本系列笔记主要作为笔者刷题的题解,所用的语言为Python3&…...
iOS总体框架介绍和详尽说明
iOS是由苹果公司开发的移动操作系统,为iPhone、iPad、iPod Touch等设备提供支持。iOS采用了基于Unix的核心(称为Darwin),并采用了类似于Mac OS X的图形用户界面。以下是iOS的总体框架介绍和详尽说明: UIKit框架&#…...
【C++】const与constexpr详解
1. constexpr:常量表达式 所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。 实际开发中,我们经常会…...
蓝桥杯:日期统计讲解(C++)
日期统计 本题来自于:2023年十四届省赛大学B组真题 主要考察:暴力。 代码放在下面,代码中重要的细节全都写了注释,非常清晰明了: #include <bits/stdc.h> //万能头文件 using namespace std;int main() {…...
Python re.findall()中的正则表达式包含多个括号时的返回值——包含元组的列表
当re.findall()中的正则表达式包含多个括号时,返回值是一个列表,其中每个元素都是一个元组。这个元组的长度与正则表达式中括号的数量相同,元组中的每个元素都是与相应括号中的模式匹配的文本。 import re # 定义一个包含三个括号的正则表达…...
Python——列表
一、列表的特性介绍 列表和字符串⼀样也是序列类型的数据 列表内的元素直接⽤英⽂的逗号隔开,元素是可变的,所以列表是可变的数据类型,⽽字符串不是。 列表的元素可以是 Python 中的任何类型的数据对象。如:字符串、…...
无人机图像识别技术研究及应用,无人机AI算法技术理论,无人机飞行控制识别算法详解
在现代科技领域中,无人机技术是一个备受瞩目的领域。随着人们对无人机应用的需求在不断增加,无人机技术也在不断发展和改进。在众多的无人机技术中,无人机图像识别技术是其中之一。 无人机图像识别技术是利用计算机视觉技术对无人机拍摄的图像…...
清华AutoGPT:掀起AI新浪潮,与GPT4.0一较高下
引言: 随着人工智能技术的飞速发展,自然语言处理(NLP)领域迎来了一个又一个突破。最近,清华大学研发的AutoGPT成为了业界的焦点。这款AI模型以其出色的性能,展现了中国在AI领域的强大实力。 目录 引言&…...
人工智能学习与实训笔记(二):神经网络之图像分类问题
人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 目录 二、图像分类问题 2.1 尝试使用全连接神经网络 2.2 引入卷积神经网络 2.3 分类函数Softmax 2.4 交叉熵损失函数 2.5 学习率优化算法 2.6 图像预处理算法 2.6.1 随机改变亮暗、对比度和颜色等 …...
SSM框架,spring-aop的学习
代理模式 二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中剥离出来…...
【设计模式】4、策略模式
文章目录 一、问题二、解决方案2.1 真实世界的类比2.2 策略模式结构2.3 适用场景2.4 实现方式2.5 优缺点2.6 与其他模式的关系 三、示例代码3.1 go3.2 rust 策略模式是一种行为设计模式,它能定义一系列算法,把每种算法分别放入独立的类中,以是…...
【C++学习手札】多态:掌握面向对象编程的动态绑定与继承机制(深入)
🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:世界上的另一个我 1:02━━━━━━️💟──────── 3:58 🔄 ◀️ ⏸ ▶️ ☰ &am…...
【机构vip教程】Android SDK手机测试环境搭建
Android SDK 的安装和环境变量的配置 前置条件:需已安装 jdk1.8及 以上版本 1、下载Android SDK,解压后即可(全英文路径);下载地址:http://tools.android-studio.org/index.php/sdk 2、新建一个环境变量&…...
2024.2.18
使用fgets统计给定文件的行数 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./test.txt","w"))NULL){perror("open err");return -1;}fputc(h,fp);fputc(\n,fp);fput…...
Haproxy实验
环境: servera(Haproxy):192.168.233.132 serverb(web1):192.168.233.144 serverc(web2):192.168.233.140 serverd(客户端):192.168.233.141 servera(Haproxy): yum install haproxy -y vim /etc/haproxy/haproxy.cfg(配置文件) # 设置日志&#…...
CSRNET图像修复,DNN
CSRNET图像修复 CSRNET图像修复,只需要OPENCV的DNN...
004 - Hugo, 分类
004 - Hugo, 分类content文件夹 004 - Hugo, 分类 content文件夹 ├─.obsidian ├─categories │ ├─Python │ └─Test ├─page │ ├─about │ ├─archives │ ├─links │ └─search └─post├─chinese-test├─emoji-support├─Git教程├─Hugo分类├─…...
Vue3之ElementPlus中Table选中数据的获取与清空方法
Vue3之ElementPlus中Table选中数据的获取与清空方法 文章目录 Vue3之ElementPlus中Table选中数据的获取与清空方法1. 点击按钮获取与清空选中表格的数据1. 用到ElementPlus中Table的两个方法2. 业务场景3. 操作案例 1. 点击按钮获取与清空选中表格的数据 1. 用到ElementPlus中…...