复现 PUDM 时遇到的一些问题和疑问
hi wt,非常感谢你在点云扩散模型方向的出色工作!我阅读了你的论文和代码实现,受益匪浅。最近在深入研究 PUDM 项目时,我遇到了一些问题,希望能向你请教。
1. 关于gamma的问题 我发现训练和推理时都会有个gamma参数去乘(预测的噪声+稀疏点云midpoint_interpolate后的结果i) https://github.com/QWTforGithub/PUDM/blob/623649a61d2d2e218b50ec120eb6a31274621144/pointnet2/models/pointnet2_with_pcld_condition.py#L620-L621 https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/util.py#L493-L495
我想知道为什么这里Nnet预测出的噪声还需要与插值结果 i 相加,在计算mse时也是z与out,似乎的扩散模型的计算过程不一样,gamma 的设置(代码中为 0.5)在整体预测中的物理或建模意义是什么?有没有尝试过其他值,或者它是否具有调参上的敏感性?
2.关于采样倍数label 在训练阶段,无论是 PUGAN 还是 PU1K 数据集,所有点云的 R 倍数标签都是固定的 4,但代码中仍然对其进行了 embedding(256,128),并作为条件输入给到 CNet 进行建模 https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/models/pointnet2_with_pcld_condition.py#L265-L266 为什么训练时仅使用了一个固定的 R=4,还能在推理时泛化到不同label并表现出较好的效果
3.网络的尺度自适应 我注意到训练时仅使用了 256 → 1024 的数据对,而测试时却可以支持 256、1024 、2048等不同大小的点云,是因为网络有尺度自适应吗? 此外我发现了一个bug,在运行sample.py时,是根据配置文件里面dataset_config的R去寻找,而不是sample文件里面定义的R,如果二者不一致的话会发生报错 https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/samples.py#L59 https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/samples.py#L101
可以在testloader 上面加一行代码datasetset_config['R'] = R
4.关于 P2F 计算 当我在运行sample.py时,发现默认并不会去计算P2F的值,设为true以后发现会去查找这个路径的文件, https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/eval.py#L131 我想问下该 .xyz 文件(如 xxx_point2mesh_distance.xyz)应如何生成?是否有推荐的 mesh 重建与距离计算流程或脚本
5.关于指标与论文存在差异的问题
我尝试复现论文中的指标时,发现结果与你论文中公布的指标存在较大偏差,通过运行了你提供的 pugan.pkl 和 pu1k.pkl 权重文件后,
对于pugan数据集
4×上采样
而论文分别是0.131 1.220
16 ×上采样
论文分别是0.082 1.120
对于pu1k数据集,运行原命令时报错,可能是因为测试集路径未包含 R,我参考如下代码位置进行了修改:
https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/dataloader/dataset_loader.py#L33-L34
重新运行得到
这与论文中给出0.217 2.164差别非常大了,相差了一个数量级,请问我这样处理有问题吗?如果没有问题,你觉得会有哪些可能的原因导致结果偏差如此之大?
衷心感谢你抽出宝贵时间阅读我提出的这些问题,你的研究工作对我启发非常大,也让我对基于扩散模型的点云建模有了更深入的理解。期待您的回复,再次感谢你!
感谢你的关注。我记得你也关注我的另一个工作了。你的这些问题都是比较好回答的,但是,非常抱歉,我最近在赶deadline,大约要2个周左右才能抽出时间一一回复。实际上,DDPMs在短期训练中是很难work的,因此需要一些先验引导。这样才能引导推理过程向着想要的结果生成,这个操作有点像Classifier Guidance,在推理过程中通过引入一个额外的分类器来指导DDPMs生成指定类别的图像。先回复这么多。。。 今晚还要通宵赶论文。。。
感谢你的关注。我记得你也关注我的另一个工作了。你的这些问题都是比较好回答的,但是,非常抱歉,我最近在赶deadline,大约要2个周左右才能抽出时间一一回复。实际上,DDPMs在短期训练中是很难work的,因此需要一些先验引导。这样才能引导推理过程向着想要的结果生成,这个操作有点像Classifier Guidance,在推理过程中通过引入一个额外的分类器来指导DDPMs生成指定类别的图像。先回复这么多。。。 今晚还要通宵赶论文。。。
哈哈哈是,我还关注了cdsegnet,谢谢你的及时回复,不着急,我会耐心等待你的后续回复,祝你顺利完成这次 deadline!
我发现推理时每一次的结果受起始噪声的影响波动较大
hi wt, https://github.com/QWTforGithub/PUDM/blob/b7e3f11e99667a06a6fcafa3d5eb42ca573d5b34/pointnet2/eval.py#L137 这行代码似乎应该改为global_p2f.append(total_metapoint2mesh_distance)
hi wt,
Line 137 in b7e3f11
global_p2f.append(point2mesh_distance)
这行代码似乎应该改为global_p2f.append(total_metapoint2mesh_distance)
谢谢你的关注。其实这份代码,我一直想花时间去重构,因为代码优化非常不到位。但是学业问题,我总是不停地在做下个工作,导致自己没有时间去重写代码(上个deadline结束之后,立马又开始下个deadline)。实际上,很多DDPMs的训练和推理trick可以应用于PUDM上。后续我抽出时间会进一步优化代码。
我发现推理时每一次的结果受起始噪声的影响波动较大
是的,DDPMs的推理结果受起始噪声的影响是比较大。本质上,DDPMs也是一种单射行为,固定的噪声会产生固定的结果,因此噪声的选取是比较重要的。