Spaces:
Running on Zero
A newer version of the Gradio SDK is available: 6.25.0
title: PatchAlign3D
emoji: 🧩
colorFrom: gray
colorTo: pink
sdk: gradio
sdk_version: 6.22.0
app_file: app.py
pinned: false
license: mit
short_description: Zero-shot 3D part segmentation from text queries
python_version: '3.12'
startup_duration_timeout: 1h
models:
- patchalign3d/patchalign3d-encoder
PatchAlign3D · zero-shot 3D part segmentation
Name the parts you want in words and see them highlighted on a 3D shape. A single forward pass of a point-cloud encoder whose patch-level features are aligned to CLIP text space — no test-time multi-view rendering, no per-category training.
- Paper: https://huggingface.co/papers/2601.02457
- Code: https://github.com/souhail-hadgi/PatchAlign3D
- Weights: https://huggingface.co/patchalign3d/patchalign3d-encoder
How it works
Points are centred and scaled to the unit sphere and the Y/Z axes are swapped to match the training
convention (exactly as in the official infer.py). Furthest-point sampling picks patch centres, a k-NN
neighbourhood around each becomes a patch token, and a 12-layer point transformer produces one feature per
patch. A learned linear head projects those into the CLIP ViT-bigG-14 (laion2b_s39b_b160k) text space,
where they are matched against a prompt ensemble. Each point takes the label of its nearest patch centre.
Implementation notes
patchalign3d.py is a faithful port of the official inference path with three behaviour-preserving
deviations, so the Space runs without custom CUDA extensions:
pointnet2_ops.furthest_point_sample→ pure-torch iterative FPS (same start index, squared distances, argmax selection).knn_cuda.KNN→torch.cdist+topk.open_clip ViT-bigG-14 / laion2b_s39b_b160ktext tower → the byte-identical (up to fp16 rounding)text_encoder_2+tokenizer_2ofstabilityai/stable-diffusion-xl-base-1.0, which avoids a 10 GB download of the full image+text CLIP checkpoint.
Verified against ShapeNetPart ground truth on CPU before deployment: the checkpoint loads with 0 missing
and 0 unexpected keys, and per-shape zero-shot mIoU averages 0.59 with the default part_only prompts
(0.64 with ensemble) across 8 held-out test shapes.