目录

ImPCT

本项目基于 Jittor 实现 PCT(Point Cloud Transformer)点云分类模型,用于 ModelNet40 风格的三维点云分类任务。代码在官方示例基础上加入了更完整的数据增强、label smoothing 和测试时 voting,以提高预测稳定性。

项目结构

jittor-match/
├── pct.py
├── data/
│   ├── train_points.npy
│   ├── train_labels.npy
│   ├── test_points.npy
│   └── categories.txt
├── pct_model.pkl
├── result.json
└── README.md

环境依赖

推荐环境:

Python 3.9
Jittor 1.3.10.0
NumPy 1.26.4
CUDA 12.2
GCC/G++ 12

安装依赖:

pip install jittor numpy

如果 Jittor 编译 CUDA 扩展时遇到系统 GCC 版本过高的问题,可以在 conda 环境中安装 GCC/G++ 12,并指定编译器:

conda install -c conda-forge gcc_linux-64=12 gxx_linux-64=12
export cc_path=$CONDA_PREFIX/bin/x86_64-conda-linux-gnu-g++

数据说明

数据文件放在 data/ 目录下:

train_points.npy: 训练点云,形状为 (N, 2048, 3)
train_labels.npy: 训练标签,形状为 (N,)
test_points.npy: 测试点云,形状为 (M, 2048, 3)
categories.txt: 40 个类别名称

测试集不提供标签,模型会对测试集生成 result.json 用于提交评测。

运行方法

训练并生成预测结果:

CUDA_VISIBLE_DEVICES=4 python pct.py --data_dir ./data --epochs 200 --batch_size 32 --n_points 1024

如需快速检查流程是否能跑通,可以使用较小配置:

CUDA_VISIBLE_DEVICES=4 python pct.py --data_dir ./data --epochs 1 --batch_size 2 --n_points 128

训练完成后会生成:

pct_model.pkl
result.json

其中 result.json 为测试集预测结果,格式为:

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

键为测试样本编号,值为预测类别编号。

方法说明

模型主体为 PCT 点云分类网络:

  • 使用 Conv1d 提取逐点特征;
  • 堆叠 4 个 self-attention 层建模点之间的关系;
  • 拼接多层 attention 特征后进行通道融合;
  • 使用全局 max pooling 得到点云级别特征;
  • 通过全连接分类头输出 40 类 logits。

在官方示例基础上,本项目做了以下轻量改进:

  • 数据增强:随机绕 Y 轴旋转、随机缩放、随机平移和 jitter 抖动;
  • 损失函数:使用 label smoothing cross entropy,缓解过拟合;
  • 推理策略:测试时进行 10 次 voting,平均 logits 后得到最终预测类别;
  • 优化策略:保留 SGD、momentum、weight decay 和 cosine learning rate schedule,以保证 baseline 稳定性。

训练结果

baseline 在官方测试集上的提交分数约为 0.85。当前版本在保持 PCT 主体不变的基础上加入稳定性优化,用于稳定达到比赛要求的 0.8 以上准确率。

注意事项

  • 本项目仅使用 Jittor 实现模型训练和推理;
关于

本仓库是第六届人工智能挑战赛热身赛二的开源项目

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

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