SS3D翻译

news2024/11/23 13:00:10

SS3D

  • Abstract
  • Introduction
  • Related Work
    • Fully-Supervised 3D Object Detection
    • Weakly/Semi-Supervised 3D Object Detection
    • Sparsely-Supervised 2D Object Detection
  • Method
    • Overall Framework
    • Architecture of Detector
    • Missing-Annotated Instance Mining Module 缺失注释实例挖掘模块
      • Score-based filtering
      • IoU-guided suppression
      • Final-step instance bank processing
    • a reliable background mining module 可靠背景挖掘模块
    • point cloud filling data augmentation 点云填充数据增强模块
  • Experiments
    • Datasets and Evaluation Metrics
    • Implementation Details
    • Comparisons with State-of-the-art Methods
    • Ablation Study
    • Quality Analysis
    • Limitation
  • Conclusion

Abstract

传统的基于深度学习的3D目标检测方法需要大量的3D边界框注释来进行训练,这在实践中获取成本很高。稀疏注释的目标检测可以大幅减少注释需求,但由于缺失的注释实例在训练过程中会被视作背景,这一挑战仍然非常巨大。在本文中,我们提出了一种名为SS3D的稀疏监督3D目标检测方法。为了消除由于缺失注释而引起的负面监督,我们设计了一个缺失注释实例挖掘模块,通过严格的过滤策略挖掘正例。同时,我们还设计了一个可靠的背景挖掘模块和点云填充数据增强策略,以生成用于迭代学习的信心数据和可靠监督。所提出的SS3D是一个通用框架,可用于学习任何现代3D目标检测器。在KITTI数据集上的广泛实验表明,使用仅需20%注释的SS3D框架,可以在不同的3D检测器上实现与全监督方法相当的性能。与KITTI上最先进的半监督3D目标检测相比,我们的SS3D在相同的注释工作量下显著提高了基准性能。此外,我们的SS3D还大幅超越了最先进的弱监督方法,突显了其有效性。

Introduction

在这里插入图片描述

三维(3D)目标检测旨在从3D传感器数据(例如,激光雷达点云)中定位和分类对象,由于其在自动驾驶、增强/虚拟现实以及室内机器人技术等多种应用中的广泛性,已经引起了越来越多的关注。最近,基于体素或点特征的一些方法已经被提出,并且在大规模基准数据集上取得了高性能。然而,大多数提出的3D目标检测器需要全监督学习,这意味着模型学习需要一个完全注释的数据集。与2D图像对象相比,注释3D点云对象更加劳动密集:注释者必须在整个3D场景中切换视点或缩放,以仔细标记每个3D对象。因此,开发具有同等检测性能的3D检测器,同时只需要轻量级对象注释,对于实际应用来说是一个有意义的问题。

最近,一些工作已经被提出来解决这个问题。在[10]中,采用了弱监督学习策略。具体来说,采用了点注释方案来减轻注释边界框的负担。然而,点注释提供的监督信息较弱,因此必须额外提供一定数量的全注释,以实现最佳性能。在[24, 33]中,使用了半监督学习策略,其中只有部分数据集被注释,其余未标记。利用教师-学生框架将信息从标记数据传递到未标记数据。然而,当标记和未标记数据之间的差距较大时,信息传递往往会失效。此外,尽管只有部分数据集被注释,但标记个别场景仍然需要不可忽视的劳动,尤其是对于拥挤场景中有许多3D对象的场景,如图1所示。

在本文中,我们采用了稀疏注释策略,只注释场景中的一个3D对象,如图1左侧所示。这样,我们能够为每个场景获得一个3D对象的全面监督信息。直观地说,这有助于学习未标记对象的信息,因为场景内信息传递比跨场景知识传递要容易得多。然而,稀疏注释目标检测也带来了新的挑战:缺失注释的实例将带来错误的监督信号(即作为负样本)干扰网络的训练。在训练期间,由于缺失注释的实例及其附近的区域可能被错误地标记为背景,当梯度反向传播时,网络的权重更新将显著误导。这一挑战已经在2D稀疏目标检测方法[11, 27]中通过利用2D对象之间的重叠或层级关系信息得到解决。然而,这样的信息在3D数据集中可能不存在,例如在KITTI[2]中,这阻碍了直接将这些方法应用于3D应用。

为了应对这一挑战,我们提出了一种新颖有效的稀疏注释3D目标检测方法,即SS3D,它可以应用于任何先进的3D检测器。我们SS3D的主要思想是迭代挖掘高置信度的正例和背景,并进一步使用这些生成的数据来训练3D检测器。我们设计了两个有效的模块,即缺失注释实例挖掘模块和可靠背景挖掘模块,分别挖掘可靠的缺失正例和背景。这确保了3D检测器能够使用置信度较高的监督数据进行训练。通过这种设计,与使用完全注释数据集训练的3D检测器相比,我们的SS3D可以实现相当性能,仅需20%的注释用于稀疏注释数据集。

Related Work

Fully-Supervised 3D Object Detection

现有的3D检测方法大致可以分为两类:基于体素的方法和基于点的方法。对于基于体素的方法,体素化是将不规则点云转换为规则体素以应用传统的2D或3D卷积的常见措施。在VoxelNet中,采用了体素特征编码层,用于从点云中提取统一的特征表示。SECOND通过修改稀疏卷积算法,有效地从3D体素中提取特征。TANet利用堆叠的注意力模块来开发多层次的特征关系。Part-A²提出了一个两阶段网络,通过分组对象内部部分特征来探索空间关系。SE-SSD采用了一对教师和学生检测器来提高性能,而不在推理中引入额外计算。Voxel R-CNN设计了一个体素RoI池化,直接从3D体素特征体积中聚合空间上下文。基于点的方法直接将原始不规则点作为输入,提取局部和全局特征。PointRCNN融合了从3D提议中提取的特征和原始点,以进行精细化。STD提出了一个新颖的球形锚点,以减少锚点数量,并利用从稀疏到密集的思想来提高性能。3DSSD提出了一种基于特征距离的融合采样策略,以保留丰富的信息。PV-RCNN利用体素到关键点的场景编码和关键点到网格的特征聚合来提高性能。尽管先前的工作取得了显著进展并展示了令人印象深刻的性能,但这些结果在很大程度上依赖于大规模的手动注释,这些注释既耗时又劳力密集。我们提出的方法采用了稀疏注释策略,每个场景仅注释一个对象,同时实现了与这些全监督方法相当的性能。此外,无论是基于体素还是基于点的检测器,我们的SS3D都可以直接应用。

Weakly/Semi-Supervised 3D Object Detection

为了减少3D对象的注释,WS3D采用了弱监督学习策略,通过基于点击注释方案的两阶段架构实现。WS3D在第一阶段通过点击注释的场景生成圆柱形对象提议,并在第二阶段使用少量标注实例细化提议以获得立方体。然而,弱监督点注释提供的监督信息较弱,因此必须额外提供一定数量的全注释。同时,基于VoteNet,SESS首先提出了一种半监督3D目标检测方法,利用互为师生的框架来强制实施三种一致性损失。在SESS之后,3DIoUMatch被提出来估计3D IoU作为定位度量,并设置了一个自调整阈值来过滤伪标签。

与这些方法不同,我们提出的方法在每个场景中都精确地提供了对象的监督信息,这使我们能够在场景内传递可靠的监督信息。直观地说,这将优于跨场景传递监督信息,尤其是对于变化较大的场景。

Sparsely-Supervised 2D Object Detection

稀疏注释目标检测是另一种减少网络对数据注释依赖的方法,它只注释部分对象。由于部分实例未被注释,当梯度反向传播时,网络的权重更新可能会显著误导。为了解决这个问题,现有的先进方法采用了重新加权或重新校准RoI(兴趣区域)损失的策略,以消除未标记实例的影响。Soft sampling利用RoI之间和已注释实例之间的重叠来重新加权损失。基于Focal loss的背景重新校准损失将未标记实例视为硬负样本,并重新校准它们的损失,这仅适用于单阶段检测器。特别是,部分感知采样通过使用人类直觉来忽略标记和未标记实例之间的层次关系,从而忽略了部分类别的分类损失。Co-mining提出了一个共同生成模块,将未标记实例转换为正面监督。上述稀疏注释目标检测方法都是针对2D图像对象的。由于2D图像和3D点云之间的模态差异,这些方法不能直接应用于我们的3D目标检测任务。例如,在KITTI中,3D对象自然分离,这意味着对象之间的重叠为零,对象之间不存在层次关系。与重新加权和重新校准方法相比,在本文中,我们提出了一种新颖的稀疏注释3D目标检测方法,利用缺失注释实例挖掘模块和简单但有效的背景挖掘模块来挖掘置信度高的正例和背景,这对于训练高性能检测器至关重要。

Method

在这里插入图片描述

Overall Framework

作为一个通用框架,所提出的SS3D旨在促进3D检测器从稀疏注释数据集中学习,以获得最佳的检测性能。如图2所示,所提出的SS3D主要由缺失注释实例挖掘模块、可靠背景挖掘模块、点云填充数据增强和实例库组成。给定一个3D检测器,最初,我们在稀疏注释的数据集上从头开始训练检测器。然后,我们使用检测器通过缺失注释实例挖掘模块中的严格过滤策略,从训练数据中的点云挖掘可靠的缺失注释实例。我们将挖掘出的实例(橙色)和原始注释实例(红色)存储到实例库中。依赖于实例库,我们进一步使用检测器通过可靠背景挖掘模块挖掘可靠的背景。基于这两个模块的结果,我们利用所提出的点云填充数据增强构建一个置信的数据集,该数据集可以进一步用于重新训练检测器。通过这种迭代学习方式,我们最终可以获得一个高性能的3D检测器。具体细节如下所述。

Architecture of Detector

我们的方法是一个用于使用稀疏注释数据集训练3D目标检测器的通用框架,可以直接应用于各种检测器。在本文中,我们使用PointRCNN、Part-A2、PV-RCNN和VoxelRCNN等最先进的3D检测器来验证我们的SS3D。我们以PV-RCNN为例,简要回顾这个方法。PV-RCNN是一种高性能且高效的两阶段点云检测器,通过新颖的体素集合抽象模块,深度整合了多尺度3D体素卷积神经网络(CNN)特征和基于PointNet++的集合抽象特征到少量关键点。

Missing-Annotated Instance Mining Module 缺失注释实例挖掘模块

在这里插入图片描述

该模块结合了IoU引导的抑制和基于分数的 过滤方案作为挖掘未标记正实例的强化措施作为高质量的伪实例。然后,将选定的伪实例存储在实例库中,以进一步指导可靠的背景挖掘模块。

Score-based filtering

如图,首先,原始输入点云 x 通过顶部检测器生成预测 pt 。然后,我们执行一组全局增强,其中包括对 x 进行随机旋转、翻转和缩放以生成增强点云 x,与pt 不同步以生成增强预测 pt’,底部检测器基于 x 生成预测 pb 。我们设置一个分类置信度阈值 τ c l s τ_{cls} τcls 来过滤掉可能包含错误类别的 pb 和 pt’ 的预测,然后获得过滤后的预测

IoU-guided suppression

仅基于分数的过滤策略无法获得可靠的预测。受 FixMatch [20] 的启发,我们进一步提出了一种有效的 IoU 引导的抑制策略。得到过滤后的预测后,我们计算 pt 和 pb 的每对边界框之间的 IoU 矩阵,旨在匹配来自不规则点云的两个预测的框。然后我们过滤掉IoU小于阈值 τ I o U τ_{IoU} τIoU的不匹配的配对边框,从而进一步提高伪实例的质量

Final-step instance bank processing

将基于分数的过滤与IoU引导的抑制相结合,我们可以有效地避免生成低质量的伪实例,并最终获得一组边界框 { b r } n = 1 N \{b^{r}\}_{n=1}^{N} {br}n=1N,其中 N N N r r r 分别是训练场景的数量和场景中保留的边界框数。然后,我们计算边界框 b n r b^{r}_{n} bnr 与相同索引 n n n 的实例库 B \mathcal{B} B 中的边界框 b B n b_{\mathcal{B}}^{n} bBn 之间的 IoU,并选择不与 b B n b_{\mathcal{B}}^{n} bBn 重叠的 b r n b_{r}^{n} brn。最后,选择的边界框(橙色)以及相应的预测类标签和点云被存储在实例库中,该库还包含所有稀疏注释的实例

a reliable background mining module 可靠背景挖掘模块

在这里插入图片描述

依托更新的实例库,我们利用提出的可靠背景挖掘模块来挖掘背景点,并进一步消除由于缺失注释实例而导致的负面监督信息。与现有的针对错误监督的重新缩放策略相比,我们的方法更加简单有效。
如图4所示,为了获得可靠的背景点云,我们采用尽可能寻找潜在前景点的策略可能的。具体来说,我们使用具有低置信度分数阈值 τ l τ_l τl 的检测器来获得目标检测结果。同时,我们从检测器中删除了非极大值抑制(NMS)操作。 这样,我们确保结果尽可能包含潜在的前景点, 这意味着原始点云的其余部分往往是可靠的背景点云。为了生成新的训练数据,我们移除检测到的目标的3D边界框(与实例库中的实例不重叠的目标)内部的点数据

point cloud filling data augmentation 点云填充数据增强模块

可靠的背景选择处理完成后,点云场景出现了断裂。同时,场景中的实例可能非常稀疏。这些问题会显著降低网络的性能。受[28]提出的地面真值(GT)采样增强启发,我们进一步提出了一种点云填充数据增强策略来解决这些问题。对于每个保留的边界框,我们从实例库中随机选择一个边界框,并将相应的点云放置在所选边界框的中心处(如果所选边界框与断裂场景中的现有边界框不重叠)。然后,我们利用GT采样增强[28]来进一步增强当前场景。最后,我们获得了具有可信正例和可靠背景的合并点云。
通过这种设计,我们可以修复由于之前删除点而导致的密度不均匀性,同时,更多的地面真值框也减少了在每个场景中只稀疏标注了少量实例时对网络的负面影响。通过前面的处理,可能对网络造成负面影响的模糊点大部分被移除了,包括那些由我们的缺失注释实例挖掘模块缺失注释的实例。
second【28】:我们引入了一种数据增强方法。首先,我们从训练数据集中生成了一个数据库,其中包含所有地面真相及其相关的点云数据(地面真相的三维边界框内的点)的标签。然后,在训练过程中,我们从这个数据库中随机选择一些地面事实,并通过串联的方式将它们引入到当前的训练点云中。使用这种方法,我们可以大大增加每个点云的地面真实值的数量,并模拟在不同环境中存在的对象。为了避免物理上不可能出现的结果,我们在对地面真相进行采样后进行了碰撞测试,并删除了任何与其他物体碰撞的采样对象。
此外,生成了可信数据,为以迭代方式重新训练检测器提供了重要的监督信息。算法1总结了我们的SS3D。
在这里插入图片描述

Experiments

Datasets and Evaluation Metrics

我们遵循最新的方法[4, 8, 17, 18, 34, 35],在KITTI 3D和BEV目标检测基准[2]上评估我们的SS3D。这是一个广泛用于性能评估的流行数据集,包含3D目标检测的完整注释。数据集包含7481个训练样本和7518个测试样本,我们进一步将训练样本划分为3712个样本的训练子集和3769个样本的验证子集,这是一种常见的做法[16]。此外,由于对象的遮挡和截断级别,KITTI基准测试在评估中有三个难度级别:简单、中等和困难。遵循[31]中的稀疏注释数据集生成方法,我们从训练子集中随机保留每个3D场景中的一个注释对象,以生成极其稀疏的分割。与KITTI上所有对象的完整注释相比,极其稀疏的分割只需要用20%的对象进行注释。为了公平比较,我们报告了在40和11个召回位置的mAP,对于三个类别:汽车、行人和骑自行车的人,分别使用3D重叠阈值为0.7、0.5、0.5。

Implementation Details

首先,我们按照PCDet[23]中的全监督方式使用极其稀疏的分割来训练我们的检测器,并保持使用检测器的相同监督损失。在训练阶段,我们采用ADAM优化器和余弦退火学习率[9],批量大小为8,训练6个周期。我们将低分阈值τl设为0.01,用于可靠背景选择。对于基于分数的过滤和IoU引导抑制,我们将置信度分数阈值τcls和IoU阈值τIoU都设为0.9。注意,我们将迭代学习次数M设为10。在我们的全局增强中,我们以0.5的概率随机沿X轴和Y轴翻转每个场景,然后用从[0.8, 1.2]中均匀采样的因子进行缩放。最后,我们围绕Z轴旋转点云,随机角度从 −π/4,π/4范围内采样。

Comparisons with State-of-the-art Methods

在这里插入图片描述
在这里插入图片描述

我们比较所提出的方法与四种最先进的全监督方法:PointRCNN[17]、Part-A2[18]、PVRCNN[16]、Voxel-RCNN[1],在完整注释的训练分割和极其稀疏的训练分割上。这些在极其稀疏分割上训练的检测器被用作我们方法的初始检测器。不同方法的结果如表1所示。从表中可以看出,由于缺失注释实例的负面影响,这四个检测器在极其稀疏分割上训练的性能平均下降了10%以上。我们的方法显著提高了这些检测器的性能,使它们接近全监督的性能,这表明我们的方法在挖掘缺失注释实例和可靠背景方面具有良好的效果。我们SS3D预测结果的可视化如图5所示。为了更好地查看结果,我们将3D点云的预测投影到相应的彩色图像上。从这个图中我们可以看到,所提出的方法具有高质量的预测结果。
在这里插入图片描述

与半监督方法的比较:我们将所提出的方法与基于先进检测器PV-RCNN[16]的半监督方法3DIoUMatch[24]进行比较。为了进行公平比较,我们也采用PV-RCNN作为检测器,并保持所有方法训练时注释对象的数量相同。在KITTI训练分割中,共有3712个场景,这些场景包含17289个汽车、行人和骑自行车的对象。对于半监督方法,1%标记的数据意味着37(3712×1%)个场景,其中包括平均172(17289×1%)个用于训练的标记对象。因此,对于我们极其稀疏分割中的1%标记数据,我们随机选择包含172个标记对象的172个场景进行训练。我们还测试了两种方法在2%标记训练数据的情况下的性能。不同标记数据比例的结果可以从表2中看到,这表明我们的SS3D在所有三个类别和三个难度级别下显著优于当前最先进的3DIoUMatch。与3DIoUMatch相比,我们网络的更大优势在于,训练过程中只使用了172个场景。我们放弃了剩余的场景,而3DIoUMatch在训练分割中使用了所有3712个场景进行信息传递。
在这里插入图片描述

与弱监督方法的比较:在弱监督方法中,WS3D[10]使用了500个带有中心点击标签的场景和534个精确注释的实例来训练网络。由于标准检测器不适用于中心点击标签,我们只使用相同的534个精确注释实例来训练我们提出的SS3D。表3显示了比较结果。显然,我们的SS3D在所有难度级别上都取得了最高结果,与WS3D相比有了大幅度的提升,同时标记工作量更少。

Ablation Study

在这里插入图片描述

在本节中,我们进行了一系列消融研究,以分析SS3D中所提出的模块的效果。遵循一般原则,所有模型都在KITTI极其稀疏分割上进行训练,并在验证分割上进行评估。我们以Voxel-RCNN[1]作为检测器来进行消融研究,因为其训练速度快,我们使用其他检测器的方法类似。表4总结了我们的IoU引导抑制(IoU-GS)、基于分数的过滤(Score-BF)、可靠背景挖掘模块(RBMM)和点云填充数据增强(PCFD)策略的消融结果。所有结果都是在11个召回点上报告的。

可靠背景挖掘模块的效果:表4的第1行中,我们移除了所有模块,因此它代表了在极其稀疏分割上训练的标准Voxel-RCNN检测器。在第2行中,我们添加了RBMM,并用GT采样[28]替换了PCFD。此外,实例库仅包含稀疏注释的实例,而没有更新。我们的可靠背景挖掘模块显著提高了所有三个难度级别的性能。这种大幅度的改进表明,挖掘可靠的背景有助于更好地消除缺失注释实例引起的负面监督。

点云填充数据增强策略的效果:在表4的第3行中,通过结合RBMM和PCFD,我们的SS3D进一步提高了性能。这表明我们的PCFD通过修复由于之前的点云移除操作而导致的原始点云的结构信息,优于GT采样数据增强。

缺失注释实例挖掘模块的效果:如表4的第4和第5行所示,无论是单独使用IoU-GS还是Score-BF进行伪实例过滤,与仅使用可靠背景挖掘模块相比,都有一定的改进,表明更多的正例可以促进更好的模型优化。此外,通过结合IoU-GS和Score-BF获得高质量的伪实例,我们的SS3D将简单、中等和困难的性能分别提高了约1.88、6.16和2.51个百分点,如第3和第6行所示。这验证了联合过滤策略的有效性,并显示了网络中高质量伪实例的重要性。

Quality Analysis

在这里插入图片描述

在本节中,我们探讨了我们的SS3D如何在极其稀疏分割上进行训练,并进一步分析了实例库中伪实例的质量。图6中的曲线显示,在训练过程中,生成的伪实例对缺失注释实例的覆盖率逐渐增加。这里,预设阈值下的覆盖率意味着具有IoU大于阈值的伪标签与缺失注释实例配对的百分比[24]。从图6中我们可以看到,一开始,由于严格的过滤机制,伪实例的覆盖率相对较低。随着训练的进行,改进的检测器导致过滤的通过率更高,因此伪实例的覆盖率更高,这反过来又推动了SS3D的发展。在训练结束时,IoU@0.7的覆盖率可以达到0.75,这意味着我们的网络有效地挖掘了75%的未标记实例。

Limitation

原则上,全监督方法的性能是我们SS3D的上限。然而,在表1中,我们的方法甚至在某些情况下超过了全监督方法,这可能是因为我们的方法可以挖掘原始数据集中的一些缺失注释实例,而这些缺失实例可能会对全监督方法的训练产生负面影响。未来的工作计划验证上述假设。

Conclusion

在本文中,我们提出了一种名为SS3D的新颖方法,用于从稀疏注释的点云中迭代学习3D目标检测器。通过结合我们的缺失注释实例挖掘模块和可靠背景挖掘模块,我们大大确保了每个场景在迭代训练检测器时都具有置信的监督信息,从而消除了稀疏注释策略中缺失注释实例的负面影响。此外,我们的SS3D是一种通用方法,可以应用于学习任何先进的检测器。广泛的实验验证了我们提出的方法的有效性,仅需20%的注释,我们的网络就取得了令人印象深刻的结果,接近于使用完全注释数据集训练的检测器。此外,我们的方法在KITTI上大幅超越了当前的半监督和弱监督方法。

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

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

相关文章

leetcode-链表中间节点

876. 链表的中间结点 题目 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间…

基于STM32的RFID智能门锁系统

本文针对RFID技术,着重研究了基于单片机的智能门锁系统设计。首先,通过链接4*4按键模块与主控STM32,实现了多种模式,包括刷卡开锁、卡号权限管理、密码开锁、修改密码、显示实时时间等功能。其次,采用RC522模块与主控S…

GitHub登录收不到邮箱验证码

由于长时间没有登录GitHub,浏览器可能清除了相应的cookie信息,所以需要对应绑定邮箱进行验证,但因为邮箱长时间没有收到验证码,所以给到以下一种可能解决的方法: 需要输入验证码进行验证 我们可以打开QQ邮箱&#xff0…

Wpf 使用 Prism 实战开发Day19

待办事项功能页面完善以及优化 概要: 由于待办事项功能页,数据已正常渲染出来了。但页面新增,查询,修改,删除等功能还未实现。本章节来实现页面的请求后台实现CURD(增删改查) 一.待办事项查询…

UE5不打包启用像素流 ubuntu22.04

首先查找引擎中像素流的位置: zkzk-ubuntu2023:/media/zk/Data/Linux_Unreal_Engine_5.3.2$ sudo find ./ -name get_ps_servers.sh [sudo] zk 的密码: ./Engine/Plugins/Media/PixelStreaming/Resources/WebServers/get_ps_servers.sh然后在指定路径中…

分布式锁-redission锁的MutiLock原理

5.5 分布式锁-redission锁的MutiLock原理 为了提高redis的可用性,我们会搭建集群或者主从,现在以主从为例 此时我们去写命令,写在主机上, 主机会将数据同步给从机,但是假设在主机还没有来得及把数据写入到从机去的时…

Java是如何实现跨平台的

Java语言的跨平台能力是其最显著的特性之一,它允许开发者编写一次代码,然后在不同的操作系统上无需修改即可运行。。 Java通过字节码和Java虚拟机(JVM)实现跨平台 (图源网络) 主要依赖于以下几个关键组件: 字节码&am…

Visual studio项目默认“Header Files”、“Source Files”等过滤器消失后展开的方法。

使用Visual Studio进行项目开发创建默认工程的解决方案资源管理器里查看项目文件,所有的文件是按照其所属的类型自动归类,例如:.h头文件自动划归到Header Files文件夹,.cpp文件自动划归到Source Files文件夹下,如下图所…

小米SU7的防晒秘籍

在春日渐暖的日子里,夏天悄然而至。大家有没有从衣柜深处翻出夏衣和防晒装备,来迎接夏日阳光的“偏爱”呢? 深知防晒烦恼的小米,在小米SU7的设计中也充分考虑了汽车防晒这一痛点,采用前风挡三层镀银、天幕双层镀银、四…

vite - WebAssembly入门

1. 初始化 vite 项目 1.1 安装 nvm(可选) brew update brew install nvm在 ~/.zshrc 添加 export NVM_DIR~/.nvm source $(brew --prefix nvm)/nvm.sh执行如下命令 source ~/.zshrc1.2 安装 node nvm install nodenvm ls -> …

非线性特征曲线线性化插补器(CODESYS 完整ST代码)

1、如何利用博途PLC和信捷PLC实现非线性特征曲线的线性化可以参考下面文章链接: 非线性特征曲线线性化(插补功能块SCL源代码+C代码)_scl直线插补程序-CSDN博客文章浏览阅读382次。信捷PLC压力闭环控制应用(C语言完整PD、PID源代码)_RXXW_Dor的博客-CSDN博客闭环控制的系列文章…

【QT+QGIS跨平台编译】181:【QGIS+Qt跨平台编译】—【错误处理:找不到_DEBUGA】

点击查看专栏目录 文章目录 一、找不到_DEBUGA二、原因分析三、错误处理 一、找不到_DEBUGA 报错信息: 二、原因分析 采用了非UNICODE: DEFINES - UNICODE没法识别 _DEBUGA 但可以识别 _DEBUG 三、错误处理 修改 _DEBUGA 为 _DEBUG

轻量级的Spring Cloud Gateway实践,实现api和websocket转发

当国内大部分都是粘贴复制一些重型框架时,有没有人会想到,我们自己做一个小项目,几个小的Spring boot的项目时,我们是否还需要按部就班的用我们公司中用到的Nacos,这种冗余且调配复杂的组件呢? 不是本人说…

学习STM32第十四天

软件SPI读写W25Q64 一、简介 对W25Q64模块进行读写操作时,输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入。时钟、主机输出和片选都是输出引脚,主机输入是输入引脚。SPI协议是通过命令和数据进行通信,在硬件中使用移位寄…

【练习】二分查找

1、704 &#xff08;1&#xff09;题目描述 &#xff08;2&#xff09;代码实现 package com.hh.practice.leetcode.array.demo_02;public class BinarySearch_704 {public int search(int[] nums, int target) {int i 0,j nums.length -1;while (i < j){int mid (ij) &…

ansible-tower连接git实现简单执行playbook

前提&#xff1a;安装好ansible-tower和git&#xff0c;其中git存放ansible得剧本 其中git中得内容为&#xff1a; --- - name: yjxtesthosts: yinremote_user: rootgather_facts: noroles:- testroles/test/tasks/main.yml #文件内容 --- #- name: Perform Test Task # tas…

【论文笔记】PointMamba: A Simple State Space Model for Point Cloud Analysis

原文链接&#xff1a;https://arxiv.org/abs/2402.10739 1. 引言 基于Transformer的点云分析方法有二次时空复杂度&#xff0c;一些方法通过限制感受野降低计算。这引出了一个问题&#xff1a;如何设计方法实现线性复杂度并有全局感受野。 状态空间模型&#xff08;SSM&…

Win 运维 | Windows Server 系统事件日志浅析与日志审计实践

[ 重剑无锋&#xff0c;大巧不工。] 大家好&#xff0c;我是【WeiyiGeek/唯一极客】一个正在向全栈工程师(SecDevOps)前进的技术爱好者 作者微信&#xff1a;WeiyiGeeker 公众号/知识星球&#xff1a;全栈工程师修炼指南 主页博客: 【 https://weiyigeek.top 】- 为者常成&…

【vue】购物车案例

change"fun"&#xff1a;元素值发生改变时&#xff0c;会触发事件fun <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale…

怎么把相机储存卡里的照片导出来?介绍两种方法

随着摄影技术的不断发展和普及&#xff0c;相机已成为我们记录生活、捕捉美好瞬间的设备。然而&#xff0c;对于许多摄影爱好者来说&#xff0c;如何将相机储存卡里的照片安全、高效地导出到电脑或其他设备中&#xff0c;却成为了一个令人头疼的问题。本文将为您详细介绍从相机…