clip-box — wo ist es in diesem Bild?
Dies ist die „Wo ist X“-Eingangstür. Die Implementierung befindet sich in decision-model: Der gleiche Client beantwortet bool, choice, score und box, und clip-box ist ein dünner Einstiegspunkt, der dieses Vokabular routbar hält und auf einen eigenständigen Shim verweisen kann, wenn ein anderes Modell den Entscheidungsplatz belegt.
clip-box --image scene.png --target "das rote Quadrat" # Slot-Shim auf :8083
clip-box --image scene.png --target "das rote Quadrat" --port 8761 # eigenständiger Shim
decision-model box --image scene.png --target "das rote Quadrat" # gleiche Sache
h2o-lightning ist ein 4B Entscheidungsmodell: Es beantwortet typisierte Fragen mit Wahrscheinlichkeiten und generiert keine Prosa. Seine box-Frage gibt ein Rechteck anstelle eines Labels und drei Zahlen zurück, die wichtiger sind als das Rechteck:
| Feld | Bedeutung |
|---|---|
box | links, oben, rechts, unten als Anteile des Bildes, von oben links |
confidence | P(IoU ≥ 0.5) — ein Entscheidungsausdruck auf dem Bild mit eingezeichnetem Rechteck, keine vom Modell erzählte Zahl |
present | P(das Ziel ist überhaupt sichtbar) — ein separater Ausdruck auf dem unberührten Bild |
found | ob ein Rechteck erzeugt wurde; ein Fehlschlag gibt das gesamte Bild mit Konfidenz 0 zurück |
Entscheiden Sie anhand von present, nicht von found. Wird nach einem blauen Fahrrad in einer Szene gefragt, in der es keines gibt, liefert das Modell ein selbstbewusst aussehendes Rechteck um etwas anderes mit found: true und present: 0,111. present sagt die Wahrheit.
Verwendung
# Starte die API (Box-Fragen sind aktiv; der Slot-Front-Port ist :8083)
h2o-serve --port 8083 # CPU, Q8_0
h2o-serve --backend vulkan # AMD GPUs: baut das fixierte Vulkan-Backend einmalig auf
h2o-serve --status
h2o-serve --stop
# Frage stellen
clip-box --image scene.png --target "das rote Quadrat"
# ACCEPT box=(0,247, 0,247) -> (0,753, 0,753) confidence=0,651 present=0,885
clip-box --image scene.png --target "das blaue Fahrrad" # nicht vorhanden -> beendet mit 2
clip-box --image receipt.png --target "der Gesamtbetrag" # confidence 0,163 < 0,30 -> abgelehnt
clip-box --image scene.png --target "das rote Quadrat" --json --crop /tmp/square.png
--json gibt accepted, reason, box, pixels (berechnet aus der tatsächlichen Bildgröße), confidence, present, found und das model, das geantwortet hat, zurück. Exit-Code 0 akzeptiert, 2 lehnt ab, 1 ist ein Anfragefehler.
--min-present (Standard 0,5) und --min-confidence (Standard 0,30) setzen die Schwellwerte; beide sind auch als Umgebungsvariablen verfügbar (BOX_MIN_PRESENT, BOX_MIN_CONFIDENCE). --crop schreibt das akzeptierte Rechteck; es benötigt Pillow.
Fähigkeit, keine Annahme
box ist eine Shim-Funktion, keine Protokollfunktion: llama.cpps eigenes /v1/systemone akzeptiert nur choice, score und noul. Der Entscheidungsslot rotiert zwischen fünf Kandidaten, daher:
decision-model caps
# model /models/h2o-lightning-4b-Q4_K_M.gguf
# slot :8083 (box auf :8083)
# primitives bool, choice, score, box
Wenn der Belegung kein h2o ist, listet caps kein box auf, und box lehnt mit dem Namen des bedienten Modells ab — anstatt eine Frage zu stellen, die dieser Endpunkt nicht beantworten kann.
Wofür es tatsächlich gut ist
Gemessen auf dieser Workstation (Q8_0, CPU-Backend), synthetische Szenen mit bekannter Wahrheit:
| Ziel | IoU | confidence | present |
|---|---|---|---|
| rotes Quadrat, 512×512 zentriert | 0,976 | 0,651 | 0,885 |
| rotes Rechteck, 512×1024 hoch | 0,877 | 0,669 | 0,897 |
| rotes Rechteck, 1024×512 breit | 0,848 | 0,722 | 0,895 |
| kleines rotes Quadrat in unübersichtlicher Szene | 0,603 | 0,359 | 0,896 |
| „das blaue Fahrrad“ (nicht vorhanden) | — | 0,188 | 0,111 |
| „der Gesamtbetrag“ auf einer Quittung | Fehlschlag (Rechteck unter dem Gesamtbetrag) | 0,144 | 0,899 |
Auffällige Objekte, Symbole, Formen, Einzelbilder: gut, Seitenverhältnis wird korrekt behandelt. Dichter Kleingedruckter auf einer Quittung: es scheitert, und seine niedrige Konfidenz sagt dies. Für einen Wert auf einer Quittung zuschneiden mit der Umgebung des Gesamtbetrags oder die choice-Frage der Entscheidungs-API verwenden („Was ist der GESAMTBETRAG? Zwischensumme/Gesamtsumme/Steuer“), die auf demselben Bild korrekt bewertet wurde.
Die Falle, die dieser Skill abfängt
Pillow. Der Shim zeichnet das Rechteck vor dem Tightness-Ausdruck und gibt bei ImportError None zurück, sodass ein Python ohne Pillow jede Box mit confidence: 0.0 beantwortet. h2o-serve erstellt eine eigene venv und prüft den Import.
Dateien
| Pfad | Rolle |
|---|---|
scripts/clip_box.py | Einstiegspunkt — hebt --port/--host, delegiert an decision-model box |
../hardware/decision-model/scripts/decision_model.py | der Client: eine Box-Frage, zwei Schwellwerte, Zuschnitt, Exit-Codes |
../hardware/decision-model/scripts/h2o_serve.py | der Starter: fixiertes Bootstrap per Hash, Pillow-sichere venv, CPU/CUDA/Vulkan-Backend, --status, --stop |
Der Zustand lebt in ~/.cache/h2o_lightning_gguf (Gewichte + fixiertes Backend) und ~/.local/share/h2o-lightning/venv. Nichts außerhalb dieser beiden Pfade wird berührt.
Protokollhinweise
- Der
box.modedes Shims ist hiergenerate: eine eingeschränkte Generierung in Qwensbbox_2d-Konvention (0–1000, x zuerst), geparst und begrenzt.edges/hybridbenötigen ein Modell, das auf Kantenausgaben trainiert wurde; behalten Siegeneratebei dieser Version bei. confidenceist eine Wahrscheinlichkeit mit eigener Temperatur,1.0bis zur Anpassung, also konservativ: ein nahezu perfektes Rechteck auf einem großen Quadrat ergibt 0,65, nicht 0,95.- Standardmäßig ein Bild pro Anfrage; der Shim akzeptiert bis zu 8 mit
images:und das Backend wird mit--image-max-tokens 1024gestartet. - Die Entscheidungsseite desselben Servers beantwortet
choice/noul/scoreauf Text und Bilder unter/v1/systemone; für kalibrierte Entscheidungen auf Text bevorzugen Siepplx-decider(Entscheidungsindex 60,06 vs. 51,38 hier). Verwenden Sie dieses Modell für Geometrie, nicht für Routing.