PaddleMaterials 任务模型 文档

全任务一览

electronic_structure/

电子密度场预测

预测式   InfGCN · MatENO

train.py → BaseTrainer
predict.py → FieldPredictor

property_prediction/

材料性质(能量/形成能/Cv 等)

预测式   DimeNetPlusPlus · iComformer · MEGNetPlus · SphereNet

train.py → BaseTrainer
predict.py → PropertyPredictor

interatomic_potentials/

原子间势(能量/力/应力)

预测式   CHGNet · M3GNet(MatterSim) · SphereNet

train.py → BaseTrainer
predict.py → PotentialPredictor

spectrum_enhancement/

STEM 图像增强

预测式   SFIN

train.py → BaseTrainer
predict.py → SpectrumPredictor

spectrum_elucidation/

NMR 谱 → 分子结构

生成式   DiffNMR

train.py → BaseTrainer
sample.py → MolecularSampler

structure_generation/

条件/无条件晶体生成

生成式   DiffCSP · MatterGen

train.py → BaseTrainer
sample.py → StructureSampler

预测式模型

8 个预测式模型的 forward 完全一致

class MyModel(paddle.nn.Layer):
    def forward(self, data, return_loss=True, return_prediction=True):
        pred = self._forward(data)           # 内部前向(各模型不同)
        loss_dict, pred_dict = {}, {}
        if return_loss:                       # 训练时:算 loss
            loss_dict["loss"] = some_loss(pred, data["label"])
        if return_prediction:                 # 评估/推理时:返回预测
            pred_dict["property"] = pred
        return {"loss_dict": loss_dict, "pred_dict": pred_dict}
flowchart LR A(["data (graph/field/image)"]) --> F["forward(data, return_loss, return_prediction)"] F -- "return_loss=True" --> LD["loss_dict:{'loss',...}"] --> T["BaseTrainer 反向传播"] F -- "return_prediction=True" --> PD["pred_dict:{'energy','force',...}"] --> E["BaseTrainer.eval / Predictor"]

各预测式模型的输入/输出

模型任务输入 data输出 pred_dict
InfGCN电子密度graph + grid_coorddensity(体网格密度场)
MatENO电子密度graph + grid_coorddensity
DimeNetPlusPlus性质graph(分子/晶体)标量性质(如形成能)
iComformer性质graph(晶体)标量性质
MEGNetPlus性质graph(分子/晶体)标量性质(property_name
SphereNet性质/势graph + triplet indices能量 / 力
CHGNetgraph(晶体 + angles)energy_per_atom · force · stress · magmom
M3GNet(MatterSim)graph(晶体/分子)能量 / 力 / 应力
SFIN图像增强image tensor增强后的 target_name 图像

生成式模型

训练与生成分离:训练forward 返回扩散 loss(BaseTrainer 优化);生成时调 model.sample()(不经过 Trainer)。

# 训练(BaseTrainer)
def forward(self, batch):
    ...  # 扩散前向:加噪 → 预测噪声 → loss
    return {"loss_dict": {"loss": total_loss, "loss_coord": ..., "loss_atom": ...}}

# 生成(sample.py + Sampler,不经 Trainer)
def sample(self, batch, num_inference_steps=1000, **kwargs):
    ...  # 反向扩散采样
    return generated_structures
flowchart TD subgraph TRAIN["训练"] B1(["batch"]) --> F["model.forward(batch)"] --> LD["{loss_dict}"] --> BT["BaseTrainer.train()"] end subgraph GEN2["生成(独立于 Trainer)"] S1(["条件/种子"]) --> MS["model.sample()"] --> SM["MolecularSampler / StructureSampler"] --> OUT(["生成的分子/晶体"]) end

各生成式模型

模型任务生成目标采样器
DiffNMRNMR 谱阐明NMR 谱 → 分子图MolecularSampler
DiffCSP晶体结构生成原子类型+坐标+晶格 → 晶体StructureSampler
MatterGen / MatterGenWithCondition条件晶体生成(条件)→ 晶体StructureSampler

共享基础设施

组件用途使用任务
RadiusGraphConverter分子/晶体 → PGL 半径图性质、势、电子结构、NMR
MolecularGraphConverterRDKit Mol → PGL 图NMR、性质(分子)
CHGNetGraphConverter · M3GNetGraphConvertor任务专用图构建势(CHGNet/M3GNet)
DefaultCollator通用 batch(ndarray/pgl.Graph/Data)全部
RadiusGraphCollator半径图 batch + triplet 偏移性质、势
DensityCollator体密度场 batch(padding+mask)电子结构
MolecularSampler · StructureSampler扩散采样编排NMR、结构生成
BasePredictor → Field/Property/Potential/Spectrum推理编排预测式任务
build_vocab原子/键词表(注册+下载)按需(电子结构、NMR)

选型建议

你的目标推荐模型理由
预测分子/晶体标量性质SphereNet · MEGNetPlus · DimeNetPlusPlus成熟的 3D GNN,SE(3) 等变或消息传递
预测能量/力/应力(势)CHGNet · M3GNet(MatterSim) · SphereNet含力/应力输出,适合 MD
预测电子密度场InfGCN · MatENO连续场算子学习,SE(3) 等变
图像增强(STEM)SFIN专门的频谱图像增强网络
从 NMR 谱生成分子DiffNMR扩散 + CLIP 条件
生成晶体结构MatterGen(条件)/ DiffCSP扩散模型,支持条件生成

注册权重

以下为 MODEL_REGISTRYppmat/models/__init__.py)中已注册的预训练权重,通过 --model_name 自动下载:

任务模型注册名(--model_name数量
property_predictioniComformercomformer_mp2018_train_60k_{e_form,band_gap,G,K} · comformer_mp2024_train_130k_e_form · comformer_jarvis_{dft_2d,dft_3d,alex_pbe_2d_all}_e_form8
MEGNetPlusmegnet_mp2018_train_60k_{e_form,band_gap,G,K} · megnet_mp2024_train_130k_e_form · megnet_jarvis_{dft_2d,dft_3d,alex_pbe_2d_all}_e_form8
DimeNetPlusPlusdimenetpp_mp2018_train_60k_{e_form,band_gap,G,K}4
SphereNetspherenet_qm9_{mu,alpha,homo,lumo,gap,r2,zpve,U0,U,H,G,Cv}12
interatomic_potentialsCHGNetchgnet_mptrj1
M3GNet(MatterSim)mattersim_{1M,5M}2
SphereNetspherenet_md17_{aspirin,benzene_old,ethanol,malonaldehyde,naphthalene,salicylic,toluene,uracil}8
electronic_structureInfGCNinfgcn_md17_{benzene,ethane,ethanol,malonaldehyde,phenol,resorcinol} · infgcn_{mp,qm9} · infgcn_omol25_mc_5k_trimmed9
spectrum_enhancementSFINsfin_{haadf,bf}_{enhance,detect}4
spectrum_elucidationDiffNMRdiffnmr_msdnmr_nless151
structure_generationDiffCSPdiffcsp_mp201
MatterGenmattergen_{mp20,alex_mp20}_*(含 dft_band_gap / chemical_system / dft_bulk_modulus / dft_mag_density / space_group 等条件变体) · mattergen_ml2ddb{,_chemical_system,_space_group}17
{a,b,c} 表示该前缀下的多个变体。如 spherenet_qm9_{mu,alpha} = spherenet_qm9_mu + spherenet_qm9_alpha。用法:python <task>/predict.py --model_name <注册名> --weights_name best.pdparams
所有模型都注册在 ppmat/models/__init__.py,配置里用 __class_name__ 引用。MODEL_REGISTRY(同文件)管理预训练权重的 BCE 下载链接。详见 Trainer 文档 →
↑ 顶部