首页 > 其他分享 >PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

时间:2024-08-09 17:59:26浏览次数:16  
标签:采样 Point ++ Metric PointNet 点集 特征 作者

PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

Abstract

这篇论文的摘要介绍了PointNet++,是一个用于度量空间中点集的深度层次化特征学习的神经网络。PointNet++是PointNet的扩展,它通过递归地在输入点集的嵌套划分上应用PointNet,利用度量空间距离来学习局部特征,并逐步增加上下文尺度。与原始的PointNet相比,PointNet++能够更好地捕捉局部结构,从而提高对复杂场景的泛化能力和对细粒度模式的识别能力。

PointNet++还考虑了点集采样密度不均的问题,并通过提出新颖的集合学习层来解决,这些层能够自适应地从多个尺度组合特征。实验表明,PointNet++能够高效且稳健地学习深度点集特征,并且在3D点云的挑战性基准测试中取得了显著优于现有技术的结果。

Introduction

这一部分首先强调了几何点集分析的重要性,尤其是3D扫描仪捕获的点云数据。这类数据作为集合,需要对成员的排列保持不变性,同时点集的密度在不同位置可能并不均匀,给数据处理带来了挑战。作者指出,尽管PointNet是处理点集数据的先驱,但它未能捕捉到点集在度量空间中的局部结构,限制了其对复杂场景的泛化能力和对细节的识别。

为了克服这些限制,作者提出了PointNet++,是一个层次化的神经网络,通过在输入点集的嵌套划分上递归地应用PointNet,来学习不同上下文尺度的局部特征。这种层次化的特征学习方法类似于卷积神经网络在规则网格数据上逐步捕获更大尺度的特征,对于提高模型对未见情况的泛化能力比较重要。

一个可视化的结构图左边是RGB图像右边是点云图像

PointNet++的设计需要解决两个关键问题:如何生成点集的划分,以及如何通过局部特征学习器抽象点集或局部特征。作者选择了PointNet作为局部特征学习器的基础,因为它已被证明能够有效处理无序点集并提取语义特征。为了生成点集的重叠分区,PointNet++采用了最远点采样算法来选择质心,这种方法比固定步长的体积CNN扫描更有效。

选择合适的局部邻域球尺度是一个复杂的问题,因为输入点集的密度可能在不同区域变化很大。PointNet++通过利用多个尺度的邻域来实现鲁棒性和细节捕获,并通过随机输入丢弃在训练过程中自适应地加权不同尺度的特征,从而提高模型对不同密度输入数据的适应性。

最后,作者提到,PointNet++能够高效且稳健地处理点集,并且在3D点云的挑战性基准测试中取得了显著优于现有技术的性能,证明了其设计的有效性和优越性。

Problem Statement

在这一部分,作者提出了研究的核心问题,即如何在点集数据中学习集合函数,这些数据在欧几里得空间中具有不均匀的密度分布。作者定义了一个离散度量空间X=(M,d),其中 M是空间中的点集,而d是基于欧几里得距离的度量。作者指出,点集的密度在不同区域可能变化很大,对学习算法提出了挑战,因为从密集采样区域学习到的特征可能无法泛化到稀疏采样的区域。

为了解决这个问题,作者的目标是学习一种集合函数f,它可以接受点集X作为输入,并产生关于X的语义信息。这种函数可以是分类函数,为整个点集分配一个标签,或者是分割函数,为点集中的每个点分配一个标签。作者强调了层次化特征学习的重要性,它允许模型在不同层次上捕获不同尺度的特征,从而更好地理解和处理点集数据。

PointNet++的设计目标是创建一个能够适应不同采样密度并有效捕捉局部模式的神经网络架构。要求网络能够处理点集的嵌套划分,并在每个局部区域内提取特征,同时能够将这些局部特征有效地整合到更高层次的表示中。作者提出,为了实现这一目标,PointNet++需要一种能够智能地结合多尺度信息的架构,以适应局部点密度的变化。这种设计不仅能够提高模型对不同密度区域的鲁棒性,还能够增强对细节的捕捉能力。

Method

这一章节有三个部分,首先回顾PointNet(第3.1节),然后介绍具有分层结构的PointNet的基本扩展(第3.2节)。最后,提出了PointNet++,即使在非均匀采样的点集中也能够鲁棒地学习特征(第3.3节)。

Review of PointNet

这一部分作者回顾了PointNet模型,是PointNet++架构的基础。PointNet是一种用于处理无序点集的深度学习模型,它能够将点集映射到一个全局特征向量,从而用于分类和分割任务。

首先,作者介绍了PointNet的核心思想:给定一组无序的点集{x1,x2,...,xn},其中每个点xiRd,PointNet定义了一个集合函数 f:XR,该函数将点集映射到一个向量。这个映射是通过一个多层感知机(MLP)网络h实现的,它可以解释为每个点的空间编码。具体来说,集合函数f可以表示为所有h响应的最大值的函数,即:f(x1,x2,...,xn)=maxi=1,...,n{h(xi)}。这种设计使得集合函数f对输入点的排列顺序不变,并且能够近似任何连续的集合函数。

接着,作者指出尽管PointNet在一些基准测试中取得了令人印象深刻的性能,但它存在一个主要的局限性:它缺乏捕获不同尺度上的局部上下文的能力。这限制了PointNet对局部结构的利用,而在卷积神经网络(CNN)中,这种局部结构的利用已被证明对成功至关重要。

为了解决这个问题,作者提出了一个层次化的点集特征学习框架,通过构建点的层次化分组并逐步抽象出越来越大的局部区域。这种层次化结构由多个集合抽象层组成,每一层都包括采样层、分组层和PointNet层。采样层负责从输入点中选择一组点作为局部区域的中心;分组层根据这些中心点构建局部区域集合;PointNet层则使用一个小型的PointNet来编码局部区域模式到特征向量中。

最后,作者介绍了集合抽象层的输出,它将输入的N×(d+C)矩阵(代表N个点的d维坐标和C维特征)转换为 N′×(d+C′)N矩阵,其中N′是子采样点的数量,C′是新的特征向量维度,这些特征向量总结了局部上下文信息。

Hierarchical Point Set Feature Learning

这一小节作者详细介绍了如何通过层次化结构扩展PointNet,以捕获点集数据的多尺度局部特征。

首先,作者指出虽然PointNet通过单一的最大池化操作来聚合整个点集,但新架构通过构建点的层次化分组,并逐步抽象出越来越大的局部区域,来解决PointNet在捕获局部上下文方面的局限性。

层次化结构由多个集合抽象层组成,每层都包括采样层分组层PointNet层

以二维欧几里德空间中的点为例,说明了我们的层次特征学习体系结构及其在集合分割和分类中的应用。

采样层(Sampling Layer):在这一层,输入是一组点 {x1,x2,...,xn},通过迭代的最远点采样(Farthest Point Sampling, FPS)算法选择一组点 {xi1,xi2,...,xim}作为局部区域的中心。这种采样方法相比随机采样能更好地覆盖整个点集,并且与CNN中的数据无关扫描策略不同,这种采样策略是根据数据分布生成的,因此更具数据依赖性。

分组层(Grouping Layer):输入是点集和一组中心点的坐标。这一层的输出是按局部区域分组的点集,每个局部区域由中心点周围的点组成。与传统CNN中根据像素的数组索引定义的局部区域不同,点集的局部区域是通过度量距离定义的。这一层使用球查询(Ball Query)来找到查询点的邻域内所有点,保证了局部区域的固定尺度,从而使得局部区域特征在空间上更具泛化性。

PointNet层(PointNet Layer):在这一层,输入是局部区域的点集,输出是每个局部区域的中心点及其邻域的编码特征。首先将局部区域内点的坐标转换为相对于中心点的局部坐标,然后使用PointNet作为基本构建块来捕获局部区域内点与点之间的关系。

作者进一步解释了这种层次化学习架构如何通过不同层次的抽象来捕获局部特征,并逐步构建对整个点集的理解。这种方法允许网络在较低层次上捕获细粒度的局部模式,并在较高层次上抽象出更广泛的上下文信息。

这种层次化的特征学习方法是对传统PointNet的重要补充,它使得网络能够更好地泛化到新的、未见过的数据上。通过这种层次化的方法,PointNet++能够更有效地学习和利用点集数据中的复杂结构。

Robust Feature Learning under Non-Uniform Sampling Density

这一小节作者讨论了在非均匀采样密度下进行鲁棒特征学习的问题,并提出了PointNet++的解决方案。

首先,作者指出实际中点集数据常常具有非均匀的密度,这种非均匀性给点集特征学习带来了挑战。在密集采样的区域学习到的特征可能无法泛化到稀疏采样的区域。为了解决这个问题,理想的方法是在密集采样的区域尽可能细致地检查点集以捕获最微小的细节,而在低密度区域则寻找更大尺度的模式

接着,作者提出了两种密度自适应的PointNet层,这些层能够在输入采样密度变化时从不同尺度的区域智能地组合特征。具体来说,这些层在每个抽象层次提取多个尺度的局部模式,并根据局部点密度智能地组合它们。

MSG和MRG的方法

多尺度分组(Multi-scale Grouping, MSG)是一种简单但有效的方法,通过应用不同尺度的分组后跟相应的PointNets来提取每个尺度的特征。不同尺度的特征被连接形成一个多尺度特征。在训练过程中,通过随机输入丢弃(Random Input Dropout)来训练网络,以学习优化的多尺度特征组合策略。

多分辨率分组(Multi-resolution Grouping, MRG)与MSG相比,这种方法避免了在最低层次上对每个中心点运行大规模邻域的PointNet,从而节省了计算成本。在MRG中,某个层次的区域特征是通过对下一层每个子区域的特征进行汇总得到的向量与直接处理所有原始点得到的向量的连接。

当局部区域的密度较低时,第一个向量可能不如第二个向量可靠,因为计算第一个向量时的子区域包含的点更稀疏,更容易受到采样不足的影响。在这种情况下,第二个向量应该被赋予更高的权重。相反,当局部区域的密度较高时,第一个向量提供了更精细的细节信息。

作者还讨论了如何在集合分割任务中传播点特征,以便为原始点集的所有点获得点特征。这通过基于距离的插值和跨层次的跳跃连接来实现,其中插值使用了基于k最近邻的逆距离加权平均。

Point Feature Propagation for Set Segmentation

作者详细阐述了如何在点集分割任务中处理特征传播,以便为原始点集中的每个点获取特征表示。

首先,作者指出在执行集合抽象层操作时,原始点集会被子采样,即选择一部分点作为中心点,用于提取局部特征。然而,在点集分割任务,如语义点标记中,我们需要为所有原始点提供特征。直接的方法是,在所有集合抽象层中都选择所有点作为中心点,但这会导致计算成本非常高。

为了解决这个问题,作者提出了一种基于距离的插值和跨层跳跃连接的分层传播策略。具体来说,在特征传播层,将从子采样点的特征传播到原始点集中的点。这是通过在原始点集坐标上插值子采样点的特征值f来实现的。作者选择了基于k最近邻的逆距离加权平均作为插值方法,其中权重wi(x)

由下式给出:(这里建议看一下原论文)

wi(x)=1/dist(x,xi)p

其中p是一个参数,默认情况下使用2,k是最近邻的数目,默认为3。插值后的特征在原始点集上与跳跃连接的特征进行拼接,然后通过一个 "单元PointNet"(类似于CNN中的一维卷积)进行处理。这个过程通过一些共享的全连接层和ReLU激活函数来更新每个点的特征向量。这个过程会重复进行,直到将特征传播到原始点集的所有点。

作者还提到,这种特征传播方法不仅能够保留局部特征,还能够通过跳跃连接捕获更高层次的语义信息。这种方法在点集分割任务中特别有用,因为它允许网络为每个点生成一个综合了多尺度信息的特征表示。

最后,作者强调了这种方法在计算效率和特征表示方面的优势,因为它避免了在所有层次上对所有点进行重复的中心点采样,同时仍然能够为每个点生成丰富和鲁棒的特征表示。这种特征传播策略是PointNet++架构的一个重要组成部分,它使得网络能够有效地处理点集分割任务,并且提高了对不同尺度结构的捕捉能力。

Experiments

首先,作者列出了用于评估的四个数据集,包括2D对象(MNIST)、3D对象(ModelNet40 刚性对象和SHREC15 非刚性对象)以及真实的3D场景(ScanNet)。对于对象分类,使用准确率作为评估指标;对于语义场景标记,使用平均体素分类准确率作为评估指标。

接着,作者介绍了每个数据集的实验设置:

MNIST:包含60,000个训练样本和10,000个测试样本的手写数字图像。

ModelNet40:包含40个类别的CAD模型,官方分为9,843个形状用于训练,2,468个用于测试。

SHREC15:包含50个类别的1200个形状,每个类别有24个形状,使用五折交叉验证来获得分类准确率。

ScanNet:包含1513个扫描和重建的室内场景,按照[5]中的实验设置,使用1201个场景进行训练,312个用于测试。

作者还提到了实验中使用的方法,包括多层感知器、LeNet5、Network in Network等传统CNN架构,以及PointNet的原始版本和改进版本。这些方法作为baseline,用于与PointNet++的性能进行比较。

Point Set Classification in Euclidean Metric Space

这一小节作者详细描述了PointNet++在欧几里得度量空间中对点集进行分类的实验设置和结果。

首先,作者解释了实验的目的是评估PointNet++在分类任务上的性能,特别是针对从2D(MNIST)和3D(ModelNet40)欧几里得空间中采样的点云数据。对于MNIST数据集,作者将手写数字图像转换为2D点云,包含了数字像素位置;而对于ModelNet40数据集,3D点云是从网格表面采样得到的。实验中,作者使用了不同数量的点进行实验,并在必要时使用额外的点特征,例如面法线,以提高性能。

接着,作者描述了实验中使用的网络架构,一个三层的层次化网络,以及三个全连接层。所有点集数据都被标准化为均值为零,且在单位球内。作者强调了PointNet++的层次化学习架构与非层次化的PointNet相比,在MNIST和ModelNet40数据集上都取得了显著更好的性能。具体来说,在MNIST数据集上,PointNet++相比于原始的PointNet版本,错误率大幅降低;在ModelNet40数据集上,PointNet++同样展现出了优越的分类能力。

作者还讨论了PointNet++在处理采样密度变化时的鲁棒性。通过在测试时随机丢弃点云中的点,作者验证了网络对于非均匀和稀疏数据的鲁棒性。实验结果显示,使用多尺度分组随机输入丢弃训练(MSG+DP)的PointNet++在不同采样密度下都保持了很好的性能,即使在点数从1024减少到256时,性能下降也非常小。

此外,作者还展示了PointNet++在不同采样密度下的分类准确率,证明了其在处理非均匀采样密度数据时的有效性。通过这些实验,作者证明了PointNet++不仅在性能上超越了现有的最先进技术,同时也展示了其在不同条件下的鲁棒性和适应性。

Point Set Segmentation for Semantic Scene Labeling

这一小节作者探讨了PointNet++在语义场景标记任务上的应用,即将室内扫描点云分割成不同的语义对象类别。

首先作者指出为了验证PointNet++处理大规模点云数据的能力,他们在ScanNet数据集上进行了实验。这个数据集包含了1513个扫描和重建的室内场景,作者遵循了之前研究的实验设置,使用1201个场景进行训练,312个场景进行测试。

接着,作者描述了实验的目标是预测室内扫描中每个点的语义对象标签。为了与使用体素化扫描的全卷积神经网络方法进行公平比较,作者在所有实验中去除了RGB信息,并将点云标签预测转换为体素标签,按照每体素的分类准确率进行评估。

作者展示了PointNet++与其他baseline方法的性能比较,包括3DCNN和PointNet。结果显示,PointNet++在语义场景标记任务上大幅超越了所有baseline方法。与基于体素化扫描的学习方法相比,PointNet++直接在点云上进行学习,避免了额外的量化误差,并通过数据依赖采样允许更有效的学习。与原始的PointNet相比,PointNet++引入了层次化特征学习,能够捕获不同尺度的几何特征,对于理解多个层次的场景并标记不同大小的对象至关重要。

此外,作者还讨论了PointNet++在处理非均匀采样密度时的鲁棒性。为了测试训练好的模型在非均匀采样密度扫描上的表现,作者合成了类似于真实扫描的虚拟Scannet场景,并在这些数据上评估了PointNet++。实验结果表明,使用单尺度分组(SSG)的PointNet++在采样密度变化时性能下降较大,而采用多尺度分组和随机输入丢弃训练(MSG+DP)的PointNet++则在性能上受到的影响较小,并且在比较的方法中取得了最佳准确率。证明了PointNet++的密度自适应层设计的有效性。

最后,作者通过可视化的方式展示了PointNet++在Scannet数据集上的标记结果。结果显示,原始的PointNet能够正确捕获房间的整体布局,但在识别房间内的家具等对象方面表现不佳。相比之下,PointNet++在除了房间布局之外的家具分割上表现得更好。

Point Set Classification in Non-Euclidean Metric Space

这一部分是关于PointNet++在非欧几里得度量空间中的点集分类任务上的应用,涉及到对非刚性形状的分类。

首先,作者指出在非刚性形状分类中,一个好的分类器应该能够正确地将不同姿态下的形状分类到同一类别,即使它们在空间中的位置和方向有所不同。这要求分类器能够理解形状的内在结构,而不仅仅是它们在空间中的欧几里得距离。

接着,作者描述了如何将PointNet++应用于SHREC15数据集,是一个包含50个类别的1200个形状的数据集,这些形状是嵌入在3D空间中的2D表面。这些表面的测地线距离自然地诱导了一个度量空间,作者通过实验展示了在这种度量空间中采用PointNet++是捕捉点集内在结构的有效方法。

作者首先为SHREC15数据集中的每个形状构建了由成对测地线距离诱导的度量空间,并遵循先前的研究获取了一个模仿测地线距离的嵌入度量。然后,他们在这个度量空间中提取了包括WKS、HKS和多尺度高斯曲率在内的内在点特征,并使用这些特征作为输入。

在输入特征的选择上,作者比较了使用XYZ坐标作为点特征、使用欧几里得空间R3作为度量空间,以及使用非欧几里得度量空间和内在特征的方法。实验结果表明,采用非欧几里得度量空间和内在特征的方法在所有设置中都取得了最佳性能,显著优于之前使用测地线矩作为形状特征的方法。

此外,作者还讨论了内在特征对于非刚性形状分类的重要性。使用XYZ坐标作为特征的方法由于无法揭示内在结构,并且容易受到姿态变化的影响,因此性能不佳。而使用测地线邻域的方法则比使用欧几里得邻域更优,因为后者可能会包括表面上距离较远的点,这种邻域在形状发生非刚性变形时可能会发生剧烈变化,从而增加了学习的有效性难度。

Feature Visualization

首先,作者提到为了理解PointNet++如何捕捉点云数据的局部结构,他们对网络第一层的卷积核学习到的特征进行了可视化。这些卷积核可以响应特定的局部点云模式,例如平面、线和角落等结构。

接着,作者描述了可视化过程。他们创建了一个空间中的体素网格,并聚合了那些在网格单元中激活特定神经元最强烈的局部点集。选择了激活最高的100个例子,并将这些网格单元中的点集转换回3D点云,以表示神经元能够识别的模式。通过这种方式,作者能够直观地展示网络如何学习和识别点云中的不同局部几何结构。

然后,作者展示了可视化的结果。由于训练模型使用的是ModelNet40数据集,该数据集主要由家具组成,因此在可视化结果中可以看到各种家具相关的局部结构,如平面、双层平面、线条和角落等。这些可视化的模式表明,PointNet++能够学习到与3D形状分类和分割任务相关的丰富局部特征。

此外,作者还提到了这些特征的实用性。通过可视化,可以直观地理解网络是如何通过层次化的特征学习来理解和处理点云数据的。

最后,作者通过这些可视化结果强调了PointNet++在自动学习点云数据中有用的局部模式方面的能力,为进一步分析和理解网络行为提供了一种直观的方法。

Related Work

这一章节作者回顾了与PointNet++相关的研究工作,并对现有文献进行了梳理和分析。

首先,作者指出层次化特征学习的概念在多种学习模型中都非常成功,尤其是卷积神经网络(CNN),它在图像识别等领域取得了显著的成就。然而,传统的卷积操作并不适用于无序点集和具有度量距离的数据,这是PointNet++所关注和解决的问题。

接着,作者提到了一些近期的研究工作,这些工作尝试将深度学习应用于无序集合,但它们忽略了点集的底层度量距离。由于没有考虑局部结构,这些方法对全局集合变换较为敏感,无法有效捕捉点集的局部上下文信息。

作者强调,PointNet++与这些工作不同,它明确地考虑了度量空间中的点集,并在设计中利用了底层的距离度量。使得PointNet++能够更好地处理采样自度量空间的点云数据,并且能够捕获局部结构特征。

此外,作者还讨论了在非均匀采样密度下进行点集特征提取的挑战。指出,先前的研究已经提出了多种方法来选择适当的点特征尺度,这些方法涉及几何处理、摄影测量和遥感等领域。与这些工作相比,PointNet++通过端到端的方式学习提取点特征,并平衡不同尺度的特征。

作者还提到了3D度量空间中除了点集之外的其他几种流行的深度学习表示方法,包括体素网格和几何图。然而,这些工作中并没有明确考虑非均匀采样密度的问题。

最后,作者总结了PointNet++的主要贡献,并指出未来的研究方向,包括如何加速网络的推理速度,特别是对于多尺度分组(MSG)和多分辨率分组(MRG)层,以及探索在更高维度度量空间中的应用。

Conclusion

在这项工作中,作者提出了PointNet++,是一个强大的神经网络架构,用于处理在度量空间中采样的点集。PointNet++递归地在输入点集的嵌套划分上起作用,并且在学习关于距离度量的分层特征方面是有效的。

为了解决非均匀点采样问题,作者提出了两种新颖的集合抽象层,根据局部点密度对多尺度信息进行智能聚合。这些贡献能够在具有挑战性的3D点云基准上实现最先进的性能。

在未来,如何通过在每个局部区域共享更多的计算来加快所提出的网络的推理速度,特别是MSG和MRG层,是值得思考的问题。同样有趣的是,在高维度量空间中,基于CNN的方法在计算上是不可行的,而作者的方法可以很好地扩展。

标签:采样,Point,++,Metric,PointNet,点集,特征,作者
From: https://blog.csdn.net/weixin_60335028/article/details/141067879

相关文章

  • PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
    Abstract通常情况下研究人员会把点云数据转换为规则的3D体素网格或图像集合。这导致数据不必要的庞大,所以本文引入了一种新型的神经网络,能很好的尊重点云的排列不变性,名称是pointnet,并且能够应用于分类、分割、场景解析等下游任务。同时,网络的架构简单而且非常的高效。Intro......
  • Visual C++ 官方版下载及安装教程必装(微软常用运行库合集|DLL报错必装)
    前言MicrosoftVisualC++Redistributable(简称MSVC,VB/VC,系统运行库)是Windows操作系统应用程序的基础类型库组件。此版VisualC++运行库组件合集(微软常用运行库合集)由国内封装爱好者@Dreamcast打包而成,整合VisualC++组件安装包运行库所有版本,提供图形安装界面,可自选更新V......
  • 《信息学奥赛一本通编程启蒙》3031-3050(Scratch、C、C++、python)
    3031:练7.3买图书(C、C++、python)3031:练7.3买图书(C、C++、python)-CSDN博客3032:练7.4梯形面积(C、C++、python)3032:练7.4梯形面积(C、C++、python)-CSDN博客3033:【例8.1】人民币支付(Scratch、C、C++、python)3033:【例8.1】人民币支付(Scratch、C、C++、python)-CSDN博客3......
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【2.3】RK3588上使用C++启用多线程推理更多内容
    本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。B站配套视频:https://www.bilibili.com/video/BV1or421T74f基础背景对于国产化芯片来说,是采用NPU进......
  • c++中的常用第三方库
    前言hello大家好,我是文宇。正文C++中常用的第三方库有很多,以下是一些常见的库,它们提供了各种功能和工具,方便开发者进行各类应用程序的开发。STL(StandardTemplateLibrary):STL是C++标准库的一部分,包含了一系列的容器、算法和函数对象等。容器包括vector(动态数组)、list(双向......
  • c++中的命名空间
    前言Hello,大家好,我是文宇正文在C++中,命名空间是一种机制,用于将全局命名空间划分为更小的逻辑单元,以避免命名冲突。命名空间提供了一种将全局作用域划分为多个独立的作用域的方式。命名空间的引入是为了解决大型项目中可能出现的命名冲突问题。在一个大型项目中,可能有多个开......
  • C++小游戏合集
    1.也是我最喜欢的:杀手#include<bits/stdc++.h>#include<iostream>#include<windows.h>intagain,cho,num,about,fla=0,strc,hod,cous=0,couss=0;intthree=0,five=0,ten=0,dmon,dumo=0,paim=0,fhk=0,kill=0,killd=0,can=0;longlongmoney=0;longshop[4],pri......
  • C++中深拷贝与浅拷贝
    C++中深拷贝与浅拷贝常见场景为类的拷贝构造函数与赋值运算符重载中。其主要的区别在于指针成员的拷贝上,如果指针成员变量指向的内容位于动态申请的堆内存上,此时浅拷贝只是拷贝了指针变量,会造成多个指针指向同一块内存,当这些对象被析构时,就会造成多次释放同一块内存的问题,即......
  • C++——类和对象(全)
    1.类的定义1.1类定义格式classStack{};1)class为定义类的关键字Stack为类的名字,{};中为类的主体(分号不能省略)。2)类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中函数称为类的方法或成员函数;3)为了区分成员变量,一般在成员变量会加上特殊标识_或则m开头。4)C+......
  • Local All-Pair Correspondence for Point Tracking 中英对照
    论文来自:https://ku-cvlab.github.io/locotrack/LocalAll-PairCorrespondenceforPointTracking局部全对应对点跟踪SeokjuCho\({}^{1}\),JiahuiHuang\({}^{2}\),JisuNam\({}^{1}\),HonggyuAn\({}^{1}\),Seungryong\({\mathrm{{Kim}}}^{1,\dagger}\),......