PGD1 output patch
-> estimate local PCA axes
-> build tangent / tangent / normal frame
-> rotate PGD1 points into local normal frame
-> PGD2 predicts residual displacement in local frame
-> rotate PGD2 displacement back to world frame
-> merge overlapping patch predictions
B榜提交说明文档
1. 项目信息
ckp/stage3_checkpoint_hard005_tail015_bs8_fps_np4_from461_joint_544.pkl本提交包不包含数据集。复现人员需要自行准备赛事提供的训练集和 B 榜测试 noisy 数据,并按照本文档中的相对路径说明修改数据根目录。
提交包关键内容如下:
B 榜最优结果对应信息:
2. 项目概述
本项目面向点云降噪任务:输入受噪声污染的三维点云,模型预测每个点的位移向量,将偏离真实物体表面的点校正到表面附近,从而生成降噪点云。评价指标主要包括 Chamfer Distance(CD)和 Point-to-Surface Distance(P2S)。模型需要在降低噪声的同时尽量保留物体尖锐边缘、细长结构和局部几何细节。
A 榜阶段使用 PGD(Guiding Point Cloud Denoising with Learned Structural Priors)作为基础框架,采用两阶段级联的逐点位移预测方式:
B 榜阶段在 A 榜代码基础上继续改动,重点围绕第二阶段法向对齐、最终推理策略和后处理进行增强,并通过分阶段续训得到 B 榜最优 checkpoint。
3. B 榜主要创新点
3.1 PGD2 引入局部法向坐标系
A 榜级联模型中,第二阶段 PGD2 直接在世界坐标系下对 PGD1 输出继续预测残余位移。B 榜版本在 PGD2 前向时加入局部 PCA 法向坐标系:
这一改动使第二阶段更明确地区分切向结构和法向噪声,有利于减少沿表面切向的错误收缩,并增强对薄片、尖角、边界和细长结构的保护。相关实现位于:
其中
normal_alignment_frames、to_normal_frame、from_normal_frame负责 PCA 法向坐标系构造和坐标变换,final_inference.py中的Predictor在 PGD1 和 PGD2 之间调用该逻辑。3.2 优化最终推理流程
B 榜最终推理不再使用早期分散的预测脚本,而是整理为单入口:
该脚本完成从 noisy 输入到最终提交 zip 的完整流程:
最终推理使用更高覆盖率的 patch 前向和 adaptive merge:
adaptive merge同时考虑最近中心的 hard 结果和距离加权平均结果。当重叠 patch 预测一致时更多采用平均以降低噪声,当不同 patch 分歧较大时退回 hard 结果以保护局部尖锐结构。3.3 加入推理阶段后处理
B 榜最终结果在 PGD2 原始输出后加入三段后处理,均不读取测试集 GT、mesh 或外部 normal,不更新 checkpoint 参数。
Local-alpha
根据
pgd2_raw - pgd1的局部一致性自适应调节 PGD2 位移强度。邻域位移方向更一致时适度增强 PGD2 修正,邻域分歧较大时降低修正强度,减少局部过冲。Surface Gate
在
k=8/12/16/24/32多个尺度上基于局部 PCA 法向生成候选表面修正,再用五折自训练 Gate MLP 根据局部几何特征和 PGD1/PGD2 一致性预测逐点修正强度。Coverage Repair
Surface Gate 后可能出现局部点分布轻微聚集,因此最后沿局部切平面进行受限重分布,改善点云覆盖性。
4. 相对于 A 榜算法的改动
与 A 榜提交代码相比,B 榜主要改动如下:
第二阶段去噪前进行法向统一:对每个 patch 建立局部 PCA 法向坐标系并统一法向方向,使第二阶段在一致的局部几何坐标系中完成去噪。
推理阶段加入后处理:在网络预测结果基础上加入 local-alpha、Surface Gate 和 Coverage Repair 等后处理,进一步保护局部结构并提升最终去噪效果。
改动可以概括为以下复现链路:
B 榜改动保持了 A 榜 PGD/NAA-PGD 基础网络结构和两阶段级联思路,主要提升第二阶段几何坐标表达、最终推理覆盖率和推理阶段几何修正能力。
5. 代码结构说明
清理后的提交代码目录如下:
其中,复现 B 榜最优结果的最小核心文件包括:
6. B 榜最优 checkpoint
B 榜最优总分为:
对应 checkpoint 为:
该 checkpoint 是联合 PGD1+PGD2 权重,包含
pgd1.*和pgd2.*参数。提交包中同时保留ckp/下训练链关键 checkpoint,方便复现续训过程。7. B 榜最优结果复现方式
最小复现命令总览如下,完整说明见后续小节:
7.1 环境安装
推荐环境:
创建环境:
也可手动安装核心依赖:
运行前建议设置:
7.2 数据路径
请勿将数据集放入提交包。复现时自行准备 B 榜测试 noisy 数据,目录格式应为:
stage3/datalist/test.txt中每行是相对于<TEST_ROOT>的样本目录,例如:复现前设置:
7.3 单卡推理命令
在代码根目录执行:
输出目录:
最终提交 zip:
zip 内目录格式为:
提交前检查:
7.4 断点续跑
final_inference.py默认不覆盖已有完整文件。推理中断后重新执行同一命令即可续跑。若需要全部重跑,加:也可以分阶段运行:
8. 训练复现方式
完整训练/续训链如下:
完整训练命令链如下:
训练数据根目录需要在以下配置中修改:
将
input_dataset_dir改为实际训练集路径:8.1 Stage1 基础训练
输出:
后续使用第 349 轮 checkpoint。
8.2 Stage1 A+B 续训
关键配置:
后续使用:
8.3 Stage2 训练 PGD2
关键配置:
后续使用:
8.4 Stage3 联合训练到 joint_200
关键配置:
输出:
8.5 Stage3 hard005 tail015 bs32 续训
关键配置:
后续使用:
8.6 Stage3 num_patches=2、bs16 续训
关键配置:
ops_fps_np2.yaml中训练 patch 数:后续使用:
8.7 Stage3 num_patches=4、bs8 续训
关键配置:
ops_fps_np4.yaml中训练 patch 数:最终 B 榜最优推理使用:
9. 注意事项
ckp/stage3_checkpoint_hard005_tail015_bs8_fps_np4_from461_joint_544.pkl。--post-workers是 CPU 后处理进程数,不是 GPU worker 数。final_inference.py。shapenet/<category>/<sample_id>/denoised.npy,不要多包一层final/或stage3/final_runs/。