PartRAG: Retrieval-Augmented Part-Level 3D Generation and Editing
Organizations: King’s College London · Peking University
Abstract
Single-image 3D generation with part-level structure remains challenging: learned priors struggle to cover the long tail of part geometries and maintain multi-view consistency, and existing systems provide limited support for precise, localized edits. We present PartRAG, a retrieval-augmented framework that integrates an external part database with a diffusion transformer to couple generation with an editable representation. To overcome the first challenge, we introduce a Hierarchical Contrastive Retrieval module that aligns dense image patches with 3D part latents at both part and object granularity, retrieving from a curated bank of 1,236 part-annotated assets to inject diverse, physically plausible exemplars into denoising. To overcome the second challenge, we add a masked, part-level editor that operates in a shared canonical space, enabling swaps, attribute refinements, and compositional updates without regenerating the whole object while preserving non-target parts and multi-view consistency. PartRAG achieves competitive results on Objaverse, ShapeNet, and ABO-reducing Chamfer Distance from 0.1726 to 0.1528 and raising F-Score from 0.7472 to 0.844 on Objaverse-with inference of 38s and interactive edits in 5-8s. Qualitatively, PartRAG produces sharper part boundaries, better thin-structure fidelity, and robust behavior on articulated objects. Code: https://github.com/AIGeeksGroup/PartRAG. Website: https://aigeeksgroup.github.io/PartRAG.
Figures & tables
| Method | Objaverse | ShapeNet | ABO | Time | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| CD | F | IoU | CD | F | IoU | CD | F | IoU | ||
| Dataset | – | – | 0.0796 | – | – | 0.1827 | – | – | 0.0137 | – |
| TripoSG [ 17 ] | 0.3104 | 0.5940 | – | 0.3751 | 0.5050 | – | 0.2017 | 0.7096 | – | – |
| TripoSG* | 0.1821 | 0.7115 | – | 0.3301 | 0.5589 | – | 0.1503 | 0.7723 | – | – |
| HoloPart [ 37 ] | 0.1916 | 0.6916 | 0.0443 | 0.3511 | 0.5498 | 0.1107 | 0.1338 | 0.8093 | 0.0449 | 18min |
| PartCrafter [ 20 ] | 0.1726 | 0.7472 | 0.0359 | 0.3205 | 0.5668 | 0.0293 | 0.1047 | 0.8617 | 0.0243 | 34s |
| Parameter | Value |
|---|---|
| Learning rate | |
| Batch size | 48 |
| Number of DiT blocks | 21 |
| Hidden dimension | 1024 |
| Latent dimension | 1024 |
| Temperature | 0.07 |
| Configuration | Preserve | Boundary | MV-Cons | Time (s) |
|---|---|---|---|---|
| IoU | Quality (%) | (CD var) | ||
| Full regeneration | 0.000 | – | 0.0031 | 38.0 |
| W/o boundary smoothing | 0.979 | 67 | 0.0089 | 6.2 |
| W/o canonical alignment | 0.941 | 73 | 0.0124 | 5.8 |
| W/o masked flow (naive) | 0.856 | 61 | 0.0156 | 7.1 |
| PartRAG (Full) | 0.982 | 94 | 0.0067 | 6.5 |
| Configuration | CD | F-Score | IoU | Training Time |
|---|---|---|---|---|
| Baseline (PartCrafter) [ 20 ] | 0.1726 | 0.7472 | 0.0359 | 24h |
| + RAG (top- =3) | 0.1598 | 0.779 | 0.0312 | 27h |
| + Object Contrastive | 0.1569 | 0.796 | 0.0284 | 31h |
| + Part Contrastive | 0.1547 | 0.809 | 0.0267 | 33h |
| + Both (Full PartRAG) | 0.1528 | 0.844 | 0.025 | 36h |
| Setting | Config | CD | F-Score | IoU |
|---|---|---|---|---|
| Top- | 0.1567 | 0.816 | 0.0281 | |
| 0.1528 | 0.844 | 0.025 | ||
| 0.1541 | 0.835 | 0.0263 | ||
| 0.1556 | 0.827 | 0.0276 | ||
| Encoder | CLIP [ 30 ] | 0.1582 | 0.820 | 0.0275 |
| DINOv2 [ 27 ] | 0.1549 | 0.831 | 0.0261 |
| CD | F-Score | IoU | Stability | ||
|---|---|---|---|---|---|
| 0.01 | 0.01 | 0.1562 | 0.827 | 0.0265 | Stable (0% NaN) |
| 0.02 | 0.02 | 0.1544 | 0.835 | 0.0258 | Stable (0% NaN) |
| 0.03 | 0.03 | 0.1528 | 0.844 | 0.025 | Stable (0% NaN) |
| 0.05 | 0.05 | 0.1538 | 0.836 | 0.0256 | Unstable (0.8% NaN) |
| 0.10 | 0.10 | 0.1565 | 0.825 | 0.0273 | Unstable (12.3% NaN) |