调整了README
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 classification.
本项目是论文 PCT: Point Cloud Transformer 在 Jittor 框架下的复现,用于完成 ModelNet40 三维形状分类任务。
jt.nn
Dataset
val_acc
安装:
pip install jittor numpy # 可选:验证 Jittor 安装 python -m jittor.test.test_example
本项目使用 ModelNet40 点云数据集(共 40 类 CAD 模型),数据格式为 numpy 数组:
train_points.npy
(N_train, 2048, 3)
train_labels.npy
(N_train,)
test_points.npy
(N_test, 2048, 3)
categories.txt
⚠️ 由于数据集体积较大,未上传至本仓库。请通过以下方式获取: 下载地址:https://www.educoder.net/competitions/Jittor-7 放置后目录应为:
https://www.educoder.net/competitions/Jittor-7
data/ └── data/ ├── categories.txt ├── train_points.npy ├── train_labels.npy └── test_points.npy
PCT_jittor/ ├── pct.py # 主程序(数据集 / 模型 / 训练 / 推理 一体) ├── data/ │ └── data/ │ └── categories.txt # 40 个类别名(标签索引对照) ├── README.md └── .gitignore
python pct.py \ --data_dir ./data/data \ --epochs 250 \ --batch_size 32 \ --lr 0.01 \ --optimizer sgd \ --tta 3
训练完成后会自动:
pct_model.pkl
pct_model_last.pkl
result.json
{"样本编号": 类别索引, ...}
将训练好的 pct_model.pkl 放到项目根目录,然后:
python pct.py --epochs 0 --tta 3
提示:当前主程序未单独提供「跳过训练」开关。若只想做推理,可以将 --epochs 设为很小的值,或自行在 main() 中跳过训练循环;推理逻辑见 predict() 函数。
--epochs
main()
predict()
--data_dir
./data/data
--n_points
1024
--batch_size
32
250
--lr
0.01
--weight_decay
1e-4
--warmup
10
--smoothing
0.1
--optimizer
sgd
adam
adamw
--val_ratio
--tta
3
--out_model
--out_json
--seed
42
--num_workers
4
--no_cuda
模型参数量:约 2.88 M。
预测结果文件 result.json 示例:
{ "0": 0, "1": 0, "2": 0 }
其中 key 为测试样本索引(与 test_points.npy 中顺序一致),value 为类别索引(对应 categories.txt 中的行号)。
key
value
Input (B, 3, N) │ ├─► Conv1d(3→128) + BN + ReLU └─► Conv1d(128→128) + BN + ReLU # Embedding │ ┌────────┴────────┐ │ SA_Layer (×4) │ # Offset-Attention,输出 4 份 (B,128,N) └────────┬────────┘ ▼ Concat → (B, 512, N) │ Conv1d(512→1024) + BN + LeakyReLU # Fuse │ MaxPool over N → (B, 1024) │ Linear(1024→512) + BN + ReLU + Dropout Linear(512→256) + BN + ReLU + Dropout Linear(256→40) │ ▼ Logits (B, 40)
SA_Layer 中的 offset-attention:
SA_Layer
attn = softmax(Q·K) → 按列归一化 x_r = V · attn out = x + LBR(trans_conv(x - x_r)) # 残差形式
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 classification
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PCT_jittor
本项目是论文 PCT: Point Cloud Transformer 在 Jittor 框架下的复现,用于完成 ModelNet40 三维形状分类任务。
目录
项目特性
jt.nn与Dataset接口,自动 GPU 加速。val_acc选 best 模型。环境依赖
安装:
数据集
本项目使用 ModelNet40 点云数据集(共 40 类 CAD 模型),数据格式为 numpy 数组:
train_points.npy(N_train, 2048, 3)train_labels.npy(N_train,)test_points.npy(N_test, 2048, 3)categories.txt项目结构
快速开始
1. 训练 + 自动推理(推荐)
训练完成后会自动:
pct_model.pkl、最后一轮模型到pct_model_last.pkl;result.json(格式:{"样本编号": 类别索引, ...})。2. 仅推理(已有训练权重)
将训练好的
pct_model.pkl放到项目根目录,然后:训练参数说明
--data_dir./data/data--n_points1024--batch_size32--epochs250--lr0.01--weight_decay1e-4--warmup10--smoothing0.1--optimizersgdsgd/adam/adamw--val_ratio0.1--tta3--out_modelpct_model.pkl--out_jsonresult.json--seed42--num_workers4--no_cuda实验结果
模型参数量:约 2.88 M。
预测结果文件
result.json示例:其中
key为测试样本索引(与test_points.npy中顺序一致),value为类别索引(对应categories.txt中的行号)。模型架构
SA_Layer中的 offset-attention:致谢与参考