chore: 同步本地修改
- Example/construct_xrd_model.py, visualize.py
- Novel-Space/construct_pdf_model.py, construct_xrd_model.py, run_CNN.py, visualize.py
- PDF_Example/run_CNN.py
- train_my_model.py
- 推送到远程仓库说明.md
Co-authored-by: Cursor cursoragent@cursor.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号
京公网安备 11010802032778号
XRD 自动分析工具
本项目是 XRD-AutoAnalyzer 的 PyTorch 实现,用于 X 射线衍射(XRD)图谱的物相自动识别。
新方法
📌 XRDNetWithDynamic
✨ 特性
大核卷积 (LKConv)
固定
kernel_size=101的卷积提供开阔的感知野,以捕获 XRD 图谱中的长程相关性。动态深度卷积 (DynamicConv1D)
针对每个样本和每个通道自适应生成
3×1核,实现与输入相关的特征提取。融合机制
将大核卷积与动态卷积的输出与主干特征融合,以更好地平衡全局与局部信息。
🛠 使用
安装
可按以下方式安装本包:
注意:
--user参数对于确保 Rietveld 精修功能正确安装很重要。使用示例
Example/目录中提供了 Li-Mn-Ti-O-F 化学空间的预训练模型。要对Spectra/子文件夹中的实验图谱进行分类,请运行:该过程通常需要约 1–2 分钟。单核 CPU 上每个谱的处理时间约为 10 秒,具体因系统而异。支持并行计算,默认将使用所有可用 CPU,训练和推理也可使用 GPU。
所有图谱分类完成后,会打印每组的预测物相及其对应概率(%)。这些概率表示各预测物相的置信度,一般置信度越高,预测越可靠。
为新材料成分训练模型
要针对新的化学空间训练物相识别模型,请将所有相关 CIF 文件放入
Novel-Space/All_CIFs,然后进入Novel-Space/目录并执行:该脚本将:
从提供的 CIF 中筛选出所有唯一物相。若希望使用自定义参考物相而不进行筛选,请将所有 CIF 放入名为
References的文件夹,并运行python construct_xrd_model.py --skip_filter。注意:模型训练完成后,不应在 References 文件夹中增删文件。若指定
--include_ns:在化学计量相之间生成假想固溶体。根据 (1) 和 (2) 得到的物相模拟增强 XRD 图谱。
基于增强图谱训练卷积神经网络。
当用户提供大量可能参考相、且某些相在常见实验条件下难以获得时,通常会排除将元素置于异常氧化态的化合物,可通过添加选项实现:
默认训练图谱在 2θ = 10–80° 范围内模拟(假设 Cu Kα 辐射)。也可自定义角度范围:
也可使用其他 X 射线波长,但应在推理时指定。所有图谱将转换为 Cu Kα 对应角度。
模型创建过程所需计算资源取决于成分空间大小。例如:在 Li-Mn-Ti-O-F 空间(含 255 个参考相)完成全部步骤约需单核 4 小时。计算时间大致与参考相数量成正比,并与所用核数成反比(所有步骤均可并行执行)。
完成后将生成训练好的
Model.pth文件。数据增强中默认使用的伪影边界如下:
也可自定义边界,例如:
默认训练 50 个 epoch,通常足以收敛且不过拟合,也可自定义:
多相图谱分析
在包含
Model.pth的目录中,将待分类图谱放入Spectra/文件夹,文件需为xy格式(两列数据)。将文件放入
Spectra/后,执行:输出格式如下:
物相标签格式为
formula_spacegroup。默认仅显示置信度高于 40% 的物相。可通过运行时
--min_conf调整最小置信度。低置信度物相通常不可靠,请谨慎使用。若图谱 2θ 范围不是 10–80°,需手动指定最小和最大衍射角(Cu Kα 下),且必须与模型创建时使用的范围一致:
模型默认假设使用 Cu Kα 辐射。用户也可指定任意波长(
lambda,单位埃):若为非 Cu Kα 波长指定了
min_angle和max_angle,该角度范围会在转换为 Cu Kα 对应的 2θ 之后进行解释。对每个图谱,物相识别算法会运行直至 (i) 识别出最多 3 种不同化合物,或 (ii) 识别出强度 ≥ 图谱最大强度 5% 的所有峰。可通过以下参数修改(
N和I):要绘制预测物相的线形并与实测谱对比,可使用
--plot:将得到类似下图的输出:
默认所有图会显示后关闭。也可保存为 png 文件:
要使用自动 Rietveld 精修获得多相样品中各化合物的重量分数,可使用
--weights:输出中会额外增加一行:
若希望将特定参考相与实测谱对比,可使用
visualize.py:其中
cmpd1_sg和cmpd2_sg为要拟合并绘制的物相。若角度范围或波长与默认值不同,也需一并指定。未知峰
当部分峰无法归因于训练集中的已知物相时,会出现以下提示:
其中
X%表示未识别峰的最大强度。可通过在运行时添加--show_reduced(配合--plot)可视化这些峰,将显示扣除所有已知物相峰后的剩余谱(黄色虚线)。默认当剩余未知峰强度超过初始最大强度 25% 时显示警告。可通过
--unknown_thresh修改该阈值。对分布函数 (PDF)
为进一步提高物相识别精度,可训练两个模型:一个基于模拟 XRD 图谱,另一个基于这些 XRD 图谱傅里叶变换得到的虚拟 PDF。步骤如下:先按前述流程训练 XRD 模型,再训练 PDF 模型:
假定当前目录已有训练好的 XRD 模型
Model.pth,且已完成 CIF 筛选(存在References文件夹)。训练 PDF 模型时,应指定与 XRD 训练相同的参数(辐射波长、扫描范围、伪影幅度等),CIF 筛选相关参数除外。训练完成后,会在
Models文件夹中生成XRD_Model.pth和PDF_Model.pth。在分析新图谱时,该文件夹应位于工作目录中。与前述 XRD 分析类似,将图谱放入
Spectra文件夹后,可同时使用两个模型进行物相识别。要启用 PDF 模型,需在运行时指定--inc_pdf:预测结果将来自 XRD 模型和 PDF 模型预测物相的置信度加权组合。默认仅显示合并后的预测,也可分别显示各模型预测:
前述所有运行时参数同样适用于 PDF 分析。