目录

ModelNet40 Enhanced PCT (Jittor)

本项目使用 Jittor 在 ModelNet40 点云数据上训练增强版 PCT 分类模型。训练、推理提交和画图相互独立,中途停止训练后仍可直接使用已保存的最佳模型。

更完整的逐步命令见 操作指南.md

环境安装

  • Python 3.10
  • Jittor 1.3.11 或更高版本
python -m pip install -r requirements.txt

数据准备

从计图挑战赛“赛道二热身赛”赛题附件获取预处理后的 ModelNet40 数据,并解压到 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 指定其他目录。

训练

python train.py --data_dir ./data --output_dir ./outputs

默认从有标签训练数据中按类别留出 10% 作为本地验证集。官方无标签测试集不会参与模型选择。 默认随机种子为 42,可通过 --seed 修改。每次训练都会保存实际配置和运行命令,便于复现。

训练过程中会持续保存:

文件 用途
outputs/best_val.pkl 本地验证准确率最高,提交首选
outputs/best_train.pkl 在线训练准确率最高,备选
outputs/last.pkl 每轮覆盖;中断时保存当前状态,续训首选
outputs/epoch_XXX.pkl 默认每 10 轮保留一个历史快照
outputs/history.csv 每轮 loss、accuracy、学习率和耗时
outputs/metrics.jsonl 与 CSV 对应的逐轮结构化记录
outputs/batch_metrics.jsonl 每个日志间隔的批次进度
outputs/config.json 本次实际生效的全部训练参数
outputs/command.txt 本次运行命令
outputs/commands.txt 首次训练和历次续训命令

按一次 Ctrl+C 或 IDE 的正常停止按钮时,程序会原子保存 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.pkllast.pkl。建议先使用验证划分确定训练轮数,再进行全数据训练。

推理与生成提交文件

python infer.py --output_dir ./outputs --votes 10

未指定 --checkpoint 时,按以下顺序自动选择现存权重:

  1. best_val.pkl
  2. best_train.pkl
  3. last.pkl

也可显式选择:

python infer.py \
  --checkpoint ./outputs/best_val.pkl \
  --result_path ./result.json \
  --zip_path ./result.zip \
  --votes 10

最终生成的 result.zip 内只有根目录下的 result.json,可直接提交。

绘制训练曲线

python plot_metrics.py --output_dir ./outputs

输出为 outputs/training_curves.png,包含训练/验证损失、准确率、学习率和批次训练损失。即使没有训练到 200 轮,也会绘制已有的完整 epoch 数据。

结果说明

比赛指标为测试集总体分类准确率(预测正确的测试样本数除以测试样本总数)。测试集没有标签,本地 val_acc 来自训练集内部的分层留出部分,与线上成绩可能存在合理差异。

使用默认随机种子 42、10% 分层验证划分训练 120 轮的一次复现实验结果如下:

指标 结果 最佳轮次
本地验证集总体准确率 91.47% 108

本次实验保留的训练曲线:

训练集与本地验证集曲线

线上测试集标签和本次提交分数未公开记录,所以上表不是线上成绩。不同硬件、Jittor/CUDA 版本和随机采样可能带来小幅波动。

代码使用增强、Dropout 和标签平滑,因此日志中的在线训练准确率可能低于关闭增强后的准确率。模型选择优先使用独立的本地验证准确率。

代码入口:

  • pct.py:数据增强和模型结构
  • checkpoint.py:完整检查点的原子保存与兼容加载
  • train.py:训练、验证、日志和中断恢复
  • infer.py:多次采样投票、JSON 和 ZIP 生成
  • plot_metrics.py:离线训练曲线

许可与引用

本项目代码使用 MIT License。模型结构参考 PCT 与 DGCNN,运行框架为 Jittor;第三方项目、论文、数据与权重声明见 NOTICE。本仓库不包含预训练权重。

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

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