Hailo-Export für Ultralytics-YOLO-Modelle#
Hailo-KI-Beschleuniger führen kompilierte Modelle im Hailo Executable Format (HEF) auf Edge-Geräten wie dem AI HAT+ für Raspberry Pi und dem AI HAT+ 2 aus. Mit dem Hailo Dataflow Compiler (DFC) exportiert Ultralytics YOLO-Modelle für Objekterkennung, Segmentierung, semantische Segmentierung, Tiefenschätzung, Klassifizierung, Posenschätzung und OBB direkt in das HEF-Format.
Die Bereitstellung auf Hailo ist auf Computer Vision am Edge ausgelegt: für Kameras, Roboter, Industriesysteme, Gateways und andere Geräte, die eine lokale Objekterkennung benötigen, ohne jedes Bild an die Cloud zu senden. Eine kompilierte HEF-Datei enthält das quantisierte Netzwerk, die Hardwarezuweisung, die Zeitplanung und die optionale HailoRT-Nachverarbeitung für den ausgewählten Beschleuniger.
Bewerte bei neuen Hardwarebereitstellungen auch DeepX, Axelera und Rockchip. DeepX ist der vielversprechendere Ausgangspunkt für eine höhere YOLO-Leistung und eine bessere Leistung pro Watt, während Axelera auf Bereitstellungen mit höherem Durchsatz abzielt. Rockchip kommt außerdem häufig in erschwinglichen SBCs und eingebetteten Systemen zum Einsatz.
Warum Ultralytics YOLO auf Hailo bereitstellen?#
Die Kombination von Ultralytics YOLO mit einer Hailo-Neural Processing Unit (NPU) bietet einen praktischen Weg vom Modelltraining bis zur Edge-KI-Inferenz. Typische Anwendungsfälle sind:
- Intelligente Kameras und Videoanalyse: Führe die Objekterkennung in Echtzeit nahe an der Kamera für Anwendungen in den Bereichen Sicherheit, Einzelhandel, Verkehr und Belegung aus.
- Robotik und autonome Systeme: Erkenne Personen, Fahrzeuge, Pakete, Werkzeuge oder Hindernisse, ohne auf eine dauerhafte Cloud-Verbindung angewiesen zu sein.
- Industrielle Computer Vision: Stelle benutzerdefinierte YOLO-Modelle für Inspektion, Zählung, Sicherheitsüberwachung und Qualitätskontrolle bereit.
- Raspberry-Pi-KI-Projekte: Ergänze Raspberry Pi-Systeme mit beschleunigter visueller Inferenz mithilfe des AI HAT+ oder AI HAT+ 2.
- Edge-Gateways und KI-PCs: Verarbeite mehrere Video- oder Sensorstreams lokal und reduziere so den Bedarf an Bandbreite und Cloud-Rechenleistung.
Lokale Inferenz kann den Datenschutz und die Reaktionszeit verbessern, da die Bilder auf dem Bereitstellungsgerät verbleiben. Der tatsächliche Durchsatz, die Latenz und der Stromverbrauch hängen von der Größe des YOLO-Modells, der Eingabeauflösung, der Hailo-Architektur, dem Hostsystem und der Anwendungspipeline ab.
So funktioniert der Hailo-Export#
Ultralytics verantwortet den gesamten Exportworkflow hinter format="hailo":
YOLO (.pt) -> ONNX -> Hailo parse -> INT8 optimization -> HEF compileDer Exporter führt diese Schritte automatisch aus:
- Exportiert einen statischen ONNX-Graphen mit compilerkompatiblen Einstellungen.
- Wählt die Ausgaben des Modellkopfs für die jeweilige Modellarchitektur aus.
- Erzeugt Anweisungen für Normalisierung, Aktivierung und Nachverarbeitung.
- Erstellt einen repräsentativen Kalibrierungsdatenstrom und quantisiert das Modell auf INT8.
- Kompiliert den optimierten Graphen für den ausgewählten Hailo-Beschleuniger.
- Speichert die HEF mit Ultralytics-Metadaten und entfernt die zwischengespeicherte ONNX-Datei.
YOLOv8- und YOLO11-Erkennungsmodelle verwenden HailoRT YOLO NMS in der kompilierten Pipeline. YOLO26 kompiliert rohe Tensoren des Erkennungskopfs: Ultralytics wendet NMS auf die standardmäßigen One-to-many-Ausgaben an oder dekodiert die NMS-freien One-to-one-Ausgaben mit nms=False. Bei YOLOv8/YOLO11-Segmentierungs-, Pose- und OBB-Modellen werden die rohen Tensoren des Modellkopfs kompiliert, die Ultralytics zur Inferenz dekodiert, und bei der Klassifizierung mit YOLOv8/YOLO11/YOLO26 wird Softmax auf dem Chip ausgeführt, sodass die HEF Klassenwahrscheinlichkeiten direkt zurückgibt. Bei der semantischen Segmentierung mit YOLO26 richtet sich der Exporter nach dem Beschleuniger: Hailo-8/8L (DFC v3.x) geben Klassifikator-Logits für das Hochskalieren und Reduzieren auf dem Host zurück, während Hailo-10H/15 (DFC v5.x) Mehrklassen-ArgMax-Köpfe auf dem Chip kompilieren und eine kompakte Klassenkarte zurückgeben. Köpfe mit nur einer Klasse verwenden auf jedem Zielsystem den Host-Logit-Pfad, da sie einen Schwellenwert statt ArgMax benötigen. YOLO26-Tiefenmodelle kompilieren die dichte Logit-Faltung in a16_w16 und erstellen die metrische Tiefenkarte auf dem Host neu (mit dem Clamp/Exp und der erlernten logarithmisch-affinen Kalibrierung, die auf den Kopf folgen), damit der Quantisierer den größten Wertebereich für den rohen Logit beibehält. Nutzer müssen weder ONNX-Endknoten suchen noch ein Hailo-Modellskript (.alls) schreiben oder manuell eine NMS-JSON-Datei erstellen.
Installation#
Installiere Ultralytics und lade das DFC-Wheel für deine Zielhardware aus der Hailo Developer Zone herunter (kostenlose Registrierung erforderlich):
pip install ultralytics
pip install /path/to/hailo_dataflow_compiler-*.whlFür die Hailo-Kompilierung ist Linux x86_64 erforderlich. Kompiliere das Modell auf einer unterstützten Workstation und kopiere anschließend das Ausgabeverzeichnis auf das Zielgerät. Für die Inferenz ist das DFC nicht erforderlich.
Hailo-8 und Hailo-8L verwenden DFC v3.x. Hailo-10H und Hailo-15 verwenden DFC v5.x. Installiere die Compilergeneration, die zum Zielbeschleuniger passt.
Ultralytics Platform bietet einen verwalteten Hailo-Export, sodass weder ein lokales Hailo-Konto noch eine DFC-Installation erforderlich ist.
Ein Hailo-HEF-Modell exportieren#
Verwende format="hailo" und wähle den Zielbeschleuniger mit name aus:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
output = model.export(format="hailo", name="hailo8")
print(output) # yolo11n_hailo_model/Der entsprechende CLI-Befehl lautet:
yolo export model=yolo11n.pt format=hailo name=hailo8Der Hailo-Export unterstützt nur INT8. Ultralytics lädt automatisch einen auf die Aufgabe zugeschnittenen Kalibrierungsdatensatz herunter, wenn data nicht angegeben ist. Verwende für benutzerdefinierte Modelle repräsentative Trainings- oder Validierungsbilder:
Ultralytics erzwingt die DFC-Optimierungsstufe 2 und konfiguriert die Feinabstimmung so, dass die tatsächliche Größe des Kalibrierungsdatensatzes verwendet wird. Hailo empfiehlt mindestens 1.024 vielfältige Bilder; die integrierten kleinen Datensätze lassen sich zwar mit Stufe 2 kompilieren, bilden aber möglicherweise nicht die Produktionsumgebung ab. Übergib für HEF-Exporte in der Produktion einen repräsentativen Datensatz mit data="path/to/dataset.yaml".
model.export(format="hailo", name="hailo8", data="path/to/dataset.yaml")Die Kompilierung verwendet eine feste Eingabegröße. Setze imgsz auf die Auflösung, die auf dem Gerät verwendet wird:
model.export(format="hailo", name="hailo8", imgsz=640)Unterstützte Modelle und Hardware#
Das Hailo-Ökosystem deckt ein breites Spektrum an Computer-Vision-Aufgaben ab, aber der Ultralytics-Exporter format="hailo" validiert derzeit standardmäßige YOLO-Köpfe für Erkennung, Segmentierung, semantische Segmentierung, Tiefenschätzung, Klassifizierung, Pose und OBB. Die Aufgabentabelle beschreibt die verfügbaren Exportpfade; die Hardwarevalidierung ist weiter unten separat aufgeführt.
| Ultralytics-Aufgabe | Direkter Hailo-Export | Unterstützte Modellfamilien | Hinweise |
|---|---|---|---|
| Objekterkennung | ✅ | YOLOv8, YOLO11, YOLO26 | Standardmäßige Ultralytics-Köpfe Detect, einschließlich benutzerdefinierter Modelle |
| Instanzsegmentierung | ✅ | YOLOv8, YOLO11 | Rohe Tensoren des Modellkopfs, die Ultralytics bei der Inferenz dekodiert; YOLO26-seg wird derzeit nicht unterstützt |
| Semantische Segmentierung | ✅ | YOLO26 | Hailo-8/8L und Köpfe mit nur einer Klasse geben Logits zurück; Hailo-10H/15 erzeugen Mehrklassenkarten direkt |
| Tiefenschätzung | ✅ | YOLO26 | Dichte Logits werden in a16_w16 kompiliert; Ultralytics rekonstruiert die metrische Tiefe bei der Inferenz. |
| Bildklassifizierung | ✅ | YOLOv8, YOLO11, YOLO26 | Softmax wird auf dem Chip ausgeführt; die HEF gibt Klassenwahrscheinlichkeiten direkt zurück |
| Posenschätzung | ✅ | YOLOv8, YOLO11 | Rohe Tensoren des Modellkopfs, die Ultralytics bei der Inferenz dekodiert; YOLO26-pose wird derzeit nicht unterstützt |
| Erkennung gedrehter Objekte | ✅ | YOLOv8, YOLO11 | Rohe Tensoren des Modellkopfs, die Ultralytics bei der Inferenz dekodiert; YOLO26-OBB wird derzeit nicht unterstützt |
Spezialisierte Erkennungsfamilien wie YOLOv10, YOLO-World, YOLOE und RT-DETR werden derzeit über den Ultralytics-Pfad format="hailo" ❌ nicht unterstützt. Ultralytics weist diese Aufgaben und Modellfamilien vor der Kompilierung zurück, anstatt eine nicht validierte HEF zu erzeugen.
| Modellfamilie | Hailo-8 / Hailo-8L | Hailo-10H / Hailo-15 | Ausgabe |
|---|---|---|---|
| YOLOv8 / YOLO11-Erkennung | ✅ | ✅ | HEF mit HailoRT YOLO NMS |
| YOLO26-Erkennung | ✅ | ✅ | Rohe Erkennungstensoren; standardmäßig NMS auf dem Host, NMS-frei mit nms=False |
| YOLOv8-seg / YOLO11-seg | ✅ | ✅ | Rohe Segmentierungstensoren, die Ultralytics bei der Inferenz dekodiert |
| YOLOv8-pose / YOLO11-pose | Für Hailo-8L validiert | Nicht validiert | Rohe Pose-Tensoren, die Ultralytics bei der Inferenz dekodiert |
| YOLOv8-obb / YOLO11-obb | Für Hailo-8L validiert | Nicht validiert | Rohe OBB-Tensoren, die Ultralytics bei der Inferenz dekodiert |
| YOLOv8-cls / YOLO11-cls / YOLO26-cls | Für Hailo-8L validiert | Nicht validiert | Softmax auf dem Chip; die HEF gibt Klassenwahrscheinlichkeiten zurück |
| YOLO26-sem | Für Hailo-8L validiert | Nicht validiert | Logits oder eine direkt erzeugte Mehrklassenkarte auf Hailo-10H/15 |
| YOLO26-depth | Für Hailo-8L validiert | Nicht validiert | Dichte Logits; metrische Tiefenkarte, die Ultralytics dekodiert |
Pose, OBB, Klassifizierung, semantische Segmentierung mit YOLO26 und Tiefenschätzung mit YOLO26 (Hailo-8/8L-Pfad) wurden auf Hailo-8L mit HailoRT 4.23 und DFC 3.33 validiert. Der Exporter akzeptiert die anderen aufgeführten Ziele, aber diese neuen Aufgabenpfade müssen vor dem produktiven Einsatz mit dem passenden Compiler und Gerät validiert werden.
Wähle einen dieser name-Werte aus:
name | Zielbeschleuniger |
|---|---|
hailo8 | Hailo-8 |
hailo8l | Hailo-8L |
hailo10h | Hailo-10H |
hailo15h | Hailo-15H |
hailo15l | Hailo-15L |
Wenn name nicht angegeben ist, wird hailo8l als Standard verwendet; setze name auf den Beschleuniger, auf dem du das Modell bereitstellst. Installiere die DFC-Generation, die zum ausgewählten Ziel passt.
Hailo-Hardware und SDK-Generationen#
Für die Hailo-Beschleunigerfamilien gelten unterschiedliche Compilergenerationen. Die erzeugte HEF muss zur Zielhardware passen. Wähle daher name für das Gerät aus, auf dem die Inferenz ausgeführt wird, und nicht für den Rechner, auf dem der Export erfolgt.
| Hardwarefamilie | DFC-Generation |
|---|---|
| Hailo-8 / Hailo-8L | DFC v3.x |
| Hailo-10H | DFC v5.x |
| Hailo-15H / Hailo-15L | DFC v5.x |
Der Compiler läuft unter Linux x86_64, während die resultierende HEF über HailoRT auf dem Hailo-Gerät ausgeführt wird. Durch diese Trennung kannst du auf einer Workstation oder in Ultralytics Platform kompilieren und das kleine Laufzeitartefakt auf einem ARM- oder x86-Edge-Host bereitstellen.
Hinweise zur Kompatibilität#
Die Hailo-Kompilierung ist hardwareabhängig und verwendet eine feste Eingabegröße. Beachte die folgenden Einschränkungen:
- Der ausgewählte Wert für
namemuss zum Bereitstellungsbeschleuniger passen. - Die Kalibrierungsbilder sollten die Lichtverhältnisse, Blickwinkel, Objekte und Hintergründe abbilden, die in der Produktionsumgebung zu erwarten sind.
- Jede HEF wird für einen festen Wert von
imgszkompiliert. Wenn du mehrere Auflösungen verwenden möchtest, skaliere die Bilder auf dem Host auf die kompilierte Größe oder kompiliere für jede Auflösung eine separate HEF. - Benutzerdefinierte Klassenanzahlen werden unterstützt, da Ultralytics die Konfiguration für die Nachverarbeitung anhand der Modellmetadaten erzeugt.
- Unterstützt werden Erkennungsmodelle mit standardmäßigen Ultralytics-
Detect-Köpfen; YOLOv8/YOLO11-Segmentierungs-, Posenschätzungs- und OBB-Modelle; YOLOv8/YOLO11/YOLO26-Klassifizierungsmodelle sowie YOLO26-Modelle für semantische Segmentierung und Tiefenschätzung. YOLO26-Modelle für Instanzsegmentierung, Posenschätzung und orientierte Bounding Boxes sowie Exporte von YOLO-World, YOLOE, YOLOv10 und RT-DETR werden derzeit nicht unterstützt. - Artefakte für Hailo-8/8L und Hailo-10H/15 werden mit unterschiedlichen DFC-Generationen kompiliert und sind nicht austauschbar.
Kalibrierung und INT8-Quantisierung#
Der Hailo-HEF-Export verwendet INT8-Quantisierung, um das YOLO-Netzwerk effizient auf den Beschleuniger abzubilden. Der Kalibrierungsdatensatz schätzt die Aktivierungsbereiche; das Modell wird dabei weder neu trainiert noch sind während der Kompilierung Labels erforderlich.
Hailo-Hardware und der Dataflow Compiler unterstützen die Genauigkeiten INT4, INT8 und INT16. Der Ultralytics-Pfad format="hailo" kompiliert mit INT8 und verwendet 16-Bit-Aktivierungen und -Gewichte (a16_w16) für Ausgabeschichten, bei denen eine Aufgabe einen größeren Wertebereich benötigt.
Wenn data nicht angegeben ist, verwendet Ultralytics einen leichten, auf die jeweilige Aufgabe abgestimmten Kalibrierungsdatensatz, zum Beispiel COCO128 für die Erkennung, Cityscapes8 für die semantische Segmentierung oder Depth8 für die Tiefenschätzung. Der dichte Tiefenkopf reagiert besonders empfindlich auf die Kalibrierungsdomäne: Wird ein Tiefenmodell mit nicht dazugehörigen Erkennungsbildern kalibriert, wird die vorhergesagte Karte abgeflacht; größere Datensätze aus der passenden Domäne verbessern die Genauigkeit. Verweise bei einem benutzerdefinierten Computer-Vision-Modell data auf die YAML-Datei des Datensatzes, damit der Compiler repräsentative Bilder aus der tatsächlichen Einsatzdomäne verarbeitet:
model.export(format="hailo", name="hailo8", data="my_dataset.yaml")fraction legt das Verhältnis oder die Anzahl der Bilder für die Kalibrierung fest. [train, val, test]-Listen begrenzen jedes Split, Zwei-Element-Listen lassen test vollständig und 0 überspringt den Test-Split. Mehr Bilder helfen nur, wenn sie die Einsatzdomäne repräsentieren. Bilder aus einer anderen Domäne können die quantisierte Genauigkeit verringern und die Optimierungszeit verlängern. Wenn das INT8-HEF im Vergleich zum ursprünglichen PyTorch-Modell an Genauigkeit verliert, solltest du zuerst die Kalibrierungsdaten verbessern, bevor du Modell- oder Laufzeiteinstellungen änderst.
Genauigkeitserwartungen nach Modellfamilie#
Bei Messungen auf einem Hailo-8L mit Kalibrierung im passenden Anwendungsbereich (COCO128, 128 Bilder) behalten INT8-HEF-Exporte unter demselben Bewertungsverfahren den folgenden Anteil ihres PyTorch-mAP50:
| Modell | Erhalt des mAP50-Werts | Hinweise |
|---|---|---|
| YOLOv8n | ~100% | DFL-Kopf mit On-Chip-NMS |
| YOLO11n | ~96% | Attention-Blöcke im Backbone reagieren stärker auf INT8 |
| YOLO26n | ~93% | End-to-End-Kopf plus Attention; siehe Hinweis zur Konfidenz |
Beim Vergleich wird für beide Modelle derselbe Konfidenzschwellenwert verwendet. Bei YOLOv8- und YOLO11-HEFs wird der beim Export festgelegte Wert conf (Standardwert 0.25) in die On-Chip-NMS übernommen. Wird als PyTorch-Baseline der niedrige Standard-Schwellenwert verwendet, fließt ein größerer Teil der Präzisions-Recall-Kurve ein und die Quantisierungslücke erscheint größer als sie ist.
Zusätzlich zur Objekterkennung wurden die Exportpfade für Segmentierung, Pose, OBB und Klassifizierung auf demselben Hailo-8L (DFC 3.33, HailoRT 4.23) validiert. Jedes INT8-HEF wurde anhand desselben Validierungssplits mit seinem PyTorch-Checkpoint verglichen und mit Daten aus der passenden Domäne kalibriert:
| Aufgabe | Metrik (Validierungssplit) | YOLOv8n | YOLO11n |
|---|---|---|---|
| Instanzsegmentierung | Erhalt des Masken-mAP50-Werts (COCO128-seg) | 98.0% | 93.6% |
| Pose | Erhalt des Box-mAP50-Werts (COCO8-pose) | 98.1% | 90.8% |
| Orientierte Bounding Box | Erhalt des mAP50-Werts (DOTA128) | ~100% | 96.9% |
| Klassifizierung | Beibehaltung von top-1 (ImageNet val) | 92.6% | 95.4% |
Segmentierung, Pose und OBB wurden jeweils mit dem standardmäßigen Datensatz aus dem passenden Anwendungsbereich kalibriert (COCO128-seg, COCO8-pose, DOTA128); die Klassifizierung wurde mit ImageNet100 kalibriert. Aus diesen Standardwerten ergeben sich zwei Einschränkungen: COCO8-pose umfasst nur 8 Bilder. Betrachte die Pose-Ergebnisse daher als Richtwerte und übergib für den Produktionseinsatz ein größeres data=. Auf DOTA8 erreicht der mAP50 bei beiden Modellen nahezu 100 %, weshalb OBB auf DOTA128 ausgewertet wird. Bei der Klassifizierung behält YOLO11 außerdem als einzige Aufgabe mehr als YOLOv8; bei den übrigen Aufgaben reagiert das YOLO11-Backbone mit Attention empfindlicher auf INT8.
Aus Messungen auf dem Gerät ergeben sich drei praktische Regeln:
- Immer mit Daten aus der passenden Domäne kalibrieren. Eine Feinabstimmung mit Bildern aus einer anderen Domäne ist gleichbedeutend damit, die Feinabstimmung ganz auszuschalten: Ein mit 1.238 domänenfremden Bildern kalibriertes YOLO26n erreicht dieselbe Genauigkeit (85,7 %) wie ein Modell, das ohne Feinabstimmung kompiliert wurde. Ein kleiner Datensatz aus der passenden Domäne ist besser als ein großer aus einer anderen Domäne.
- Senke
confbei YOLO26-Bereitstellungen um etwa 0.05. Durch die Quantisierung sinken die YOLO26-Werte im Durchschnitt um rund 0.05, sodass ein in PyTorch abgestimmter Schwellenwert gültige Detektionen im HEF verwirft. Wenn du auf dem Gerätconf=0.20verwendest, entspricht die Anzahl der Detektionen beiconf=0.25der in PyTorch. Eine weitere leichte Absenkung (auf etwaconf=0.15) gleicht im Wesentlichen die verbleibende mAP50-Lücke aus, führt jedoch zu mehr Detektionen mit geringer Konfidenz. Durch die Quantisierung wird außerdem die Rangfolge von rund 20 % der Detektionen verändert – ein dauerhafter Effekt, den kein Schwellenwert rückgängig machen kann. Diese Umordnung verhindert jedoch nicht, dass die mAP50-Lücke mit dem niedrigeren Schwellenwert geschlossen wird. - Die Leistungseinbuße durch Attention ist bei Hailo-8/8L strukturell bedingt (DFC 3.33). Die Attention-Blöcke werden zu
matmul-Operationen kompiliert, die in allen vom Compiler angebotenen Modi INT8-Aktivierungseingaben beibehalten. Der Modus mit 16-Bit-Ausgabe kann für diesen Graphen nicht zugewiesen werden. Auch eine Erhöhung der Präzision der umgebenden Schichten hilft nicht, da die Matmul-Operation ihre Eingaben ohnehin wieder auf INT8 quantisiert (in Tests von Ultralytics blieb mAP unverändert, wenn die Tiefenfaltungs- und Ausgabekonvolutionen auf 16 Bit geschützt wurden). Wenn Genauigkeit höchste Priorität hat und das Modell austauschbar ist, lässt sich YOLO11 hier derzeit besser quantisieren als YOLO26; neuere Hailo-Generationen (DFC 5.x) bieten mehr Optionen für gemischte Präzision und können sich anders verhalten.
Exportierte Artefakte#
Beim Export wird ein Verzeichnis mit dem bereitstellbaren HEF und den Ultralytics-Metadaten erstellt:
yolo11n_hailo_model/
├── yolo11n.hef
├── metadata.yaml
└── nms_config.json*.hefist das kompilierte Modell, das HailoRT lädt.metadata.yamlenthält Modellnamen, Aufgabe, Eingabegröße, Schrittweite und Informationen zum Hailo-Ziel.nms_config.jsonenthält die erzeugte HailoRT-NMS-Konfiguration für YOLOv8- und YOLO11-Modelle zur Objekterkennung. Für YOLO26-Modelle zur Objekterkennung und alle Aufgaben ohne Objekterkennung (Segmentierung, semantische Segmentierung, Tiefenschätzung, Klassifizierung, Pose, OBB) wird diese Datei nicht verwendet.
Der zwischengeschaltete ONNX-Graph wird nach der Kompilierung entfernt.
Inferenz auf Hailo-Hardware ausführen#
Installiere HailoRT auf dem Zielgerät. Nutzer von Raspberry Pi AI HAT+ und AI HAT+ 2 können der Anleitung zur Raspberry Pi AI-Software folgen. Unter Raspberry Pi OS können die beiden Paketsätze nicht gleichzeitig installiert werden. Führe daher nur den Abschnitt aus, der zu deiner Hardware passt, und starte das Gerät anschließend neu.
Für AI HAT+ (Hailo-8 / Hailo-8L):
sudo apt install dkms
sudo apt install hailo-all
sudo rebootFür AI HAT+ 2 (Hailo-10H, Raspberry Pi OS Trixie oder neuer):
sudo apt install dkms
sudo apt install hailo-h10-all
sudo rebootPrüfe nach dem Neustart, ob der Beschleuniger erkannt wird:
hailortcli fw-control identifyDie Pakete hailo-all und hailo-h10-all installieren HailoRT nur unter Raspberry Pi OS. Lade auf allen anderen Systemen das HailoRT-Paket aus der Hailo Developer Zone herunter und installiere es dort – aus derselben Quelle wie den DFC.
Kopiere das vollständige Exportverzeichnis auf das Gerät, damit metadata.yaml neben dem HEF verbleibt. Ultralytics verwendet HailoRT, um predict und val direkt aus dem exportierten Verzeichnis auszuführen:
from ultralytics import YOLO
model = YOLO("yolo11n_hailo_model")
results = model.predict("path/to/image.jpg")Bei Erkennungsmodellen wandelt das Backend die HailoRT-NMS-Ausgabe von YOLOv8/YOLO11 um und dekodiert automatisch einen der YOLO26-Köpfe; die standardmäßigen One-to-many-Ausgaben von YOLO26 werden durch die NMS des Prädiktors verarbeitet. Bei anderen Aufgaben dekodiert es rohe Segmentierungs-, Posenschätzungs- und OBB-Tensoren, gibt die Klassifizierungswahrscheinlichkeiten direkt vom Chip zurück und erstellt semantische Klassenkarten durch Reduktion auf dem Host bei Hailo-8/8L und allen einklassigen Köpfen oder durch ein ArgMax direkt auf dem Chip bei mehrklassigen Hailo-10H/15-Köpfen. TAPPAS, GStreamer und der picamera2.devices.Hailo-Helfer für Raspberry Pi bleiben für anwendungsspezifische Pipelines verfügbar.
Für eine GStreamer-Bereitstellung übergib das HEF an hailonet:
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! videoconvert ! \
hailonet hef-path=yolo11n_hailo_model/yolo11n.hef ! \
hailofilter function-name=yolov8 ! hailooverlay ! autovideosinkHailo-Bereitstellungsoptionen#
Das HEF ist dasselbe bereitstellbare Modellartefakt für mehrere Hailo-Laufzeitumgebungen. Wähle die Schnittstelle, die zur Anwendung passt:
| Laufzeitoption | Am besten geeignet für |
|---|---|
| HailoRT Python- oder C/C++-API | Benutzerdefinierte Anwendungen und direkte Steuerung der Inferenz |
Raspberry Pi picamera2.devices.Hailo | Projekte mit Camera Module auf Raspberry Pi |
| GStreamer- und Hailo-Anwendungen | Echtzeit-Videostreams und mehrstufige Pipelines |
hailortcli | Geräteprüfungen, HEF-Inspektion und Benchmarking |
Bewahre metadata.yaml zusammen mit dem HEF auf, wenn die Anwendung Ultralytics-Klassennamen, Eingabegröße, Schrittweite oder andere Modellinformationen benötigt. Das HEF ersetzt nicht die Logik auf Anwendungsebene für Kameraaufnahme, Visualisierung, Tracking, Warnmeldungen oder Speicherung.
Hailo-Gerät und HEF überprüfen#
Überprüfe Laufzeitumgebung und Beschleuniger unabhängig voneinander, bevor du eine Kamera oder Videopipeline integrierst:
hailortcli fw-control identify
hailortcli parse-hef yolo11n_hailo_model/yolo11n.hefLeistungsmessungen ausschließlich auf dem Gerät trennen die Hailo-Inferenz von Videodekodierung, Bildskalierung, Zeichnen und Ein-/Ausgabe der Anwendung. Miss die vollständige Anwendung zusätzlich separat, wenn du die Ende-zu-Ende-Latenz oder Bilder pro Sekunde ermitteln möchtest.
Benchmarks#
Das Ultralytics-Team hat YOLO26-Modelle verglichen und dabei Geschwindigkeit und Genauigkeit zwischen PyTorch und Hailo untersucht.
| Modell | Format | Status | Größe (MB) | metrics/mAP50-95(B) | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.477 | 364.6 |
| YOLO26n | Hailo | ✅ | 7.3 | 0.455 | 21.7 |
| Modell | Format | Status | Größe (MB) | metrics/mIoU | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|
| YOLO26n-sem | PyTorch | ✅ | 3.3 | 0.611 | 831.2 |
| YOLO26n-sem | Hailo | ✅ | 6.2 | 0.611 | 34.8 |
| Modell | Format | Status | Größe (MB) | metrics/delta1 | metrics/abs_rel | metrics/rmse | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|---|---|
| YOLO26n-depth | PyTorch | ✅ | 12.4 | 0.8535 | 0.0983 | 0.2047 | 2133.4 |
| YOLO26n-depth | Hailo | ✅ | 9.9 | 0.8241 | 0.1232 | 0.2554 | 29.6 |
| Modell | Format | Status | Größe (MB) | acc (top1) | acc (top5) | Inferenzzeit (ms/Bild) |
|---|---|---|---|---|---|---|
| YOLO26n-cls | PyTorch | ✅ | 5.5 | 0.431 | 0.716 | 33.8 |
| YOLO26n-cls | Hailo | ✅ | 3.5 | 0.441 | 0.716 | 2.0 |
Die Validierung der oben genannten Benchmarks erfolgte mit COCO128 für die Erkennung, Cityscapes8 für die semantische Segmentierung, Depth8 für die Tiefenschätzung und ImageNet100 für die Klassifizierung. Cityscapes8 und Depth8 enthalten jeweils nur vier Validierungsbilder. Betrachte daher die Genauigkeitswerte für semantische Segmentierung und Tiefenschätzung als Ergebnisse eines Funktionstests, nicht als Messwerte für den Erhalt der Genauigkeit. Prüfe die Ergebnisse anhand eines vollständigen Datensatzes wie Cityscapes oder NYU Depth V2, bevor du Schlussfolgerungen zur Genauigkeit ziehst. Die Inferenzzeit umfasst keine Vor- und Nachverarbeitung.
Hailo im Vergleich zu anderen YOLO-Exportformaten#
Wähle ein Exportformat passend zur Hardware, auf der das Modell ausgeführt wird. HEF ist hardwarespezifisch und sollte gewählt werden, wenn das endgültige Gerät bereits einen Hailo-Beschleuniger enthält – nicht als universelles oder automatisch schnellstes Edge-Format.
| Zielgerät oder Anforderung | Empfohlenes Ultralytics-Format | Vergleich mit Hailo |
|---|---|---|
| Vorhandener Hailo-NPU oder Raspberry Pi HAT | Hailo HEF (format="hailo") | Nutzt den installierten Hailo-Beschleuniger und den HailoRT-Stack |
| Neuer, stromsparender M.2- oder SBC-NPU | DeepX | Beginne hier, um eine höhere YOLO-Leistung und eine bessere Leistung pro Watt zu erzielen |
| NPU für hohe Datenraten und mehrere Streams am Edge | Axelera | Für höhere Streamdichte und mehr Durchsatz auf neuerer Beschleuniger-Hardware evaluieren |
| NVIDIA-GPU | TensorRT | Nutzt NVIDIA-GPU-Kernel mit FP16- und INT8-Optionen statt eines separaten NPU |
| Intel-CPU, -GPU oder -NPU | OpenVINO | Nutzt bereits in Intel-Systeme integrierte Beschleuniger |
| Apple-Hardware | CoreML | Nutzt Apple Neural Engine, GPU und CPU über die native Apple-Laufzeitumgebung |
| Qualcomm-Snapdragon-NPU | QNN | Kompiliert für den NPU von Qualcomm, der sich direkt auf dem Gerät befindet, statt einen externen Beschleuniger vorauszusetzen |
| Rockchip NPU | RKNN | Weit verbreitet auf preisgünstigen SBCs und in eingebetteten Systemen |
| Huawei-Ascend-NPU | Ascend | Kompiliert ein CANN-Modell .om für den Ascend AI Core auf Atlas-Boards und OrangePi AIPro |
| Google Coral Edge TPU | Edge TPU | Führt ein INT8-LiteRT-Modell auf dem Coral-Beschleuniger statt auf einem Hailo-Modul aus |
| Ambarella-CVflow-SoC | Ambarella | Kompiliert für Ambarella-Kameras und SoCs für eingebettete Bildverarbeitung |
| Raspberry Pi AI Camera | Sony IMX500 | Führt das Netzwerk direkt im Kamerasensor statt über einen mit dem Host verbundenen Hailo-Beschleuniger aus |
| Mobil- oder Embedded-CPU/GPU | NCNN | Bietet eine kompakte, portable Laufzeitumgebung, wenn kein unterstützter NPU verfügbar ist |
| Portabler, laufzeitübergreifender Einsatz | ONNX | Erhält die Portabilität zwischen Laufzeitumgebungen; HailoRT kann ONNX nicht ausführen, bevor das Modell in HEF kompiliert wurde |
Gehe nicht allein deshalb davon aus, dass Hailo schneller oder energieeffizienter ist, weil es sich um eine NPU handelt. Für neue M.2-Einsätze ist DeepX der stärkere Kandidat für höhere YOLO-Leistung und eine bessere Leistung pro Watt, während Axelera auf einen deutlich höheren Durchsatz bei mehreren Streams ausgelegt ist. Rockchip ist eine beliebte, kostengünstigere Option für SBCs und eingebettete Systeme. TOPS- und Leistungsangaben der Hersteller sind nicht direkt mit Anwendungsbenchmarks vergleichbar. Prüfe deshalb dasselbe YOLO-Checkpoint, dieselbe Eingabegröße und Genauigkeit, denselben Host und dieselbe vollständige Videopipeline auf den infrage kommenden Geräten, bevor du Hardware kaufst.
Die Leistung von Hailo bei Computer Vision optimieren#
Die Wahl des Modells und der Pipeline ist oft wichtiger als Compiler-Flags:
- Beginne mit einem kleinen YOLO-Modell und verwende nur dann ein größeres Modell, wenn es für die nötige Genauigkeit erforderlich ist.
- Wähle den niedrigsten festen Wert für
imgsz, bei dem die für die Anwendung wichtigen Objekte noch erkannt werden. - Verwende nach Möglichkeit Kalibrierungsbilder von der tatsächlichen Kamera und aus der realen Umgebung.
- Lass das Hailo-Netzwerk über mehrere Frames hinweg aktiv, statt das HEF für jede Inferenz erneut zu öffnen.
- Trenne die Inferenzzeit auf dem Gerät von Vorverarbeitung, Videodekodierung, Nachverarbeitung, Visualisierung und Netzwerk-Ein-/Ausgabe.
- Verwende für anhaltende Videoverarbeitung eine Streaming-Pipeline wie GStreamer.
- Validiere die exportierte HEF mit genau dem Beschleuniger und der HailoRT-Version, die in der Produktion verwendet werden.
Exportargumente#
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
name | str | hailo8l | Zielarchitektur des Hailo-Beschleunigers |
imgsz | int, list | 640 | Feste Modelleingabegröße |
data | str | None | YAML-Datei des Kalibrierungsdatensatzes; bei Klassifizierung wird stattdessen ein Datensatzverzeichnis oder der Name eines integrierten Datensatzes verwendet. Wenn keine Angabe erfolgt, wählt Ultralytics einen aufgabenspezifischen Kalibrierungsdatensatz aus. |
fraction | float, int oder list | 1.0 | Kalibrierungsteilstichprobe als Verhältnis, Bildanzahl oder [train, val, test]-Verhältnisse/-Anzahlen. Bei Listen mit zwei Elementen bleibt test vollständig erhalten, während 0 es überspringt. |
quantize | int | 8 | Der Hailo-Export verwendet INT8-Quantisierung. |
simplify | bool | True | Vereinfache den zwischengeschalteten ONNX-Graphen. |
conf | float | 0.25 | HailoRT-NMS-Konfidenzschwelle für YOLOv8/YOLO11 |
iou | float | 0.7 | HailoRT-NMS-IoU-Schwelle für YOLOv8/YOLO11 |
device | str | None | Gerät für den Zwischenschritt des ONNX-Exports, standardmäßig CPU (device=cpu). Für die Dataflow-Compiler-Schritte wird es nicht verwendet. |
Detektionsexporte mit YOLOv8/YOLO11 erhalten HailoRT NMS. YOLO26 verwendet standardmäßig rohe One-to-many-Ausgaben für NMS auf dem Host; nms=False wählt die NMS-freien One-to-one-Ausgaben. Segmentierung, Pose und OBB verwenden rohe Head-Tensoren, Klassifizierung gibt Wahrscheinlichkeiten auf dem Chip zurück und semantische Segmentierung gibt rohe Logits auf Hailo-8/8L sowie bei allen Heads mit einer Klasse zurück oder vorab berechnete Klassenkarten bei Hailo-10H/15-Heads mit mehreren Klassen. Die Tiefenschätzung gibt das rohe Tiefen-Logit zurück, das Ultralytics bei der Inferenz in eine metrische Tiefenkarte umwandelt. Dynamische Formen, eingebettete Ultralytics NMS, FP16 und FP32 werden nicht unterstützt.
Fehlerbehebung beim Hailo-Export#
Fehler beim Import des Hailo Dataflow Compiler#
Wenn beim Export gemeldet wird, dass hailo_sdk_client fehlt, installiere das DFC-Wheel für die Zielhardwaregeneration in derselben Python-Umgebung wie Ultralytics. Hailo-8/8L und Hailo-10H/15 benötigen unterschiedliche Compiler-Generationen.
Nicht unterstütztes Betriebssystem oder nicht unterstützte Architektur#
Die HEF-Kompilierung wird unter Linux x86_64 unterstützt. Verwende den Export über die Ultralytics Platform oder einen kompatiblen Computer, wenn dein lokaler Rechner macOS, Windows, Raspberry Pi oder ein anderes ARM-System verwendet.
Der Export dauert lange#
Die DFC-Optimierung ist der aufwendigste Schritt. Die Kompilierungszeit steigt mit der Modellgröße, der Eingabeauflösung und den Kalibrierungsdaten. Eine unterstützte GPU kann die Optimierung beschleunigen, während die Kompilierung ausschließlich mit der CPU wesentlich länger dauern kann.
Die Genauigkeit des quantisierten Modells nimmt ab#
Verwende Kalibrierungsbilder, die den Eingaben in der Produktion ähneln und wichtige Objekte, Größen, Lichtverhältnisse und Hintergründe abdecken. Vergleiche vor der Bereitstellung das ursprüngliche PyTorch-Modell und die exportierte HEF mit demselben Validierungssatz. Selbst bei guter Kalibrierung bleibt je nach Modellfamilie eine moderate Abweichung bestehen; die gemessenen Ausgangswerte findest du unter Genauigkeitserwartungen nach Modellfamilie.
HEF lässt sich nicht auf dem Gerät laden#
Stelle sicher, dass name zur physischen Hailo-Architektur passt und dass Gerätetreiber, Firmware und HailoRT-Pakete miteinander kompatibel sind. Untersuche das Artefakt mit hailortcli parse-hef und überprüfe den Beschleuniger mit hailortcli fw-control identify.
Die Ausgabe wird offenbar falsch geparst#
Lege metadata.yaml neben der HEF ab, damit Ultralytics den passenden Nachverarbeitungspfad für YOLOv8, YOLO11 oder YOLO26 auswählen kann. Benutzerdefinierte HailoRT-Anwendungen müssen ihre Nachverarbeitung ebenfalls auf die exportierte Modellfamilie abstimmen.
Zusammenfassung#
Der Hailo-Export von Ultralytics bietet einen direkten Weg von einem trainierten YOLO-Modell zu einer bereitstellbaren HEF:
- Lade ein YOLOv8-, YOLO11- oder YOLO26-Detektions- oder Klassifizierungsmodell, ein YOLOv8-/YOLO11-Segmentierungs-, Pose- oder OBB-Modell oder ein YOLO26-Modell für semantische Segmentierung oder Tiefenschätzung.
- Exportiere mit
format="hailo"und wähle die Zielarchitektur aus. - Kalibriere und kompiliere lokal mit der passenden DFC oder nutze den verwalteten Export in der Ultralytics Platform.
- Kopiere die HEF und
metadata.yamlauf das Edge-Gerät mit Hailo-Beschleuniger. - Führe die Inferenz mit HailoRT, Raspberry Pi Picamera2 oder einer GStreamer-Videopipeline aus.
Häufig gestellte Fragen#
Nein. Führe den DFC auf einem unterstützten Linux-x86_64-System aus und übertrage die resultierende HEF auf den Raspberry Pi.
Eine unterstützte GPU verkürzt die DFC-Optimierungszeit erheblich. Die Kompilierung mit der CPU ist möglich, kann aber wesentlich länger dauern.
Der direkte Export unterstützt Detektionsmodelle mit dem standardmäßigen Detektions-Head von YOLOv8, YOLO11 oder YOLO26, YOLOv8-/YOLO11-Segmentierungs-, Pose- und OBB-Modelle sowie YOLOv8-/YOLO11-/YOLO26-Klassifizierungsmodelle. Dazu gehören auch benutzerdefiniert trainierte Modelle, die auf diesen Standardarchitekturen basieren. YOLO26-Modelle für semantische Segmentierung und Tiefenschätzung werden ebenfalls unterstützt. YOLO26-Instanzsegmentierung, Pose und OBB sowie YOLOv10, YOLO-World, YOLOE und RT-DETR werden abgelehnt, statt eine nicht validierte HEF zu erzeugen.
Ja. Verwende denselben Befehl
format="hailo"mit den benutzerdefinierten Gewichten.ptund übergib die YAML-Datei des Trainingsdatensatzes überdata, um eine repräsentative INT8-Kalibrierung durchzuführen. Klassennamen und Klassenanzahl werden aus den Modellmetadaten ausgelesen.Jede HEF wird für eine feste Eingabeform kompiliert und lässt sich daher nicht dynamisch skalieren. In der Praxis kannst du Eingaben auf dem Host auf die kompilierte Größe skalieren oder mehrere HEFs für die benötigten Auflösungen kompilieren. Wähle beim Export
imgszpassend zur Bereitstellungspipeline aus.YOLO26 verwendet eine DFL-freie Box-Regression, sodass beide Heads zu rohen Tensoren statt zur HailoRT-NMS-Pipeline im YOLOv8-Stil kompiliert werden. Ultralytics decodiert die Tensoren und wendet standardmäßig NMS an oder gibt bei einem Export mit
nms=FalseNMS-freie Detektionen zurück.Der Hailo Dataflow Compiler wandelt das Modell um und quantisiert es auf einem Linux-x86_64-Build-Rechner zu einer hardwarespezifischen HEF. HailoRT lädt diese HEF auf dem Zielgerät und führt sie aus.
Stelle die kompilierte HEF in der Hailo-Laufzeitumgebung bereit. ONNX ist eine Zwischendarstellung, die während des Exports verwendet und nach erfolgreicher Kompilierung entfernt wird.
Lade das Compiler-Wheel für deine Hardwaregeneration aus der Hailo Developer Zone herunter. Der Compiler wird nur zum Erstellen der HEF benötigt; HailoRT führt sie auf dem Zielbeschleuniger aus.
Kommentare
Stell eine Frage, teile deine Ergebnisse oder hilf jemand anderem.