放在最前面的是效果展示:
- 视频是使用了180个零件的数据训练的结果
前言
在经典的程序设计中,人们输入的是规则(即程序)和需要根据这些规则进行处理的数据,系统输出的是答案。
利用机器学习,人们输入的是数据和从这些数据中预期得到的答案,系统输出的是规则。这些规则随后可应用于新的数据,并使计算机自主生成答案。
项目背景
在CAE工程仿真领域,几何模型中的倒角特征会导致以下关键问题:
- 网格生成效率低下:倒角处的复杂几何特征迫使网格生成算法生成高密度局部网格,钣金结构件案例中清理倒角区域占模型处理阶段40%的时间;
- 计算资源浪费:去除倒角可降低模型特征,例如无倒角模型可快速进行中面抽取,可降低网格量80%以上;
- 特征识别局限:传统CAD软件暂无倒角识别功能,切倒角存在无规则,或规则不明晰的特点,无法通过常规编程进行识别。
技术方案
系统架构
系统采用分层设计,实现从数据采集--智能识别--数据可视化的完整闭环:
- 数据采集阶段:基于SpaceClaim Python API构建自动化特征提取工具
- 模型训练阶段:集成动态参数化神经网络与增量学习框架
- 工程应用阶段:开发可视化模块
关键技术实现
1. 训练数据构建(对应数据采集阶段)
- 特征参数提取原理
通过SpaceClaim的Python API访问模型的面对象属性,提取多维几何特征:- 几何属性:面积、曲面类型(平面/柱面/锥面)
- 拓扑关系:相邻面数量、相邻面类型、相邻面面积、相邻面角度
- 其他特征:表面占比、圆柱面半径
face_features = []
# ---------------------------
# 基础特征(6维)
# ---------------------------
# 1. 归一化面积(原始面积/最大面积)
normalized_area = round(face.Area / max_area, 4)
face_features.append(normalized_area)
# 2. 面类型编码(4维)
# 将CAD面类型转换为独热编码向量
# 编码规则:
# - Plane(平面): [1, 0, 0, 0]
# - Cylinder(圆柱): [0, 1, 0, 0]
# - Torus(圆环): [0, 0, 1, 0]
# - 其他类型: [0, 0, 0, 1]
geo_type = face.Shape.Geometry.GetType().ToString().Split('.')[-1]
face_features.extend(get_face_type_encoding(geo_type))
# 3. 体积占比(1维)
face_box = face.Shape.GetBoundingBox(Matrix.CreateMapping(Frame.World))
face_vol_ratio = calculate_V(face_box) / body_vol * 1e6
face_features.append(round(face_vol_ratio, 4))
# 4. 圆柱半径(1维)
face_features.append(round(face.Shape.Geometry.Radius, 4) if "Cylinder" in geo_type else 0.0)
# 5. 相邻面特征......
- 半自动化标注机制
开发基于设计变更对比的标注系统:- 通过SCDM二次开发记录原始模型几何
- 手工操作去除倒角
- 对比原始模型与简化模型的几何差异,自动生成二值标签
- 整理数据到CSV文件
# 00提取输入面参数.py
# 获取体的面信息,并保存到CSV
# Python Script, API Version = V22
BodyList = GetRootPart().Components[0].GetAllBodies()
datalist = []
for body in BodyList:
print body.GetName()
bodydata = GetBodyFaceData(body)
datalist.append(bodydata)
save_to_csv(bodydata, r'Data\untrain\faceDatas_'+body.GetName()+'.csv')
# 提取处理前的面对象.py
# 手动清理获取结果
# 获取处理前的面对象
BodyList = GetRootPart().Components[0].GetAllBodies()
datalist = []
for body in BodyList:
facelist = body.Faces
datalist.append(facelist)
# 提取标定结果.py
# Python Script, API Version = V22
# 获取处理后的面对象
resultDatas = []
for facelist in datalist:
bodyresult = []
faceitem = None
for face0 in facelist:
if(face0.IsDeleted):
bodyresult.append(1)
else:
bodyresult.append(0)
faceitem = face0
bodyname = faceitem.GetAncestor[IDesignBody]().GetName()
# 获取训练输入
save_to_csv(bodyresult,r'Data\untrain\faceDatas_'+bodyname+'_resualt.csv')
resultDatas.append(bodyresult)
2. 动态学习模型(对应模型训练阶段)
-
网络架构设计
基于实际工程需求与特征数据特性,设计动态可调的全连接神经网络架构:- 动态拓扑结构:采用超参数控制的弹性网络架构
- 隐藏层数量可配置(1-3层),首层神经元数(32-256),后续层数按比例自动衰减
- 激活函数动态选择(ReLU/ELU/SELU),根据贝叶斯优化自动匹配最佳非线性组合
- 网络深度与宽度通过超参数搜索框架实现协同优化
- 正则化体系:构建多层次正则化机制提升泛化能力
- 输入层:标准化层(Normalization)消除特征量纲差异
- 前置层:高斯噪声注入(0-0.1比例)增强输入鲁棒性
- 隐藏层:动态Dropout(0.1-0.5比例)抑制过拟合
- 参数级:He正态初始化保证梯度稳定性
- 优化策略:针对类别不平衡问题(倒角:非倒角≈1:5)设计特殊训练机制
- 损失函数加权(类别权重5:1)
- 多指标监控(准确率+精确率)
- 自适应学习率(1e-2至1e-4动态调整)
- 动态拓扑结构:采用超参数控制的弹性网络架构
-
训练优化策略
- 渐进式课程学习:按倒角复杂度分级训练,先学习典型倒角模式,再逐步扩展至特殊案例
- 对抗增强训练:生成对抗网络(GAN)构造边界样本,提升模型对模糊特征的判别力
- 增量学习框架:设计特征回放机制,避免新数据引起的灾难性遗忘问题
3. 工程化部署(对工程应用阶段)
- CAD可视化方案
- 开发SpaceClaim插件实现"一键式"预测流程:
- 模型自动导出→预测服务→结果可视化
- 开发SpaceClaim插件实现"一键式"预测流程:
# 倒角高亮部分代码
......
facelist = []
for chamData in chamferList:
part_name = chamData['part_name']
face_index = chamData['face_index']
body = GetRootPart().GetAllBodies(part_name)[0]
facelist.append(body.Faces[face_index])
Selection.Create(facelist).SetActive()
技术栈
模块 | 核心技术组件 |
---|---|
CAD接口 | SpaceClaim Python API |
数据工程 | Pandas(特征分析) |
机器学习 | TensorFlow 2.10,Keras(模型训练), Optuna(超参优化), DVC(数据版本控制) |
工程部署(未实现) | FastAPI(REST服务), Redis(缓存管理), Docker(容器化部署) |
应用价值
在机械制造企业的实际部署中取得显著成效:
- CAE预处理效率:单模型处理时间从2小时缩短至0.5小时
- 计算资源节省:平均网格数量降低80,内存占用减少42%
本系统开创了机器学习在CAD/CAE集成应用的新范式,为智能制造领域的数字化升级提供了可复用的技术框架。后续工作将重点提升系统对多尺度特征的识别能力,并开发面向增材制造的特殊工艺特征识别模块。