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 für Computer Vision am Edge konzipiert: für Kameras, Roboter, Industriesysteme, Gateways und andere Geräte, die lokale Objekterkennung benötigen, ohne jedes Bild an die Cloud zu senden. Eine kompilierte HEF enthält das quantisierte Netzwerk, die Hardwarezuweisung, die Zeitplanung und die optionale HailoRT-Nachverarbeitung, die der ausgewählte Beschleuniger benötigt.
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 neuronalen Verarbeitungseinheit (NPU) von Hailo bietet einen praktischen Weg vom Modelltraining bis zur Edge-KI-Inferenz. Häufige 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.
- KI-Projekte mit Raspberry Pi: Ergänze Raspberry-Pi-Systeme mit beschleunigter Inferenz für Bildverarbeitung, indem du AI HAT+ oder AI HAT+ 2 verwendest.
- 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 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 kompiliert; Ultralytics erstellt die metrische Tiefenkarte bei der Inferenz neu |
| 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-Köpfen
Detect, YOLOv8/YOLO11-Segmentierungs-, Pose- und OBB-Modelle, YOLOv8/YOLO11/YOLO26-Klassifizierungsmodelle sowie YOLO26-Modelle für semantische Segmentierung und Tiefenschätzung; YOLO26-Instanzsegmentierung, Pose und Erkennung gedrehter Begrenzungsrahmen 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#
Beim Hailo-HEF-Export wird INT8-Quantisierung verwendet, um das YOLO-Netzwerk effizient auf den Beschleuniger abzubilden. Der Kalibrierungsdatensatz schätzt die Aktivierungsbereiche; er trainiert das Modell nicht erneut und erfordert während der Kompilierung keine Labels.
Hailo-Hardware und der Dataflow Compiler unterstützen die Präzisionen INT4, INT8 und INT16. Der Ultralytics-Pfad format="hailo" wird mit INT8 kompiliert und verwendet 16-Bit-Aktivierungen (a16), wenn eine Aufgabe einen größeren Wertebereich erfordert.
Wenn data nicht angegeben ist, verwendet Ultralytics einen aufgabenspezifischen, kompakten Kalibrierungsdatensatz, beispielsweise COCO128 für die Objekterkennung, 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 passenden Erkennungsbildern kalibriert, wird die vorhergesagte Karte abgeflacht, während größere Datensätze aus der passenden Domäne die Genauigkeit verbessern. 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 erhält:
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#
Gemessen auf einem Hailo-8L mit Kalibrierung aus der passenden Domäne (COCO128, 128 Bilder): INT8-HEF-Exporte behalten bei gleichem Evaluierungsverfahren den folgenden Anteil ihres PyTorch-mAP50-Werts bei:
| Modell | Beibehaltung von mAP50 | 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 | Beibehaltung von mask mAP50 (COCO128-seg) | 98.0% | 93.6% |
| Pose | Beibehaltung von box mAP50 (COCO8-pose) | 98.1% | 90.8% |
| Orientierte Bounding Box | Beibehaltung von mAP50 (DOTA128) | ~100% | 96.9% |
| Klassifizierung | Beibehaltung von top-1 (ImageNet val) | 92.6% | 95.4% |
Segmentierung, Pose und OBB wurden jeweils mit dem aufgabenspezifischen Standarddatensatz aus der passenden Domäne kalibriert (COCO128-seg, COCO8-pose, DOTA128); für die Klassifizierung kam ImageNet100 zum Einsatz. Aus diesen Standardeinstellungen ergeben sich zwei Einschränkungen: COCO8-pose enthält nur 8 Bilder. Betrachte die Pose-Ergebnisse daher als Richtwerte und übergib für den produktiven Einsatz ein größeres data=. Bei DOTA8 liegt mAP50 für beide Modelle nahe 100 %, deshalb wird OBB anhand von DOTA128 bewertet. Bei der Klassifizierung behält YOLO11 als einzige Aufgabe mehr als YOLOv8 bei; bei den anderen Aufgaben reagiert das YOLO11-Attention-Backbone stärker 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.
confbei YOLO26-Einsätzen um etwa 0,05 senken. Durch die Quantisierung sinken die YOLO26-Konfidenzwerte im Durchschnitt um ungefähr 0,05. Ein in PyTorch abgestimmter Schwellenwert verwirft daher gültige Erkennungen auf dem HEF. Mitconf=0.20auf dem Gerät stimmt die Anzahl der Erkennungen mit der von PyTorch beiconf=0.25überein. Wird der Schwellenwert noch etwas weiter gesenkt (auf etwaconf=0.15), schließt sich die verbleibende mAP50-Lücke nahezu vollständig, allerdings gibt es dann mehr Erkennungen mit niedriger Konfidenz. Durch die Quantisierung ändert sich außerdem die Rangfolge von ungefähr 20 % der Erkennungen – eine dauerhafte Verschiebung, die sich durch keinen Schwellenwert rückgängig machen lässt. Diese Umordnung verhindert jedoch nicht, dass sich mAP50 bei einem niedrigeren Schwellenwert wiederherstellen lässt.- Der Attention-Nachteil ist auf Hailo-8/8L (DFC 3.33) strukturell bedingt. Die Attention-Blöcke werden zu
matmul-Operationen kompiliert, die in jedem vom Compiler unterstützten Modus INT8-Aktivierungseingaben beibehalten. Der Modus mit 16-Bit-Ausgabe lässt sich für diesen Graphen nicht zuweisen. Auch eine höhere Präzision der umgebenden Schichten hilft nicht, weil die Matrixmultiplikation ihre Eingaben ohnehin wieder auf INT8 quantisiert (in unseren Tests änderte es nichts an mAP, die Tiefenfaltungs- und Ausgabekonvolutionen auf 16 Bit zu setzen). Wenn Genauigkeit Vorrang hat und das Modell austauschbar ist, lässt sich YOLO11 derzeit besser als YOLO26 quantisieren. 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 Modellen zur Objekterkennung wandelt das Backend die HailoRT-NMS-Ausgabe von YOLOv8/YOLO11 um und dekodiert automatisch den jeweiligen YOLO26-Kopf. Die standardmäßigen One-to-many-Ausgaben durchlaufen die NMS des Predictors. Das Backend dekodiert außerdem die Roh-Tensoren für Segmentierung, Pose und OBB, gibt die Klassifizierungswahrscheinlichkeiten vom Chip zurück und erstellt semantische Klassenzuordnungen durch Reduktion auf dem Host bei Hailo-8/8L und allen Köpfen mit nur einer Klasse oder mittels On-Chip-ArgMax bei Köpfen mit mehreren Klassen auf Hailo-10H/15. TAPPAS, GStreamer und die Raspberry-Pi-Hilfsdatei picamera2.devices.Hailo stehen weiterhin für anwendungsspezifische Verarbeitungspipelines zur Verfügung.
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 führte Benchmarks für YOLO26-Modelle durch und verglich dabei die Geschwindigkeit und Genauigkeit von PyTorch und Hailo.
| 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 für die oben genannten Benchmarks erfolgte mit COCO128 für die Objekterkennung, Cityscapes8 für die semantische Segmentierung, Depth8 für die Tiefenschätzung und ImageNet100 für die Klassifizierung. Cityscapes8 und Depth8 enthalten jeweils nur 4 Validierungsbilder. Behandle daher die Genauigkeitswerte für die semantische Segmentierung und Tiefenschätzung als Ergebnisse eines Smoke-Tests und nicht als Messwerte zur Genauigkeitserhaltung. Bevor du Schlussfolgerungen zur Genauigkeit ziehst, validiere mit einem vollständigen Datensatz wie Cityscapes oder NYU Depth V2. 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 einen NPU handelt. Für neue M.2-Einsätze ist DeepX ein aussichtsreicherer Kandidat für höhere YOLO-Leistung und bessere Leistung pro Watt, während Axelera auf deutlich höheren Durchsatz bei mehreren Streams abzielt. Rockchip ist eine beliebte, kostengünstigere Option für SBCs und eingebettete Systeme. TOPS- und Leistungsangaben der Hersteller lassen sich nicht direkt mit Anwendungsbenchmarks vergleichen. Prüfe daher dieselben YOLO-Checkpoints, Eingabegrößen und Genauigkeitswerte auf den infrage kommenden Geräten – mit demselben Host und derselben vollständigen Videopipeline –, 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.
Weitere Ziele für die Bereitstellung von Computer-Vision-Modellen findest du unter Exportmodus, Benchmarkmodus und in der Integrationsanleitung. Weitere Anleitungen zu Hardware findest du unter DeepX, Axelera, ONNX, OpenVINO, TensorRT, NCNN, RKNN, Sony IMX500 und Qualcomm QNN.
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.