Add .gitignore
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 classification
本项目实现了Point Cloud Transformer (PCT)网络,用于三维点云的形状分类任务。PCT是一种基于自注意力机制的点云处理网络,能够有效建模点云中点与点之间的全局依赖关系。
主要特点:
Input (B, 3, N) ↓ Conv1d + BN + ReLU (3 → 128) ↓ Conv1d + BN + ReLU (128 → 128) ↓ SA_Layer × 4 (Self-Attention) ↓ Concatenate (512, N) ↓ Conv1d + BN + LeakyReLU (512 → 1024) ↓ Max Pooling (global) ↓ Linear × 3 (1024 → 512 → 256 → 40) ↓ Output (B, 40) logits
Self-Attention Layer结构:
Input (B, C, N) ↓ Q = Conv_q(F) (C → C//4) K = Conv_k(F) (C → C//4) V = Conv_v(F) (C → C) ↓ Attention = Softmax(Q^T · K) ↓ F_attn = V · Attention ↓ Output = F + MLP(F - F_attn)
pip install jittor # 验证安装 python -c "import jittor as jt; print(jt.flags.use_cuda)"
数据准备
数据集结构:
data/ ├── train_points.npy # 训练集点云 (N_train, 2048, 3) ├── train_labels.npy # 训练集标签 (N_train,) └── test_points.npy # 测试集点云 (N_test, 2048, 3)
训练模型
# 基础训练 python pct.py # 自定义参数 python pct.py --epochs 200 --batch_size 64 --lr 0.001 --n_points 1024 # 使用GPU python pct.py --batch_size 128
命令行参数
参数 类型 默认值 描述 –data_dir str ./data 数据目录路径 –n_points int 1024 采样点数 –batch_size int 32 批次大小 –epochs int 200 训练轮数 –lr float 0.01 初始学习率 –seed int 42 随机种子
训练输出示例
============================================================ ModelNet40 Classification - PCT Baseline Points: 1024 Batch: 64 Epochs: 200 LR: 0.01 ============================================================ Train: 9843 samples Test: 2468 samples Model parameters: 1.37M Epoch [1] Batch [20] Loss: 3.5621 Acc: 9.38% Time: 12.3s Epoch [1] Batch [40] Loss: 3.4012 Acc: 13.28% Time: 24.1s ... Epoch [200/200] Loss: 0.4521 Train Acc: 89.23% LR: 0.000010 Time: 35.2s
预期性能(GPU环境)
GPU 每个Epoch 200 Epochs 期望准确率 RTX 3060 约35秒 约2小时 88-90% RTX 3080 约20秒 约1.1小时 88-90% V100 约10秒 约35分钟 89-91%
输出文件
训练完成后生成:
文件 描述 pct_model.pkl 训练好的模型权重 result.json 测试集预测结果
result.json格式:
{ "0": 12, "1": 5, "2": 28, ... "2467": 3 }
性能优化
启用混合精度训练
在main()函数开头添加:
jt.flags.amp_level = 1
效果:显存占用减少40%,训练速度提升30-50%
优化数据加载
train_loader = ModelNet40Dataset( # ... num_workers=8, )
调整批次大小
python pct.py --batch_size 128
数据增强
训练时自动应用的增强策略:
增强类型 参数范围 概率 绕Y轴旋转 02π 100% 绕X轴旋转 -π/4 ~ π/4 50% 绕Z轴旋转 -π/4 ~ π/4 50% 随机缩放 0.81.2 100% 高斯噪声 σ=0.02 50%
故障排除
编译卡在 “Compiling Operators…”
原因:Jittor首次运行时的即时编译,正常现象
解决:耐心等待1-2分钟,编译完成后会缓存结果
GPU不可用
python -c "import jittor as jt; print(jt.flags.use_cuda)"
如果返回False,检查Jittor安装或CUDA环境
显存不足(OOM)
# 减小batch_size python pct.py --batch_size 16 # 或减少采样点数 python pct.py --n_points 512
项目结构
PCT_Jittor/ ├── pct.py # 主程序:模型定义、训练、推理 ├── data/ # 数据集目录 │ ├── train_points.npy │ ├── train_labels.npy │ └── test_points.npy ├── pct_model.pkl # 训练好的模型(生成) ├── result.json # 预测结果(生成) └── README.md
许可证
MIT License
致谢
· Jittor框架 - 清华大学开源深度学习框架 · ModelNet40 - 3D点云分类基准数据集
```
:A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 classification
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PCT_jittor_zhangzx
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 classification
项目简介
本项目实现了Point Cloud Transformer (PCT)网络,用于三维点云的形状分类任务。PCT是一种基于自注意力机制的点云处理网络,能够有效建模点云中点与点之间的全局依赖关系。
主要特点:
模型架构
Self-Attention Layer结构:
快速开始
环境要求
安装依赖
数据准备
数据集结构:
训练模型
命令行参数
参数 类型 默认值 描述 –data_dir str ./data 数据目录路径 –n_points int 1024 采样点数 –batch_size int 32 批次大小 –epochs int 200 训练轮数 –lr float 0.01 初始学习率 –seed int 42 随机种子
训练输出示例
预期性能(GPU环境)
GPU 每个Epoch 200 Epochs 期望准确率 RTX 3060 约35秒 约2小时 88-90% RTX 3080 约20秒 约1.1小时 88-90% V100 约10秒 约35分钟 89-91%
输出文件
训练完成后生成:
文件 描述 pct_model.pkl 训练好的模型权重 result.json 测试集预测结果
result.json格式:
性能优化
启用混合精度训练
在main()函数开头添加:
效果:显存占用减少40%,训练速度提升30-50%
优化数据加载
调整批次大小
数据增强
训练时自动应用的增强策略:
增强类型 参数范围 概率 绕Y轴旋转 0
2π 100% 绕X轴旋转 -π/4 ~ π/4 50% 绕Z轴旋转 -π/4 ~ π/4 50% 随机缩放 0.81.2 100% 高斯噪声 σ=0.02 50%故障排除
编译卡在 “Compiling Operators…”
原因:Jittor首次运行时的即时编译,正常现象
解决:耐心等待1-2分钟,编译完成后会缓存结果
GPU不可用
如果返回False,检查Jittor安装或CUDA环境
显存不足(OOM)
项目结构
许可证
MIT License
致谢
· Jittor框架 - 清华大学开源深度学习框架 · ModelNet40 - 3D点云分类基准数据集
```