π¦ GapSeg
Diagnosis-Gated Learned Shape Completion
One RGB-D photo in β a complete 3D shape out β¨
A single photo of an object gives a broken, half-there 3D shape π« β hidden sides are just missing. GapSeg is a little chameleon π¦π that looks at each object, guesses which ones came out distorted, and re-grows only those with a learned network. The result beats stitching many camera angles together.
one RGB-D frame β completed 3D, across 6 GraspNet scenes π
β¨ Why it's neat
- π Diagnose first β predict per-object distortion from a single frame
- π§© Complete only what's broken β learned shape completion, gated by the diagnosis
- π Beats geometric multi-view fusion β with just one view + completion
π Results (GraspNet, 278 objects, chamfer mm β lower = better)
| method | chamfer | vs single |
|---|---|---|
| π· single view | 6.60 | β |
| π§΅ geometric fusion | 5.64 | 88% β |
| π§© single + completion | 2.75 | 95% β |
| π¦ diagnosis-gated completion | 2.84 | 94% β |
π― One photo + learned completion (2.75 mm) beats fusing many views (5.64 mm). Gating it by the diagnoser keeps the gain while only completing the hard objects.
π Usage
from gapseg.pipeline import GapSegPipeline
pipe = GapSegPipeline.from_pretrained("haeing/gapseg", device="cuda")
# rgb: HxWx3 uint8 Β· depth_m: HxW float (metres) Β· K: 3x3
# instances: [{"inst_id": 1, "mask": HxW bool, "R": 3x3, "t": (3,)}, ...]
out = pipe.infer(rgb, depth_m, K, instances)
for o in out:
print(o["inst_id"], o["dims_cm"], "completed:", o["completed"])
π§ R/t (object pose) drive completion; objects with no pose or below the
diagnosis threshold return their single-view cloud.
π¦ Contents
- π§
sq2_gview/best.ptβ the G_view diagnoser (RGB-D β distortion / conditions) - π§©
sq3_completion/best.ptβ the PCN shape-completion network - πΌοΈ
gallery.gifβ rotating demo across 6 scenes
made with π¦ + π Β· single view, whole shape