docs: add reproduced training curves
本项目使用 Jittor 在 ModelNet40 点云数据上训练增强版 PCT 分类模型。训练、推理提交和画图相互独立,中途停止训练后仍可直接使用已保存的最佳模型。
更完整的逐步命令见 操作指南.md。
操作指南.md
python -m pip install -r requirements.txt
从计图挑战赛“赛道二热身赛”赛题附件获取预处理后的 ModelNet40 数据,并解压到 data/。数据集受其原始许可约束且文件较大,因此本仓库不分发 .npy 数据文件; 更详细的字段和形状说明见 data/README.md。默认目录结构如下:
data/
.npy
data/README.md
data/ ├── train_points.npy # (9843, 2048, 3) ├── train_labels.npy # (9843,) ├── test_points.npy # (2468, 2048, 3) └── categories.txt
可通过 --data_dir 指定其他目录。
--data_dir
python train.py --data_dir ./data --output_dir ./outputs
默认从有标签训练数据中按类别留出 10% 作为本地验证集。官方无标签测试集不会参与模型选择。 默认随机种子为 42,可通过 --seed 修改。每次训练都会保存实际配置和运行命令,便于复现。
42
--seed
训练过程中会持续保存:
outputs/best_val.pkl
outputs/best_train.pkl
outputs/last.pkl
outputs/epoch_XXX.pkl
outputs/history.csv
outputs/metrics.jsonl
outputs/batch_metrics.jsonl
outputs/config.json
outputs/command.txt
outputs/commands.txt
按一次 Ctrl+C 或 IDE 的正常停止按钮时,程序会原子保存 last.pkl。强制结束进程或断电时,仍可使用上一轮已经原子写好的权重。
Ctrl+C
last.pkl
继续训练:
python train.py --output_dir ./outputs --resume auto
也可以显式指定:
python train.py --resume ./outputs/last.pkl
若希望全部 9843 个训练样本参与训练:
python train.py --val_ratio 0 --output_dir ./outputs_full
这种模式没有本地验证准确率,因此只生成 best_train.pkl 和 last.pkl。建议先使用验证划分确定训练轮数,再进行全数据训练。
best_train.pkl
python infer.py --output_dir ./outputs --votes 10
未指定 --checkpoint 时,按以下顺序自动选择现存权重:
--checkpoint
best_val.pkl
也可显式选择:
python infer.py \ --checkpoint ./outputs/best_val.pkl \ --result_path ./result.json \ --zip_path ./result.zip \ --votes 10
最终生成的 result.zip 内只有根目录下的 result.json,可直接提交。
result.zip
result.json
python plot_metrics.py --output_dir ./outputs
输出为 outputs/training_curves.png,包含训练/验证损失、准确率、学习率和批次训练损失。即使没有训练到 200 轮,也会绘制已有的完整 epoch 数据。
outputs/training_curves.png
比赛指标为测试集总体分类准确率(预测正确的测试样本数除以测试样本总数)。测试集没有标签,本地 val_acc 来自训练集内部的分层留出部分,与线上成绩可能存在合理差异。
val_acc
使用默认随机种子 42、10% 分层验证划分训练 120 轮的一次复现实验结果如下:
本次实验保留的训练曲线:
线上测试集标签和本次提交分数未公开记录,所以上表不是线上成绩。不同硬件、Jittor/CUDA 版本和随机采样可能带来小幅波动。
代码使用增强、Dropout 和标签平滑,因此日志中的在线训练准确率可能低于关闭增强后的准确率。模型选择优先使用独立的本地验证准确率。
代码入口:
pct.py
checkpoint.py
train.py
infer.py
plot_metrics.py
本项目代码使用 MIT License。模型结构参考 PCT 与 DGCNN,运行框架为 Jittor;第三方项目、论文、数据与权重声明见 NOTICE。本仓库不包含预训练权重。
NOTICE
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
ModelNet40 Enhanced PCT (Jittor)
本项目使用 Jittor 在 ModelNet40 点云数据上训练增强版 PCT 分类模型。训练、推理提交和画图相互独立,中途停止训练后仍可直接使用已保存的最佳模型。
更完整的逐步命令见
操作指南.md。环境安装
数据准备
从计图挑战赛“赛道二热身赛”赛题附件获取预处理后的 ModelNet40 数据,并解压到
data/。数据集受其原始许可约束且文件较大,因此本仓库不分发.npy数据文件; 更详细的字段和形状说明见data/README.md。默认目录结构如下:可通过
--data_dir指定其他目录。训练
默认从有标签训练数据中按类别留出 10% 作为本地验证集。官方无标签测试集不会参与模型选择。 默认随机种子为
42,可通过--seed修改。每次训练都会保存实际配置和运行命令,便于复现。训练过程中会持续保存:
outputs/best_val.pkloutputs/best_train.pkloutputs/last.pkloutputs/epoch_XXX.pkloutputs/history.csvoutputs/metrics.jsonloutputs/batch_metrics.jsonloutputs/config.jsonoutputs/command.txtoutputs/commands.txt按一次
Ctrl+C或 IDE 的正常停止按钮时,程序会原子保存last.pkl。强制结束进程或断电时,仍可使用上一轮已经原子写好的权重。继续训练:
也可以显式指定:
若希望全部 9843 个训练样本参与训练:
这种模式没有本地验证准确率,因此只生成
best_train.pkl和last.pkl。建议先使用验证划分确定训练轮数,再进行全数据训练。推理与生成提交文件
未指定
--checkpoint时,按以下顺序自动选择现存权重:best_val.pklbest_train.pkllast.pkl也可显式选择:
最终生成的
result.zip内只有根目录下的result.json,可直接提交。绘制训练曲线
输出为
outputs/training_curves.png,包含训练/验证损失、准确率、学习率和批次训练损失。即使没有训练到 200 轮,也会绘制已有的完整 epoch 数据。结果说明
比赛指标为测试集总体分类准确率(预测正确的测试样本数除以测试样本总数)。测试集没有标签,本地
val_acc来自训练集内部的分层留出部分,与线上成绩可能存在合理差异。使用默认随机种子
42、10% 分层验证划分训练 120 轮的一次复现实验结果如下:本次实验保留的训练曲线:
线上测试集标签和本次提交分数未公开记录,所以上表不是线上成绩。不同硬件、Jittor/CUDA 版本和随机采样可能带来小幅波动。
代码使用增强、Dropout 和标签平滑,因此日志中的在线训练准确率可能低于关闭增强后的准确率。模型选择优先使用独立的本地验证准确率。
代码入口:
pct.py:数据增强和模型结构checkpoint.py:完整检查点的原子保存与兼容加载train.py:训练、验证、日志和中断恢复infer.py:多次采样投票、JSON 和 ZIP 生成plot_metrics.py:离线训练曲线许可与引用
本项目代码使用 MIT License。模型结构参考 PCT 与 DGCNN,运行框架为 Jittor;第三方项目、论文、数据与权重声明见
NOTICE。本仓库不包含预训练权重。