机器学习基础知识

重要的

刚接触机器学习?本指南专为没有人工智能背景的CAD工程师编写。

目录

概述

本指南介绍HOOPS AI工作流程的核心机器学习概念。它专为希望利用机器学习但可能缺乏人工智能背景的CAD工程师和3D建模专家而设计。我们将从基本的神经网络概念讲解到用于CAD分析的高级图神经网络(GNN)。

HOOPS AI 通过将HOOPS Exchange 的CAD 转换功能引入 Python,将工程数据与机器学习连接起来。它使开发人员无需 CAD 软件即可组织 CAD 数据、运行实验和部署 AI 模型。

提示

CAD 概念: CAD 基础知识中解释了B-repUV 参数化表面法线等术语。

什么是机器学习?

机器学习(ML)是人工智能的一个分支,它使计算机无需显式编程即可从数据中学习模式。我们无需手动编写规则(例如“如果零件有 6 个面且均为矩形,则它是一个盒子”),而是向计算机展示数千个示例,让它自动发现模式。

机器学习任务类型

HOOPS AI 主要专注于以下四种类型的机器学习任务:

分类

为整个CAD模型分配一个类别。例如:

  • 零件类型分类(支架、齿轮、外壳等)

  • 制造工艺分类(铸造、机械加工、锻造)

  • 复杂程度分类(简单、中等、复杂)

节点分类(分割)

为CAD模型中的每个元素分配一个类别。例如:

  • 加工特征检测(识别特定面上的孔、槽、凹槽)

  • 表面类型分类(平面、圆柱面、自由曲面)

  • 制造区域细分(不同区域需要不同的工具)

特征识别

一种专门用于识别和分类 CAD 模型中加工特征的节点分类方法。例如:

  • 检测和分类 24 种加工特征类型(孔、型腔、槽、倒角、圆角等)

  • 识别特征边界(哪些面属于每个特征)

  • 识别特征层级(包含其他特征的特征)

笔记

特征识别对于 CAM(计算机辅助制造)至关重要,因为它能够实现自动刀具路径生成和加工工艺规划。

回归

预测连续数值。例如:

  • 制造成本估算

  • 处理时间预测

  • 质量指标预测

提示

关于CAD概念:诸如B-rep、UV参数化、表面法线和拓扑等术语在《CAD基础知识》中有详细解释。我们将在出现CAD概念时引用该指南。

神经网络基础

什么是神经网络?

重要的

不要被公式和术语吓到!本指南提供了 HOOPS AI 背后的机器学习概念背景,但您无需理解所有数学细节即可有效使用该库。HOOPS AI 软件包旨在简化这些复杂概念——您可以使用高级接口构建、训练和部署 CAD 机器学习模型,而无需直接实现神经网络或处理底层数学运算。请将其视为“底层原理”参考资料,而非必读材料。

神经网络是一种受生物大脑启发而开发的计算模型。它由多层相互连接的“神经元”(数学函数)组成,这些神经元将输入数据转化为预测结果。

Input → Hidden Layer 1 → Hidden Layer 2 → ... → Output
[Data]     [Transform]      [Transform]         [Prediction]

../_images/neural_network.png

关键组成部分

神经元(节点)

每个神经元接收输入,应用加权求和,加上偏置,并将结果传递给激活函数:

在哪里:

  • 是输入

  • 学习到的权重

  • 是一种后天习得的偏见

  • 是一个激活函数(ReLU、sigmoid 等)。

神经网络由多层组成,这些层逐步转换输入数据。输入层接收原始特征(几何形状、拓扑结构),隐藏层通过学习到的权重和非线性激活函数进行转换,以提取有意义的模式,输出层生成最终预测结果(分类的类别概率或回归的连续值)。

激活函数

激活函数为神经网络引入非线性(这意味着它们可以学习曲线和复杂模式,而不仅仅是直线),使它们能够学习超越简单线性关系的复杂模式。最常用的激活函数是ReLU(修正线性单元),其定义为:它既简单又有效。Sigmoid函数tanh函数输出的值介于 0 和 1 之间,因此适用于二元概率。输出值介于 -1 和 1 之间,提供以零为中心的激活值。最后,softmax将原始分数(logits,即网络在转换为概率之前输出的原始数值)转换为多类概率分布,用于分类任务。

培训过程

训练是调整网络权重以最小化误差的过程:

  1. 前向传递:输入数据流经网络以生成预测结果

  2. 损失计算:使用损失函数将预测结果与真实值进行比较。

  3. 反向传播(也称反向传递):通过反向遍历网络来计算梯度——梯度是衡量每个权重对误差贡献程度的数学指标。

  4. 优化:使用优化器(例如 Adam 或 SGD 等算法,根据梯度决定如何调整权重)更新权重以减少损失。

该循环会重复多次迭代(轮次),直到模型收敛。

关键术语

  • Epoch:完整遍历整个训练数据集一次。

  • 批次:一次性处理数据集的一个子集(批次大小 = 32 表示一次处理 32 个样本)

  • 学习率:权重更新步长的大小(典型值:0.001 - 0.0001)

  • 过拟合:模型能够记住训练数据,但无法处理新数据。

  • 验证集:训练过程中保留下来的数据,用于检查是否存在过拟合现象。

图神经网络(GNN)

为什么选择图神经网络处理CAD数据?

CAD模型具有固有的图结构:面之间通过共享边连接,边在顶点处相交。传统的神经网络(卷积神经网络、全连接网络)需要固定大小的网格状输入(图像、矢量),但CAD模型具有:

  • 拓扑结构变化多样:一个简单的盒子有 6 个面;一个复杂的发动机零件可能有成千上万个面。

  • 关系结构:哪些面是相邻的对于理解几何形状至关重要(有关拓扑学的详细信息,请参阅CAD 基础知识)。

  • 排列不变性(顺序无关性):我们列出面的顺序不应影响结果——面[A, B, C]应与[C, A, B]给出相同的结果。

图神经网络正是为处理这种结构化、关系型数据而设计的。

CAD模型的图形表示

在 HOOPS AI 中,CAD B-rep模型被表示为一个图,其中节点对应于 CAD 实体(根据任务的不同,可以是面、边或顶点),表示实体之间的关系(例如面邻接或边面关联)。每个节点都包含节点特征——几何属性,例如面积、曲率、表面类型或采样点——而边特征则编码关系属性,例如相邻面之间的共享边长或二面角。

参见

有关面邻接图的详细示例以及 CAD 拓扑如何映射到图结构,请参阅CAD 基础知识- “面邻接图”部分。

图神经网络图

边界表示(BRep)及其到图的转换。BRep 中的面和曲线对应于图中的节点和边。

图神经网络的工作原理

GNN 通过消息传递运行(每个节点收集并组合来自其相邻节点的信息):每个节点聚合来自其邻居的信息,更新其表示,并对多个层重复此过程。

基本GNN层

笔记

跳过公式?没问题!这样理解:每个面都会学习其相邻面的信息,然后是相邻面的相邻面的信息,以此类推。三层之后,一个面就能“知道”最多距离它三个边的面的信息。

在哪里:

  • 是节点的特征向量在层

  • 是节点的邻居

  • 是一个聚合 函数(一种将多个值合并为一个值的方法,例如求和、求平均值、求最大值或加权平均值)。

  • 是可学习的权重矩阵

  • 是一个激活函数

直觉:之后GNN 层中,每个节点的表示都包含了来自最多 10 个节点的信息。 跳跃(通过连接的步骤)之外。对于面邻接图上的 3 层 GNN ,每个面都“知道”距离它 3 条边之外的面的几何形状。

提示

致进阶读者:以下研究论文展示了这些概念的实际应用。您无需阅读这些论文即可使用 HOOPS AI!

这种消息传递原理已成功应用于CAD机器学习研究领域。BRepNet (Lambourne等人,2021)引入了首批专为B-rep模型设计的拓扑消息传递系统之一,它利用面对面和边缘到面对面的消息传递来学习加工特征。更新的研究,例如GC-CADQuan等人,2024),将GNN消息传递与UV-Net式特征提取和对比学习(一种训练模型区分相似零件和不相似零件的技术)相结合,在处理36万个CAD模型时,速度比传统形状描述符提高了100倍。

常见的图神经网络架构

图卷积网络(GCN)

简单有效。它使用均值池化(将所有邻居值取平均值)聚合(组合)邻居特征。BRepNet 使用GCN的变体来实现 B-r​​ep 拓扑结构,其中人脸节点通过共享边聚合相邻人脸的信息。

# Conceptual (DGL handles the details)
new_features = activation(
    self_transform(node_features) +
    neighbor_transform(mean(neighbor_features))
)

图注意力网络(GAT)

图注意力网络(GAT)使用注意力机制(一种学习得到的加权系统,用于确定哪些输入最为重要)对相邻节点的贡献赋予不同的权重,从而学习哪些相邻节点对于每个预测最为重要。例如,在对圆柱孔特征进行分类时,GAT 可能会赋予相邻平面比远处曲面更高的注意力权重。BrepMFR (2024 )GAT 与 Transformer 结合使用,以增强加工特征识别能力。其中,学习到的注意力权重提供了可解释性(即理解模型做出决策的原因),展示了模型在对每个特征进行分类时认为哪些相邻面最为相关。

图转换器

图Transformer将Transformer架构(一种最初为语言处理而设计的现代神经网络设计,它利用注意力机制来衡量不同输入的重要性)应用于图结构数据,并使用对所有节点而非仅对其直接邻居节点的注意力机制。这使得模型能够捕获整个拓扑结构中的长程依赖关系(模型中远距离部分之间的关​​系),但计算成本更高。BRep -BERTLou等人,CIKM 2023)将BERT的掩码预测方法(一种训练方法,模型通过尝试填充故意隐藏的输入部分来学习)应用于B-rep图,并在Fusion 360 Gallery模型上进行预训练(在大型数据集上进行初始训练,然后再针对特定任务进行微调),通过自监督学习(从无标签数据中学习模式,无需人工标注)使模型能够根据上下文预测掩码实体。这种预训练即使在标记数据有限的情况下,也能有效地进行少样本特征识别(从极少的示例中学习识别特征)。

消息传递神经网络(MPNN)

通用框架,您可以在其中自定义消息、聚合和更新功能。

点云网络

点云网络将 3D 几何体处理为无序的点集,使其成为 CAD 曲面采样的理想选择。

PointNet

PointNet 是点云处理(处理空间中的三维点集)的基础架构,它引入了一种置换不变设计(即无论点的排列顺序如何,输出结果都保持不变——[A,B,C] 与 [C,A,B] 的结果相同),能够处理无序的三维点集。该架构首先通过一个共享的多层感知器 (MLP) 单独处理每个点,然后使用最大池化(在每个特征维度上取所有点的最大值)聚合(组合)所有点的特征,从而生成一个全局特征向量。最大池化操作是实现置换不变性的关键——无论点的排列顺序如何,每个维度上的最大值都保持不变。在 CAD 应用中,PointNet 将UV 网格样本(从面的参数化曲面表示中采样的点 -有关UV 参数化的详细信息,请参阅CAD 基础知识)处理为无序点云,其中每个点都包含位置 (x, y, z) 和表面法线(垂直于表面的向量,指示其方向 - 请参阅CAD 基础知识)信息 (nx, ny, nz)。

# Simplified PointNet flow
# Input: (N, 6) - N points with [x, y, z, nx, ny, nz]
point_features = shared_mlp(points)      # (N, 64)
global_feature = max_pool(point_features) # (64,) - single vector for entire face
classification = classifier(global_feature)

数学公式

笔记

数学让你望而生畏?记住:PointNet 会分别处理每个点,然后取所有点中的最大值。HOOPS AI 负责实现这些细节!

在哪里:

  • 逐点特征提取(共享 MLP)

  • 最大池化(对称聚合)

  • 分类网络

PointNet++

PointNet++ 在原 PointNet 的基础上扩展了分层处理,以捕捉局部几何结构。该架构通过一系列集合抽象层对点进行多尺度分组,其中每一层采样一部分点,将相邻点分组,并应用 PointNet 提取局部特征。这种分层方法使得网络能够捕捉到原 PointNet 全局池化所遗漏的精细几何细节,使其在分割和特征检测等需要局部上下文的任务中尤为有效。

# Hierarchical processing
# Level 1: Sample 512 points, group neighbors, extract local features
centroids_1, features_1 = set_abstraction(points, num_points=512, radius=0.2)

# Level 2: Sample 128 points, group at larger radius
centroids_2, features_2 = set_abstraction(centroids_1, num_points=128, radius=0.4)

# Global feature
global_feature = max_pool(features_2)

CAD中的应用案例

虽然纯点云方法常用于网格数据,但UV-NetJayaraman等人,CVPR 2021)表明,对于B-rep CAD数据,结构化的UV参数化(从二维参数空间(u,v)到三维表面坐标的映射——详见CAD基础知识)结合二维卷积神经网络(2D CNN)的性能优于无序点云。该论文证明,对每个面采样一个规则的10×10 UV网格比随机点采样更能可靠地捕捉微小特征,因为UV网格保留了空间关系。然而,PointNet风格的架构仍然适用于以下情况:

  • UV网格采样:当空间结构不太重要时,将UV网格展平为带有法线的点云。

  • 表面特征提取:以置换不变的方式从人脸样本中提取几何特征

  • 多人脸聚合:独立处理多张人脸,然后使用最大池化或注意力机制进行合并。

  • 混合方法CAD 的自监督表示学习Jones 等人,CVPR 2023)结合了 UV 参数采样和隐式 SDF 重建(学习表示到表面距离的连续函数 - SDF 代表有符号距离场),使用点云技术从 UV 采样点近似每个面的有符号距离场。

提示

进阶研究提示:以上引用的论文面向对学术背景感兴趣的读者。您无需理解这些论文即可使用 HOOPS AI 的点云和 UV 网格功能!

卷积神经网络(CNN)

CNNs process grid-structured data (images, UV grids) using learnable filters. The breakthrough application of CNNs to CAD came with UV-Net (Jayaraman et al., CVPR 2021GitHub), which demonstrated that 2D convolutions on UV parametric grids (2D grids of sampled points from CAD surface parameterization - see CAD Fundamentals) could effectively learn B-rep geometry while preserving topological structure through face adjacency graphs.

Key Concepts:

CNNs operate through convolution - sliding learnable filters over the input to detect local patterns like edges and textures. Pooling operations downsample the spatial dimensions (reduce the grid size), reducing computational cost while adding translation invariance (the network recognizes patterns regardless of their position in the grid). The architecture learns hierarchical features: early convolutional layers detect simple patterns (edges, corners), while deeper layers combine these to recognize complex shapes and geometric structures.

See also

New to CNNs? See Tutorials for hands-on examples, or check the glossary for quick definitions!

2D CNN for UV Grids:

import torch.nn as nn

class UVGridCNN(nn.Module):
    def __init__(self):
        super().__init__()
        # Input: (batch, 6, height, width) - 6 channels: x,y,z,nx,ny,nz
        self.conv1 = nn.Conv2d(6, 32, kernel_size=3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
        self.pool = nn.MaxPool2d(2, 2)
        self.fc = nn.Linear(64 * 8 * 8, 128)  # Assuming 32x32 input -> 8x8 after pooling

    def forward(self, uv_grid):
        x = torch.relu(self.conv1(uv_grid))
        x = self.pool(x)
        x = torch.relu(self.conv2(x))
        x = self.pool(x)
        x = x.view(x.size(0), -1)  # Flatten
        features = self.fc(x)
        return features

Why CNNs for UV Grids?

The effectiveness of CNNs on UV grids was rigorously demonstrated in UV-Net (Jayaraman et al., CVPR 2021), which showed that 2D convolutions outperform point cloud methods (PointNet) on the SolidLetters classification benchmark. The key insight is that nearby points in UV parameter space correspond to nearby points on the physical surface, enabling CNNs to learn local geometric patterns just as they detect edges in images. Convolutional filters naturally detect curvature changes, ridges, and holes, producing consistent fixed-size feature vectors regardless of grid resolution (whether 10×10 or 32×32). The architecture handles UV seam discontinuities on cylindrical and toroidal surfaces through periodic padding (discussed in the supplementary material), and pooling layers capture patterns at multiple scales - from fine details like small fillets to global shape characteristics like overall surface curvature. Subsequent work like Self-Supervised Representation Learning for CAD (Jones et al., CVPR 2023) extended this approach by combining UV-grid CNNs with implicit SDF reconstruction (SDF = Signed Distance Field - a continuous function representing distance to the surface), pre-training on 1M unlabeled ABC models to achieve state-of-the-art few-shot learning.

Tip

For Advanced Readers: The research papers above provide academic context for HOOPS AI’s CNN implementation, but you can use the UV grid features without reading them!

Hybrid Architectures for CAD

HOOPS AI supports hybrid architectures that combine multiple neural network types. These architectures are accessed through the FlowModel interface with specific architecture names. Modern CAD ML research has shown that combining different network types leverages complementary strengths: CNNs capture local geometry, GNNs model topology, and transformers (attention-based networks that can process sequential data and learn relationships between distant elements) handle long-range dependencies.

See also

Not familiar with these architectures? See Graph Neural Network (GNN) and Convolutional Neural Network (CNN) in the glossary, or review CAD Fundamentals for CAD-specific concepts!

UV-Net: Hybrid CNN-GNN Architecture (cnn_gnn)

The pioneering hybrid architecture from Autodesk Research (Jayaraman et al., CVPR 2021GitHub) combines image processing with graph reasoning for comprehensive CAD understanding. Tested on five datasets including SolidLetters, Fusion 360 Gallery, and ModelNet, UV-Net demonstrated superior classification and segmentation compared to point cloud and voxel methods.

Architecture:

UV-Net’s architecture consists of three main components working in parallel and then fusing their outputs. The CNN component uses 2D convolutional layers to process UV grids (sampled face geometry), extracting local geometric features such as curvature patterns and surface characteristics. Simultaneously, the GNN component applies graph convolutional layers to the face-adjacency graph, capturing topological relationships between faces and propagating information across the model structure. These two feature streams are then combined in a fusion layer that concatenates the geometric features from the CNN with the topological context from the GNN. Finally, a classifier processes these combined features to produce the final prediction, leveraging both local geometric details and global structural understanding.

When to Use:

UV-Net is most effective for tasks requiring both local geometric understanding and global topological context, such as face-level classification (e.g., surface type prediction) or part segmentation. It works best with datasets where UV parameterization is available for all faces.

HOOPS AI Implementation:

UV-Net is implemented in HOOPS AI as the GraphClassification FlowModel, which wraps the Classification model (the UV-Net architecture implementation). The model uses the exact hybrid CNN-GNN architecture described in the UV-Net paper.

from hoops_ai.ml.EXPERIMENTAL import GraphClassification

# UV-Net architecture for part classification
model = GraphClassification(
    num_classes=10  # Number of part categories
)

See Parts Classification Model for complete GraphClassification usage examples and Tutorials for classification workflows.

BrepMFR: Transformer-based GNN Architecture with Domain Adaptation (transformer_gnn)

Advanced architecture using transformer attention (mechanism that allows models to focus on relevant parts of the input) for machining feature recognition with transfer learning (applying knowledge learned from one dataset to improve performance on another).

Architecture:

  • Graph Transformer: Applies transformer attention mechanism over graph nodes (faces)

  • Geometric Encoding: Encodes local geometric shapes using learned embeddings

  • Topological Encoding: Captures global relationships through multi-head attention

  • Domain Adaptation: Two-step training strategy to transfer from synthetic to real CAD data

Domain Adaptation Strategy:

  1. Pre-training: Train on large synthetic CAD dataset

  2. Fine-tuning: Adapt to real CAD data with domain adaptation loss

  3. Transfer: Leverages synthetic data to overcome limited real-world labels

When to Use:

  • Machining feature recognition tasks

  • Limited real-world labeled data (use synthetic pre-training)

  • Tasks requiring long-range dependencies (transformer attention sees entire model)

HOOPS AI Implementation:

BrepMFR is implemented in HOOPS AI as the GraphNodeClassification FlowModel, which wraps the BrepSeg model (the BrepMFR architecture implementation). The model class is called BrepSeg but it implements the BrepMFR paper’s transformer-based graph neural network with domain adaptation capabilities.

from hoops_ai.ml.EXPERIMENTAL import GraphNodeClassification

# BrepMFR architecture for machining feature recognition
model = GraphNodeClassification(
    num_classes=24,        # 24 machining feature types
    n_layers_encode=8,     # Transformer layers
    dim_node=256,          # Node embedding dimension
    d_model=512,           # Model dimension
    n_heads=32,            # Attention heads
    dropout=0.3,
    attention_dropout=0.3
)

See Develop Your own ML Model for complete GraphNodeClassification usage examples and /tutorials/feature-recognition for machining feature recognition workflows.

PyTorch and PyTorch Lightning

HOOPS AI uses PyTorch as its deep learning framework, with PyTorch Lightning for training orchestration. PyTorch is an open-source machine learning library widely used in research and production, while Lightning provides a structured framework that simplifies training workflows.

See also

New to PyTorch? Check the official PyTorch tutorials for hands-on introduction, or see Tutorials for HOOPS AI-specific examples!

PyTorch Basics

Tensors

可在 GPU(图形处理单元 - 用于并行计算的硬件加速器)上运行的多维数组(类似于 NumPy):

import torch

# Create tensors
features = torch.tensor([[1.0, 2.0], [3.0, 4.0]])  # 2D tensor
labels = torch.tensor([0, 1])  # 1D tensor

# Move to GPU
features_gpu = features.cuda()

模块(模型)

神经网络被定义为继承自以下类的类torch.nn.Module

import torch.nn as nn

class SimpleClassifier(nn.Module):
    def __init__(self, input_dim, num_classes):
        super().__init__()
        self.fc1 = nn.Linear(input_dim, 128)
        self.fc2 = nn.Linear(128, num_classes)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

优化器

在训练过程中,使用计算出的梯度(调整每个权重的方向和幅度)来更新模型权重的算法:

  • Adam(自适应矩估计):自动调整每个参数的学习率,在大多数情况下效果良好(HOOPS AI 默认设置)

  • 随机梯度下降法 ( SGD ):使用随机数据批次更新权重,方法更简单,但需要仔细调整学习率。

PyTorch Lightning

PyTorch Lightning 是一个高级封装器,它消除了样板代码(重复设置),并自动添加了最佳实践。

为什么是闪电?

  • 自动处理GPU/CPU切换

  • 管理训练/验证循环(无需自行编写代码)for epoch in range(num_epochs)

  • 集成日志记录和检查点功能(保存模型训练进度)

  • 可轻松扩展到多 GPU 训练

Lightning模块结构

import pytorch_lightning as pl

class MyModel(pl.LightningModule):
    def __init__(self):
        super().__init__()
        self.model = build_network()

    def forward(self, x):
        """Forward pass - how data flows through the model"""
        return self.model(x)

    def training_step(self, batch, batch_idx):
        """What happens for each training batch"""
        x, y = batch
        predictions = self(x)
        loss = compute_loss(predictions, y)
        self.log('train_loss', loss)
        return loss

    def validation_step(self, batch, batch_idx):
        """What happens for each validation batch"""
        x, y = batch
        predictions = self(x)
        accuracy = compute_accuracy(predictions, y)
        self.log('val_accuracy', accuracy)

    def configure_optimizers(self):
        """Define optimizer and learning rate schedule"""
        return torch.optim.Adam(self.parameters(), lr=0.001)

教练

教练负责整个训练流程:

from pytorch_lightning import Trainer

trainer = Trainer(
    max_epochs=100,           # Train for 100 epochs
    accelerator='gpu',        # Use GPU if available
    devices=1,                # Use 1 GPU
    log_every_n_steps=10,    # Log metrics every 10 batches
)

trainer.fit(model, train_dataloader, val_dataloader)

DGL:深度图库

HOOPS AI 使用DGL(深度图库)进行高效的图神经网络操作。DGL 是一个开源的 Python 库,针对CPU 和 GPU 上的GNN训练进行了优化。

参见

刚接触图形库?请参阅DGL 教程进行实践入门,或从 HOOPS AI 特定示例的教程开始!

DGL图结构

import dgl
import torch

# Create graph from edge list
# Face-adjacency: face 0 connects to faces 1,2,3
src = [0, 0, 0, 1, 1, 2]
dst = [1, 2, 3, 2, 3, 3]
graph = dgl.graph((src, dst))

# Add node features (face geometric properties)
graph.ndata['features'] = torch.randn(4, 64)  # 4 faces, 64-dim features

# Add edge features (relationship properties)
graph.edata['edge_attr'] = torch.randn(6, 16)  # 6 edges, 16-dim features

批量处理多个图

在对多个 CAD 模型进行训练时,DGL 将图批量处理成一个大图(将多个小图合并成一个大图,以实现高效的并行处理):

# Batch 3 CAD models (graphs) together
graphs = [graph1, graph2, graph3]
batched = dgl.batch(graphs)  # Creates one large graph with disconnected components

# Process entire batch through GNN in parallel
output = gnn_model(batched, batched.ndata['features'])

PyTorch Geometric:另一种图库

虽然 HOOPS AI 主要使用 DGL,但PyTorch Geometric (PyG)是另一个流行的图深度学习库。PyG 提供与 DGL 类似的功能,但 API 设计略有不同。

参见

想学习 PyG 吗?请查看PyTorch Geometric 文档,其中包含全面的教程!

何时可能会看到 PyTorch 几何图形

PyTorch Geometric 可能出现在:

  • 研究代码:许多GNN论文都提供了 PyG 实现。

  • 外部教程:CAD ML 教程通常使用 PyG 作为示例。

  • 自定义实现:用户使用自定义架构扩展 HOOPS AI

PyG 图结构

import torch
from torch_geometric.data import Data

# Create graph from edge list
# Edge index: [source_nodes, destination_nodes]
edge_index = torch.tensor([[0, 0, 0, 1, 1, 2],  # Source nodes
                           [1, 2, 3, 2, 3, 3]], # Destination nodes
                          dtype=torch.long)

# Node features
x = torch.randn(4, 64)  # 4 faces, 64-dim features

# Edge features
edge_attr = torch.randn(6, 16)  # 6 edges, 16-dim features

# Create PyG Data object
graph = Data(x=x, edge_index=edge_index, edge_attr=edge_attr)

DGL 和 PyTorch Geometric 之间的转换

# DGL to PyG
def dgl_to_pyg(dgl_graph):
    edge_index = torch.stack(dgl_graph.edges())
    x = dgl_graph.ndata['features']
    edge_attr = dgl_graph.edata.get('edge_attr', None)
    return Data(x=x, edge_index=edge_index, edge_attr=edge_attr)

# PyG to DGL
def pyg_to_dgl(pyg_data):
    src, dst = pyg_data.edge_index
    g = dgl.graph((src, dst))
    g.ndata['features'] = pyg_data.x
    if pyg_data.edge_attr is not None:
        g.edata['edge_attr'] = pyg_data.edge_attr
    return g

主要区别

方面

DGL

PyTorch几何

图存储

包含 ndata/edata 的图对象

具有 x/edge_index 的数据对象

批量处理

dgl.batch()生成大型图表

Batch.from_data_list()创建批次

消息传递

函数式 API ( g.update_all())

基于层的(GCNConv()

HOOPS AI 使用情况

主要图书馆(推荐)

未直接使用(但兼容)

HOOPS AI 为什么使用 DGL

  1. 高效批处理:针对不同大小的 CAD 图形(不同模型具有不同数量的面)提供更好的性能

  2. 灵活的消息传递:更易于针对 CAD 特定操作进行定制(例如处理B-rep拓扑结构)

  3. 集成:更好地与现有 HOOPS AI 流水线集成

损失函数

损失函数衡量模型预测的误差程度。HOOPS AI 针对不同的任务使用不同的损失函数。

交叉熵损失(分类)

用于预测离散类别(部件类型、特征类型):

在哪里:

  • 是真实标签(独热编码,意味着一个向量,其中只有正确的类别为 1,所有其他类别为 0,例如类别 2 的向量为 [0, 1, 0, 0])。

  • 是预测的概率分布(在应用softmax 函数之后,softmax 函数将原始分数转换为总和为 1 的概率)。

  • 是班级数量

import torch.nn.functional as F

# Model outputs logits
logits = model(graph, features)  # Shape: [batch_size, num_classes]

# Compute loss
loss = F.cross_entropy(logits, labels)

直觉:对有把握的错误预测的惩罚比对不确定的预测的惩罚更大(对错误类别有 90% 的把握预测比有 60% 的把握预测受到的惩罚更大)。

二元交叉熵(节点分类)

对每个节点进行二元分类(例如,这张脸是不是个洞?):

在哪里是节点(面)的数量,为 0 或 1(二进制标签),并且是预测概率。

均方误差(回归)

用于预测连续值(例如表面积或曲率):

在哪里是真实价值和是预测值。MSE 对较大的误差进行二次方惩罚(误差为 2 的惩罚是误差为 1 的 4 倍)。

高级概念

本节介绍CAD研究中使用的高级机器学习技术。这些概念并非必需——即使不使用这些概念,您也可以构建有效的HOOPS AI模型!

重要的

进阶篇!以下主题面向对前沿研究感兴趣的读者。您可以直接跳到教程部分,立即开始构建模型!

迁移学习和领域自适应

迁移学习:使用在一个数据集(例如,合成 CAD)上预训练的模型,并在另一个数据集(例如,真实 CAD)上进行微调(以较小的学习率继续训练)。

# Load pre-trained weights (saved model parameters)
model = MyGNNModel.load_from_checkpoint("pretrained.ckpt")

# Fine-tune on new dataset with smaller learning rate
trainer = FlowTrainer(
    flowmodel=flow_model,
    dataset_loader=new_dataset,
    learning_rate=0.0001,  # 10x smaller for fine-tuning
    max_epochs=50
)

领域自适应:缩小训练数据(合成数据)与真实世界数据之间差距的技术:

  • 对抗训练:训练模型使特征具有领域不变性(无论特征来自合成数据还是真实数据,其表现都相同)。

  • 数据增强(创建现有数据的变体):向合成数据添加噪声、旋转和各种变化,以提高模型的鲁棒性。

  • 渐进式微调:先在合成数据集上训练 → 在小型真实数据集上进行微调

提示

对于高级读者:迁移学习和领域自适应是诸如《CAD的自监督表征学习》(Jones等人,CVPR 2023)等论文中探讨的研究课题。HOOPS AI通过其FlowTrainer界面支持这些工作流程!

正则化技术

防止过拟合(模型记忆训练数据而不是学习一般模式)的方法:

辍学

在训练过程中随机“丢弃”(设置为零)神经元,以防止协同适应(即神经元之间过度依赖):

self.dropout = nn.Dropout(p=0.5)  # Drop 50% of neurons randomly
x = self.dropout(x)

体重下降

对较大的权重添加惩罚(L2 正则化,即将权重平方和添加到损失中)以防止过拟合:

optimizer = torch.optim.Adam(model.parameters(),
                             lr=0.001,
                             weight_decay=1e-5)  # Penalty coefficient

提前停车

当验证性能不再提高时停止训练(防止浪费时间和过拟合):

from pytorch_lightning.callbacks import EarlyStopping

early_stop = EarlyStopping(
    monitor='val_accuracy',
    patience=10,  # Stop if no improvement for 10 epochs
    mode='max'
)
trainer = Trainer(callbacks=[early_stop])

注意力机制

注意力机制使模型能够专注于输入的重要部分(例如,哪些面孔与预测加工特征最相关)。

其中 Q(查询)、K(键)和 V(值)是输入的学习变换。softmax 操作生成权重,这些权重决定了每个输入元素的“关注程度”。

在CAD领域:

  • 图注意力:学习哪些相邻面最相关(例如,对于某些特征,孔洞比外壳更重要)

  • Transformer注意力机制:捕获整个模型中的长程依赖关系(例如,检测对称模式)

自主学习

学习无需人工标注的有用表示(当获取标注的 CAD 数据成本高昂时非常有用):

对比学习

学会区分相似样本和不相似样本:

掩码预测(BERT 风格)

隐藏部分输入内容并进行预测(例如填空):

  • 在CAD模型中遮盖某些面(隐藏其特征)

  • 训练模型,使其能够根据周围环境预测它们的属性。

  • 用于BRep-BERT 架构(BERT 代表来自 Transformer 的双向编码器表示——一种自监督学习方法)

CAD机器学习最佳实践

本节提供使用 HOOPS AI 构建有效 CAD ML 模型的实用指南。

参见

有关这些实践操作的示例,请参阅教程

数据质量

  1. 平衡数据集:确保每个类别都有足够的样本(目标是每个类别 100 个以上,以避免类别不平衡,导致模型忽略稀有类别)。

  2. 标签清理:验证真实标签是否准确(标签错误会导致模型学习到错误的模式)。

  3. 代表性数据:包含各种变体(简单/复杂部件、不同制造商),以确保普遍适用性(能够处理未见过的数据)。

  4. 一致的预处理:对训练数据和测试数据使用相同的编码设置(例如,相同的UV网格分辨率)。

特征工程

  1. 归一化(将特征缩放到相似的范围,通常为 [0,1] 或均值=0,标准差=1):缩放特征以防止某些特征过度影响其他特征。

    # Area in [0.01, 1000] m² → normalize to [0, 1] using min-max scaling
    normalized_area = (area - area_min) / (area_max - area_min)
    
  2. 领域知识:包括 CAD 特有的特征(曲面类型、曲率、凸度 -有关CAD 概念,请参阅 CAD 基础知识)

  3. 多尺度特征:结合局部(面部级别)和全局(模型级别)信息,实现更丰富的表征

模型训练

  1. 从简单的入手:在尝试复杂的架构之前,先尝试基本的 GCN 模型(简单的模型更容易调试,而且可能同样有效)。

  2. 监控过拟合:跟踪训练集与验证集的指标(如果训练集持续改进但验证集停滞不前或恶化,则说明存在过拟合)。

  3. 使用检查点:保存基于验证性能的最佳模型(而不是最后一个训练轮次!)

  4. 可视化训练过程:使用 TensorBoard 及早发现问题(损失峰值、过拟合趋势)

  5. 消融研究(系统地移除特征/组件以确定实际需要的功能):测试哪些特征对您的任务最为重要。

调试机器学习模型

常见问题

  1. 损失并未减少

    • 检查学习率(尝试 1e-3、1e-4、1e-5)

    • 验证数据预处理(是否已归一化?形状是否正确?)

    • 手动检查第一批数据(打印数值,检查是否存在NaN值或极端异常值)

  2. 过拟合(训练集准确率高,验证集准确率低):

    • 添加 dropout(初始 p=0.3)

    • 降低模型复杂度(减少层数,减小隐藏维度)

    • 获取更多训练数据(或使用数据增强)

    • 使用正则化(权重衰减、提前停止)

  3. 欠拟合(训练集和验证集准确率均低):

    • 增加模型容量(更多层、更宽的层 - 增加 hidden_​​dim)

    • 延长训练时间(增加训练轮数)

    • 添加更多相关特征(有关特征提取选项,请参阅CAD 数据编码

  4. 不稳定的训练(损失波动或急剧增加):

    • 降低学习率(除以 10)

    • 使用梯度裁剪(限制梯度幅度以防止极端更新)

    • 检查数据问题(NaN 值、极端异常值、不正确的归一化)

资源和延伸阅读

适合初学者

  • 教程:HOOPS AI 实战入门

  • CAD基础知识:面向机器学习从业者的CAD概念

  • 词汇表:机器学习和计算机辅助设计术语快速参考

概念

CAD ML 研究

后续步骤

  1. 阅读《CAD基础知识》以了解B-rep表示法。

  2. 请参考教程获取实践示例

  3. 请查阅API 参考文档以获取详细的类文档。

其他资源

更多推荐