CV / RetinaFace

RetinaFace MobileNet-v1

reComputer R Series (CM5 + Hailo-8)

Détection de visages à classe unique avec 5 points de repère par visage sur reComputer R Series avec Hailo-8.

18 téléchargements
Taille
6.3 MB
Mémoire
4GB+
Précision
Hailo HEF / HailoRT 4.23.x

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
sudo docker run --rm \
  --name cm5-hailo8-retinaface \
  --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/retinaface_mobilenet_v1:latest \
  python web_detection.py --model_path model/retinaface_mobilenet_v1.hef --video_path video/test.mp4

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

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

Détails du modèle

RetinaFace MobileNet-v1 sur reComputer R Series (CM5 + Hailo-8)

RetinaFace détecte les visages et 5 points par visage (yeux, bout du nez, commissures des lèvres) sur Hailo-8 via HailoRT. Le HEF expose 9 têtes brutes et le décodage s'effectue sur le CPU hôte.

Informations du modèle

PropriétéValeur
ArchitectureRetinaFace, dorsale MobileNet-v1 (biubug6/Pytorch_Retinaface)
TâcheDétection de visages
Entrée736x1280x3 BGR (normalize_in_net mean [123,117,104])
Sortie9 têtes : 3 échelles x {bbox, conf, landmark}
Ancres a priori38,640 ancres (2/cellule, cartes 92x160/46x80/23x40)
Classes1 (visage) + 5 points par détection
Paramètres3.49M
Opérations25.14G
mAP (WIDER FACE)81.3% référence matérielle
HEFHailo Model Zoo v2.19.0, Hailo-8

La précision ci-dessus est une valeur de référence de Hailo Model Zoo, pas une mesure effectuée sur CM5.

Exécution avec la vidéo de démonstration

bash
sudo docker run --rm \
  --name cm5-hailo8-retinaface \
  --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/retinaface_mobilenet_v1:latest \
  python web_detection.py --model_path model/retinaface_mobilenet_v1.hef --video_path video/test.mp4

Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu web (boîtes de visages et points verts superposés au flux MJPEG).

API REST

bash
curl -X POST "http://<Board_IP>:8000/api/models/retinaface_mobilenet_v1/predict" \
  -F "file=@test.jpg"
Point d’accèsMéthodeFonction
/GETInterface d’aperçu web
/api/models/retinaface_mobilenet_v1/predictPOSTVisages + points (JSON)
/api/video_feedGETFlux d’aperçu MJPEG
/api/configGET / POSTSeuils de confiance / IOU NMS

Notes d’implémentation

  • Post-traitement CPU (meta_arch=retinaface) : aucune NMS sur puce. La génération des ancres, le décodage SSD (variances 10/5), la confiance softmax, la NMS gloutonne et le décodage des points sont un portage numpy de face_detection_postprocessing.py de Model Zoo.
  • Organisation des têtes selon les transformations officielles : 8 canaux = bbox (2 ancres x 4 coordonnées), 4 canaux = confidence (2 ancres x {background, face}), 20 canaux = landmarks (2 ancres x 10 coordonnées).
  • Le script alls applique input_conversion(bgr_to_rgb) dans le HEF ; l'application fournit des images BGR uint8 brutes.
  • Prétraitement : redimensionnement avec conservation du rapport d'aspect et remplissage en bas/à droite (couleur 0) jusqu'à 736x1280.

Notes de développement

  • Module source : src/rpi5_hailo8_retinaface_mobilenet_v1/
  • Dockerfile : docker/hailo8/retinaface_mobilenet_v1.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo8-cv/retinaface_mobilenet_v1:latest
  • Famille : RetinaFace (variante : mobilenet_v1)

Entrées et sorties

Input: image, video, or USB camera frame. Output: face boxes with confidences, 5 keypoints per face (eyes, nose, mouth corners), and an annotated MJPEG preview.