目录

Jittor 2026 热身赛二:ModelNet40 点云分类

本仓库是第六届计图人工智能挑战赛热身赛二的开源实现。项目使用 Jittor 实现 Point Cloud Transformer(PCT),在 ModelNet40 点云上完成 40 类分类, 并生成比赛要求的 result.jsonresult.zip

仓库只包含可复现源码,不包含比赛数据、模型权重、训练日志或提交结果。

项目结构

.
├── configs/                 # 训练和推理的 JSON 配置
├── data/                    # 数据格式说明及类别名称,不含点云数据
├── scripts/                 # 可直接执行的训练和推理脚本
├── src/warmup/              # 数据、模型、训练引擎和提交工具
├── tests/                   # 不依赖 GPU 的基础测试
├── tools/                   # 提交包生成与检查工具
├── train.py                 # 训练入口
├── infer.py                 # 推理入口
├── Dockerfile
├── requirements.txt
├── LICENSE
└── NOTICE

环境安装

推荐环境:

  • Ubuntu 22.04
  • Python 3.10
  • Jittor 1.3.11.0
  • NumPy 1.26.4
  • NVIDIA GPU、CUDA 11.8(训练和正式推理推荐)

使用 Docker

docker build -t jittor-warmup2 .
docker run --rm --gpus all \
  -v "$PWD":/workspace \
  -w /workspace \
  -e JITTOR_HOME=/workspace/.cache/jittor \
  jittor-warmup2 python3 train.py --help

使用本地 Python

python3.10 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

Jittor 首次运行时会编译算子。CUDA、编译器与驱动的具体兼容要求请参考 Jittor 官方安装文档

数据准备

从比赛平台下载热身赛二提供的 data.zip,在仓库根目录解压:

unzip /path/to/data.zip -d .

解压后的结构必须是:

data/
├── train_points.npy    # (9843, 2048, 3)
├── train_labels.npy    # (9843,)
├── test_points.npy     # (2468, 2048, 3)
└── categories.txt      # 40 个类别,顺序对应标签编号

数据文件不应提交到 Git。需要使用其他位置时,通过 --data-root 覆盖配置:

python3 train.py --config configs/train.json --data-root /path/to/data

更详细的数据约束见 data/README.md

训练

默认配置使用 SGD 训练 200 个 epoch:

python3 train.py --config configs/train.json

等价的脚本入口:

bash scripts/train.sh

关键参数来自 configs/train.json,显式命令行参数优先, 例如:

python3 train.py \
  --config configs/train.json \
  --batch-size 32 \
  --epochs 100 \
  --seed 2026

默认输出到 outputs/train/

  • pct_best.pkl:训练集准确率最高的 checkpoint;
  • config.json:合并配置文件与命令行参数后的实际配置;
  • command.txt:本次运行命令;
  • train.log:训练日志。

比赛数据没有单独公开验证集,因此本实现按训练集准确率保存 checkpoint。 训练集准确率只用于观察优化过程,不等同于官方测试准确率。

推理与提交

使用训练产生的 checkpoint 推理:

python3 infer.py \
  --config configs/infer.json \
  --checkpoint outputs/train/pct_best.pkl

也可以运行:

bash scripts/infer.sh --checkpoint outputs/train/pct_best.pkl

默认进行 8 次确定性重采样投票,并在 outputs/infer/ 生成:

  • result.json:2468 个测试样本的类别编号;
  • result.zip:仅包含 result.json 的比赛提交包;
  • config.jsoncommand.txtinfer.log:复现记录。

单独重新打包或检查已有提交包:

python3 tools/package_submission.py
python3 tools/package_submission.py --check-only

提交到比赛平台的是 outputs/infer/result.zip,不是仓库根目录或整个工程。

结果说明

官方指标是测试集分类准确率:预测类别与真实类别一致的样本数除以 2468。 测试标签不公开,本仓库不能在本地计算官方指标。模型、随机种子、训练轮数、 Jittor/CUDA 版本和重采样投票数变化都可能使复现成绩与历史线上提交存在差异。

可复现性

  • 默认随机种子为 42,同时设置 Python、NumPy 和 Jittor 随机状态。
  • 数据采样和增强使用由 seed + epoch + sample index 派生的确定性随机流。
  • 默认 num_workers=0,避免多进程数据加载引入额外非确定性。
  • 每次运行保存最终配置、命令和日志。
  • 配置中的路径均为相对路径,可由命令行覆盖,不依赖开发者本机目录。

GPU 浮点计算和不同底层库版本仍可能带来微小差异。如需优先复现,请保留默认 依赖版本、配置与设备类型。

测试

无需数据和 Jittor 即可运行配置与提交格式测试:

python3 -m unittest discover -s tests -v
python3 -m compileall -q train.py infer.py src tools tests

完整训练前建议先用较短配置做端到端检查:

python3 train.py --config configs/train.json --epochs 1 --batch-size 8

本次发布前实际执行的检查及未覆盖范围见 VALIDATION.md

许可证与引用

本项目新增代码按 MIT License 发布。赛事 starter、PCT 架构和论文引用 信息见 NOTICE;第三方内容仍遵循其原始条款。

如果本项目对研究有帮助,请引用 PCT:

@article{guo2021pct,
  title={PCT: Point Cloud Transformer},
  author={Guo, Meng-Hao and Cai, Jun-Xiong and Liu, Zheng-Ning and
          Mu, Tai-Jiang and Martin, Ralph R. and Hu, Shi-Min},
  journal={Computational Visual Media},
  year={2021}
}
关于
48.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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