目录

Point Cloud Transformer (PCT) for ModelNet40 Classification

基于 Jittor 框架实现的点云分类模型,用于 ModelNet40 三维形状分类任务。

项目简介

本项目实现了 Point Cloud Transformer (PCT) 模型,用于对 ModelNet40 数据集中的三维点云进行分类。模型采用自注意力机制处理点云数据,能够有效捕捉点云的全局特征。

模型架构

PCT 模型主要包含以下组件:

  • 特征提取层:两个 1D 卷积层用于提取初始点云特征
  • **自注意力层 (SA_Layer)**:4 层堆叠的自注意力模块,用于捕获点云的全局依赖关系
  • 特征融合层:将多层特征融合并降维
  • 全连接分类头:包含两个全连接层和 Dropout,用于最终分类

数据集

使用 ModelNet40 数据集,包含 40 个类别的三维物体:

airplane, bathtub, bed, bench, bookshelf, bottle, bowl, car, chair, cone,
cup, curtain, desk, door, dresser, flower_pot, glass_box, guitar, keyboard,
lamp, laptop, mantel, monitor, night_stand, person, piano, plant, radio,
range_hood, sink, sofa, stairs, stool, table, tent, toilet, tv_stand, vase,
wardrobe, xbox

数据格式

  • 训练集:data/train_points.npy (N, 2048, 3) + data/train_labels.npy (N,)
  • 测试集:data/test_points.npy (N, 2048, 3)
  • 类别标签:data/categories.txt

环境要求、安装依赖

详见 https://github.com/Jittor/jittor

使用方法

训练模型

python pct.py

可选参数:

  • --data_dir: 数据目录路径(默认:./data)
  • --n_points: 采样点数(默认:1024)
  • --batch_size: 批次大小(默认:32)
  • --epochs: 训练轮数(默认:200)
  • --lr: 学习率(默认:0.01)
  • --seed: 随机种子(默认:42)

模型输出

训练完成后会生成以下文件:

  • pct_model.pkl: 训练好的模型权重
  • result.json: 测试集预测结果,格式为 {样本编号: 预测类别}

数据增强

训练时采用了以下数据增强策略:

  • 随机绕 Y 轴旋转
  • 随机缩放(0.8-1.2倍)
  • 随机点云抖动

训练策略

  • 优化器:SGD(momentum=0.9, weight_decay=1e-4)
  • 学习率调度:Cosine Annealing
  • 损失函数:交叉熵损失

模型性能

模型参数量约为 2.5M,在 ModelNet40 数据集上具有良好的分类性能。

项目结构

.
├── pct.py              # 主程序文件
├── data/               # 数据目录
│   ├── train_points.npy
│   ├── train_labels.npy
│   ├── test_points.npy
│   └── categories.txt
├── pct_model.pkl       # 训练好的模型
└── result.json         # 预测结果

参考文献

本项目基于 Point Cloud Transformer 模型实现,相关论文请参考原始文献。

许可证

本项目仅用于课程作业目的。

关于

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

32.0 KB
邀请码