Add LICENSE
本项目实现了一个基于 Jittor 框架的 Point Cloud Transformer (PCT) 模型,用于 ModelNet40 三维形状分类任务。
PCT 是一个融合了自注意力机制、几何感知和通道注意力的点云深度学习模型,能够有效地学习点云的全局和局部几何特征,在三维形状分类中取得优异性能。
warm-up_round/ ├── pct.py # 改进完整版本 ├── README.md # 本文件 └── data/ ├── train_points.npy # 训练点云数据 (N, 2048, 3) ├── train_labels.npy # 训练标签 (N,) ├── test_points.npy # 测试点云数据 (M, 2048, 3) └── categories.txt # 类别名称
✨ 改进内容:
效果:提高模型的鲁棒性和泛化能力
Conv1d(3→128) → BatchNorm → ReLU ↓ SA_Layer × 4 (自注意力层堆叠) ↓ Conv1d(512→1024) → 全局最大池化 ↓ FC layers → 分类输出
Conv1d(3→128) + 位置嵌入(pos_embed) → 预精化(pre_refine) ↓ GeometryAwareAttention × 2 (几何感知自注意力) ↓ SA_Layer × 2 (标准自注意力) ↓ 注意力精化(attn_refine) → 通道注意力(ChannelAttention1D) ↓ 全局特征融合(最大池化 + 平均池化) ↓ FC layers with Dropout → 分类输出
a) 几何感知注意力 (GeometryAwareAttention)
b) 通道注意力 (ChannelAttention1D)
c) 残差点 MLP (ResidualPointMLP)
d) 位置嵌入 (pos_embed)
改进项:
base_lr / warmup_epochs
base_lr
# 原版:直接余弦退火 lr = eta_min + (base_lr - eta_min) * (1 + cos(π * epoch / T_max)) / 2 # 改进版:Warmup + 余弦退火 if epoch < warmup_epochs: lr = base_lr * (epoch + 1) / warmup_epochs else: lr = eta_min + (base_lr - eta_min) * (1 + cos(π * (epoch - warmup) / (T_max - warmup))) / 2
标签平滑交叉熵损失 (Label Smoothing)
loss = (1 - smoothing) * ce_loss + smoothing * kl_loss
投票平均预测 (Vote Averaging)
效果:同一样本多角度预测 → 更鲁棒的结果
新增选项:
# 示例:使用 Adam 优化器 python pct.py --optimizer adam --lr 0.001 --weight_decay 1e-4
pip install jittor numpy
# 基础训练(使用默认参数) python pct.py # 自定义参数示例 python pct.py \ --data_dir ./data \ --n_points 1024 \ --batch_size 32 \ --epochs 200 \ --lr 0.001 \ --optimizer adam \ --warmup_epochs 10 \ --label_smoothing 0.1 \ --vote_num 10 \ --seed 42
--data_dir
./data
--n_points
1024
--batch_size
32
--epochs
200
--lr
0.001
--optimizer
adam
sgd
--weight_decay
1e-4
--momentum
0.9
--eta_min
1e-5
--warmup_epochs
10
--label_smoothing
0.1
--vote_num
--no_tta_rotate
--seed
42
训练完成后生成:
pct_model.pkl
result.json
{"sample_id": class_id, ...}
改进版(pct.py)相对原版(pct_ori.py)的优势:
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PCT: Point Cloud Transformer for ModelNet40 Classification
项目简介
本项目实现了一个基于 Jittor 框架的 Point Cloud Transformer (PCT) 模型,用于 ModelNet40 三维形状分类任务。
PCT 是一个融合了自注意力机制、几何感知和通道注意力的点云深度学习模型,能够有效地学习点云的全局和局部几何特征,在三维形状分类中取得优异性能。
文件结构
pct.py 相对于 pct_ori.py 的主要改进
1. 完整的数据增强策略
✨ 改进内容:
效果:提高模型的鲁棒性和泛化能力
2. 增强的模型架构
原版架构
改进版架构
新增关键模块
a) 几何感知注意力 (GeometryAwareAttention)
b) 通道注意力 (ChannelAttention1D)
c) 残差点 MLP (ResidualPointMLP)
d) 位置嵌入 (pos_embed)
3. 学习率调度优化
改进项:
base_lr / warmup_epochs逐步升到base_lr4. 损失函数升级
标签平滑交叉熵损失 (Label Smoothing)
5. 测试时增强 (Test-Time Augmentation)
投票平均预测 (Vote Averaging)
效果:同一样本多角度预测 → 更鲁棒的结果
6. 优化器和超参数灵活性
新增选项:
核心参数对比
使用方法
安装依赖
运行训练
命令行参数
--data_dir./data--n_points1024--batch_size32--epochs200--lr0.001--optimizeradamadam或sgd)--weight_decay1e-4--momentum0.9--eta_min1e-5--warmup_epochs10--label_smoothing0.1--vote_num10--no_tta_rotate--seed42输出结果
训练完成后生成:
pct_model.pkl- 训练好的模型权重result.json- 测试集预测结果,格式为{"sample_id": class_id, ...}性能提升总结
改进版(pct.py)相对原版(pct_ori.py)的优势:
依赖
参考
备注