目录

图形学实验 PA3:Point Cloud Transformer 实验报告

曹海鑫 学号:2024010850


一、摘要

本次实验在 ModelNet40 三维形状分类任务上,基于 Jittor 框架对 PCT (Point Cloud Transformer) baseline 进行了多项改进,包括:

  • 用 DGCNN 风格的 kNN 边卷积(EdgeConv)替换原本的两层逐点 Conv1d 输入嵌入;
  • 引入完整的数据增强组合(绕 Y 轴随机旋转、各向异性缩放、平移、高斯抖动、点序打乱);
  • 在分类损失上使用 label smoothing 交叉熵;
  • 用 Max + Avg 双池化作为全局描述子;
  • 学习率采用线性 warmup + 余弦退火;
  • 测试时使用多视角 (TTA-8) 投票。

最终在头歌平台测试集上取得 89.63% 的分类准确率,远高于 80% 的通过线,相比示例代码 baseline 提升明显。


二、网络结构与方法改进

2.1 输入嵌入:从逐点 Conv1d 升级到 kNN 边卷积

Baseline 中的输入嵌入是两层 1×1 Conv1d,每个点独立映射,没有任何邻域信息。我们将其替换为两段 DGCNN 风格的 LocalEmbedding:每段先用 kNN 在特征空间中找最近邻 (k=32),构造边特征 [x_j - x_i, x_i],经过两层 Conv2d-BN-ReLU 后在邻居维做 max 聚合,得到带有局部几何上下文的 per-point 特征。

这一改动是最大的精度增益来源,让后续的 self-attention 在更具几何结构的特征上工作。

2.2 自注意力骨干

保持 PCT 论文的 Offset Self-Attention 结构不变:四个 SA_Layer 串联,每层将 query 与 key 共享权重以减小参数量,并在残差路径上做 BN+ReLU。四层输出在通道维拼接后经 1×1 卷积融合到更高维。我们将 SA 通道数从 baseline 的 128 提到 256,融合通道从 1024 提到 2048,使主干容量与下游任务复杂度更匹配。

2.3 全局描述子:Max + Avg 双池化

Baseline 仅使用 Max-Pooling。我们改为同时做 Max 和 Avg,再在通道维拼接,让全局向量同时保留显著局部结构与平均统计信息,对”形状细节差异不大但整体轮廓不同”的类别(如桌椅、家具)更友好。

2.4 数据增强

Baseline 仅做绕 Y 轴随机旋转。我们在训练时叠加:

  • 绕 Y 轴随机旋转 θ ∈ [0, 2π)
  • 各向异性缩放 s ∈ [2/3, 1.5]³
  • 随机平移 t ∈ [-0.2, 0.2]³
  • 高斯抖动 σ=0.01,clip=±0.05
  • 点序随机打乱

2.5 损失与优化

采用 label smoothing 交叉熵 (ε=0.1) 替代标准 CE,缓解过拟合并稳定训练;优化器使用 SGD (lr=0.05, momentum=0.9, weight_decay=1e-4);学习率调度为前 10 epoch 线性 warmup,之后余弦退火至 1e-5;并在反传后做 grad-norm clipping (max_norm=1.0)。这套组合在我们的初始尝试中显著缓解了 SGD 训练 21 epoch 后突然发散的问题。

2.6 测试时增强 (TTA)

对测试集每个样本做 8 次绕 Y 轴等间隔旋转推理,把 softmax 概率累加后取 argmax 作为最终预测,相对单视角推理稳定性更好。


三、实现细节与超参

超参数 说明
n_points 2048 使用全部点
kNN 邻居数 k 32 LocalEmbedding 中的 k
SA 通道数 base_ch 256 baseline 为 128
融合通道 fuse_ch 2048 baseline 为 1024
分类头隐层 head_ch 1024 两层 LBR 后接 fc
Dropout 0.5 分类头两个 LBR 后
Batch size 32 GPU 显存上限
Epochs 200 约 6.1 小时
Optimizer SGD momentum=0.9
学习率 0.05 线性 warmup 10 epoch,余弦退火至 1e-5
Weight decay 1e-4
Grad clip 1.0 max-norm
Label smoothing ε 0.1
TTA views 8 绕 Y 轴等间隔旋转
模型参数量 7.65 M

四、训练过程与结果

4.1 训练曲线

训练曲线

图 1: 训练 200 epoch 的损失(×10 显示)与训练准确率曲线。前 10 epoch 为线性 warmup,随后余弦退火。模型在第 20 epoch 已达 ~80%,60 epoch 后稳定在 95%+,最终峰值出现在第 197 epoch(99.23%)。

训练日志保存在 runs/v2_8M_2048pts/train.log,可用 python build_curve.py 重新生成 curve.png

4.2 测试集结果

模型 参数量 Train Acc (peak) Test Acc (头歌)
PCT baseline (示例代码) 0.81 M ~95% (示例) ~80% (通过线参考)
本工作 PCT-improved 7.65 M 99.23% 89.63%

4.3 简易消融分析

在我们 v1(baseline 通道数 128 + kNN 嵌入 + TTA-8,1.92 M 参数)的训练中,最终训练准确率为 95.54%;本工作 v2 进一步把通道数加倍、采用 2048 全点输入、把 epoch 拉长到 200,训练准确率提升到 99.23%,在测试集上也取得 89.63%。结合诊断脚本,本工作训练好的模型在原训练集上处于 eval 模式时的精度为 99.95%,验证 BatchNorm 等模块在推理路径上行为正常。

关于
35.0 KB
邀请码