root_path = "benkaye/dualpm"
variant = "dualpm-full" # or "dualpm-benchmark"
model_path = f"{root_path}/{variant}"
config = DualPMConfig.from_pretrained(model_path)
model = DualPMModel.from_pretrained(model_path, config=config)
# pointclouds
# IF return_pointclouds=True, per batch list of [Nx3] [Nx3],[N], (B H W D tensor)
# IF False, tensors (B H W D 3), (B H W D 3), (B H W D), (B H W D)
rec, canon, conf, occ = model.infer(feat, mask, return_pointclouds=True)
@misc{kaye2025dualpmdualposedcanonicalpoint,
title={DualPM: Dual Posed-Canonical Point Maps for 3D Shape and Pose Reconstruction},
author={Ben Kaye and Tomas Jakab and Shangzhe Wu and Christian Rupprecht and Andrea Vedaldi},
year={2025},
eprint={2412.04464},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2412.04464},
}
BY Nvidia / SongUNet backbone
@misc{karras2022elucidatingdesignspacediffusionbased,
title={Elucidating the Design Space of Diffusion-Based Generative Models},
author={Tero Karras and Miika Aittala and Timo Aila and Samuli Laine},
year={2022},
eprint={2206.00364},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2206.00364},
}