update
基于 Jittor 复现 Point Cloud Transformer (PCT) 在 ModelNet40 数据集上的点云分类任务。
论文:Guo et al., PCT: Point Cloud Transformer, Computational Visual Media 2021.
. ├── pct.py 主程序(含数据集、模型、训练、预测) ├── pct_model.pkl 训练好的模型权重(约 5.3 MB) ├── data/ │ └── categories.txt 40 个 ModelNet40 类别名 ├── env.sh 环境变量旁路脚本(详见第 3 节) ├── requirements.txt Python 依赖版本 ├── LICENSE MIT └── README.md
数据集(train_points.npy / train_labels.npy / test_points.npy)未包含在本仓库中,请按第 4 节获取。
train_points.npy
train_labels.npy
test_points.npy
最终训练精度:train_acc = **91.9%**(在单卡 RTX 4090 上跑 250 epoch,总耗时约 50 分钟,每 epoch ≈ 11.7s)。
jittor == 1.3.11.0
numpy >= 1.26
推荐用 conda:
conda create -n jittor python=3.10 -y conda activate jittor pip install -r requirements.txt
Jittor 在首次 import 时会调用 nvcc 编译 CUDA 算子,需要一个与 GCC 兼容的 nvcc:
import
nvcc
parameter packs not expanded
如系统 nvcc 与 GCC 不兼容,最简单的办法是通过 conda 装一份新版 nvcc:
conda install -c conda-forge cuda-nvcc cuda-cudart cuda-cudart-dev cuda-libraries-dev cuda-version=12.1 conda install -c conda-forge cudnn=8.9.7 # Jittor 1.3.11 需要 cuDNN 8.x
注意:Jittor 1.3.11 调用的是 cuDNN 8 API,cuDNN 9 的接口变动会导致编译失败,请勿安装 cuDNN 9.x。
Jittor 在初始化时会从 GitHub 下载 NCCL、cutt、cutlass、MKL、MPI 等第三方源码并就地编译;如果你的网络无法访问 GitHub,可通过本仓库提供的 env.sh 一键关闭这些非必要依赖:
env.sh
source env.sh # 等同于 export use_nccl=0 use_cutt=0 use_cutlass=0 use_mkl=0 use_mpi=0 python pct.py ...
PCT 在单卡训练下不需要这些库,关闭后不影响精度。
如果 conda-forge 的 CUDA 头文件只装到了 <env>/targets/x86_64-linux/include/,Jittor 可能找不到 cusparse.h;执行下面的 symlink 即可:
<env>/targets/x86_64-linux/include/
cusparse.h
ENV=$(conda info --base)/envs/jittor cd "$ENV/include" for h in $(ls ../targets/x86_64-linux/include/); do [ ! -e "$h" ] && ln -sf "../targets/x86_64-linux/include/$h" "$h" done [ ! -e "$ENV/lib64" ] && ln -s lib "$ENV/lib64"
本仓库不分发数据,请按以下任一方式获取:
data/
文件预期形状(参见 pct.py 中 ModelNet40Dataset):
pct.py
ModelNet40Dataset
(N_train, P, 3)
(N_train,)
(N_test, P, 3)
data/categories.txt
P 为每个样本预存的点数(默认从中随机采 --num_points 个)。
P
--num_points
source env.sh # 仅国内网络需要 python pct.py --use_cuda 1 \ --epochs 250 \ --batch_size 32 \ --num_points 1024 \ --save_model pct_model.pkl \ --save_result result.json
完成后会生成:
pct_model.pkl
result.json
{"0": 17, "1": 3, ...}
直接复用本仓库的 pct_model.pkl 跑预测(需要先准备好 data/test_points.npy,并自行写一个加载脚本或对 pct.py 做轻微改动以跳过训练阶段)。
data/test_points.npy
source env.sh python pct.py --use_cuda 1 --dry_run # 2 epoch + 小 batch + 256 点
MIT
PCT on ModelNet40 by XiaotingXu
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
PCT on ModelNet40 (Jittor 实现)
基于 Jittor 复现 Point Cloud Transformer (PCT) 在 ModelNet40 数据集上的点云分类任务。
1. 项目结构
数据集(
train_points.npy/train_labels.npy/test_points.npy)未包含在本仓库中,请按第 4 节获取。2. 模型与训练设置
最终训练精度:train_acc = **91.9%**(在单卡 RTX 4090 上跑 250 epoch,总耗时约 50 分钟,每 epoch ≈ 11.7s)。
3. 环境要求
jittor == 1.3.11.0numpy >= 1.263.1 安装 Jittor
推荐用 conda:
Jittor 在首次
import时会调用nvcc编译 CUDA 算子,需要一个与 GCC 兼容的 nvcc:parameter packs not expanded如系统 nvcc 与 GCC 不兼容,最简单的办法是通过 conda 装一份新版 nvcc:
3.2 国内/校园网下载
Jittor 在初始化时会从 GitHub 下载 NCCL、cutt、cutlass、MKL、MPI 等第三方源码并就地编译;如果你的网络无法访问 GitHub,可通过本仓库提供的
env.sh一键关闭这些非必要依赖:PCT 在单卡训练下不需要这些库,关闭后不影响精度。
如果 conda-forge 的 CUDA 头文件只装到了
<env>/targets/x86_64-linux/include/,Jittor 可能找不到cusparse.h;执行下面的 symlink 即可:4. 数据获取
本仓库不分发数据,请按以下任一方式获取:
train_points.npy/train_labels.npy/test_points.npy,放入data/目录。文件预期形状(参见
pct.py中ModelNet40Dataset):train_points.npy(N_train, P, 3)float32train_labels.npy(N_train,)int64test_points.npy(N_test, P, 3)float32data/categories.txtP为每个样本预存的点数(默认从中随机采--num_points个)。5. 复现
5.1 从零训练
完成后会生成:
pct_model.pkl:训练好的模型权重result.json:测试集预测,格式{"0": 17, "1": 3, ...}(key 为测试样本下标,value 为类别索引)5.2 仅用提供的权重预测
直接复用本仓库的
pct_model.pkl跑预测(需要先准备好data/test_points.npy,并自行写一个加载脚本或对pct.py做轻微改动以跳过训练阶段)。5.3 快速烟雾测试
6. 致谢
7. License
MIT