目录

jittor-fujiaqi006-pointcloud-denoise

本仓库为第六届计图人工智能挑战赛赛道二「基于深度学习的三维点云降噪」的开源代码。

  • 战队名:fujiaqi006
  • 项目名称:pointcloud-denoise
  • 赛道:赛道二,基于深度学习的三维点云降噪
  • 框架要求:Jittor
  • A 榜线上成绩:62.51
  • 本地验证成绩:62.94,其中 CD 得分 51.71,P2S 得分 74.18

本方案不改变点云点数,输出格式严格遵循比赛要求:

result.zip
  shapenet/<synset_id>/<model_id>/denoised.npy

每个 denoised.npy 均为 float32,shape 为 (N, 3),且 N 与对应输入 noisy.npy 完全一致。

1. 环境安装

推荐环境:

  • Python 3.9 或更高版本
  • Jittor
  • NumPy
  • SciPy
  • tqdm
  • point-cloud-utils,用于运行官方 P2S 评测脚本

安装依赖:

python -m pip install -r requirements.txt

说明:比赛要求使用 Jittor。本仓库的降噪核心为确定性局部几何算法,使用 NumPy/SciPy 实现以保证 CPU 推理稳定性;denoise_submit.py 会在环境可用时 warm up Jittor。

2. 数据准备

不要将官方数据集提交到仓库。请从比赛页面下载数据,并保持如下目录结构:

dataset_test_noisy/
  shapenet/
    <synset_id>/
      <model_id>/
        noisy.npy

若需要本地评测,请准备官方格式的验证目录:

official_val/
  noisy/
    shapenet/<synset_id>/<model_id>/noisy.npy
  gt/
    shapenet/<synset_id>/<model_id>/pointcloud.npy
  mesh/
    shapenet/<synset_id>/<model_id>/model.obj

实际路径通过命令行参数传入,例如 --input-dir /path/to/dataset_test_noisy

3. 训练

最终提交方案是确定性局部几何降噪方法,不需要训练权重,也不使用外部数据。为了复现参数选择过程,仓库保留了本地验证集上的参数搜索脚本:

python sweep_edge_classical.py

参数搜索脚本默认从如下位置读取本地验证集:

official_val/noisy
official_val/gt
official_val/mesh
starter_code/starter_code/evaluate.py

也可以用环境变量指定根目录:

export JITTOR_PA4_ROOT=/path/to/workspace
export JITTOR_STARTER_DIR=/path/to/starter_code
python sweep_edge_classical.py

本方法没有随机训练过程,最终推理是确定性的,因此不依赖随机种子。

4. 评测与推理

使用最终 A 榜配置生成预测结果:

python generate_best62p94_submission.py \
  --input-dir /path/to/dataset_test_noisy \
  --output-dir best62p94_result \
  --workers 8

检查输出文件数量、dtype、shape,并打包为 result.zip

python zip_and_validate_result.py \
  --result_dir best62p94_result \
  --noisy_dir /path/to/dataset_test_noisy \
  --zip_path result.zip \
  --report_path result_zip_report.json

如果有本地 ground truth 与 mesh,可使用官方 evaluate.py 评测:

python evaluate.py \
  --pred_dir best62p94_result \
  --gt_dir /path/to/official_val/gt \
  --noisy_dir /path/to/official_val/noisy \
  --mesh_dir /path/to/official_val/mesh \
  --workers 8 \
  --verbose

也可以使用通用入口自行指定参数:

python denoise_submit.py \
  --input-dir /path/to/dataset_test_noisy \
  --output-dir results \
  --zip-path result.zip \
  --method hybrid \
  --k 64 \
  --iterations 3 \
  --blend 1.04

5. 方法说明

最终方法基于局部几何先验:

  1. 对每个点使用 scipy.spatial.cKDTree 搜索 KNN 邻域。
  2. 对邻域做 PCA,估计局部切平面与法向方向。
  3. 根据空间距离和法向距离构造双边权重,使点主要沿局部法线方向移动。
  4. 加入轻量切向平滑,抑制高频噪声,同时尽量保留边缘和薄结构。
  5. 将降噪结果与原始输入融合,控制总位移,避免过度平滑。

最终配置记录在 edge_best.json

k=64
iterations=3
blend=1.04
alpha=0.70
beta=0.24
spatial=0.55
range_scale=0.38
tan_k_ratio=0.5

6. 结果说明

本地验证集使用官方训练 mesh 自行采样得到 clean/noisy/mesh,并使用官方 evaluate.py 评测。

方法 CD 得分 P2S 得分 最终得分
最终提交配置 51.71 74.18 62.94

A 榜线上提交成绩为 62.51。线上测试分布与本地验证集不完全一致,因此线上成绩略低于本地验证成绩。

相较官方 Baseline,本方案超过 baseline 的主要原因是:

  • 显式局部平面和法向约束减少了无约束三维位移漂移;
  • 双边权重降低了跨表面片、尖锐边缘和薄结构之间的过度平滑;
  • 切向与法向更新分离,在降噪的同时更好地保持几何细节;
  • 位移幅度受控,对 CD 与 P2S 两项指标更稳定。

7. 目录说明

.
├── README.md
├── LICENSE
├── requirements.txt
├── denoise_submit.py
├── generate_best62p94_submission.py
├── zip_and_validate_result.py
├── sweep_edge_classical.py
├── sweep_tuned_classical.py
├── edge_best.json
├── best62p94_generation_report.json
└── REPORT.md

文件说明:

  • denoise_submit.py:核心降噪算子与通用推理入口。
  • generate_best62p94_submission.py:最终 A 榜配置的复现脚本。
  • zip_and_validate_result.py:输出格式检查与 result.zip 打包脚本。
  • sweep_edge_classical.pysweep_tuned_classical.py:本地验证参数搜索脚本。
  • REPORT.md:实验报告。

8. 第三方依赖与声明

本仓库未使用比赛提供数据集以外的额外数据,也未使用外部预训练权重。

主要第三方依赖:

  • Jittor
  • NumPy
  • SciPy
  • tqdm
  • point-cloud-utils

代码许可证见 LICENSE

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

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