Add offline object inventory and localize perception pipeline DIM1343 - #3422
Queued
bogwi wants to merge 13 commits into
Queued
Add offline object inventory and localize perception pipeline DIM1343#3422bogwi wants to merge 13 commits into
bogwi wants to merge 13 commits into
Conversation
bogwi
requested review from
Dreamsorcerer,
leshy,
mustafab0,
paul-nechifor and
spomichter
as code owners
August 10, 2026 17:56
❌ 3 Tests Failed:
View the top 2 failed test(s) by shortest run time
View the full list of 1 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
bogwi
marked this pull request as draft
August 13, 2026 08:47
bogwi
marked this pull request as ready for review
August 15, 2026 02:28
…43 PR1). Text prompt to 2D masks and memory search to 3D point clouds, with OWLv2, SigLIP, MPS support, LocalizePolicy, and related dependency pins.
…le; also improve `inventory()`
bogwi
force-pushed
the
danvi/dim1343/object-registration-pr1
branch
from
August 15, 2026 04:37
56cba81 to
a428723
Compare
spomichter
previously requested changes
Aug 15, 2026
spomichter
reviewed
Aug 15, 2026
leshy
approved these changes
Aug 15, 2026
leshy
enabled auto-merge
August 15, 2026 15:30
leshy
dismissed
spomichter’s stale review
August 15, 2026 15:32
rewriting user facing API in the second pass, will comment with the linear spec now
leshy
added this pull request to the merge queue
Aug 15, 2026
Any commits made after this event will not be merged.
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Aug 15, 2026
bogwi
enabled auto-merge
August 16, 2026 10:55
bogwi
added this pull request to the merge queue
Aug 16, 2026
Any commits made after this event will not be merged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What features we implement in this PR
From the issue feature list, this branch covers A, D, E, and F.
inventory()discovers every in-scope support on the table without a text prompt, then names each instance.localize()runs SigLIP retrieval, OmDet boxes, and EdgeTAMsegment()so a query string becomes masks on ranked frames.localize()lifts those masks through depth, clusters them, verifies across views, and returns the newest verified cloud and position. Offline over a recording, no live robot.inventory()merges same-frame fragments and associates tracks with geometry only (Hungarian assignment plus fragment merge). Labels are applied after identity is fixed.Not in this branch: (B) exact dimensions, (C) 360-degree clouds, (G) re-ID.
What is the proposed API
Localize
use localize() to query an object or a list of objects over a recorded window
e2e example
INITIAL PR1 LIMITATIONS
The cloud is the latest single-view depth lift - cloud_mode="latest_visible" - and not a fused 360 cloud. This is a feature (C), not implemented today. Grasp candidates on the visible face work - grasps that need the back side - do not. Same for (B) exact dimensions => extent is the latest-view AABB.
Manipulation team should plan from the points not the quaternion.
localize CLI example with a dedicated tool - `tool_localize()
uv run python -m dimos.perception.memory.tool_localize \ "book" \ --from 53 \ --duration 76hit 'book': position=(0.603, -0.171, 0.130) frame=world ts_offset=128.8s points=24715 views=3 score=0.70 margin=1.00localize performance
cpu: AMD Ryzen AI 7 350 w/ Radeon 860M (8c/16t)
ram: 30.1 GiB
gpu: NVIDIA GeForce RTX 5070 Laptop GPU, 7.5 GiB, driver 595.84, cuda 12.8, torch 2.7.1+cu128
recording: 605s total, windows end at +129s
cold, 76s window, query 'book':
index build 4.20s (includes SigLIP weight load)
first query 15.42s (includes OmDet + EdgeTAM weight load)
total 19.62s
warm query, same window: 9.67s 9.79s 9.93s (mean 9.80s)
ram: 3.0 GiB resident, 3.1 GiB peak
vram: 1.35 GiB weights resident, 1.68 GiB peak, 1.96 GiB reserved, 2.1 GiB process total (nvidia-smi)
window scaling, warm weights, index rebuilt per window:
last 30s: index 0.39s (30 frames, 13 ms/frame), query 6.04s
last 60s: index 0.73s (60 frames, 12 ms/frame), query 8.45s
last 120s: index 1.75s (119 frames, 15 ms/frame), query 14.98s
Inventory
inventory() takes a vocabulary of labels as an argument to label all that is detected. With empty vocabulary you still got N instances as unknown-*.
inventory CLI example with a dedicated tool -
tool_inventoryuv run python -m dimos.perception.memory.tool_inventory \ --from 253 \ --duration 76 \ --labels \ "marker|red marker" \ "sticky notes|post-it notes" \ "pen|black pen" \ "book" \ "roll of tape|black tape"result
Prerequisites
recording
xarm6_worldbelief_realsense_d435i_stationery_calibrated/xarm6_worldbelief_20260729_203624_161992.dbmodels