图神经网络与图Transformer在计算机视觉中的原理、应用与实战

news2026/5/12 19:15:48
1. 引言当视觉任务遇上“关系”思维在计算机视觉领域我们早已习惯了卷积神经网络CNN的统治地位。从ImageNet的图像分类到Mask R-CNN的实例分割CNN凭借其强大的局部特征提取能力在像素网格这种规则的欧几里得数据上取得了巨大成功。然而现实世界中的视觉信息其本质远不止像素的排列组合。一个场景中的物体如何相互作用一段视频中的人物行为如何随时间演变一张医学影像中不同的解剖结构或病灶区域之间有何病理关联这些问题都指向了同一个核心关系。传统的CNN在处理这类“关系型”任务时往往力不从心。它擅长捕捉局部模式但难以显式地建模和推理长距离的、非局部的、结构化的依赖关系。这正是图神经网络Graph Neural Networks, GNNs和图TransformerGraph Transformers大显身手的地方。简单来说你可以把图看作一种万能的数据结构节点代表实体如图像中的物体、视频中的帧、点云中的点、病历中的疾病边代表实体之间的关系如空间相邻、时序连续、语义相关、病理关联。GNN和图Transformer的核心任务就是在这种图结构上通过节点间的信息传递与聚合学习到蕴含丰富关系的表征。近年来这股“图学习”的风潮已经席卷了计算机视觉的各个角落。从利用场景图进行图像描述生成到基于骨架图的行为识别再到对点云这种不规则3D数据的直接处理图模型正在重新定义我们理解和处理视觉信息的方式。特别是在医学影像分析这类对可解释性和关系推理要求极高的领域图模型通过构建“疾病知识图谱”或“解剖结构关系图”为辅助诊断带来了新的曙光。本文将带你深入这个前沿交叉领域不仅梳理GNN与图Transformer在各类视觉任务中的应用全景更会剖析其背后的设计思想、实战中的关键技巧以及我踩过的一些“坑”。无论你是希望将图模型引入现有视觉任务的研究者还是正在寻找解决复杂关系建模难题的工程师这篇文章都将为你提供一份详尽的“作战地图”。2. 核心基石GNN与图Transformer的原理精要在深入具体应用之前我们必须夯实基础。理解GNN和图Transformer的基本原理是灵活运用它们解决实际视觉问题的前提。2.1 图神经网络GNN消息传递的艺术GNN的核心思想非常直观可以概括为“消息传递Message Passing”。想象一个社交网络每个人节点的观点都会受到其朋友邻居的影响。GNN模拟了这一过程通过多轮迭代让每个节点聚合其邻居的信息不断更新自身的状态。一个典型的图卷积层如最经典的GCN的操作可以形式化表示为 [ H^{(l1)} \sigma(\hat{D}^{-\frac{1}{2}}\hat{A}\hat{D}^{-\frac{1}{2}} H^{(l)} W^{(l)}) ] 其中( \hat{A} A I ) 是加了自连接的邻接矩阵( \hat{D} ) 是其度矩阵( H^{(l)} ) 是第 ( l ) 层的节点特征( W^{(l)} ) 是可学习的权重矩阵( \sigma ) 是非线性激活函数。这个公式的本质是对邻居特征进行归一化求和。然而基础的GCN存在局限它假设所有邻居的重要性相同。这在视觉任务中往往不成立。例如在图像中一个物体与其正下方的物体关系可能比与遥远角落物体的关系更重要。因此更强大的GNN变体被提出图注意力网络GAT引入了注意力机制让节点在聚合邻居信息时可以动态地分配不同的权重。其消息传递公式为 [ h_i^{(l1)} \sigma(\sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(l)} W^{(l)} h_j^{(l)}) ] 其中注意力系数 ( \alpha_{ij} ) 通过一个可学习的函数计算取决于节点 ( i ) 和 ( j ) 的特征。这使模型能够聚焦于更相关的邻居。图采样与聚合GraphSAGE为了解决大规模图的问题它并不使用全图卷积而是为每个节点采样固定数量的邻居然后进行聚合如均值、池化、LSTM。这大大提升了计算效率适用于点云等节点数众多的图。动态图CNNDGCNN专为点云设计。它并不依赖固定的图结构而是在每一层根据节点特征在特征空间中的距离动态地构建k-最近邻k-NN图。这使得网络能够随着特征学习的过程自适应地捕捉不同层次语义下的局部结构。实操心得一消息传递的“层数”陷阱GNN的深度并非越深越好。由于过度平滑Over-smoothing问题深层GNN中所有节点的特征会趋向于一致导致区分性下降。在实践中对于大多数视觉任务2到4层的GNN通常已经足够。如果你需要更深的网络可以考虑使用残差连接、跳跃连接JK-Net或DropEdge随机丢弃边等技术来缓解过度平滑。2.2 图Transformer全局关系的捕手Transformer在自然语言处理领域的成功源于其强大的全局依赖建模能力。将其迁移到图数据上便诞生了图Transformer。与GNN基于局部邻居聚合不同图Transformer试图让每个节点与图中所有其他节点进行交互。其核心是**自注意力Self-Attention**机制在图上的应用。对于一个有N个节点的图图Transformer会计算一个N×N的注意力矩阵其中每个元素代表一个节点对另一个节点的关注程度。公式如下 [ \text{Attention}(Q, K, V) \text{softmax}(\frac{QK^T}{\sqrt{d_k}}) V ] 这里Q, K, V由所有节点的特征线性投影得到。通过这种方式即使两个节点在原始图结构中没有直接相连它们也能建立联系从而捕获长距离依赖。然而纯Transformer结构忽略了图本身宝贵的结构信息。因此当前主流的图Transformer模型都会显式地注入结构编码Structural Encoding位置编码为每个节点添加可学习或基于图拓扑如随机游走、拉普拉斯特征向量的位置编码让模型感知节点在图中的“位置”。边编码将边的信息如类型、距离作为注意力计算中的偏置项让注意力机制在聚合信息时考虑到节点间的具体关系。例如在点云处理的Point Transformer中注意力权重不仅基于节点特征还考虑了节点的三维空间坐标差从而同时建模了特征相似性和空间邻近性。实操心得二结构信息的“注入”方式选择对于视觉任务选择何种结构编码至关重要。对于图像区域图空间相对坐标是有效的编码。对于骨架序列图关节间的自然连接和时空距离是关键。对于医学知识图谱边的类型如“导致”、“伴随”需要被编码。一个常见的技巧是将结构编码与节点特征相加或拼接后再输入Transformer层。另一种更精细的做法是将其作为注意力计算中的加性偏置这能更直接地影响信息聚合的权重。2.3 GNN vs. 图Transformer如何选择这没有绝对答案取决于你的任务和数据特性选择GNN当图结构明确且高度重要如分子结构、知识图谱任务更依赖于局部邻域关系或者对计算效率有较高要求。GNN的参数效率通常更高。选择图Transformer当需要建模非常长距离的依赖图结构不完全可靠或需要被推理或者你希望模型能更灵活地发现节点间潜在的非局部关系。但其计算复杂度与节点数的平方相关在大图上需要配合采样等技术。在实际视觉项目中我经常采用混合架构用几层GNN进行底层、局部的特征提取和关系建模然后在高层使用图Transformer层来整合全局上下文信息。这种组合往往能兼顾效率与效果。3. 视觉任务全景图模型的用武之地现在让我们看看这些强大的图模型是如何在具体的计算机视觉任务中落地生根的。我将从图像、视频、3D视觉和跨模态理解四个维度展开。3.1 图像理解从像素网格到关系图图像的本质是规则的网格但高级视觉理解需要超越网格。场景图生成SGG这是图模型在图像领域的标志性任务。目标是将一张图像解析为一个语义图节点是检测到的物体边是物体间的关系如“人-骑-自行车”。早期方法如Graph R-CNN先用CNN检测物体然后用GNN在物体区域特征上推理关系。现在的趋势是端到端建模并设计更复杂的推理机制如双向消息传递、能量模型来解决关系预测的长尾分布和语义偏见问题。图像分类与分割对于图像级任务一种思路是将图像分割成多个超像素或区域提案将这些区域作为节点根据空间相邻或特征相似性建边形成一个图然后在这个图上应用GNN进行节点分类对应分割或图分类对应图像分类。这尤其适用于那些物体边界模糊、依赖上下文信息的医学图像分割任务。少样本/零样本学习图模型在这里扮演了“知识传递者”的角色。在少样本学习中可以将支持集少量标注样本和查询集样本构建成图通过GNN在图上传播标签信息。在零样本学习中可以利用一个预先构建的语义知识图谱如WordNet将可见类和未见类的语义属性连接起来GNN通过学习在属性图上的传播实现从可见类到未见类的知识迁移。避坑指南图像建图的策略如何从一张图像构建出一个有效的图是成败的关键。盲目地基于空间网格划分建图会产生大量冗余节点和边。我的经验是使用预训练的目标检测器或分割模型来生成候选区域作为节点这能保证节点的语义性。边的构建要多元化不要只依赖空间距离。结合外观特征相似性如颜色、纹理、语义共现概率从数据集中统计来定义边权重能构建出更丰富的图结构。考虑多尺度图同时构建局部细节图和全局场景图让信息在不同粒度间流动有助于同时把握细节和整体。3.2 视频分析时空关系的交响乐视频在空间维度之外增加了时间维度构成了天然的时空图。骨架动作识别这是GNN最成功的应用之一。将人体骨架的关节点作为节点人体骨骼作为空间边连续帧间的同一关节连接作为时间边就形成了一个时空图。ST-GCN等开创性工作在此基础上进行时空图卷积同时捕捉姿态的空间构型和时间动态。后续的改进集中于设计更合理的邻接矩阵如自适应学习、更高效的注意力机制如分离时空注意力来提升性能。时空动作检测与定位不仅要识别动作还要在视频中定位其发生的时间和空间范围。这里图模型用于建模不同时间片段、不同空间区域之间的关联。例如可以将视频片段作为节点通过GNN来聚合上下文信息判断某个片段是否包含动作并精修其边界。视频目标分割VOS在半监督VOS中给定第一帧的目标掩码需要在后续帧中跟踪并分割该目标。图模型可以用来建立前后帧间像素或超像素的对应关系通过在图上的消息传递将第一帧的目标信息传播到后续帧。实战技巧处理长视频序列视频通常很长直接构建全时序图会带来巨大的计算和内存开销。常用的策略是分段处理将长视频切成重叠的片段clip在每个片段内部构建图进行处理然后在片段间进行特征融合或后处理。层次化建模底层用GNN处理短时序的局部图如几帧内的关节运动高层用RNN或Transformer汇总这些局部图的输出以捕获长时序依赖。采样关键帧基于运动显著性或均匀采样选取关键帧作为图的节点大幅减少计算量。3.3 3D视觉点云与网格的天然主场点云和网格是典型的非欧几里得数据每个点或顶点与其邻居构成一个局部图因此图模型在这里如鱼得水。点云分类与分割PointNet是点云深度学习的开山之作但它独立处理每个点忽略了局部结构。DGCNN通过动态构建k-NN图在局部图上进行卷积显著提升了性能。Point Transformer则进一步引入了自注意力在局部邻域内计算注意力同时考虑了特征和坐标信息。对于分割任务通常采用编码器-解码器结构如PointNet Graph U-Net在编码过程中通过图池化Graph Pooling下采样在解码过程中通过图上采样Graph Unpooling或插值恢复分辨率。点云补全与上采样给定不完整的点云如因遮挡导致目标是生成完整、稠密的点云。这类任务通常基于编码器-解码器框架编码器学习全局形状特征解码器通常包含GNN层根据全局特征和局部几何信息逐步生成或上采样点。关键在于设计能够捕捉局部几何细节和全局形状先验的图卷积操作。网格处理网格可以看作是一种特殊的图面片是节点共享边是连接。MeshCNN等工作直接在网格的边上定义卷积核用于分类、分割等任务。图模型能够很好地处理网格的非规则连接性并在人体形状重建、人脸重建等任务中表现出色。核心细节点云局部图的构建对于点云图结构不是给定的而是需要构建的。最常用的方法是k-最近邻k-NN和球查询radius query。k-NN选择特征空间或坐标空间中最近的k个点。计算高效但可能忽略密度变化。球查询选择给定半径球体内的所有点。能适应密度变化但计算量不固定。 在实践如DGCNN中我通常在每一层的特征空间中进行k-NN建图。这是因为随着网络层数加深特征空间的语义信息越来越强在特征空间中的“近邻”更能反映语义上的相关性而不仅仅是几何上的靠近。这被称为“动态图”。3.4 跨模态理解连接视觉与语言让机器理解图像内容并用语言描述或者根据语言描述在图像中找到对应区域需要深度融合视觉和语言信息。图模型提供了一个统一的推理框架。视觉问答VQA给定一张图片和一个问题输出答案。高级的VQA需要复杂的推理。一种常见方法是分别从图像中提取物体区域特征从问题中解析出实体和关系构建一个异构图图像区域节点和问题词节点然后通过GNN进行跨模态的消息传递最终基于融合后的图表示预测答案。指代表达理解REC给定一张图像和一句描述如“左边那个穿红衣服的人”定位到描述的物体。这需要细粒度的视觉-语言对齐。图模型可以用来建立图像区域之间的关系图以及语言短语之间的关系图然后通过图匹配或图注意力机制实现跨模态的细粒度关联。图像描述生成与场景图生成相反这里是从图像生成文本描述。可以利用生成的场景图作为中间表示通过图到序列Graph-to-Sequence模型如Graph Transformer LSTM/Transformer解码器来生成流畅的描述。场景图提供了结构化的语义信息能引导生成更准确、包含关系的描述。经验之谈跨模态对齐的挑战视觉和语言模态存在天然的鸿沟。图模型虽然提供了关系推理的能力但要学好跨模态对齐仍需注意特征对齐是基础确保视觉特征如Faster R-CNN提取的区域特征和语言特征如BERT提取的词向量在嵌入空间中对齐。预训练的跨模态模型如CLIP的特征是极佳的起点。设计合理的交互图不要简单地将视觉节点和语言节点混在一个图中。可以设计双流图分别进行模态内消息传递再通过精心设计的跨模态注意力边进行交互这样能更好地保持各自模态的特性。利用先验知识对于需要常识推理的任务引入外部知识图谱如ConceptNet作为额外的节点和边能显著提升模型的推理能力。4. 前沿聚焦图模型赋能医学影像分析医学影像分析是图模型在视觉领域最具潜力和价值的应用方向之一。它完美契合了图模型善于处理关系、整合多源信息的特点。4.1 疾病诊断与预测从孤立征象到关联图谱传统的深度学习模型将医学图像如MRI、CT切片视为独立的2D或3D数组进行分析。然而许多疾病如神经系统疾病、癌症的病理改变往往体现在多个区域之间的连接性或协变关系上。基于脑网络的疾病诊断以阿尔茨海默病AD为例。我们可以从功能磁共振成像fMRI数据中构建脑功能连接网络。大脑的不同区域作为节点区域间时间序列的相关性作为边权重。这是一个标准的加权图。然后使用GNN对这个图进行分类如AD vs. 健康对照。GNN能够自动学习哪些脑区之间的连接模式对区分疾病状态是重要的这比单纯看某个区域的激活强度更具解释性。例如BrainGNN等模型还能提供脑区级别的贡献度可视化辅助医生理解。多疾病关联建模在临床实践中患者常同时患有多种疾病或存在多种影像学表现。我们可以构建一个多疾病知识图谱。节点代表不同的疾病或影像征象边代表它们之间的共现关系、因果关系或解剖关联可从医学文献、电子病历中挖掘。当分析一个新患者的影像时我们可以将其影像特征映射到图谱中的相关节点然后利用GNN在图谱上进行推理综合判断最可能的诊断这对于鉴别诊断尤其有帮助。预后预测与生物标志物发现图模型不仅能用于分类还能用于回归预测如生存期。更重要的是通过分析训练好的GNN我们可以识别出对预测最重要的子图或连接模式这些可能就是潜在的影像生物标志物为医学研究提供新线索。4.2 解剖结构分割与标注利用拓扑先验医学图像分割如分割肿瘤、器官、血管是基础任务。CNN如U-Net是主流但在处理结构复杂、边界模糊或形状多变的目标时如血管树、神经纤维束CNN可能力有不逮。图作为后处理精修器一种常见范式是“CNN GNN”。先用一个快速的CNN如U-Net生成一个粗糙的分割概率图。然后将这个粗糙分割结果中的候选区域或超像素作为节点根据空间相邻性、外观相似性等构建图。接着在这个图上应用GNN利用节点间的上下文关系对每个节点的类别进行重新评估和精修。这能有效平滑分割边界、剔除孤立误判区域。图作为拓扑约束编码器对于具有明确解剖拓扑的结构如冠状动脉、气道树其连接关系是已知的先验知识。我们可以将这种树状或网状拓扑结构直接定义为一个图。在分割网络中引入GNN层来显式地强化这种拓扑约束使得网络的分割结果在拓扑上更合理。例如在血管分割中GNN可以确保分割出的血管是连通的避免中断。交互式分割在临床软件中医生可能需要微调自动分割结果。我们可以将当前的分割掩码、用户提供的点击/涂鸦提示作为图的输入。GNN能够快速地将用户的局部修正传播到整个相关区域实现高效的交互式分割。4.3 自监督学习与标签高效学习医学影像标注成本极高且需要专业知识。图模型与自监督学习的结合为缓解标注数据稀缺问题提供了新思路。图对比学习核心思想是“拉近正样本推远负样本”。对于一张医学图像我们可以通过不同的数据增强如旋转、裁剪、加噪生成两个视图并将它们构建成图。这两个图是“正样本对”。其他图像的图则是“负样本”。通过训练模型区分正负样本可以让GNN学习到对增强不变的、具有判别性的图表示。这种预训练好的GNN编码器只需少量标注数据微调就能在下游任务如分类、分割上取得很好效果。基于图的标签传播在仅有少量标注数据的情况下我们可以构建一个患者图或图像区域图节点是样本边可以基于影像特征的相似性、临床信息的相似性来定义。然后利用GNN的消息传递机制将少量标注节点的标签信息平滑地传播到大量未标注节点上实现半监督学习。这在处理罕见病的小样本问题时特别有用。医学影像应用的关键考量数据隐私与联邦学习医疗数据敏感且分散。基于图的联邦学习如FedNI允许在不同医院的私有数据上分别训练本地GNN模型只交换模型参数或图结构信息在不共享原始数据的前提下实现协同训练这是未来的重要方向。可解释性与可信性医生需要知道模型为何做出某个诊断。使用图注意力GAT等可解释性强的模型可以生成“注意力热图”显示模型决策时关注了图像的哪些区域或图谱中的哪些关系这对于建立临床信任至关重要。多模态数据融合患者的电子病历、基因组学数据、病理报告等都是宝贵的非影像信息。图是融合这些异构数据的理想载体。可以构建多模态异构图不同类型的节点影像特征、诊断代码、基因通过不同类型的边连接由GNN进行统一表征学习。5. 实战指南从理论到代码的跨越理解了原理和应用场景我们来探讨如何在实际项目中动手实现一个图视觉模型。我将以“基于动态图卷积的点云分类”这个经典任务为例拆解关键步骤。5.1 任务定义与数据准备任务给定一个由N个点组成的点云每个点包含xyz坐标和可能的RGB颜色将其分类到已知的类别如椅子、飞机、汽车。数据我们使用公开数据集ModelNet40。每个样本是一个.off或.ply文件包含物体表面的点坐标。通常我们会进行预处理将每个点云重采样到固定点数如1024个点并进行归一化。5.2 模型构建DGCNN的核心DGCNN的成功在于“动态图”和“EdgeConv”操作。动态建图在每一层网络不在固定的坐标空间建图而是在当前层的特征空间中为每个点寻找k个最近邻。这意味着图结构随着网络学习而演化能够捕捉语义层次上的局部结构。EdgeConv操作这是核心算子。对于中心点 ( x_i ) 和它的一个邻居 ( x_j )EdgeConv计算如下 [ e_{ij} h_\Theta(x_i, x_j - x_i) ] 其中 ( h_\Theta ) 是一个共享的多层感知机MLP。这里的关键是我们不仅考虑邻居的特征 ( x_j )还考虑了中心点与邻居的相对坐标( (x_j - x_i) )这编码了局部几何信息。然后我们对中心点所有邻居的 ( e_{ij} ) 进行一个对称聚合操作如max-pooling [ x_i \max_{j \in \mathcal{N}(i)} e_{ij} ] 这个输出就是点 ( i ) 的新特征。一个简化的PyTorch风格的EdgeConv模块可能如下所示import torch import torch.nn as nn import torch.nn.functional as F from knn_cuda import KNN # 使用CUDA加速的KNN库 class EdgeConv(nn.Module): def __init__(self, in_channels, out_channels, k20): super(EdgeConv, self).__init__() self.k k # MLP: 输入是 [中心点特征, 邻居特征 - 中心点特征] self.mlp nn.Sequential( nn.Conv2d(in_channels * 2, out_channels, 1), nn.BatchNorm2d(out_channels), nn.LeakyReLU(negative_slope0.2), nn.Conv2d(out_channels, out_channels, 1), nn.BatchNorm2d(out_channels), nn.LeakyReLU(negative_slope0.2) ) def forward(self, x): x: (B, C, N) 张量B是批大小C是特征维度N是点数 返回: (B, C, N) 新特征 batch_size, num_dims, num_points x.size() # 1. 动态KNN建图 (在特征空间) # dist: (B, N, N), idx: (B, N, k) dist, idx KNN.apply(x.transpose(1, 2), x.transpose(1, 2), self.k 1) # 包含自身 idx idx[:, :, 1:] # 去掉自身索引只保留k个邻居 # 2. 获取邻居特征 idx_base torch.arange(0, batch_size, devicex.device).view(-1, 1, 1) * num_points idx idx idx_base idx idx.view(-1) x_neighbors x.transpose(1, 2).reshape(batch_size * num_points, -1)[idx, :] x_neighbors x_neighbors.view(batch_size, num_points, self.k, num_dims).permute(0, 3, 1, 2) # (B, C, N, k) # 3. 重复中心点特征以匹配邻居 x_center x.unsqueeze(3).repeat(1, 1, 1, self.k) # (B, C, N, k) # 4. 计算Edge特征: [中心点特征, 邻居特征 - 中心点特征] edge_feature torch.cat([x_center, x_neighbors - x_center], dim1) # (B, 2*C, N, k) # 5. 应用MLP和最大池化 out self.mlp(edge_feature) # (B, C, N, k) out out.max(dim-1, keepdimFalse)[0] # (B, C, N) return out5.3 网络架构与训练一个完整的DGCNN分类网络通常包含多个EdgeConv层逐步提取局部和全局特征。class DGCNN_Cls(nn.Module): def __init__(self, num_classes40, k20): super(DGCNN_Cls, self).__init__() self.k k # 输入是 (B, 3, N)3代表xyz坐标 self.conv1 EdgeConv(3, 64, kself.k) self.conv2 EdgeConv(64, 64, kself.k) self.conv3 EdgeConv(64, 128, kself.k) self.conv4 EdgeConv(128, 256, kself.k) # 全局特征提取 self.conv5 nn.Sequential( nn.Conv1d(512, 1024, 1), nn.BatchNorm1d(1024), nn.LeakyReLU(negative_slope0.2) ) # 分类头 self.fc1 nn.Linear(1024 * 2, 512) # *2 是因为拼接了全局和局部特征 self.fc2 nn.Linear(512, 256) self.fc3 nn.Linear(256, num_classes) self.dropout nn.Dropout(p0.5) def forward(self, x): batch_size, _, num_points x.size() # 局部特征提取 x1 self.conv1(x) # (B, 64, N) x2 self.conv2(x1) # (B, 64, N) x3 self.conv3(x2) # (B, 128, N) x4 self.conv4(x3) # (B, 256, N) # 拼接多层特征 x_local torch.cat([x1, x2, x3, x4], dim1) # (B, 512, N) # 提取全局特征 x_global self.conv5(x_local) # (B, 1024, N) x_global F.adaptive_max_pool1d(x_global, 1).view(batch_size, -1) # (B, 1024) # 提取重要的局部特征 (可选) x_local_max F.adaptive_max_pool1d(x_local, 1).view(batch_size, -1) # (B, 512) # 融合全局和局部特征进行分类 x_final torch.cat([x_global, x_local_max], dim1) # (B, 1536) x_final F.leaky_relu(self.fc1(x_final), negative_slope0.2) x_final self.dropout(x_final) x_final F.leaky_relu(self.fc2(x_final), negative_slope0.2) x_final self.dropout(x_final) x_final self.fc3(x_final) return x_final训练要点数据增强对点云进行随机旋转、平移、缩放、抖动是防止过拟合、提升泛化性的关键。损失函数使用标准的交叉熵损失。优化器Adam优化器配合学习率衰减如CosineAnnealingLR。评估指标整体准确率OA和平均类别准确率mAcc。5.4 常见问题与调试技巧训练不稳定或发散检查KNN确保KNN操作返回了正确的索引。在动态图中如果特征在训练初期出现NaN或极大值可能导致KNN找到的“邻居”毫无意义。可以添加梯度裁剪或更严格的权重初始化。归一化确保输入点云坐标被归一化到合适的范围如[-1, 1]或[0, 1]。BatchNorm层对于稳定GNN训练至关重要。学习率图模型有时对学习率敏感。从一个较小的学习率如1e-3开始尝试。模型性能不佳调整k值k是最近邻的数量是最重要的超参数之一。太小会丢失上下文太大会引入噪声并增加计算量。对于ModelNet40k20是一个不错的起点。可以通过交叉验证调整。特征拼接DGCNN中拼接多层EdgeConv的输出很重要。尝试不同的拼接策略或者使用注意力机制来加权求和不同层的特征。全局特征单纯的最大池化可能丢失信息。可以尝试结合最大池化和平均池化或者使用更复杂的集合函数如Set Transformer。内存溢出OOM减少批大小Batch Size这是最直接的方法。减少点数N如果任务允许可以对输入点云进行更激进的下采样。优化KNN使用快速近似KNN库如faiss或在小批量中分块计算。混合精度训练使用PyTorch的AMP自动混合精度可以显著减少显存占用并加速训练。过拟合Dropout在MLP层和全连接层后使用Dropout。数据增强加强数据增强的强度和多样性。权重衰减L2正则化在优化器中设置适度的权重衰减。早停Early Stopping监控验证集性能在不再提升时停止训练。从理论到实践实现一个图视觉模型需要仔细处理数据构建、模型设计、训练调优每一个环节。DGCNN作为一个经典而强大的基线为我们理解图卷积在点云上的运作提供了清晰的范本。当你掌握了这个基础便可以进一步探索更复杂的图注意力、图Transformer架构并将其迁移到图像、视频等其他视觉模态的任务中去。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…