可用于从稀疏带噪声观测数据重建抛体轨迹、推断重力加速度和空气阻力系数等物理参数。项目实现完整PINN框架,具备外推预测和不确定性量化能力,采用SIREN网络架构,支持多场景训练与评估。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 26 天前 | ||
| 28 天前 | ||
| 26 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 28 天前 | ||
| 26 天前 | ||
| 26 天前 | ||
| 28 天前 |
AtomVision_TrajectoryPINN
🏆 AtomGit & 天津商业大学 — 第一届 AtomVision 开物观理·物理视觉挑战赛
赛道一:BPT-Norm 纯数值物理推理赛
物理信息神经网络 (Physics-Informed Neural Networks, PINNs) 用于小球轨迹预测与物理参数识别
📋 项目概述
本项目实现了一个完整的 PINN 框架,用于解决抛体运动的轨迹预测和物理参数识别问题:
| 能力 | 描述 |
|---|---|
| 轨迹预测 | 从稀疏、带噪声的观测数据重建完整抛体轨迹 |
| 物理参数识别 | 自动推断重力加速度 (g)、空气阻力系数 (k) 等物理参数 |
| 外推预测 | 基于物理约束,从部分观测外推未来轨迹 |
| 不确定性量化 | 多模型集成提供预测置信区间 |
物理模型
控制方程(含二次空气阻力 + 风):
dx/dt = vx
dy/dt = vy
dvx/dt = -(k/m) · (vx − wx) · |v − w|
dvy/dt = −g − (k/m) · (vy − wy) · |v − w|
PINN 架构
- 网络: SIREN (Sinusoidal Representation Network) — 适合高阶自动微分
- 输入: 时间 t
- 输出: 位置 (x(t), y(t))
- 约束: 数据拟合 + ODE 残差 + 初始条件 + 参数先验
🚀 快速开始
环境配置
# 克隆仓库 (在 GitCode 组织内创建后)
git clone <your-repo-url>
cd AtomVision_TrajectoryPINN
# 安装依赖
pip install -r requirements.txt
# 昇腾 NPU 用户 (可选)
pip install torch-npu
训练
# 标准训练 (轨迹预测 + 参数识别)
python main.py
# 快速测试 (200 epochs)
python main.py --mode quick
# 外推能力测试 (仅用前半段数据训练)
python main.py --mode extrapolate
# 参数识别专项测试
python main.py --mode identify
# 加载已有模型评估
python main.py --mode eval --checkpoint outputs/checkpoints/best_model.pt
Jupyter Notebook
jupyter notebook notebooks/demo.ipynb
📁 项目结构
AtomVision_TrajectoryPINN/
├── README.md # 本文件
├── requirements.txt # Python 依赖
├── main.py # 主入口脚本
├── config/
│ └── config.yaml # 配置文件 (物理参数、模型、训练)
├── physics/ # 物理引擎
│ ├── equations.py # ODE 定义、RK4 求解器、解析解
│ └── parameters.py # 物理参数与初始条件数据类
├── models/ # 神经网络模型
│ ├── layers.py # SIREN 层、激活函数
│ └── pinn.py # TrajectoryPINN 网络 + 可训练物理参数
├── data/ # 数据处理
│ └── generate_data.py # 合成数据生成、数据集分割、DataLoader
├── training/ # 训练管线
│ ├── losses.py # 多任务损失函数 (数据 + 物理 + 初始条件)
│ └── train.py # 训练器 (早停、检查点、TensorBoard)
├── evaluation/ # 评估与可视化
│ ├── metrics.py # 轨迹误差、参数误差、飞行特征误差
│ └── visualize.py # 轨迹图、损失曲线、参数收敛图
├── utils/ # 工具函数
│ └── helpers.py # 随机种子、设备选择、配置加载
├── notebooks/
│ └── demo.ipynb # 交互式演示 Notebook
└── outputs/ # 输出目录 (自动生成)
├── checkpoints/ # 模型检查点
├── logs/ # TensorBoard 日志
└── figures/ # 可视化图表
⚙️ 配置说明
编辑 config/config.yaml 调整参数:
# 物理参数真值 (数据生成)
physics:
gravity: 9.8 # 重力加速度
drag_coefficient: 0.1 # 空气阻力系数
mass: 1.0 # 质量
# 模型架构
model:
hidden_layers: [64, 128, 128, 64, 32]
activation: "sin" # SIREN 激活函数
omega_0: 30.0 # 频率缩放
# 训练
training:
epochs: 5000
learning_rate: 1.0e-3
loss_weights:
data: 1.0 # 数据拟合
physics: 0.1 # 物理残差
initial: 10.0 # 初始条件
📊 评估指标
| 指标 | 说明 |
|---|---|
| MSE(x), MSE(y) | 位置预测均方误差 |
| RMSE(position) | 位置总均方根误差 |
| 轨迹余弦相似度 | 预测轨迹与真值的方向一致性 |
| 射程误差 | 落地位置预测误差 (米) |
| 最高点误差 | 轨迹最高点预测误差 (米) |
| 参数相对误差 | g, k 的推断相对误差 |
🔬 实验结果示例
| 场景 | RMSE(pos) | 射程误差 | g 误差 | k 误差 |
|---|---|---|---|---|
| 标准 (30 观测点, σ=0.05) | ~0.05 m | ~0.10 m | <1% | <5% |
| 外推 (前50%训练) | ~0.15 m | ~0.30 m | <2% | <10% |
| 稀疏 (15 观测点) | ~0.08 m | ~0.15 m | <1.5% | <7% |
🛠️ 技术栈
- 深度学习: PyTorch 2.x
- 科学计算: NumPy, SciPy
- 可视化: Matplotlib, TensorBoard
- 配置管理: PyYAML, OmegaConf
- 硬件加速: CUDA (NVIDIA GPU) / NPU (华为昇腾)
👥 团队
- 队伍成员: 1-3 人
- 研究方向: 计算机视觉 (CV) + 物理信息神经网络 (PINNs)
📚 参考资料
- Raissi, M., Perdikaris, P., & Karniadakis, G. E. (2019). Physics-informed neural networks: A deep learning framework for solving forward and inverse problems involving nonlinear partial differential equations. Journal of Computational Physics.
- Sitzmann, V., et al. (2020). Implicit Neural Representations with Periodic Activation Functions. NeurIPS.
- Karniadakis, G. E., et al. (2021). Physics-informed machine learning. Nature Reviews Physics.
📄 License
本项目仅供 AtomVision 开物观理·物理视觉挑战赛参赛使用。