CV / EfficientDet

EfficientDet-Lite0

EfficientDet-Lite0 mit einem BiFPN-Kopf erkennt 80 COCO-Objektklassen auf Hailo-8. NMS und Sigmoid werden On-Chip ausgeführt (Hailo HPP), sodass die App nur den Tensor nach NMS analysiert. Lite0-Variante der EfficientDet-Familie.

2 Downloads
Größe
9.3 MB
Speicher
4GB+
Präzision
Hailo HEF / HailoRT 4.23.x

Wähle das Gerät, das du verwendest. Die Einrichtungsanleitung und Dokumentation werden entsprechend aktualisiert.

Erste Schritte

Bereitstellen
sudo docker run --rm \
  --name cm5-hailo8-efficientdet-lite0 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/efficientdet_lite0:latest \
  python web_detection.py --model_path model/efficientdet_lite0.hef --video_path video/test.mp4

REST API

Verwende die REST API für die Inferenz. Kopiere die folgenden Befehle.

Curl
curl -X POST "http://<Board_IP>:8000/api/models/efficientdet_lite0/predict" \
  -F "file=@test.jpg"
Python
import requests

response = requests.post(
    "http://<Board_IP>:8000/api/models/efficientdet_lite0/predict",
    files={"file": open("test.jpg", "rb")},
    timeout=30,
)
print(response.json())

Modelldetails

EfficientDet-Lite0 auf reComputer R Series (CM5 + Hailo-8)

EfficientDet-Lite0 führt die Objekterkennung für 80 COCO-Klassen auf Hailo-8 über HailoRT durch. NMS und Sigmoid werden on-chip (Hailo HPP) ausgeführt, sodass der Host nur den Post-NMS-Tensor parsen muss. Dies ist die Lite0-Variante der efficientdet-Familie.

Diese Seite richtet sich an reComputer R Series (CM5 + Hailo-8) mit einem Hailo-8-Beschleuniger über PCIe.

Modellinformationen

EigenschaftWert
ArchitekturEfficientDet-Lite0 (BiFPN)
AufgabeObjekterkennung
Eingabe320x320x3 RGB (Normalisierung in die HEF kompiliert: mean=127, std=128)
AusgabeOn-Chip-NMS-Tensor, Post-NMS-Shape 89x5x100
Klassen89 Slots (COCO-Kategorie-IDs 1..89 über labels_offset=1; 10 ungenutzt)
Parameter3.56M
Operationen1.94G
PostprocessingOn-Chip-NMS (HPP) + Sigmoid; der Host parst den Post-NMS-Tensor
HEFHailo Model Zoo v2.19.0, Hailo-8

Der Genauigkeitswert ist die Referenz aus dem Hailo Model Zoo. Er wurde nicht auf CM5 gemessen.

Hardware- und Host-Einrichtung

ElementWert
BoardreComputer R Series mit Raspberry Pi CM5
BeschleunigerHailo-8 über PCIe, verfügbar als /dev/hailo0
LaufzeitumgebungHailoRT 4.23.x
Python im Container3.11, aarch64

Installieren Sie die Hailo-8-Pakete auf dem Host und bestätigen Sie, dass Treiber und Gerät bereit sind, bevor Sie den Container starten:

bash
sudo apt update
sudo apt install hailort hailort-pcie-driver python3-hailort
sudo reboot

# After reboot
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

Die erwartete HailoRT-Version für dieses Image ist 4.23.x.

Mit Demo-Video ausführen

bash
sudo docker run --rm \
  --name cm5-hailo8-efficientdet-lite0 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/efficientdet_lite0:latest \
  python web_detection.py --model_path model/efficientdet_lite0.hef --video_path video/test.mp4

Öffnen Sie http://<Board_IP>:8000, um die Webvorschau anzuzeigen.

USB-Kameramodus

bash
sudo docker run --rm \
  --name cm5-hailo8-efficientdet-lite0 \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  --device /dev/hailo0:/dev/hailo0 \
  --device /dev/video0:/dev/video0 \
  -v /usr/lib/libhailort.so.4.23.0:/usr/lib/libhailort.so.4.23.0:ro \
  -v /usr/lib/libhailort.so:/usr/lib/libhailort.so:ro \
  ghcr.io/seeed-projects/recomputer-hailo8-cv/efficientdet_lite0:latest \
  python web_detection.py --model_path model/efficientdet_lite0.hef --camera_id 0

REST API

Vorhersage-Endpunkt:

text
POST http://<Board_IP>:8000/api/models/efficientdet_lite0/predict

Beispiel für eine Bildanfrage:

bash
curl -X POST "http://<Board_IP>:8000/api/models/efficientdet_lite0/predict" \
  -F "file=@test.jpg"
EndpunktMethodeZweck
/GETWebvorschau-UI
/api/models/efficientdet_lite0/predictPOSTErkennungen (JSON)
/api/video_feedGETMJPEG-Vorschau-Stream

Implementierungshinweise

  • Die HEF führt NMS on-chip aus (device_pre_post_layers: nms=true, sigmoid=true, hpp=true); die Anwendung parst nur den Post-NMS-Tensor (gemäß dem offiziellen tf_postproc_nms), daher wird nms_thresh ignoriert (nur API-Kompatibilität).
  • Die Post-NMS-Zeilen haben das Format [ymin, xmin, ymax, xmax, score] und sind auf [0,1] der letterboxed 320x320-Eingabe normalisiert; die Anwendung skaliert auf Pixel und entfernt das Letterboxing.
    • normalize_in_net mit mean=127/std=128 und padding_color=127: Die Anwendung verwendet Letterboxing mit grauem Padding (127) und übergibt rohe uint8-RGB-Pixel — es ist keine manuelle Normalisierung erforderlich.
    • HailoRT kann den NMS-vstream als klassenbezogene Liste (NMS-by-score), als Objekt-Array oder als dichtes Float32-Array (1,89,5,100)/(1,89,100,5) zurückgeben. Der Parser verarbeitet alle drei Formate; bei der ersten Inferenz werden der rohe Typ und die Shape protokolliert, damit dies auf der Hardware überprüft werden kann.
    • Klassen-Mapping: cls_id (0..88) → COCO-Kategorie-ID cls_id+1 (labels_offset=1); die 10 ungenutzten COCO-IDs sind „N/A“ und werden nicht gezeichnet. Wenn die Labels verschoben erscheinen, leiten Sie das Mapping aus dem Log der ersten Inferenz erneut ab.
  • Standardwerte: Konfidenz 0.25, IOU 0.45 (IOU hat keine Auswirkung — NMS läuft on-chip). Die Auswertung im Model Zoo verwendet 0.001 / 0.5 — verringern Sie den Konfidenzregler, um weitere Ergebnisse zu untersuchen.

Hinweise zur Entwicklung

  • Quellmodul: src/rpi5_hailo8_efficientdet_lite0/
  • Dockerfile: docker/hailo8/efficientdet_lite0.dockerfile
    • Container: ghcr.io/seeed-projects/recomputer-hailo8-cv/efficientdet_lite0:latest
  • Das Modul verwendet die HailoRT 4.23 VStreams API und eine Hailo-8-spezifische HEF.

Eingaben und Ausgaben

Eingabe: Bild, Video oder Frame einer USB-Kamera. Ausgabe: Erkennungsrahmen für 80 COCO-Klassen mit Konfidenzwerten sowie eine annotierte MJPEG-Vorschau.