将下载脚本移至项目根目录
- 将 download_script.py 和 download_script_mp.py 从 data/cif/ 移至项目根目录
- 更新 auto_download.sh 和 auto_download_mp.sh 中的脚本路径引用
- 更新 README.md 中所有相关路径和示例
- 更新脚本文件中的注释示例
- 这些脚本是代码文件而非数据文件,应放在项目根目录
Co-authored-by: Cursor cursoragent@cursor.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号
京公网安备 11010802032778号
XRD Identifier
基于深度学习的 X 射线衍射(XRD)光谱材料识别系统。该系统使用 RegNet-1D 网络架构和 AdaCos 损失函数,能够从 XRD 光谱数据中自动识别晶体材料的类别。
📋 目录
✨ 功能特性
read_cif.py)与 XRD 光谱转换(convertXRDspectra.py)支持多进程并行,可充分利用多核 CPU📁 项目结构
🔧 环境要求
📦 安装依赖
🚀 快速开始
1. 下载 CIF 文件
支持 COD 与 Materials Project (MP) 两个数据源,按元素组合下载 CIF。
从 COD 下载(无需 API Key):
从 Materials Project 下载(需 API Key,见 MP 官网):
2. 准备训练数据
步骤 2.1:读取和验证 CIF 文件
该脚本会:
./data/cif目录下的所有.cif文件./data/lithium_datasets.pkl(pymatgen 的 warning 已屏蔽,便于查看进度)步骤 2.2:转换为 XRD 光谱数据
该脚本会:
./data/xrd_pkls/XRD_epoch*.pkl(包含光谱数组和标签)./data/material_labels.csv(材料名称 ↔ 类别 ID 映射)3. 训练模型
训练过程会:
./data/checkpoints/regnet1d_adacos_epoch<epoch>.pt./data/learning_curve.csv4. 使用模型进行预测
从真实测量的 XRD txt 文件预测:
脚本会自动:
批量评估(使用 CIF 文件模拟):
📖 详细使用说明
CIF 下载脚本 - COD (
download_script.py)从 Crystallography Open Database (COD) 按元素组合下载 CIF,保存到
<output-root>/cod/<元素组合>/。参数说明:
--elements/-e:必需,元素列表,例如"Bi,Si"或"Bi, Si, Te"--output-root:输出根目录(默认:./data/cif);COD 数据写入<output-root>/cod/<元素组合>/--allow-extra-elements:允许化合物包含除指定元素外的其他元素--sleep:下载间隔时间(秒),避免对服务器造成压力(默认:0.2)示例:
CIF 下载脚本 - Materials Project (
download_script_mp.py)从 Materials Project (MP) 按元素组合下载 CIF,保存到
<output-root>/mp/<元素组合>/。需 MP API Key(申请),并安装pip install mp-api。参数说明:
--elements/-e:必需,元素列表--output-root:输出根目录(默认:./data/cif);MP 数据写入<output-root>/mp/<元素组合>/--allow-extra-elements:允许除指定元素外还含其他元素(最多 8 种)--api-key:MP API Key(也可设置环境变量MP_API_KEY或PMG_MAPI_KEY)--sleep:每写入一个 CIF 后的等待时间(秒),默认 0.2示例:
CIF 读取脚本 (
read_cif.py)功能:
.cif文件min(32, CPU核数))(structures, atoms, attributes)的 pickle 文件示例:
XRD 光谱转换脚本 (
convertXRDspectra.py)功能:
(N, L),L=6000)参数说明:
--input:输入的 pickle 文件路径(默认:./data/lithium_datasets.pkl)--batch:DataLoader 每批返回的样本数(默认:8);不影响总耗时,仅影响主循环批次数--n_aug:数据增强次数(默认:5)--num_workers:并行进程数(默认:os.cpu_count(),即用满所有核);若内存紧张可适当减小,如--num_workers 16--resume_from_epoch:从已有的XRD_epoch<resume_from_epoch>.pkl恢复,只生成后续 epoch(例如:--resume_from_epoch 4表示从 epoch4 开始,生成 epoch5 及之后)。适用场景:如果之前生成到 epoch4 后中断,可用此参数继续生成,避免重复计算输出:
./data/xrd_pkls/XRD_epoch*.pkl:每个 epoch 的 XRD 光谱数据./data/material_labels.csv:材料名称 ↔ 类别 ID 映射(自动生成)示例:
模型训练脚本 (
train_expert.py)功能:
参数说明:
--input:XRD 光谱数据 pickle 文件(默认:./data/xrd_pkls/XRD_epoch5.pkl)--output:学习曲线 CSV 文件(默认:./data/learning_curve.csv)--batch:批处理大小(默认:16)--n_epoch:训练轮数(默认:100)输出:
./data/checkpoints/regnet1d_adacos_epoch<epoch>.pt:模型权重文件./data/learning_curve.csv:训练曲线数据预测脚本 (
predict_from_txt.py)功能:
参数说明:
--input:必需,输入的 txt 光谱文件路径--model:可选,指定模型权重路径(默认:自动查找./data/checkpoints/、./checkpoints/或当前目录下最新的.pt)--labels:标签映射文件(默认:./data/material_labels.csv)--unknown-threshold:可选,当最高类别的 softmax 概率低于该阈值时,将结果判定为“未知材料 (Unknown)`;默认不启用(None)txt 文件格式:
#注释行的格式示例:
评估脚本 (
evaluate_from_cif.py)功能:
参数说明:
--cif_dir:CIF 文件目录(默认:./data/cif_test)--labels:标签映射文件(默认:./data/material_labels.csv)--model:模型权重路径(默认:自动查找)--batch_size:批处理大小(默认:32)--max_samples:最多评估样本数(用于调试,默认:全部)示例:
📊 输出文件说明
material_labels.csv材料名称与类别 ID 的映射表,格式:
learning_curve.csv训练过程记录,包含列:
loss_train:训练损失acc_train:训练准确率(Top-5)loss_val:验证损失acc_val:验证准确率(Top-5)./data/checkpoints/regnet1d_adacos_epoch*.ptPyTorch 模型权重文件,包含:
Net1D主网络参数AdaCos分类头参数./data/xrd_pkls/XRD_epoch*.pklXRD 光谱数据,包含:
spectra:形状(N, L)的光谱数组(L=6000)labels:形状(N,)的标签数组🏗️ 模型架构
RegNet-1D
(batch_size, 1, 6000)的 XRD 光谱数据AdaCos(Adaptive Cosine Scaling)
损失函数
⚠️ 注意事项
download_script.py时,默认只下载恰好包含指定元素的化合物;使用--allow-extra-elements可包含其他元素material_labels.csv中,模型无法正确分类predict_from_txt.py会自动处理各种格式的 txt 文件,但建议使用标准的 2θ-强度两列格式convertXRDspectra.py为多进程并行设计,在 CPU 上运行以充分利用多核./data/checkpoints/、./data/xrd_pkls/等)会在首次使用时自动创建read_cif.py、convertXRDspectra.py的多进程会占用较多内存(每进程约 2–3 GB 量级)。若内存不足可减小convertXRDspectra.py的--num_workers;read_cif.py的并行数在代码内为min(32, CPU核数),可按需修改。./data/cif/cod/<元素组合>/,MP 数据保存在./data/cif/mp/<元素组合>/。若之前使用过旧版脚本、数据在cif/<元素组合>/,可整体移动到./data/cif/cod/<元素组合>/,再运行read_cif.py --input ./data/cif。convertXRDspectra.py在生成过程中中断(例如生成到 epoch4 后死机),可使用--resume_from_epoch 4从已有文件恢复,只生成后续 epoch,避免重复计算已完成的 epoch。./data软连接指向外部备份目录,便于维护不同版本的数据。所有生成的数据文件(CIF、模型、训练数据等)都保存在./data/目录下,该目录已加入.gitignore。📝 完整工作流程示例
📄 许可证
本项目遵循相应的开源许可证(请根据实际情况填写)。
🙏 致谢
read_cif.py)如有问题或建议,欢迎提交 Issue 或 Pull Request。