result v1
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 point cloud classification.
本项目使用 Jittor 复现 PCT(Point Cloud Transformer)分类网络,用于完成 ModelNet40 三维点云分类任务。模型读取预处理后的 .npy 点云数据,训练分类器,并在无标签测试集上生成符合提交要求的 result.json。
.npy
result.json
.pkl
pct/ ├── pct.py # Jittor 版 PCT 训练、验证、预测主程序 ├── requirements.txt # Python 依赖 ├── README.md # 项目说明 ├── result.json # 测试集预测结果 ├── result.zip # 提交用预测压缩包 ├── config/ │ └── config_scratch.yaml # 当前训练/预测配置 ├── data/ │ ├── train_points.npy # 训练点云,形状通常为 (N, 2048, 3) │ ├── train_labels.npy # 训练标签,形状通常为 (N,) │ ├── test_points.npy # 测试点云,无标签 │ └── categories.txt # ModelNet40 类别名称 └── snapshots/ └── best_model.pkl # Jittor 保存的最佳模型参数
Jittor 当前主要支持 Linux / Windows / WSL 环境,并需要可用的 C++ 编译器。GPU 训练需要 CUDA 环境。
推荐使用 Conda 创建独立环境:
conda create -n jittor python=3.12 -y conda activate jittor pip install -r requirements.txt
如果只想手动安装最小依赖:
pip install jittor numpy pyyaml tensorboardX
当前推荐使用的配置文件是 config/config_scratch.yaml,其中 data.data_dir 指向 data/。
config/config_scratch.yaml
data.data_dir
data/
训练和预测需要以下文件:
data/train_points.npy data/train_labels.npy data/test_points.npy data/categories.txt
数据集类 ModelNet40Dataset 会从每个点云中采样 n_points 个点。当前配置为:
ModelNet40Dataset
n_points
data: n_points: 1024 num_classes: 40 val_split: 0.1
训练时会将训练集按随机种子划分为训练集和验证集;测试集没有标签,预测时返回 {样本编号: 预测类别} 格式的 JSON。
{样本编号: 预测类别}
训练模型:
python pct.py train --config config/config_scratch.yaml
仅生成测试集预测:
python pct.py test --config config/config_scratch.yaml
训练完成后,程序会自动加载最佳模型并生成:
如果需要提交压缩包,可以将 result.json 压缩为 result.zip。
result.zip
本项目不在 pct.py 中维护默认配置,所有实验参数都写在 config/config_scratch.yaml 中.
pct.py
主要配置段如下:
run: mode: train seed: 42 device: auto data: data_dir: data num_classes: 40 n_points: 1024 val_split: 0.1 train: epochs: 200 batch_size: 32 num_workers: 4
run.mode 可以是:
run.mode
train
test
run.device 可以是:
run.device
auto
cuda
cpu
模型主体在 pct.py 中实现,包含以下模块:
Conv1d + BatchNorm1d + ReLU
SA_Layer
Conv1d
当前配置中的模型参数:
model: channels: 128 attention_layers: 4 attention_reduction: 4 share_qk: true fusion_channels: 1024 fc_dims: [512, 256] dropout: [0.5, 0.5]
当前训练策略:
optimizer: type: sgd lr: 0.01 momentum: 0.9 weight_decay: 0.0001 scheduler: type: warmup_cosine warmup_epochs: 10 warmup_start_factor: 0.1 eta_min: 0.00001
当前启用的数据增强:
其他增强策略,例如各向异性缩放、镜像、剪切、平移、jitter、dropout、局部 dropout 和点顺序打乱,已在配置文件中保留开关,可按实验需要启用。
训练过程中会保存:
snapshots/last_model.pkl snapshots/best_model.pkl snapshots/epoch_XXX.pkl
其中:
last_model.pkl
best_model.pkl
epoch_XXX.pkl
snapshot_interval
预测结果保存为:
格式示例:
{ "0": 0, "1": 0, "2": 0 }
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
PCT_jittor
A Jittor implementation of Point Cloud Transformer (PCT) for ModelNet40 point cloud classification.
本项目使用 Jittor 复现 PCT(Point Cloud Transformer)分类网络,用于完成 ModelNet40 三维点云分类任务。模型读取预处理后的
.npy点云数据,训练分类器,并在无标签测试集上生成符合提交要求的result.json。目录
项目功能
.pkl模型 checkpoint,并生成测试集预测文件result.json。项目结构
环境依赖
Jittor 当前主要支持 Linux / Windows / WSL 环境,并需要可用的 C++ 编译器。GPU 训练需要 CUDA 环境。
推荐使用 Conda 创建独立环境:
如果只想手动安装最小依赖:
数据格式
当前推荐使用的配置文件是
config/config_scratch.yaml,其中data.data_dir指向data/。训练和预测需要以下文件:
数据集类
ModelNet40Dataset会从每个点云中采样n_points个点。当前配置为:训练时会将训练集按随机种子划分为训练集和验证集;测试集没有标签,预测时返回
{样本编号: 预测类别}格式的 JSON。快速开始
训练模型:
仅生成测试集预测:
训练完成后,程序会自动加载最佳模型并生成:
如果需要提交压缩包,可以将
result.json压缩为result.zip。配置说明
本项目不在
pct.py中维护默认配置,所有实验参数都写在config/config_scratch.yaml中.主要配置段如下:
run.mode可以是:train:训练模型、保存 checkpoint,并生成测试集预测。test:加载已有模型,只生成测试集预测。run.device可以是:auto:自动使用 CUDA,如果 Jittor 检测不到 CUDA 则使用 CPU。cuda:强制使用 CUDA。cpu:强制使用 CPU。模型与训练策略
模型主体在
pct.py中实现,包含以下模块:Conv1d + BatchNorm1d + ReLU初始特征提取。SA_Layer自注意力模块。Conv1d融合到 1024 维特征。当前配置中的模型参数:
当前训练策略:
当前启用的数据增强:
其他增强策略,例如各向异性缩放、镜像、剪切、平移、jitter、dropout、局部 dropout 和点顺序打乱,已在配置文件中保留开关,可按实验需要启用。
输出文件
训练过程中会保存:
其中:
last_model.pkl:最近一次训练 epoch 的 checkpoint。best_model.pkl:验证集准确率最高的 checkpoint;如果没有验证集,则使用训练准确率。epoch_XXX.pkl:按snapshot_interval周期保存的模型快照。预测结果保存为:
格式示例: