SAM 2.1 Hiera Tiny — ONNX / ORT, reproduzierbar exportiert

Encoder und Decoder von facebook/sam2.1-hiera-tiny (Meta, Apache-2.0) für onnxruntime-web. Exportiert mit einem veröffentlichten Skript und gegen die PyTorch-Referenz nachgemessen.

Datei Format Größe
sam2.1-tiny-encoder.ort ORT 134,7 MB
sam2.1-tiny-decoder.onnx ONNX 16,6 MB

Warum es diesen Export gibt

Meta veröffentlicht SAM 2.1 nur als .pt. Die im Netz auffindbaren ONNX-Exporte sind Re-Uploads ohne dokumentiertes Verfahren. Eine Prüfsumme sichert, dass sich eine Datei nach dem ersten Abruf nicht mehr ändert — über ihren Ursprung sagt sie nichts. Und dieses Modell läuft im Browser von Endnutzern.

Das war zunächst nur ein Vorbehalt. Die Messung hat daraus einen Befund gemacht. Verglichen wurde die Encoder-Ausgabe image_embed gegen die PyTorch-Referenz, gleicher Reiz, feste Saat:

mittlere Abweichung größte
dieser Export 0.000001 0.000014
ein kursierender Fremd-Export 0.005858 0.175503

Die Fremddatei trifft die Referenz nicht — und auch keine erklärbare Variante davon (ohne no_mem_embed liegt sie mit 0.013 noch weiter daneben). Sie liefert plausible Masken und besteht deshalb oberflächliche Tests, rechnet aber nachweislich etwas anderes als SAM 2.1.

Der Vergleich ist reproduzierbar: compare_reference.py im Export-Werkzeug.

Zwei Formate, mit Absicht

  • Encoder → ORT. Der plain-ONNX-Encoder scheitert in onnxruntime-web an der Shape-Inferenz (Inferred=4 Declared=5), an mehreren unabhängigen Exporten verifiziert. Das ORT-Format trägt die aufgelösten Shapes in sich.
  • Decoder → plain ONNX. Lädt sauber und bleibt lesbar.

Zwei Fallen, die still falsch geworden wären

  • SAM 2.1 staucht auf 1024² statt zu padden — Vorverarbeitung mit Padding ergibt versetzte Masken.
  • Der Decoder braucht high_res_feats_0/1, mask_input und has_mask_input; has_mask_input muss ein Tensor sein, kein Python-Zweig, sonst backt der Export einen der beiden Fälle fest.

Ein- und Ausgänge

Encoderimage [1,3,1024,1024], ImageNet-normiert → image_embed [1,256,64,64], high_res_feats_0 [1,32,256,256], high_res_feats_1 [1,64,128,128]

Decoder — die drei oben, dazu point_coords [1,N,2] (im 1024er-Pixelraum), point_labels [1,N], mask_input [1,1,256,256], has_mask_input [1]masks [1,3,256,256], iou_predictions [1,3]

N ist dynamisch: mehrere Klicks verfeinern dieselbe Maske in einem Lauf.

Gemessen

Apple Silicon, onnxruntime-web auf wasm mit 4 Threads: Encoder 2747 ms, Klick-Decode kalt 74 ms, warm 49 ms. Auf einer Kontrollszene trifft die Maske 38007 px bei 38013 px Sollfläche.

Selbst nachbauen

Das Export-Skript, die Prüfvorschrift und die Schritt-für-Schritt-Anleitung liegen im Werkzeug, mit dem diese Dateien entstanden sind. Wer den Vergleich gegen die Referenz selbst laufen lässt, bekommt die Zahlen oben.

Lizenz: Apache-2.0, wie die Gewichte von Meta.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Cr7z676/sam2.1-hiera-tiny-onnx

Quantized
(3)
this model