CV / ArcFace

ArcFace MobileFaceNet

Reconnaissance faciale ArcFace (2,04 M paramètres, 99,4 % LFW) sur reComputer R Series avec Hailo-8 ou Hailo-10H.

15 téléchargements
Taille
3.91 MB
Mémoire
4GB+
Précision
Hailo HEF / HailoRT

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-arcface \
  --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/arcface_mobilefacenet:latest \
  python web_detection.py --model_path model/arcface_mobilefacenet.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/arcface_mobilefacenet/predict" \
  -F "file=@face.jpg"
Python
import requests
resp = requests.post(
    "http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict",
    files={"file": open("face.jpg", "rb")},
    timeout=30,
)
print(resp.json())

Détails du modèle

reComputer R Series (CM5 + Hailo-8)

ArcFace MobileFaceNet sur reComputer R Series (CM5 + Hailo-8)

ArcFace avec un backbone MobileFaceNet extrait des embeddings faciaux de 512 dimensions sur Hailo-8 via HailoRT. L'embedding sert à la vérification et à l'identification des visages ; la comparaison elle-même est faite côté client par similarité cosinus.

Cette page cible reComputer R Series (CM5 + Hailo-8) avec un accélérateur PCIe Hailo-8.

Informations du modèle

PropriétéValeur
ArchitectureArcFace avec backbone MobileFaceNet
TâcheReconnaissance faciale (extraction d'embeddings)
Entrée112x112x3 RGB (letterbox, normalisation compilée dans le HEF)
SortieEmbedding facial de 512 dimensions
Paramètres2.04M
Précision LFW99,4 % (référence Hailo Model Zoo)
HEFHailo Model Zoo v2.19.0, Hailo-8

La précision est la référence Hailo Model Zoo ; ce n'est pas un benchmark mesuré sur CM5.

Matériel et configuration de l'hôte

ÉlémentValeur
CartereComputer R Series avec Raspberry Pi CM5
AccélérateurHailo-8 via PCIe, exposé comme /dev/hailo0
RuntimeHailoRT 4.23.x
Python dans le conteneur3.11, aarch64

Installez les paquets Hailo-8 sur l'hôte et vérifiez que le pilote et le périphérique sont prêts avant de démarrer le conteneur :

bash
sudo apt update

# Les deux candidats doivent être en 4.23.x avant l'installation.
apt-cache policy hailort hailort-pcie-driver

sudo apt install hailort=4.23.0 hailort-pcie-driver=4.23.0
sudo reboot

# Après redémarrage
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

La version HailoRT attendue pour cette image est 4.23.x. Ne continuez pas si apt-cache policy sélectionne HailoRT 5.x ; ce runtime cible Hailo-10H et n'est pas compatible avec ce conteneur Hailo-8.

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

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

Ouvrez http://<Board_IP>:8000 pour afficher l'aperçu web. Chaque image est annotée avec la dimension de l'embedding et la REST API renvoie le vecteur complet de 512 dimensions.

Mode caméra USB

bash
sudo docker run --rm \
  --name cm5-hailo8-arcface \
  --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/arcface_mobilefacenet:latest \
  python web_detection.py --model_path model/arcface_mobilefacenet.hef --camera_id 0

REST API

text
POST http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict
bash
curl -X POST "http://<Board_IP>:8000/api/models/arcface_mobilefacenet/predict" \
  -F "file=@face.jpg"
json
{
  "success": true,
  "source": "uploaded image",
  "embedding": [0.023, -0.156, 0.089, "..."],
  "dimension": 512,
  "image": { "width": 1280, "height": 720 }
}
EndpointMéthodeRôle
/GETInterface d'aperçu web
/api/models/arcface_mobilefacenet/predictPOSTEmbedding facial (JSON)
/api/video_feedGETFlux d'aperçu MJPEG
/api/configGET / POSTLire ou modifier les seuils d'exécution
/api/video/uploadPOSTTéléverser une vidéo source
/api/video/analyzePOSTLancer l'analyse vidéo hors ligne
/api/video/statusGETLire la progression de l'analyse
/api/video/download/{filename}GETTélécharger le résultat annoté

La vérification faciale n'est pas exposée comme endpoint dédié : comparez deux embeddings renvoyés par similarité cosinus côté client (normalisez d'abord les deux vecteurs en L2).

Notes d'implémentation

  • Le HEF contient sa propre couche de normalisation : l'application applique un letterbox 112x112, convertit BGR en RGB et transmet les pixels uint8 tels quels.
  • L'embedding est lu sur la sortie arcface_mobilefacenet/fc1 lorsque le nom du vstream est exposé ; sinon le premier tenseur de sortie est utilisé. La première inférence journalise tous les noms et shapes de vstreams pour vérifier la correspondance sur le matériel.
  • Les embeddings vides ou contenant des valeurs non finies sont rejetés au lieu d'être renvoyés comme résultat valide.

Notes de développement

  • Module source : src/rpi5_hailo8_arcface_mobilefacenet/
  • Dockerfile : docker/hailo8/arcface_mobilefacenet.dockerfile
  • Conteneur : ghcr.io/seeed-projects/recomputer-hailo8-cv/arcface_mobilefacenet:latest
  • HEF : model/arcface_mobilefacenet.hef (4 100 573 octets)
  • Le module utilise l'API VStreams de HailoRT 4.23 et un HEF dédié à Hailo-8.

Entrées et sorties

Entrée : image (112x112 RGB). Sortie : embedding facial de 512 dimensions ; la comparaison est faite côté client.