目录

PCT — Point Cloud Transformer for ModelNet40 Classification

基于 Jittor 框架的 PCT 模型,用于 ModelNet40 三维点云分类(40 类)。

基础代码和训练数据源于第六届计图人工智能挑战赛——热身赛二,包含原始 PCT 模型结构和训练流程。

Quickstart

# 安装依赖
pip install jittor

# 训练模型
python pct.py

# 指定超参数
python pct.py --epochs 500 --lr 0.001 --batch_size 32

# 从 checkpoint 继续训练
python pct.py --resume pct_model.pkl

输出:

  • pct_model.pkl — 验证准确率最高的模型
  • checkpoints/pct_epoch_*.pkl — 每 50 epoch 周期保存的 checkpoint
  • result.json — 测试集预测结果

改动概览

我们在 baseline 基础上完成了两个 TODO,并增加了训练工程化改进:

TODO 1: 数据增强

Baseline: 仅随机绕 Y 轴旋转 0~360°。

我们的改动:

  • 三轴旋转:绕 X / Y / Z 三轴各施加 ±20° 随机旋转,取代原有的全角度 Y 轴旋转
  • 随机缩放:0.8 ~ 1.25 倍,模拟不同尺度的物体
  • 随机抖动:每个坐标加标准差 0.02 的高斯噪声,模拟传感器噪声

三轴旋转的设计选择:初始尝试了全角度 0~360° 旋转,导致训练集过于困难,准确率停滞在 70% 左右。限制 ±20° 后在保持增强效果的同时让任务可学。

TODO 2: 优化器与学习率调度

Baseline: SGD (lr=0.01) + Cosine Annealing。

我们的改动:

  • SGD → Adam:自适应学习率,对 Transformer 类模型收敛更稳定
  • Cosine Annealing → ReduceLROnPlateau:验证准确率连续 15 epoch 不涨则 lr 减半;连续 40 epoch 不涨 early stop
  • lr 调整:0.01 → 0.001,适配 Adam 的标准学习率区间

选择 ReduceLROnPlateau 而非 Cosine Annealing 的设计理由:余弦退火在配合 early stopping 时存在脱节问题——若训练在 epoch 80 提前停止,lr 几乎未衰减。Plateau 策略让 lr 衰减与模型实际表现挂钩。

新增: 验证集与 Early Stopping

  • 每 epoch 随机划分 90%/10% 训练/验证集
  • 验证准确率连续 40 epoch 不涨 → 自动停止
  • 始终保存验证集最佳模型(pct_model.pkl
  • 每 50 epoch 周期保存 checkpoint(checkpoints/pct_epoch_*.pkl
  • 支持 --resume 从任意 checkpoint 继续训练

结果

  • 测试集准确率达到 87.36%
关于

A Jittor implementation of Point Cloud Transformer(PCT) for ModelNet40 classification.

37.0 KB
邀请码