目录

jittor-单兵混子大队-计图挑战热身赛二

计图挑战热身赛二 — 基于 Jittor 框架的 PCT (Point Cloud Transformer) 点云分类模型,用于 ModelNet40 三维形状分类任务。

战队:单兵混子大队


1. 环境安装

  • Python: 3.8+
  • CUDA: 建议 11.8+ (需与 Jittor 编译工具链匹配)
# 安装依赖
pip install -r requirements.txt

⚠️ cuDNN 9 兼容性说明

Jittor 1.3.x 与 cuDNN 9 存在兼容性问题。

本代码提供 双路径 支持,优先级为:**正常路径 (cuDNN) > 特判路径 (conv_opt=1)**:

路径 说明 启用方式
正常路径 (默认) 使用 cuDNN 加速卷积,性能最优 默认行为,或 PCT_USE_CUDNN=1
特判路径 (回退) 跳过 cuDNN,使用 Jittor 自带卷积实现 (conv_opt=1) PCT_USE_CUDNN=0 或自动回退
  • 默认情况下,代码会优先尝试 cuDNN 正常路径,并在启动时自动检测 cuDNN 可用性
  • 若检测到 cuDNN 不兼容(如 cuDNN 9 环境),会提示用户回退到特判路径
  • 使用特判路径时训练可正常进行,卷积性能略有下降但不影响模型精度
# 自动模式 (默认, 优先 cuDNN)
python pct.py

# 强制使用 cuDNN 正常路径
PCT_USE_CUDNN=1 python pct.py

# 强制使用特判路径 (cuDNN 9 环境推荐)
PCT_USE_CUDNN=0 python pct.py

2. 数据准备

数据目录结构

data/
├── train_points.npy    # 训练集点云 (9843, 2048, 3)
├── train_labels.npy    # 训练集标签 (9843,)
├── test_points.npy     # 测试集点云 (2468, 2048, 3)
└── categories.txt      # 类别名称 (40 行)

数据来源

数据来自 ModelNet40 数据集,已预处理为 2048 点 npy 格式。

原始数据集: ModelNet

将数据文件放入 data/ 目录即可,无需额外配置路径。


3. 训练

# 默认配置训练 (300 epochs, batch_size=32, lr=0.01)
python pct.py

# cuDNN 9 环境 (强制特判路径)
PCT_USE_CUDNN=0 python pct.py

# 指定自定义 nvcc 路径
PCT_USE_CUDA=1 cuda_archs=89 nvcc_path=/path/to/nvcc python pct.py

可调参数

pct.pymain() 函数中可调整以下关键参数:

参数 默认值 说明
n_points 1024 采样点数
batch_size 32 批次大小
epochs 300 训练轮数
lr 0.01 初始学习率
seed 42 随机种子(统一设置 np.random.seedjt.set_global_seed

可复现性:代码中通过 seed=42 统一固定 numpy 和 Jittor 的随机种子,确保训练结果可复现。

训练产物

  • pct_model.pkl: 训练好的模型权重
  • result.json: 测试集预测结果

4. 评测 / 推理

训练完成后会自动对测试集进行推理,生成 result.json

# 完整训练 + 推理(一条命令)
python pct.py

输出格式

{
  "0": 15,
  "1": 7,
  "2": 32,
  ...
}
  • Key: 测试样本编号 (字符串)
  • Value: 预测类别 (0-39 整数)

5. 结果说明

评估指标

  • 准确率 (Accuracy): 预测正确的样本数 / 总样本数
  • 损失函数: Cross-Entropy Loss
  • 训练过程中每 20 个 batch 输出一次 loss 和 accuracy

预期结果

配置 训练集准确率 说明
正常路径 (cuDNN) ~93-95% 性能最优
特判路径 (conv_opt=1) ~93-95% 精度一致, 速度略慢

与线上提交的差异

  • 本地训练结果可能与线上提交存在合理差异(受硬件差异、Jittor 版本等因素影响)
  • 已固定 seed=42 并统一设置 np.random.seed(seed)jt.set_global_seed(seed),最大程度保证可复现性
  • 若使用特判路径(conv_opt=1),卷积实现不同但精度一致

6. 模型架构

PCT (Point Cloud Transformer)
├── Embedding: Conv1d(3→128) × 2 + BN + ReLU
├── Self-Attention: SA_Layer × 4 (concat skip connections)
├── Fusion: Conv1d(512→1024) + BN + LeakyReLU
├── Global Pooling: MaxPool
├── Classifier: FC(1024→512→256→256) + Dropout
└── Residual Block: 3-layer residual refinement
  • 参数量: ~2.8M
  • 输入: (B, 3, N) 点云坐标
  • 输出: (B, 40) 类别 logits

7. 项目结构

├── README.md              # 本文档
├── LICENSE                # MIT License
├── .gitignore             # Git 忽略规则
├── requirements.txt       # Python 依赖
├── pct.py                 # 主训练/推理脚本
└── data/
    └── README.md          # 数据说明

8. 引用

关于
37.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号