目录

XRD 自动分析工具

本项目是 XRD-AutoAnalyzer 的 PyTorch 实现,用于 X 射线衍射(XRD)图谱的物相自动识别。

新方法

📌 XRDNetWithDynamic

✨ 特性

  • 大核卷积 (LKConv)
    固定 kernel_size=101 的卷积提供开阔的感知野,以捕获 XRD 图谱中的长程相关性。

  • 动态深度卷积 (DynamicConv1D)
    针对每个样本和每个通道自适应生成 3×1 核,实现与输入相关的特征提取。

  • 融合机制
    将大核卷积与动态卷积的输出与主干特征融合,以更好地平衡全局与局部信息。


🛠 使用

python construct_xrd_model.py --use_dynamic

安装

可按以下方式安装本包:

git clone https://gitlink.org.cn/wangronghang/XRD_autoanalyze.git
cd XRD_autoanalyze/
pip install --user .

注意:--user 参数对于确保 Rietveld 精修功能正确安装很重要。

使用示例

Example/ 目录中提供了 Li-Mn-Ti-O-F 化学空间的预训练模型。要对 Spectra/ 子文件夹中的实验图谱进行分类,请运行:

python run_CNN.py

该过程通常需要约 1–2 分钟。单核 CPU 上每个谱的处理时间约为 10 秒,具体因系统而异。支持并行计算,默认将使用所有可用 CPU,训练和推理也可使用 GPU。

所有图谱分类完成后,会打印每组的预测物相及其对应概率(%)。这些概率表示各预测物相的置信度,一般置信度越高,预测越可靠。

为新材料成分训练模型

要针对新的化学空间训练物相识别模型,请将所有相关 CIF 文件放入 Novel-Space/All_CIFs,然后进入 Novel-Space/ 目录并执行:

python construct_xrd_model.py

该脚本将:

  1. 从提供的 CIF 中筛选出所有唯一物相。若希望使用自定义参考物相而不进行筛选,请将所有 CIF 放入名为 References 的文件夹,并运行 python construct_xrd_model.py --skip_filter。注意:模型训练完成后,不应在 References 文件夹中增删文件。

  2. 若指定 --include_ns:在化学计量相之间生成假想固溶体。

  3. 根据 (1) 和 (2) 得到的物相模拟增强 XRD 图谱。

  4. 基于增强图谱训练卷积神经网络。

当用户提供大量可能参考相、且某些相在常见实验条件下难以获得时,通常会排除将元素置于异常氧化态的化合物,可通过添加选项实现:

python construct_xrd_model.py --oxi_filter

默认训练图谱在 2θ = 10–80° 范围内模拟(假设 Cu Kα 辐射)。也可自定义角度范围:

python construct_xrd_model.py --min_angle=10.0 --max_angle=80.0

也可使用其他 X 射线波长,但应在推理时指定。所有图谱将转换为 Cu Kα 对应角度。

模型创建过程所需计算资源取决于成分空间大小。例如:在 Li-Mn-Ti-O-F 空间(含 255 个参考相)完成全部步骤约需单核 4 小时。计算时间大致与参考相数量成正比,并与所用核数成反比(所有步骤均可并行执行)。

完成后将生成训练好的 Model.pth 文件。

数据增强中默认使用的伪影边界如下:

  • 峰位移(非均匀):各晶格参数上施加 ±3% 应变
  • 峰位移(均匀):样品高度误差导致所有峰位 ±0.5° 偏移
  • 峰宽化:畴尺寸 5–30 nm
  • 峰强度变化:择优取向导致峰高 ±50% 变化
  • 杂质峰:最大峰高的 70%

也可自定义边界,例如:

python construct_xrd_model.py --max_strain=0.04 --max_shift=1.0 --min_domain_size=1.0 --max_domain_size=100.0 --max_texture=0.5 --impur_amt=70.0

默认训练 50 个 epoch,通常足以收敛且不过拟合,也可自定义:

python construct_xrd_model.py --num_epochs=50

多相图谱分析

在包含 Model.pth 的目录中,将待分类图谱放入 Spectra/ 文件夹,文件需为 xy 格式(两列数据)。

将文件放入 Spectra/ 后,执行:

python run_CNN.py

输出格式如下:

Filename: (图谱文件名)
Predicted phases: (phase_1 + phase_2 + ...)
Confidence: (上述物相的对应概率)

物相标签格式为 formula_spacegroup

默认仅显示置信度高于 40% 的物相。可通过运行时 --min_conf 调整最小置信度。低置信度物相通常不可靠,请谨慎使用。

若图谱 2θ 范围不是 10–80°,需手动指定最小和最大衍射角(Cu Kα 下),且必须与模型创建时使用的范围一致:

python run_CNN.py --min_angle=10.0 --max_angle=80.0

模型默认假设使用 Cu Kα 辐射。用户也可指定任意波长(lambda,单位埃):

python run_CNN.py --wavelength=lambda

若为非 Cu Kα 波长指定了 min_anglemax_angle,该角度范围会在转换为 Cu Kα 对应的 2θ 之后进行解释。

对每个图谱,物相识别算法会运行直至 (i) 识别出最多 3 种不同化合物,或 (ii) 识别出强度 ≥ 图谱最大强度 5% 的所有峰。可通过以下参数修改(NI):

python run_CNN.py --max_phases=N --cutoff_intensity=I

要绘制预测物相的线形并与实测谱对比,可使用 --plot

python run_CNN.py --plot

将得到类似下图的输出:

sample

默认所有图会显示后关闭。也可保存为 png 文件:

python run_CNN.py --plot --save

要使用自动 Rietveld 精修获得多相样品中各化合物的重量分数,可使用 --weights

python run_CNN.py --weights

输出中会额外增加一行:

Filename: (图谱文件名)
Predicted phases: (phase_1 + phase_2 + ...)
Confidence: (上述物相的对应概率)
Weight fractions: (上述各物相的重量分数)

若希望将特定参考相与实测谱对比,可使用 visualize.py

python visualize.py --spectrum='filename' --ph='cmpd1_sg' --ph='cmpd2_sg'

其中 cmpd1_sgcmpd2_sg 为要拟合并绘制的物相。若角度范围或波长与默认值不同,也需一并指定。

未知峰

当部分峰无法归因于训练集中的已知物相时,会出现以下提示:

WARNING: some peaks (I ~ X%) were not identified.

其中 X% 表示未识别峰的最大强度。可通过在运行时添加 --show_reduced(配合 --plot)可视化这些峰,将显示扣除所有已知物相峰后的剩余谱(黄色虚线)。

默认当剩余未知峰强度超过初始最大强度 25% 时显示警告。可通过 --unknown_thresh 修改该阈值。

对分布函数 (PDF)

为进一步提高物相识别精度,可训练两个模型:一个基于模拟 XRD 图谱,另一个基于这些 XRD 图谱傅里叶变换得到的虚拟 PDF。步骤如下:先按前述流程训练 XRD 模型,再训练 PDF 模型:

python construct_pdf_model.py

假定当前目录已有训练好的 XRD 模型 Model.pth,且已完成 CIF 筛选(存在 References 文件夹)。训练 PDF 模型时,应指定与 XRD 训练相同的参数(辐射波长、扫描范围、伪影幅度等),CIF 筛选相关参数除外。

训练完成后,会在 Models 文件夹中生成 XRD_Model.pthPDF_Model.pth。在分析新图谱时,该文件夹应位于工作目录中。

与前述 XRD 分析类似,将图谱放入 Spectra 文件夹后,可同时使用两个模型进行物相识别。要启用 PDF 模型,需在运行时指定 --inc_pdf

python run_CNN.py --inc_pdf

预测结果将来自 XRD 模型和 PDF 模型预测物相的置信度加权组合。默认仅显示合并后的预测,也可分别显示各模型预测:

python run_CNN.py --inc_pdf --show_indiv

前述所有运行时参数同样适用于 PDF 分析。

关于
196.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号 京公网安备 11010802032778号