DeepCFD+:一种工业级 CFD 代理模型训练框架【深度学习+流体力学】
适用场景:气动优化、实时仿真、多物理场代理建模、科研复现
Gitee地址:https://gitee.com/bao-jiachen/deep-cfd
GitHub地址:https://github.com/baojiachen0214/DeepCFDplus
参考论文:DeepCFD: Fast and Accurate CFD Simulation via Deep Learning
🔥 一、什么是 DeepCFD+?
在工程设计中,传统 CFD 求解器(如 OpenFOAM 的 simpleFOAM
)虽精度高,但单次仿真动辄数小时,严重拖慢迭代效率。
DeepCFD+ 基于 DeepCFD 论文的思想和开源的 实验性模型,重新构建了一个工业级深度学习训练框架,能够:
- 🌊 端到端学习:输入几何(SDF)→ 输出全场速度与压力(Ux, Uy, p)
- ⚡ 千倍加速:推理仅需 毫秒级,相比传统 CFD 提速 100–1000 倍
- 📉 高保真度:L2 误差 < 1%,与
simpleFOAM
结果高度一致 - 🔧 开箱即用:内置 UNetEx、AutoEncoder 等成熟架构,支持一键训练
更重要的是——DeepCFD+ 不只是一个模型,而是一个完整的训练系统。
上图展示的便是一组预测 vs 真实场的对比图。
🌟 二、DeepCFD+ 的六大核心亮点
DeepCFD+ 是基于 DeepCFD 工业化升级的一套训练架构,相比于原版的项目有较大的改进与提升,尤其大幅提高了对于算力的节约。具体区别如下:
能力维度 | DeepCFD | DeepCFD+ | 工程价值 |
---|---|---|---|
训练鲁棒性 | 无早停、无检查点、中断即重训 | ✅ 早停 + 检查点 + 自动恢复 | 避免算力浪费,保障长周期训练 |
配置管理 | 命令行传参(如 --epochs 2000 ) | 📄 config.yaml 集中管理 | 参数版本可控,实验可追溯 |
模型扩展 | 需修改主脚本硬编码分支 | 🧩 插件式注册,YAML 配置驱动 | 新模型 5 分钟集成,零侵入 |
可视化 | 手动调用 plot_results() | 📊 自动绘制 loss 曲线 + 预测场对比图 | 实时监控训练质量 |
日志与调试 | 仅 stdout 输出 | 🔍 结构化日志 + 异常捕获 | 快速定位问题,支持远程监控 |
可复现性 | 未固定随机种子 | 🔒 固定种子 + 环境快照 | 实验结果 100% 可复现 |
代码结构 | 所有逻辑塞进 DeepCFD.py | 模型 / 训练 / 工具 / 配置分离 | 高内聚低耦合,团队协作友好 |
💡 核心理念:DeepCFD 是“Proof of Concept”,DeepCFD+ 是“Production Ready”。
1️⃣ 工业级训练机制:稳如磐石
- ✅ 早停机制(Early Stopping):自动终止无改善训练,防止过拟合
- ✅ 模型检查点(Checkpointing):定期保存
best_model.pt
与latest.pt
,支持中断恢复 - ✅ 动态学习率调整:根据验证损失自适应衰减
- ✅ 多指标监控:同时跟踪训练/验证损失、自定义物理指标
项目完整结构如下:
DeepCFD+/
├── Models/ # 纯模型定义(无训练逻辑)
├── Lib/train_model.py # 封装 ModelTrainer 类,含完整训练流程
├── config.yaml # 所有超参集中配置
└── main.py # 极简入口:加载配置 → 启动训练
💡 对比原始 DeepCFD:后者无检查点、无早停,训练中断即前功尽弃。
2️⃣ 模块化模型架构:灵活扩展
DeepCFD+ 内置多种模型:
UNet.py
:标准 U-NetUNetEx.py
:论文推荐的扩展 U-Net(默认)AutoEncoder.py
:编码器-解码器结构
所有模型均通过 YAML 配置驱动,无需修改代码即可切换。
# config.yaml
models:UNetEx:lr: 0.001batch_size: 64epochs: 1000patience: 25
🧩 更支持自定义模型:只需新建
.py
文件 + YAML 配置,5 分钟集成!
3️⃣ 自动化可视化:训练过程一目了然
训练过程中,DeepCFD+ 自动:
- 绘制 训练/验证损失曲线
- 生成 预测 vs 真实场对比图 以及不同模型之间的性能对比热力图
- 保存结果至
results/
目录
下图展示的便是某 epoch
中四个模型在全场速度与压力(Ux, Uy, p)这三个方面的误差对比,可以直观看出模型在这一训练阶段的好坏:
无需手动调用绘图函数,告别“黑盒训练”。
4️⃣ 配置驱动开发:实验可追溯、可复现
所有超参数集中管理于 config.yaml
,包括:
- 学习率、批次大小、训练轮数
- 检查点保存频率
- 是否启用可视化
- 模型特定参数(如
hidden_dim
)
📌 优势:配置即实验记录,版本可控,团队协作无冲突。
5️⃣ 完善的工程保障
- 🔒 固定随机种子:确保实验 100% 可复现
- 📝 结构化日志系统:记录训练状态、指标、异常信息
- 🛡️ 异常处理机制:捕获 CUDA OOM、数据损坏等常见错误
- 💾 GPU 资源优化:自动检测设备,合理分配内存
6️⃣ 兼容官方数据集,开箱即用
完全兼容原版 DeepCFD 提供的 数据集(981 个通道流样本):
dataX.pkl
:3通道输入(障碍物SDF、流道区域、上下壁面SDF)dataY.pkl
:3通道输出(Ux, Uy, p)
可直接用于训练、验证、测试。
🧪 三、操作指南:5 分钟跑通训练
1️⃣ 安装依赖
git clone https://gitee.com/bao-jiachen/deep-cfd.git
cd deep-cfd
pip install -r requirements.txt
2️⃣ 准备数据
下载官方数据集:
wget https://zenodo.org/record/3666056/files/DeepCFD.zip?download=1 -O DeepCFD.zip
unzip DeepCFD.zip
mv DeepCFD/dataX.pkl Data/
mv DeepCFD/dataY.pkl Data/
📂 数据将自动被
main.py
识别。
3️⃣ 启动训练
python main.py
默认使用 UNetEx
模型,按 config.yaml
中的配置训练。
4️⃣ 查看结果
训练完成后,你将获得:
checkpoints/best_model.pt
:最佳模型(按验证损失保存)logs/training.log
:结构化训练日志results/prediction_*.png
:预测 vs 真实场对比图
🧩 四、如何添加自定义模型?
添加自定义模型需要在三个地方进行配置:
1️⃣ 创建模型文件
在 Models/
目录下创建你的模型文件,例如 MyCustomModel.py
:
import torch
import torch.nn as nnclass MyCustomModel(nn.Module):def __init__(self, in_channels, out_channels, **kwargs):super(MyCustomModel, self).__init__()# 实现你的模型结构self.model = nn.Sequential(nn.Conv2d(in_channels, 64, 3, padding=1),nn.ReLU(),nn.Conv2d(64, out_channels, 3, padding=1))def forward(self, x):return self.model(x)
2️⃣ 在 main.py 中注册模型
打开 main.py
文件,在模型导入部分添加:
# 在文件开头导入你的模型
from Models.MyCustomModel import MyCustomModel
然后在 ModelTrainer.create_model()
方法中添加模型配置代码:
elif self.model_name == "MyCustomModel":# 获取配置参数lr = self.kwargs.get('lr', 0.001)batch_size = self.kwargs.get('batch_size', 64)# 创建模型实例self.model = MyCustomModel(3, 3) # 根据需要调整输入输出通道数# 设置优化器self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)# 设置损失函数self.loss_func = self.unet_loss_func # 可以使用现有的或自定义的# 设置训练参数self.batch_size = batch_size
3️⃣ 在 config.yaml 中添加配置
在 config.yaml
文件的 models
部分添加你的模型配置:
models:MyCustomModel:lr: 0.001batch_size: 64epochs: 1000# 其他模型特定参数
4️⃣ 运行训练
完成以上步骤后,运行 python main.py
,框架会根据配置文件自动训练你的模型!
💡 支持自定义损失函数、评估指标、数据预处理逻辑。
📚 四、引用与致谢
本项目基于:
- 论文:DeepCFD: Fast and Accurate CFD Simulation via Deep Learning
- 原始代码:https://github.com/mdribeiro/DeepCFD
- 数据集:Zenodo Record #3666056
如用于科研,请引用原始论文。
📜 五、开源协议
MIT License —— 免费用于学术与商业项目。
💬 六、结语
DeepCFD+ 不仅复现了 DeepCFD 的强大能力,更将其从科研脚本升级为工业级训练框架。无论你是:
- 想快速复现论文结果的研究生
- 需要构建 CFD 代理模型的工程师
- 探索 AI for Science 的开发者
DeepCFD+ 都是你值得信赖的起点。
👉 Gitee地址:https://gitee.com/bao-jiachen/deep-cfd
👉 GitHub地址:https://github.com/baojiachen0214/DeepCFDplus⭐ 欢迎 Star & 提 Issue!让 CFD 仿真真正“飞”起来!
😊 作者谈:笔者是 DeepCFD+ 开发者,也是一名普通本科生,难免会出现一些低级的 bug,如果你在使用过程中遇到了问题,欢迎与我联系~