Skip to main content

SAGE — Superquadric-based Adaptive Geometric Explainability

A non-neural, interpretable object recognition system for robotic manipulation. Objects are represented as superquadrics fit directly to point clouds via nonlinear least-squares — every number the system reasons over is a named physical quantity (a radius, a roundness exponent, a color hue), not a learned embedding. A category vocabulary is learned online, with no gradient descent and no neural network weights anywhere in the pipeline.

Classification uses a non-neural tree ensemble (ExtraTrees) over these physically interpretable features — on held-out, video-disjoint YCB-Video data, this reaches 89.4% top-1 accuracy from a single observation, and 95.7% when multiple viewpoints of the same object are fused before classification (5-fold cross-validated, statistically significant improvement, p=0.0072). See the project's paper for the full accuracy characterization, including honestly-reported limitations and negative results.

Install

pip install sage-superquadrics

Quick start

from sage_superquadrics import SAGE

# Loads a pretrained model, downloading and caching it on first use
model = SAGE.load("SAGE_V2")

# point_cloud: an (N, 3) numpy array of XYZ points, isolating one object
pred = model.predict(point_cloud)
print(pred.label, pred.confidence)   # e.g. "mug", 0.87
print(pred.top_k)                     # [("mug", 0.87), ("bowl", 0.09), ...]

Online learning from scratch

from sage_superquadrics import SAGE

model = SAGE()  # fresh, untrained

# Each call is one real, confirmed example -- no batching required
model.train(point_cloud_1, "mug")
model.train(point_cloud_2, "mug")
model.train(point_cloud_3, "bowl")

# Build the classifier from whatever's been confirmed so far
model.rebuild_classifier()

pred = model.predict(new_point_cloud)
model.save("my_model.json")

Why superquadrics instead of a learned embedding?

Every prediction traces back to physically meaningful numbers you can inspect directly:

print(model.describe("mug"))
# I know 2 structural variant(s) of "mug":
#   - graph mode a1b2c3d4 (n=14): parts=['dominant', 'secondary_0']
#       dominant: ~81x78mm footprint, 75mm tall, eps=(0.10,0.91), ...

When something misclassifies, you can look at why — a specific fitted dimension, a roundness exponent that hit its optimizer bound — not just a confidence score with no further explanation available. This is the actual trade-off, stated plainly: a full raw-point-cloud black-box baseline (PointNet) outperforms SAGE on raw accuracy under the same evaluation protocol (93.2% vs. 89.4%). SAGE's contribution is interpretability and a non-neural, physically-grounded representation, not a claim of beating black-box accuracy.

What's in this package

The core fitting, online-learning, and classification pipeline only — SAGE, Registry, superquadric fitting, and graph-based multi-part matching. Dataset-specific training/evaluation tooling (used to produce the accuracy numbers above) lives in the GitHub repository, not in this package, to keep the installable library small and general-purpose.

Citation

If you use this in research, please cite the accompanying paper (see the GitHub repository for the current reference).

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sage_superquadric-1.0.0.tar.gz (33.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sage_superquadric-1.0.0-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file sage_superquadric-1.0.0.tar.gz.

File metadata

  • Download URL: sage_superquadric-1.0.0.tar.gz
  • Upload date:
  • Size: 33.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sage_superquadric-1.0.0.tar.gz
Algorithm Hash digest
SHA256 322b5145af5ca3b23ce400d6c051299c321d32d46a8a666e33c3f445f680dfb1
MD5 46507c9bf106e1c536cd0acc0595e1a5
BLAKE2b-256 219c76f835e3b3447cfe5e6eb34d2544703f360c851d1d08c2a24c0ad69ebd08

See more details on using hashes here.

Provenance

The following attestation bundles were made for sage_superquadric-1.0.0.tar.gz:

Publisher: publish.yml on shreyan01/sage-superquadrics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sage_superquadric-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sage_superquadric-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c521e4cf6c5f31095c90a15173bfeee8829d830ae2598e40c9eabeb925842ac
MD5 0206a191577807d6669f3158009fc01f
BLAKE2b-256 ee48bcfe30e8a833fb7850ab8b9f17f06ea98a7cd08e2c72ce74c01ef4871c13

See more details on using hashes here.

Provenance

The following attestation bundles were made for sage_superquadric-1.0.0-py3-none-any.whl:

Publisher: publish.yml on shreyan01/sage-superquadrics

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page