首页 > 其他分享 >Self-supervised Learning for Pre-Training 3D Point Clouds: A Survey

Self-supervised Learning for Pre-Training 3D Point Clouds: A Survey

时间:2024-07-18 19:25:56浏览次数:15  
标签:Pre Training Clouds 训练 学习 SSL 点云 方法 3D

Abstract

点云数据由于其紧凑的形式和表示复杂3D结构的灵活性而被广泛研究。点云数据准确捕获和表示复杂3D几何形状的能力使其成为广泛应用的理想选择,包括计算机视觉,机器人技术和自动驾驶,所有这些都需要了解底层空间结构。这种方法旨在从未标记的数据中学习通用和有用的点云表示,从而避免了大量手动注释的需要。在本文中,我们对使用dnn的自监督点云表示学习进行了全面的调查。我们首先介绍最近研究的动机和一般趋势。然后简要介绍了常用的数据集和评估指标。随后,我们深入研究了基于这些技术的自监督点云表示学习方法。最后,我们分享了我们对未来在预训练3D点云的自监督学习研究中可能遇到的一些挑战和潜在问题的看法。

Introduction

作者首先强调了3D点云数据的重要性。点云数据以其紧凑的形式和在表示复杂三维结构方面的灵活性而受到广泛关注。这种数据类型能够精确捕捉和表示精细的三维几何结构,使其成为计算机视觉、机器人学和自动驾驶等多个领域的理想选择。这些应用领域都需要对底层空间结构有深刻的理解。

随着三维获取技术的快速发展,3D传感器变得越来越容易获取,包括各种类型的3D扫描仪、激光雷达(LiDAR)和RGB-D相机。这些传感器与图像结合使用时,可以帮助机器感知其周围环境,从而在许多与场景理解相关的应用中发挥重要作用。

尽管深度神经网络(DNN)在理解点云数据方面取得了显著进展,但有效训练这些网络通常需要大量的、人工标注的训练数据。例如,对象检测需要3D边界框,语义分割需要逐点标注。然而,收集这些标注数据可能是一个繁琐且耗时的过程,因为它们需要克服遮挡、形状变化和视觉不一致性等挑战。

为了解决这一问题,自监督学习方法应运而生。自监督学习是一种无监督学习方法,它从数据本身生成监督信号。在自监督学习方法中,模型通过解决预训练任务来训练,而无需人工标注的数据。这种方法使模型能够学习能够泛化到下游任务的表示。预训练是一种常用的深度学习策略,它涉及在大型数据集上训练模型以学习通用特征或表示,然后将这些特征用作特定任务数据训练的起点。迁移学习是指将从一个任务、领域或数据集中获得的知识和见解转移到另一个任务的过程。

在这篇综述中,作者提出了自监督点云表示学习的最新研究趋势,并简要介绍了常用的数据集和评估指标。这篇文章的结构安排包括背景知识介绍、系统性的自监督学习(SSL)方法回顾、未来研究方向的讨论等。

Background

基本概念

3D点云:点云是一个由一系列3D向量组成的集合,每个向量代表空间中的一个点。每个点由其3D坐标和特征属性组成。坐标表示点在三维空间中的位置(x, y, z),而特征属性可能包括颜色(RGB值)、强度、法线向量等,这些属性取决于使用的3D传感器和应用需求。

自监督学习是一种无监督学习方法,其中模型在不需要人工标注数据的情况下进行训练。模型通过解决设计好的“预训练任务”来学习数据的表示,这些任务不需要标签但需要数据自身的结构来生成监督信号。

预训练是一种在大型数据集上训练模型以学习通用特征或表示的策略,这些特征或表示可以作为特定任务训练的起点。

迁移学习是将从一个任务、领域或数据集中获得的知识和见解转移到另一个任务的过程。在本文的背景下,迁移学习通过自监督学习的预训练实现,即将从无标签数据中学习到的知识转移到下游网络。

数据集

论文介绍了用于评估预训练网络在各种下游任务上性能的不同数据集。这些数据集主要包括

ShapeNet:包含大量合成对象的数据集,用于3D形状分类。

ModelNet40:一个包含40个类别的合成对象数据集,常用于对象检测和分割。

ScanObjectNN:包含真实世界对象的数据集,对象具有不同程度的遮挡和背景噪声。

ScanNet、SUN RGB-D、S3DIS:这些数据集包含室内场景的点云,通常用于对象检测和跟踪。

KITTI、SemanticKITTI、SemanticPOSS、Waymo、nuScene、ONCE:这些数据集包含室外场景的点云,用于自动驾驶相关的任务。

每个数据集都有其独特的特性,如样本数量、类别、类型(合成或真实世界)、表示(如网格、RGB-D图像、点云)以及标签(如对象/部分类别标签、边界框)。

评估指标

论文讨论了用于评估点云任务性能的各种指标,包括:

整体准确率(OA):计算所有测试实例的平均准确率,衡量模型在所有实例中的整体表现。

平均分类准确率(mAcc):考虑类别不平衡,提供对模型在不同类别中分类性能的更全面评估。

平均精度(AP):3D对象检测的标准评估指标,计算为精确率-召回曲线下的面积。

平均交并比(mIoU):在点云分割中常用,衡量预测和真实分割掩模之间的重叠。

平均精度(mAP):用于3D点云实例分割评估,计算不同召回水平下最大精确率值的平均。

Chamfer距离(CD)和地球移动者距离(EMD):常用于3D重建评估,分别计算点集之间的最小距离和将一个点云分布转换为另一个点云分布的最小成本。

OBJECT AND INDOOR SCENE-LEVEL SSL

重建基础的SSL(Reconstruction-based SSL)

重建基础的自监督学习方法通过设计重建任务来训练网络,使其能够从部分或损坏的数据中学习并重建出完整的3D点云。

基于掩码的方法(Mask-based Methods)

OcCo:Wang等人提出的方法,使用编码器-解码器架构,通过随机遮挡点云中的某些部分,然后训练网络从这些被遮挡的部分重建完整的点云。这种方法的关键在于,编码器学习到的特征可以作为下游任务的模型初始化。

MaskSurf:Zhang等人提出的方法,特别关注点云的局部几何信息。它采用简化的表面元素表示(即位置和方向),并通过Chamfer距离(CD)和位置索引法线距离(PIND)作为重建损失,预测被掩码的表面元素。

PointBERT:Yu等人引入的方法,灵感来自自然语言处理中的BERT模型。它将BERT中的掩码语言建模(MLM)策略扩展到3D点云,通过设计掩码点建模(MPM)策略,将输入点云及其离散编码集视为语言中的单词和句子。这种方法在预训练前将输入点云分割成多个局部补丁,并为每个补丁生成离散点标记,然后在预训练期间使用变换器预测随机掩码补丁的掩码输入。

McPBERT:Fu等人提出的方法,解决了Point-BERT中由于严格单选约束导致的语义不同补丁具有相同标记ID的问题。McPBERT使用基于概率分布向量的改进多选标记,避免了这个问题。

POS-BERT:Fu等人提出的单阶段预训练方法,使用动态更新的动量编码器替代Point-BERT中的权重冻结标记器,简化了训练过程,并引入了对比学习来最大化全局点云和局部点云之间的类标记一致性。

基于噪声的方法(Corruption-based Methods)

CP-Net:Xu等人提出的方法,使用权重共享的双分支结构,通过在辅助分支中添加轮廓扰动增强模块,迫使网络专注于区分下游任务的语义内容,同时保留其内容。

Shape Self-Correction:采用形状失组织策略破坏对象的某些局部形状部分,然后将损坏的形状和原始形状输入点云网络,以获取用于恢复形状的表示。

Point-DAE:Zhang等人提出的方法,探索了14种噪声类型下的去噪自动编码器,发现任务依赖性和性能之间的线性关系。

SeRP:Garg和Chaudhary提出的方法,采用点云扰动作为预训练任务,通过应用高斯噪声来校正每个补丁。

其他方法

3D Jigsaw-based SSL:Sauder和Sievers提出的方法,通过将输入点云均匀分割成体素并在随机顺序中重新排列来训练网络预测正确的标签分配。

DefRec:Achituve等人提出的方法,包括三种区域选择方法,通过使用高斯分布采样新点来实现变形,然后训练共享特征编码器来重建变形输入样本。

Multi-stage Training:Alwala等人提出的方法,通过在不同阶段的训练中使用多视图渲染的合成数据和单视图图像集来学习统一的重建模型。

挑战与机遇

重建基础的自监督学习方法在点云预训练中是一个有希望的研究方向,但生成提供更丰富数据分布和更广泛应用潜力的场景级别点云仍然是一个挑战。

对比学习基础的SSL(Contrastive-learning-based SSL)

对比学习是一种流行的自监督学习方法,通过辅助任务构建正样本和负样本对,训练模型将正样本对在嵌入空间中更接近,同时将正样本与负样本分开。

基于视角的方法(View-based Methods)

PointContrast:Xie等人提出的方法,允许网络通过对比两个变换视角中的点来学习几何变换等变性。这种方法通过设计两种损失函数来实现对比学习:HardestContrastive损失和PointInfoNCE损失。

DepthContrast:Zhang等人提出的方法,通过使用单视图深度图减少资源密集型问题,利用体素和点级别的两个特征提取器提取特征,并计算InfoNCE损失。

Contrastive Scene Contexts:Hou等人提出的方法,利用点级对应关系和场景中的空间上下文进行对比学习,通过在空间单元内采样负样本来引入空间信息。

基于变换器的方法(Transformer-based Methods)

Mask Point Cloud Transformer (MPCT):一种常用的方法,随机掩码输入点并使用变换器的能力来恢复它们。ContrastMPCT是一个基于对比学习的自监督预训练框架,计算MPCT重建的点云与原始点云之间的对比损失。

POS-BERT:在Point-BERT的基础上引入对比学习,通过不同裁剪比例获得的全局和局部点云之间的类标记一致性来学习高级语义表示。

SimSiam基础方法(SimSiam-based Methods)

ConClu:Mei等人提出的方法,减少对比学习中对负样本的依赖,采用SimSiam基础架构。这种方法不依赖于特定的神经网络架构,可以作为一般的特征提取器。

其他方法

Point Cloud Object Co-segmentation:Yang等人提出的方法,将点云对象共分割训练问题视为对象点采样问题,并设计结合互注意力和对比学习的预训练框架。

空间基础的SSL(Spatial-based SSL)

空间基础的SSL方法利用点云中丰富的几何信息来开发预训练任务。通过恢复这些空间降级的点云,可以有效地预训练模型。

基于旋转的方法(Rotation-based Methods)

旋转操作是点云数据自监督预训练中最常见的预任务之一。这些方法通过随机旋转点云来生成新的视图,然后训练模型从这些视图中恢复原始的点云。

基于聚类的方法(Cluster-based Methods)

聚类基础的SSL方法同时捕获点云的局部几何结构和全局空间关系。例如,SL3D框架不仅解决了聚类和学习特征表示的两个耦合目标,还能够解决各种3D识别任务。

基于识别的方法(Recognition-based Methods)

识别基础的SSL方法利用点云的固有空间结构通过任务如点云分类、分割或对象识别来学习有意义的表示。这些方法旨在利用点云的空间信息设计基于识别的预任务,以提高学习到的表示的质量。

基于空间映射的方法(Spatial Mapping-based Methods)

这些方法将不规则的3D点云转换为更易于传统2D网络处理的规则表示。例如,Flattening-net将不规则的3D点云转换为完整的2D表示,称为点几何图像,允许直接应用传统的2D网络。

使用空间信息的SSL方法可以学习点云的结构和特征,增强模型的泛化能力。然而,点的密度和分布可能影响点云空间信息的提取和利用,需要对输入点云数据进行预处理和标准化。此外,处理具有复杂几何形状的点云数据可能需要先进的处理方法。

基于时间的 SSL 方法

时间序列信息:点云序列类似于视频数据,包含连续的点云帧。这些序列包含丰富的时间信息,可以通过设计预训练任务来利用这些信息。

STRL 框架:Huang 等人提出的时空表示学习(STRL)框架,将 2D 的 BYOL 方法扩展到 3D 视觉,通过最小化相邻点云帧的特征表示之间的均方误差来学习。

对比学习:Chen 等人利用合成的 3D 形状在静态环境中移动来创建动态场景,并通过对比学习来学习 3D 表示,从而实现动态理解。

多模态 SSL 方法

多模态学习:通过利用不同模态(如图像、文本和点云)之间的相关性,可以增强模型对点云数据的理解。

单视图方法:2D 图像与 3D 点云的交叉模态学习,通过对比学习来统一不同格式和网络结构的特征。

多视图方法:通过结合点云的多个视图来增强学习的鲁棒性和泛化能力,提供不同角度的视图信息。

单视图方法

统一框架:Li 等人提出的框架,通过对比学习统一比较不同格式和网络结构的特征。

图像编码器:Janda 等人提出的方法,使用单次扫描的点云和对应图像进行多模态预训练,利用图像编码器作为对比损失的目标来预训练 3D 模型。

多视图方法

多模态多视图 SSL:Jing 等人提出的方法,结合 2D 图像和 3D 点云的特征学习,利用跨模态和跨视图的对应关系作为自监督信号。

I2P-MAE:Zhang 等人提出的方法,通过掩码自编码器从 2D 预训练模型学习 3D 表示,通过 2D 引导的掩码策略和 2D 语义重建策略来转移知识。

知识转移方法

点到像素提示策略:Wang 等人提出的方法,将 3D 点云转换为 2D 彩色图像,利用大规模 2D 预训练模型学习 3D 点云表示,通过点云到像素的转换策略实现知识转移。

文本辅助方法

PointCLIP:Zhang 等人提出的方法,利用 CLIP 模型预训练的大规模图像-文本对,将其泛化到 3D 领域,通过设计视图适配器来融合多视图的全局特征。

PointCLIP V2:Zhu 等人提出的方法,通过改进的投影模块和优化的提示选择策略,提高零样本任务的性能,减少生成深度图与真实图像之间的视觉差异。

OUTDOOR SCENE-LEVEL SSL

室内级别与室外级别的 SSL 的主要区别

室内级别 SSL:室内环境变化较小,点云密度较高,如房间、建筑物或其他封闭空间。专注于这些环境中的点云数据,处理相对简单。

室外级别 SSL:室外环境更复杂、动态,如街道、森林和城市景观。点云数据通常更稀疏,语义信息稀缺。室外场景级别的点云感知通常被视为开放集问题,存在各种未见过的类别,增加了任务的难度。自动驾驶系统通常依赖于LiDAR数据,这些数据稀疏且缺乏颜色信息,增加了感知模型构建的难度。

重建基础的 SSL

通过重建被掩码的点云来进行自监督预训练,类似于物体和室内场景级别的数据。室外场景点云的稀疏性增加了3D重建的难度。

体素基础方法:

VoxelMAE:使用体素掩码自编码器进行预训练,以增强自动驾驶中的3D感知。

Min 等人 [97]:采用范围感知的随机掩码策略和二进制体素分类任务,展示了掩码自编码器如何增强3D感知。

Hess 等人 [98]:预训练基于Transformer的3D对象检测骨干网络,恢复被遮挡的体素并区分自由和被遮挡的体素,提升3D对象检测性能。

鸟瞰图(BEV)基础方法:

BEV-MAE:使用BEV引导的掩码策略来指导3D编码器学习特征表示,并避免复杂的解码器设计。

可以有效地利用3D场景的几何信息,并处理无序和不规则的点云数据。需要大量的计算和存储成本,点云收集和重建过程中的噪声和缺失数据可能会干扰预训练模型的特征表示。

对比学习基础的 SSL

通过对比不同视图或区域的点云数据来学习特征表示,提高模型在室外场景中的性能和泛化能力。

视图基础方法:

GCC-3D:Liang 等人 [109] 提出了一个自监督学习框架,结合几何感知对比和聚类协调,解决了硬标签策略中固有的“类碰撞”问题。

区域基础方法:

SegContrast:通过提取类无关的片段并应用片段对比损失,学习更上下文化的语义信息,提升语义分割任务的性能。

ProposalContrast:通过对比区域提议来学习点云表示,采用球形提议而非边界框提议,更适合3D场景。

多视图方法:

Chen 等人 [111]:利用DAIR-V2X数据集构建从车辆侧和基础设施侧的视图作为对比样本。

结合其他预任务:

Chen 等人 [111]:引入了形状上下文预测任务,重建局部分布,提供更多相关信息以改善下游3D检测任务。

可以应用于自动驾驶中使用的各类传感器,如LiDAR和RGB-D数据。需要仔细调整超参数,如对比损失边距和批量大小,且可能无法完全捕捉场景的语义信息。

多模态 SSL

通过利用不同模态之间的相关性,如图像、文本和点云,来增强模型的鲁棒性和泛化能力。

单视图方法:

Li 等人 [54]:提出了一个统一框架,通过对比学习统一比较不同格式和网络结构的特征。

多视图方法:

Jing 等人 [81]:引入了多模态和多视图SSL方法,结合2D图像和3D点云的特征学习。

知识转移方法:

Wang 等人 [87]:提出了点到像素提示策略,将3D点云转换为2D彩色图像,利用大规模2D预训练模型学习3D点云表示。

文本辅助方法:

Zhang 等人 [91]:提出了PointCLIP,利用CLIP模型预训练的大规模图像-文本对,将其泛化到3D领域。

多模态数据可以提供补充信息,有助于设计更可转移的自监督预训练任务。收集大规模多模态数据集可能具有挑战性,需要多种传感器或采集设备,且对齐多模态数据到一个共同的坐标系统是必要的。

预测基础的 SSL

通过预测点云序列中的未来点云来训练模型,在自动驾驶中非常有用,因为可以利用连续的LiDAR扫描数据。

RNN基础方法:

使用多层RNN预测点云序列中的下一个点,这种方法在语义分割中表现出色,并且可以转移到其他大规模数据集。

范围图像基础方法:

Mersch 等人 [114]:提出了一种自编码器架构,使用3D卷积联合处理空间和时间信息,预测全尺度点云,而无需体素化。

结合其他预任务:

CO3框架 [111]:引入了形状上下文预测任务,重建局部分布,提供更多相关信息以改善下游3D检测任务。

预测基础的 SSL 方法适用于室外自动驾驶,因为点云帧是连续且可预测的。需要精确的运动估计和点云配准,在涉及高速和复杂运动的场景中可能具有挑战性。

流基础的 SSL

通过估计点云时间序列中每个3D点的相对运动来训练模型,对于自动驾驶中安全规划和导航至关重要。

场景流估计:

Mittal 等人 [124]:提出了一种自监督训练方法,利用无标签数据集上的两个自监督损失进行训练,包括最近邻损失和循环一致性损失。

流用于检测和分割:

Yurtsever 等人 [122]:使用学习到的场景流和运动表示来指导3D对象检测任务,利用循环一致性方法训练自监督骨干网络和场景流头部。

Song 和 Yang [136]:通过他们的自监督方法 OGC,将场景流估计引入对象分割领域,利用学习到的动态运动模式作为监督信号。

流基础的 SSL 方法可以有效捕捉点云收集的时序信息,增强运动预测和动态场景理解的性能。需要精确的运动估计和点云配准,且可能不完全捕捉场景的语义信息,限制了模型在高级别场景理解和决策任务中的能力。

DISCUSSIONS AND FUTURE DIRECTIONS

统一骨干网络设计

深度学习在自然语言处理(NLP)和2D计算机视觉领域的成功部分归功于架构的标准化,如BERT和GPT在NLP中,VGG和ResNet在2D计算机视觉中。对于3D点云,尽管近年来设计了多种3D架构,但尚未探索出类似的统一3D骨干网络。当前骨干模型之间存在显著差异,这限制了3D点云网络在可扩展设计和各种实际应用中的有效部署。

在3D视觉中,发展像BERT、GPT和ResNet一样普遍的通用骨干网络对于推进3D点云网络的发展至关重要,包括自监督点云表示学习。

高质量预训练数据集

现有的自监督预训练数据集大多是为监督学习任务收集的,数据量和多样性有限,不适合自监督点云表示学习。点云注释的耗时和劳动密集性使得这些数据集在数据量和多样性上受到严重限制。

迫切需要收集足够多样化的大规模高质量点云数据集,涵盖物体和场景级别的数据,以支持自监督学习。

标准化下游任务

下游任务的标准化对于评估自监督预训练的有效性至关重要,但目前存在一些问题:对于合成物体、真实物体分类、少样本分类和合成物体分割,虽然有统一标准,但这些任务难以泛化到其他数据集。室内级别检测和分割缺乏统一模型和框架。室外场景的下游任务更加多样化,缺乏统一的评估标准。

需要收集有助于预训练模型转移到真实场景的数据集,并为室内和室外场景开发统一的评估标准。

进一步推动场景级别任务的自监督预训练

现有研究主要集中在物体级别的点云处理上,但也有一些开创性研究探索了场景级别点云的自监督预训练。网络架构和数据集相关的挑战需要解决,同时需要降低自动驾驶场景的标注成本。

场景级别点云自监督学习作为一种新方向,在各种应用中具有巨大潜力,值得更多关注。

整合多模态数据

自监督预训练方法可以扩展到整合多模态数据,如图像、视频和音频,以提高模型的鲁棒性和准确性。尽管ULIP利用了三种模态(图像、文本和点云),但仍有可能探索一个统一框架,考虑文本、图像、深度图像、RGB-D图像、点云甚至网格。

2D预训练知识可以转移到点云理解中,如CLIP或2D变换器。此外,文本到3D生成模型也是未来有前景的工作。

整合时序信息

随着自动驾驶车辆和智能机器人提供的未标记点云序列的可用性增加,自监督预训练方法可以设计用于利用点云数据的时间信息。大多数现有的SSL工作集中在静态点云上,而点云流可以提供丰富的时间信息作为有用的监督信号。

需要更有效的预任务,从未标记的顺序点云帧中学习时间信息,并预计未来将开发此类方法。

整合更高层次的语义信息

将更高层次的语义信息整合到点云SSL中是一个潜在的研究方向。例如,语义分割和对象检测技术可以用来注释点云,这些标签可以用作预训练任务的监督信号。

作为开创性方法,基于关系点云补全中的条件补全可以产生具有更好空间关系的成对场景,这可能被用作自监督预训练方法的预任务。此外,SAM和SegGPT等方法已被提出用于生成点云注释。现有深度学习框架可以利用来从点云中提取语义信息,并用于预训练任务。这些方法可以进一步提高点云表示学习的性能,同时为下游任务提供更丰富的语义信息。

其他潜在的研究方向

跨模态知识转移:探索如何将知识从一个模态转移到另一个模态,例如从图像到点云,或从文本到点云。

多任务学习:研究如何设计自监督学习任务,使其能够同时学习多个相关任务,提高模型的泛化能力。

数据增强技术:开发新的数据增强技术,以生成更多样化和更具挑战性的点云数据,增强模型的鲁棒性。

模型解释性:提高自监督学习模型的可解释性,使其能够更好地理解和解释其决策过程。

模型鲁棒性:研究如何提高模型对噪声、缺失数据和异常值的鲁棒性,特别是在实际应用中。

CONCLUSION

应用于点云数据的自监督学习是一个新兴领域,需要解决重大挑战。现有的方法在神经网络中使用自监督,如对比学习、预测学习或多模态学习。

本文提供了基于深度神经网络的自监督学习方法的全面和最新概述。总结了现有的SSL方法,并从数据集、评估指标和性能比较方面对它们进行了统一的回顾,同时还讨论了该领域的挑战和潜在的未来方向。还提供了一种方法的比较总结,这可以使3D计算机视觉社区的研究人员受益。

标签:Pre,Training,Clouds,训练,学习,SSL,点云,方法,3D
From: https://blog.csdn.net/weixin_60335028/article/details/140531143

相关文章

  • Linux PSI--Pressure Stall Information
    Google在在Android11及之后版本的LMKD中,使用了psi作为杀进程的策略,本文简单介绍下psi。转载自使用PSI(PressureStallInformation)监控服务器资源_Linux_gameneedless_InfoQ写作社区1.概述当CPU、内存或IO设备争夺激烈的时候,系统会出现负载的延迟峰值、吞吐量下降,并可能触发......
  • Java中的大规模数据处理与MapReduce设计
    Java中的大规模数据处理与MapReduce设计大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!随着数据规模的不断增大,大规模数据处理变得越来越重要。在Java领域,MapReduce作为一种经典的数据处理模型,在处理海量数据时展现了强大的能力。本文将介绍如何在Java中......
  • [GYCTF2020]Ez_Express 1
    原型链污染,信息收集,命令执行,代码审计这个题我在做之前学了p神的教程https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html打开后可以发现是一个登录界面,之后我们先进行信息收集找到了www.zip这个文件,然后得到了源码index.jsvarexpress=req......
  • devexpress dxNavBar 用法
    unitUnit2;interfaceusesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,cxGraphics,cxControls,cxLookAndFeels,cxLookAndFeelPainters,dxNavBarGroupItems,dxNavBarCollns,......
  • Wpf和Winform使用devpress控件库导出Excel并调整报表样式
    Wpf和Winform使用devpress控件库导出Excel并调整报表样式背景客户需求经常需要出各种报表,部分客户对报表的样式有要求。包括颜色、字体、分页等等。代码使用Datagridview导出excel调整样式DevExpress.XtraGrid.Views.Grid.GridViewgdv#regionGridView属性设置//行号所......
  • java8四个函数式接口:Function, Predicate, Consumer, Supplier使用
    目录1、前言2. 四大函数式接口1.Function,>2.Predicate 3.Consumer4.Supplier1、前言Java8引入了一种新的接口特性,叫做函数式接口。这种接口只能有一个抽象方法,通常用注解@FunctionalInterface标识。函数式接口可以被隐式地转换为lambda表达式。以下是一个......
  • 题解:P10733 [NOISG2019 Prelim] Lost Array
    题解:P10733[NOISG2019Prelim]LostArray思路对于任意\(\min(X_{A_{i}},X_{B_{i}})=C_{i}\)。只要让\(X_{A_{i}}\)与\(C_{i}\)取\(\max\)值。\(X_{B_{i}}\)与\(C_{i}\)取\(\max\)值。这样可以让\(\min(X_{A_{i}},X_{B_{i}})\)绝对是\(C_{i}\)。对于为赋值......
  • 界面控件DevExpress Blazor UI v24.1 - 发布全新TreeList组件
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v24.1版本了,此版本发布了全新的TreeLi......
  • wordpress随机显示指定分类下内容的tag标签
    要在WordPress中随机显示指定分类下的内容标签,你可以使用以下方法:首先,在你的主题文件夹中找到functions.php文件。如果没有这个文件,你可以创建一个新的functions.php文件并将其上传到主题文件夹。在functions.php文件中,添加以下代码:functionget_random_tags_from_specific_c......
  • 杭州外贸网站建设 最好用wordpress模板来搭建
    防护服wordpress外贸网站模板消防服、防尘服、隔热服、防化服、防静电服、电焊服wordpress外贸网站模板。https://www.jianzhanpress.com/?p=4116工业品wordpress外贸网站模板机械及行业设备、五金工具、安全防护、包装、钢铁、纺织皮革等工业品wordpress外贸网......