目录

PCT_jittor

基于 Jittor 实现的 Point Cloud Transformer (PCT),用于 ModelNet40 点云分类任务。

项目简介

本项目使用 Jittor 深度学习框架实现了一个 PCT 点云分类模型。模型输入为三维点云,输出为 ModelNet40 数据集中的 40 类物体类别预测结果。

主要功能:

  • 读取 ModelNet40 预处理后的 .npy 点云数据
  • 实现 PCT 分类网络和自注意力模块
  • 支持多种数据增强版本
  • 支持 SGD / Adam 优化器
  • 支持余弦退火学习率调度
  • 自动保存训练日志、模型权重和测试集预测结果
  • 支持测试时多次投票预测

文件说明

pct.py              主训练和推理脚本
pct_model.pkl       最优模型权重
result.json         测试集预测结果
RESULTS.md          本地实验结果记录
PA3_README.pdf      作业说明文件

数据集文件和中间训练结果体积较大,已通过 .gitignore 屏蔽,不上传到仓库。

环境配置

推荐使用 Python 3.7 的 conda 环境:

conda create -n jittor python=3.7 pip -y
conda activate jittor
pip install jittor numpy pillow tqdm

如果使用 GPU,请确认 NVIDIA 驱动和 CUDA 环境可用。代码中默认启用 CUDA:

jt.flags.use_cuda = 1

数据集

代码默认读取以下文件:

data/train_points.npy
data/train_labels.npy
data/test_points.npy
data/categories.txt

作业数据集下载地址:

https://cloud.tsinghua.edu.cn/f/f003de5a2e914d1e9e0e/?dl=1

下载后在项目根目录解压:

unzip -n data.zip

解压后目录结构应类似:

PCT_jittor/
├── pct.py
├── data/
│   ├── train_points.npy
│   ├── train_labels.npy
│   ├── test_points.npy
│   └── categories.txt

模型结构

模型主体为 Point Cloud Transformer,整体流程如下:

输入点云 (B, 3, N)
→ Conv1d 点特征嵌入
→ 4 层 Self-Attention
→ 多层特征拼接
→ Conv1d 特征融合
→ 全局最大池化
→ 全连接分类头
→ 输出 40 类 logits

其中自注意力模块用于建模点与点之间的全局几何关系。

训练方法

本项目当前最优配置如下:

python pct.py \
  --data_dir ./data \
  --epochs 400 \
  --batch_size 32 \
  --n_points 1024 \
  --lr 0.01 \
  --optimizer sgd \
  --weight_decay 1e-4 \
  --eta_min 1e-5 \
  --augment_version aug_v1 \
  --save_dir runs/aug_v1_e400_np1024_bs32_lr001

aug_v1 数据增强包括:

随机绕 Y 轴旋转
随机缩放
随机平移
随机 jitter 抖动

训练完成后会在 save_dir 中生成:

train.log
pct_model.pkl
result.json

推理方法

使用已保存模型生成测试集预测:

python pct.py \
  --data_dir ./data \
  --n_points 1024 \
  --batch_size 32 \
  --augment_version aug_v1 \
  --eval_only \
  --load_model pct_model.pkl \
  --tta_votes 1 \
  --save_dir eval

预测结果会保存到:

eval/result.json

result.json 的格式为:

{
  "0": 12,
  "1": 4,
  "2": 37
}

其中 key 为测试样本编号,value 为预测类别编号。

实验结果

当前最好评测准确率:

0.86

对应文件:

pct_model.pkl
result.json

备注

  • data/data.zip 不上传到 Gitlink,请根据上面的链接自行下载。
  • runs/ 为中间实验目录,不上传到仓库。
  • 如需复现实验,请先下载数据集,再运行训练命令。
关于

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

5.2 MB
邀请码