Ultralytics YOLO Modelleri için Hailo Dışa Aktarımı
Hailo HEF, doğrudan bir Ultralytics model.export(format="hailo") hedefi olarak resmi şekilde desteklenmemektedir. Aşağıdaki iş akışı önce ONNX formatına aktarım yapar, ardından bir .hef dosyası oluşturmak için Hailo'nun harici Dataflow Compiler araç zincirini kullanır. Watt başına daha iyi performans için, eski Hailo HEF dağıtımları yerine Axelera AI veya DeepX gibi daha yeni doğrudan Ultralytics dışa aktarım formatlarını kullan.
Hailo araç zinciri; Raspberry Pi AI Kit, AI HAT+, endüstriyel kameralar, uç geçitler ve AI PC'ler dahil olmak üzere gömülü platformlar için HEF dosyalarını kullanır.
Bu kılavuz, Ultralytics YOLO algılama modellerini Hailo Dataflow Compiler (DFC) SDK'sını kullanarak Hailo'nun HEF (Hailo Executable Format) formatına aktarma sürecini adım adım açıklar. İş akışı bir YOLO .pt modelinden başlar, ONNX formatına aktarılır, Hailo araçlarıyla derlenir ve Hailo-8, Hailo-8L ve Hailo-15 hızlandırıcıları için hazır bir .hef dosyası üretir.
Hailo HEF Ne Zaman Kullanılır
HEF is the compiled artifact consumed by HailoRT on Hailo target devices. Use this guide only when your deployment hardware specifically requires Hailo HEF. If you are still choosing edge hardware or export targets, start with newer direct Ultralytics export formats such as Axelera AI or DeepX, which provide a supported model.export(...) workflow and better performance-per-watt options than older Hailo deployments.
HEF, dağıtım rolü açısından Rockchip NPU'lar için RKNN, Raspberry Pi AI Kameralar için IMX500 ve Snapdragon NPU'lar için Qualcomm QNN gibi donanıma özel formatlara benzer, ancak şu anda doğrudan Ultralytics tarafından oluşturulmamaktadır.
Bu iş akışı şu durumlarda geçerlidir:
- Raspberry Pi AI Kit uyumluluğu: Hailo-8L, resmi Raspberry Pi AI Kit ve AI HAT+'da kullanılır.
- HailoRT son işleme (post-processing): HailoRT, derlenmiş çıkarım hattına YOLO non-maximum suppression (NMS) işlemini dahil edebilir.
- INT8 derleme: Hailo DFC, Hailo donanımı için bir INT8 grafiği oluşturmak amacıyla modeli temsili kalibrasyon görüntüleriyle niceler. model quantization hakkında daha fazla bilgi edin.
Hailo HEF Dışa Aktarım Formatı
HEF is a hardware-specific executable generated by the Hailo Dataflow Compiler. It contains the quantized model graph, memory allocation, scheduling, and optional post-processing configured for a target Hailo architecture. Unlike standard YOLO Export mode formats that are produced directly by model.export(format=...), HEF compilation currently uses a two-stage flow:
- Ultralytics ile YOLO'yu ONNX formatına aktar.
- ONNX modelini HEF'e ayrıştırmak, optimize etmek, nitelemek ve derlemek için Hailo DFC araçlarını kullan.
Tüm iş akışı şu aşamalardan oluşur:
YOLO (.pt) -> ONNX -> HAR (parse) -> HAR (optimize/quantize) -> HEF (compile)- Ultralytics Export mode kullanarak ONNX'e aktar
- ONNX modelini Hailo'nun ara HAR formatına ayrıştır
- Normalizasyon ve son işleme yönergelerini içeren bir model betiği (
.alls) yükle - Temsili görüntüler kullanarak kalibre et ve nitele
- Dağıtılabilir bir HEF dosyasına derle
Desteklenen Görevler
Bu kılavuz Ultralytics YOLO nesne algılama modellerine odaklanır, çünkü Hailo model betiği ve NMS yapılandırması algılama başlığına (detection-head) özeldir.
| Görev | Destekleniyor |
|---|---|
| Nesne Algılama | ✅ Evet |
| Örnek Segmentasyonu | ❌ Hayır |
| Anlamsal Bölütleme | ❌ Hayır |
| Poz Tahmini | ❌ Hayır |
| OBB Algılama | ❌ Hayır |
| Sınıflandırma | ❌ Hayır |
Örnek bölütleme, anlamsal bölütleme, poz, OBB ve sınıflandırma dağıtımları için, Export mode tablosundaki diğer uç formatları karşılaştır veya hedef çalışma zamanının görevi desteklediği genel bir ONNX hattı kullan.
Uyumluluk Notları
Hailo dışa aktarım uyumluluğu; model başlığına, giriş görüntüsü boyutuna, sınıf sayısına, Hailo mimarisine, model betiğine (.alls) ve NMS yapılandırmasına bağlıdır. Hailo Model Zoo üzerindeki statik dosyalar yararlı referanslardır, ancak bunlar evrensel şablonlar değildir. Örneğin, 80 sınıflı bir COCO YOLO11n modeli için oluşturulan bir NMS JSON, 3 sınıflı özel bir model veya farklı bir sabit imgsz için doğru değildir.
| Kapsam | Beklenen Destek | Notlar |
|---|---|---|
| YOLOv8 / YOLO11 algılama, stok modeller | ✅ İyi | Paylaşılan ayrıştırılmış algılama başlığı; .alls, uç düğümler ve NMS yapılandırmasının yine de dışa aktarılan grafik ve sabit imgsz ile eşleşmesi gerekir. |
| Özel YOLOv8 / YOLO11 algılama | ✅ Mümkün | Sınıf sayısı, adımlar ve algılama başlığı düzeninden oluşturulan modele özel NMS yapılandırması gerektirir; statik Model Zoo JSON'u eşleşmeyecektir. |
| YOLOv9 algılama | ⚠️ Doğrula | Benzer algılama başlığı deseni, ancak desteklendiğini kabul etmeden önce derleme ve çıktı ayrıştırma test edilmelidir. |
| YOLOv10 / YOLO26 uçtan uca algılama | ❌ Desteklenmiyor | Uçtan uca/NMS'siz dışa aktarımlar, Hailo NMS son işleme yoluyla eşleşmez; manuel olarak test ediyorsan geleneksel bir algılama başlığı kullan. |
| Dinamik veya isteğe bağlı görüntü boyutları | ❌ Desteklenmiyor | Hailo derlemesi sabit bir giriş şekli kullanır; .alls ve NMS ayarları dışa aktarılan imgsz ile eşleşmelidir. |
Kurulum
Adım 1: Ultralytics'i Kur
pip install ultralyticsAdım 2: Hailo DFC SDK'yı Kur
Ayrıştırma, optimizasyon ve derleme için Hailo DFC gereklidir. Python wheel dosyasını Hailo Developer Zone üzerinden indir (ücretsiz kayıt gereklidir) ve kur:
pip install /path/to/hailo_sdk_client-*.whlHailo DFC SDK, bir Linux x86_64 makinesi gerektirir. Dışa aktarma ve derleme, Raspberry Pi gibi ARM cihazlarda gerçekleştirilemez. Ortaya çıkan .hef dosyasını, HailoRT ile dağıtım yapmak üzere Hailo destekli cihazına kopyala.
YOLO11n HEF Dışa Aktarım Örneği
Aşağıdaki betik, bir YOLO11n algılama modelini .pt dosyasından sabit 640 piksel giriş boyutunda .hef formatına derler. Ultralytics kullanarak ONNX'e aktarır, ardından küçük bir kalibrasyon veri seti olarak COCO128 kullanarak Hailo DFC ile derler.
Betiği çalıştırmadan önce, Hailo Model Zoo üzerinden eşleşen YOLO11n NMS yapılandırma dosyasını indir veya model için kendi Hailo NMS JSON'unu oluştur. Bu betiği bilinen bir YOLO11n başlangıç noktası olarak yeniden kullan; özel modellerin eşleşen uç düğümlere, .alls yönergelerine ve NMS ayarlarına ihtiyacı vardır.
import random
import numpy as np
from hailo_sdk_client import ClientRunner
from PIL import Image
from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils import DATASETS_DIR
# Configuration
MODEL = "yolo11n"
HW_ARCH = "hailo8" # hailo8 | hailo8l | hailo15h
IMGSZ = 640
CALIB_IMAGES = 128
NMS_CONFIG = "yolo11n_nms_config.json" # Download or generate for your exact model.
# YOLO11 detection head end nodes. See "Supported Models and End Nodes" for YOLOv8 and other families.
END_NODES = [
"/model.23/cv2.0/cv2.0.2/Conv",
"/model.23/cv3.0/cv3.0.2/Conv",
"/model.23/cv2.1/cv2.1.2/Conv",
"/model.23/cv3.1/cv3.1.2/Conv",
"/model.23/cv2.2/cv2.2.2/Conv",
"/model.23/cv3.2/cv3.2.2/Conv",
]
# Step 1: Export to ONNX
model = YOLO(f"{MODEL}.pt")
model.export(format="onnx", imgsz=IMGSZ, opset=11) # creates an ONNX file named after MODEL
# Step 2: Parse ONNX with Hailo DFC
# The DFC prints the detected end nodes after parsing; use them if unsure.
runner = ClientRunner(hw_arch=HW_ARCH)
runner.translate_onnx_model(f"{MODEL}.onnx", end_node_names=END_NODES)
# Step 3: Load model script (normalization + HailoRT NMS)
# The conv layer names are generated by DFC and can change for other model sizes/families.
alls = (
"normalization1 = normalization([0.0, 0.0, 0.0], [255.0, 255.0, 255.0])\n"
"change_output_activation(conv54, sigmoid)\n"
"change_output_activation(conv65, sigmoid)\n"
"change_output_activation(conv80, sigmoid)\n"
f'nms_postprocess("{NMS_CONFIG}", meta_arch=yolov8, engine=cpu)\n'
"allocator_param(width_splitter_defuse=disabled)"
)
runner.load_model_script(alls)
# Step 4: Build calibration dataset (auto-downloads COCO128)
check_det_dataset("coco128.yaml")
calib_dir = DATASETS_DIR / "coco128" / "images" / "train2017"
image_files = list(calib_dir.glob("*.jpg")) + list(calib_dir.glob("*.png"))
if not image_files:
raise FileNotFoundError(f"No calibration images found in {calib_dir}")
calibset = np.zeros((CALIB_IMAGES, IMGSZ, IMGSZ, 3), dtype=np.float32)
for i in range(CALIB_IMAGES):
img = Image.open(random.choice(image_files)).convert("RGB").resize((IMGSZ, IMGSZ))
calibset[i] = np.array(img, dtype=np.float32)
# Step 5: Optimize and quantize
runner.optimize(calibset)
runner.save_har(f"{MODEL}.o.har") # optional intermediate HAR
# Step 6: Compile to HEF
hef = runner.compile()
with open(f"{MODEL}.hef", "wb") as f:
f.write(hef)
print(f"Compiled HEF saved to: {MODEL}.hef")Ortaya çıkan yolo11n.hef gibi HEF dosyası, uyumlu bir Hailo cihazında dağıtılmaya hazırdır. Raspberry Pi AI Kit için derleme yapıyorsan, derleme adımını çalıştırmadan önce HW_ARCH = "hailo8l" olarak ayarla.
Adım Adım İnceleme
Adım 1: ONNX'e aktar
Ultralytics, eğitilmiş modelini Hailo DFC'nin giriş olarak aldığı ONNX formatına aktarır. Geniş DFC uyumluluğu için opset=11 olarak ayarla.
from ultralytics import YOLO
MODEL = "yolo11n"
model = YOLO(f"{MODEL}.pt")
model.export(format="onnx", imgsz=640, opset=11)Adım 2: ONNX Modelini ayrıştır
translate_onnx_model çağrısı, ONNX grafiğini Hailo'nun ara HAR temsiline dönüştürür. end_node_names listesi, Hailo'nun kendi donanım son işlemesini ekleyebilmesi için grafiğin NMS öncesinde nerede kesileceğini DFC'ye bildirir.
from hailo_sdk_client import ClientRunner
runner = ClientRunner(hw_arch="hailo8")
runner.translate_onnx_model(f"{MODEL}.onnx", end_node_names=END_NODES)DFC ayrıştırmadan sonra bir öneri yazdırır:
[info] In order to use HailoRT post-processing capabilities, these end node names should be used: ...
Hangi düğümleri kullanacağından emin değilsen veya özel ya da daha az yaygın bir mimariyle çalışıyorsan bu düğüm adlarını kopyala.
Adım 3: Model betiğini yükle
Model betiği (.alls); giriş normalizasyonunu, çıktı aktivasyonunu ve NMS son işlemesini yapılandırır. meta_arch=yolov8 ayarı, aynı algılama başlığı düzenini paylaştıkları için hem YOLOv8 hem de YOLO11 için geçerlidir.
MODEL = "yolo11n"
NMS_CONFIG = "yolo11n_nms_config.json"
alls = (
"normalization1 = normalization([0.0, 0.0, 0.0], [255.0, 255.0, 255.0])\n"
"change_output_activation(conv54, sigmoid)\n"
"change_output_activation(conv65, sigmoid)\n"
"change_output_activation(conv80, sigmoid)\n"
f'nms_postprocess("{NMS_CONFIG}", meta_arch=yolov8, engine=cpu)\n'
"allocator_param(width_splitter_defuse=disabled)"
)
runner.load_model_script(alls)The change_output_activation layer names (conv54, conv65, conv80) are assigned by the DFC during parsing and are model-specific. If you are compiling a different model size or architecture, check the DFC output for the correct names, or use a predefined .alls file from the Hailo Model Zoo.
NMS_CONFIG dosyası da modele özeldir. Dışa aktarılan modelinle eşleşen yapılandırmayı kullan veya en yakın YOLO varyantı için Hailo Model Zoo yapılandırmasından başla.
engine=cpu, NMS'yi ana bilgisayar CPU'su üzerinde HailoRT aracılığıyla çalıştırır. engine=nn_core değerini yalnızca Hailo'nun hedef donanım ve SDK sürümü tarafından desteklendiğini belirttiği model/betik kombinasyonları için kullan.
NMS'yi tamamen uygulama kodunda çalıştırmayı tercih ediyorsan nms_postprocess satırını kaldır. Bunu yaparsan çıkarım ayrıştırıcısını güncelle, çünkü HEF gruplanmış NMS algılamaları yerine ham algılama başlığı tensörleri çıkaracaktır.
Adım 4: Kalibrasyon veri setini oluştur
INT8 nicelleştirme, temsili bir görüntü seti gerektirir. Aşağıdaki betik, Ultralytics'in check_det_dataset aracılığıyla otomatik olarak indirdiği COCO128'i kullanır:
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils import DATASETS_DIR
check_det_dataset("coco128.yaml") # downloads to DATASETS_DIR if not present
calib_dir = DATASETS_DIR / "coco128" / "images" / "train2017"Kalibrasyon için en az 64 görüntü kullan. Daha fazla görüntü genellikle nicelleştirme kalitesini artırır. En iyi sonuçlar için COCO128 yerine dağıtım alanından görüntüler kullan.
Adım 5: Optimize et ve nitele
runner.optimize(calibset)
runner.save_har(f"{MODEL}.o.har") # optional intermediate checkpointBu adım, nicelleştirme duyarlı ince ayar ve katman gürültüsü analizi uygular. Bir GPU şiddetle önerilir; bir GPU olmadan bu adım birkaç saat sürebilir.
Adım 6: HEF dosyasına derle
hef = runner.compile()
with open(f"{MODEL}.hef", "wb") as f:
f.write(hef)Desteklenen Modeller ve Uç Düğümler
Algılama modelleri için end_node_names, Hailo'nun NMS son işlemesini eklemeden önce derlemesi gereken ONNX algılama başlığı çıktılarını tanımlar. Bu adlar mimariye göre değişir ve dışa aktarılan grafik değiştiğinde değişebilir.
YOLO11 ve YOLOv8
YOLO11 ve YOLOv8 aynı ayrıştırılmış algılama başlığını paylaşır. Katman indeksi iki aile arasında bir fark gösterir:
| Model Ailesi | Algılama Başlığı Katmanı | Uç Düğüm Deseni |
|---|---|---|
| YOLO11 (tümü) | model.23 | /model.23/cv2.0/cv2.0.2/Conv (6 düğüm) |
| YOLOv8 (tümü) | model.22 | /model.22/cv2.0/cv2.0.2/Conv (6 düğüm) |
YOLO11 uç düğümleri (tüm boyutlar: n, s, m, l, x):
END_NODES = [
"/model.23/cv2.0/cv2.0.2/Conv",
"/model.23/cv3.0/cv3.0.2/Conv",
"/model.23/cv2.1/cv2.1.2/Conv",
"/model.23/cv3.1/cv3.1.2/Conv",
"/model.23/cv2.2/cv2.2.2/Conv",
"/model.23/cv3.2/cv3.2.2/Conv",
]YOLOv8 uç düğümleri (tüm boyutlar: n, s, m, l, x):
END_NODES = [
"/model.22/cv2.0/cv2.0.2/Conv",
"/model.22/cv3.0/cv3.0.2/Conv",
"/model.22/cv2.1/cv2.1.2/Conv",
"/model.22/cv3.1/cv3.1.2/Conv",
"/model.22/cv2.2/cv2.2.2/Conv",
"/model.22/cv3.2/cv3.2.2/Conv",
]Diğer Mimariler
Diğer tespit mimarileri için önce end_node_names olmadan ayrıştırma adımını çalıştır, DFC günlük çıktısından önerilen düğümleri oku, ardından bu düğümlerle tekrar çalıştır:
# First pass: let the DFC suggest end nodes
runner = ClientRunner(hw_arch=HW_ARCH)
runner.translate_onnx_model(f"{MODEL}.onnx")
# Check the printed log for: "[info] In order to use HailoRT post-processing..."Birçok YOLO varyantı için önceden tanımlanmış .alls betikleri ve NMS yapılandırma dosyalarına Hailo Model Zoo üzerinden ulaşabilirsin.
Desteklenen Donanım Mimarileri
| Mimari | Cihaz | Maksimum İşlem Gücü (Üretici Spesifikasyonu) | Yaygın Kullanım Alanı |
|---|---|---|---|
hailo8 | Hailo-8 | 26 TOPS | Hailo hızlandırıcı kartı |
hailo8l | Hailo-8L | 13 TOPS | Raspberry Pi AI Kit |
hailo15h | Hailo-15H | 20 TOPS | Hailo-15 hedef cihazları |
Derlemeden önce betikteki HW_ARCH değerini hedef cihazınla eşleşecek şekilde ayarla.
Hailo Donanımında Çıkarım Çalıştırma
.hef dosyasını elde ettikten sonra, onu Hailo destekli cihazına kopyala ve HailoRT Python API'sini (hailo_platform paketi) kullanarak çıkarımı çalıştır. DFC dışa aktarma adımlarının aksine, çıkarım doğrudan uç cihaz üzerinde çalışır.
Aşağıdaki çıkarım kodu, derleme için kullanılan x86 makinesinde değil, Hailo destekli cihaz üzerinde (örneğin Raspberry Pi + AI Kit) çalışır.
Adım 1: Cihaza HailoRT Yükleme
Hedef cihaz üzerinde HailoRT ve Python bağlamalarını kur. Raspberry Pi AI Kit ve AI HAT+ kullanıcıları için resmi Raspberry Pi AI yazılım kılavuzu ile HailoRT, cihaz sürücüsü ve Python bağlamaları şu şekilde kurulur:
sudo apt install dkms
sudo apt install hailo-allRaspberry Pi dışındaki Hailo cihazları için, Hailo Developer Zone üzerinden cihazına, sürücüne ve SDK sürümüne uygun HailoRT paketini yükle.
AI HAT+ 2 cihazları farklı bir Raspberry Pi paketi (hailo-h10-all) ve Hailo-10H iş akışı kullanır. O donanım nesli için Raspberry Pi AI yazılım kılavuzunu takip et.
Adım 2: Hızlı Sağlamlık Kontrolü
Python çıkarımını çalıştırmadan önce Hailo cihazının tanındığından emin ol:
hailortcli fw-control identifyCihaz türünün, aygıt yazılımı sürümünün ve seri numarasının yazdırıldığını görmelisin.
Adım 3: Çıkarım Çalıştırma
Aşağıdaki betik, derlenmiş HEF dosyasını ve hailo_platform Python API'sini kullanarak tek bir görüntü üzerinde nesne tespiti yapar. Ön işleme, çıkarım ve HailoRT NMS çıktısından sınırlayıcı kutuların (BBox) çizilmesi işlemlerini yönetir.
import numpy as np
from hailo_platform import (
HEF,
ConfigureParams,
FormatType,
HailoStreamInterface,
InferVStreams,
InputVStreamParams,
OutputVStreamParams,
VDevice,
)
from PIL import Image, ImageDraw
# Configuration
MODEL = "yolo11n"
HEF_PATH = f"{MODEL}.hef" # path to your compiled HEF file
SOURCE = "bus.jpg" # image path
IMGSZ = 640
CONF = 0.25
COCO_NAMES = [
"person",
"bicycle",
"car",
"motorcycle",
"airplane",
"bus",
"train",
"truck",
"boat",
"traffic light",
"fire hydrant",
"stop sign",
"parking meter",
"bench",
"bird",
"cat",
"dog",
"horse",
"sheep",
"cow",
"elephant",
"bear",
"zebra",
"giraffe",
"backpack",
"umbrella",
"handbag",
"tie",
"suitcase",
"frisbee",
"skis",
"snowboard",
"sports ball",
"kite",
"baseball bat",
"baseball glove",
"skateboard",
"surfboard",
"tennis racket",
"bottle",
"wine glass",
"cup",
"fork",
"knife",
"spoon",
"bowl",
"banana",
"apple",
"sandwich",
"orange",
"broccoli",
"carrot",
"hot dog",
"pizza",
"donut",
"cake",
"chair",
"couch",
"potted plant",
"bed",
"dining table",
"toilet",
"tv",
"laptop",
"mouse",
"remote",
"keyboard",
"cell phone",
"microwave",
"oven",
"toaster",
"sink",
"refrigerator",
"book",
"clock",
"vase",
"scissors",
"teddy bear",
"hair drier",
"toothbrush",
]
# Load HEF and connect to device
hef = HEF(HEF_PATH)
params = VDevice.create_params()
target = VDevice(params)
configure_params = ConfigureParams.create_from_hef(hef, interface=HailoStreamInterface.PCIe)
network_groups = target.configure(hef, configure_params)
network_group = network_groups[0]
network_group_params = network_group.create_params()
# Setup I/O virtual streams
input_vstreams_params = InputVStreamParams.make(network_group, quantized=False, format_type=FormatType.FLOAT32)
output_vstreams_params = OutputVStreamParams.make(network_group, quantized=False, format_type=FormatType.FLOAT32)
# Preprocess
orig = Image.open(SOURCE).convert("RGB")
ow, oh = orig.size
resized = orig.resize((IMGSZ, IMGSZ))
input_data = np.expand_dims(np.array(resized, dtype=np.float32), axis=0) # (1,640,640,3)
input_name = hef.get_input_vstream_infos()[0].name
# Inference
with InferVStreams(network_group, input_vstreams_params, output_vstreams_params) as pipeline:
with network_group.activate(network_group_params):
pipeline.send({input_name: input_data})
raw = pipeline.recv()
# Parse HailoRT NMS output and draw results
# When compiled with nms_postprocess the HEF outputs detections grouped by
# class: shape (batch, num_classes, max_dets, 5) where 5 = [y1,x1,y2,x2,score]
draw = ImageDraw.Draw(orig)
output_key = next(iter(raw.keys()))
batch_dets = raw[output_key][0] # shape: (num_classes, max_dets, 5)
for cls_idx, cls_dets in enumerate(batch_dets):
for det in cls_dets:
score = float(det[4])
if score < CONF:
continue
y1, x1, y2, x2 = det[:4]
# Scale from model coords (0-640) back to original image size
x1 = int(x1 * ow / IMGSZ)
y1 = int(y1 * oh / IMGSZ)
x2 = int(x2 * ow / IMGSZ)
y2 = int(y2 * oh / IMGSZ)
label = f"{COCO_NAMES[cls_idx]} {score:.2f}"
draw.rectangle([x1, y1, x2, y2], outline="red", width=2)
draw.text((x1 + 2, y1 + 2), label, fill="red")
orig.save("output.jpg")
print("Saved output.jpg")The detection output format assumes the HEF was compiled with nms_postprocess in the .alls script. If you compiled without NMS, the raw outputs are the 6 detection head tensors and you must run NMS in your application separately.
Raspberry Pi AI Kit ve AI HAT+
Raspberry Pi AI Kit ve 13 TOPS AI HAT+ cihazları Hailo-8L kullanır. Bu cihazlardan birini kullanmak için:
- HEF dosyanı x86 makinesinde derlemeden önce
HW_ARCH = "hailo8l"olarak ayarla. .hefdosyasını Raspberry Pi cihazına kopyala.- Resmi Raspberry Pi AI yazılım kılavuzunu izleyerek HailoRT kurulumunu yap.
- Yukarıdaki çıkarım betiğini çalıştır.
Raspberry Pi'de kamera tabanlı çıkarım için picamera2 Hailo örnekleri, Camera Module ile canlı tespit için kullanıma hazır betikler sunar. Ayrıca Coral Edge TPU on Raspberry Pi kılavuzu ve Sony IMX500 entegrasyon kılavuzundaki Raspberry Pi dağıtım yollarını karşılaştırabilirsin.
TAPPAS ile Video Çıkarımı
Yüksek verimli video işleme hatları için TAPPAS, videoyu gerçek zamanlı olarak Hailo çipi üzerinden aktaran GStreamer öğeleri sağlar:
MODEL=yolo11n
gst-launch-1.0 filesrc location=video.mp4 ! decodebin ! \
hailonet hef-path=${MODEL}.hef ! \
hailofilter function-name=yolov8 ! \
hailooverlay ! autovideosinkTam işleme hattı yapılandırma seçenekleri için TAPPAS belgelerine bak.
Özet
Bu kılavuz, Ultralytics YOLO tespit modellerini Hailo HEF formatına dışa aktarmak için gereken tüm iş akışını ele aldı:
- Ultralytics ile ONNX formatına dışa aktar (
model.export(format="onnx")). - ONNX modelini Hailo DFC ile ayrıştır ve tespit başlığı uç düğümlerini belirt.
- Bir model betiği ile normalleştirme ve NMS yapılandırması yap.
- Kalibrasyon veri kümesi (Ultralytics üzerinden COCO128) ile nicemleme (quantization) yap.
- Hailo-8, Hailo-8L veya Hailo-15 için hazır olan
.hefdosyasına derle.
Daha fazla ayrıntı için Hailo Developer Zone, Hailo belgeleri ve Hailo Model Zoo kaynaklarına bak. Diğer Ultralytics dışa aktarma hedefleri için ONNX, OpenVINO, TensorRT, NCNN, TFLite Edge TPU, RKNN, Sony IMX500 ve Qualcomm QNN kılavuzlarını incele. Dışa aktarılan model hızını ve doğruluğunu formatlar arasında karşılaştırmak için Benchmark modunu kullan. Formatların ve seçeneklerin tam listesi için Dışa aktarma modu belgelerini ve entegrasyon kılavuzu sayfasını ziyaret et.
SSS
Hangi Hailo cihazları destekleniyor?
The Hailo DFC supports Hailo-8 (hailo8), Hailo-8L (hailo8l), and Hailo-15H (hailo15h). See the Supported Hardware Architectures table for the matching HW_ARCH value.
Hangi Ultralytics modelleri dışa aktarılabilir?
Bu kılavuz tespit modellerine odaklanır. Görev düzeyindeki kapsam için Desteklenen Görevler, model uyumluluk sınırları için Uyumluluk Notları ve YOLO11 ile YOLOv8 uç düğüm örnekleri için Desteklenen Modeller ve Uç Düğümler bölümlerine bak.
Model betiği YOLO11 için neden meta_arch=yolov8 kullanıyor?
YOLO11, YOLOv8 ile aynı ayrıştırılmış tespit başlığı mimarisini kullanır. Hailo DFC, her iki model ailesi için NMS yapılandırmasında meta_arch=yolov8 değerini kullanır.
Optimizasyon adımı için GPU'ya ihtiyacım var mı?
runner.optimize() içinde nicemleme farkındalıklı ince ayar (quantization-aware fine-tuning) için GPU şiddetle önerilir. GPU olmadan süreç çalışır ancak önemli ölçüde daha yavaştır (bir GPU ile yaklaşık 10-20 dakika sürerken GPU'suz birkaç saat sürebilir).
Modelim için doğru uç düğümleri nasıl bulurum?
runner.translate_onnx_model(...) fonksiyonunu end_node_names belirtmeden çalıştır, ardından DFC tarafından yazdırılan önerilen tespit başlığı düğümlerini kullan. Örnek komut için Diğer Mimariler kısmına bak.
Hailo DFC SDK ve NMS yapılandırma dosyalarını nereden alabilirim?
Hailo DFC SDK Python dosyası Hailo Developer Zone adresinden temin edilebilir, önceden tanımlanmış .alls betikleri ve NMS yapılandırma dosyaları ise Hailo Model Zoo üzerinden alınabilir.