CV / ArcFace

ArcFace MobileFaceNet

ArcFace-gezichtsherkenning (2,04M parameters, 99,4% LFW) op reComputer R Series met Hailo-8 of Hailo-10H.

15 downloads
Grootte
3.91 MB
Geheugen
4GB+
Precisie
Hailo HEF / HailoRT

Kies het apparaat dat je gebruikt. De installatiehandleiding en documentatie worden dienovereenkomstig bijgewerkt.

Aan de slag

Implementeren
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

REST API

Gebruik de REST API om inferentie uit te voeren. Kopieer de onderstaande commando's.

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())

Modeldetails

reComputer R Series (CM5 + Hailo-8)

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

ArcFace met een MobileFaceNet-backbone extraheert via HailoRT 512-dimensionale gezichtsembeddings op Hailo-8. De embedding wordt gebruikt voor gezichtsverificatie en -identificatie; de vergelijking zelf gebeurt in de client met cosinusgelijkenis.

Deze pagina is gericht op reComputer R Series (CM5 + Hailo-8) met een PCIe-Hailo-8-versneller.

Modelinformatie

EigenschapWaarde
ArchitectuurArcFace met MobileFaceNet-backbone
TaakGezichtsherkenning (embedding-extractie)
Invoer112x112x3 RGB (letterbox, normalisatie in de HEF gecompileerd)
Uitvoer512-dimensionale gezichtsembedding
Parameters2.04M
LFW-nauwkeurigheid99,4% (Hailo Model Zoo-referentie)
HEFHailo Model Zoo v2.19.0, Hailo-8

De nauwkeurigheid is de Hailo Model Zoo-referentie; het is geen op de CM5 gemeten benchmark.

Hardware en hostinstellingen

OnderdeelWaarde
BoardreComputer R Series met Raspberry Pi CM5
VersnellerHailo-8 via PCIe, beschikbaar als /dev/hailo0
RuntimeHailoRT 4.23.x
Python in de container3.11, aarch64

Installeer de Hailo-8-pakketten op de host en controleer of stuurprogramma en apparaat gereed zijn voordat u de container start:

bash
sudo apt update

# Beide kandidaten moeten 4.23.x zijn vóór installatie.
apt-cache policy hailort hailort-pcie-driver

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

# Na herstart
hailortcli --version
hailortcli fw-control identify
ls -l /dev/hailo0

De verwachte HailoRT-versie voor deze image is 4.23.x. Ga niet verder als apt-cache policy HailoRT 5.x selecteert; die runtime is voor Hailo-10H en past niet bij deze Hailo-8-container.

Uitvoeren met de demo-video

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

Open http://<Board_IP>:8000 voor de webpreview. Elk frame wordt geannoteerd met de embedding-dimensie en de REST API retourneert de volledige 512-dimensionale vector.

USB-cameramodus

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 }
}
EndpointMethodeDoel
/GETWebpreview-interface
/api/models/arcface_mobilefacenet/predictPOSTGezichtsembedding (JSON)
/api/video_feedGETMJPEG-previewstream
/api/configGET / POSTRuntime-drempels lezen of wijzigen
/api/video/uploadPOSTBronvideo uploaden
/api/video/analyzePOSTOffline video-analyse starten
/api/video/statusGETVoortgang van de analyse lezen
/api/video/download/{filename}GETGeannoteerd resultaat downloaden

Gezichtsverificatie is geen apart endpoint: vergelijk twee geretourneerde embeddings in de client met cosinusgelijkenis (normaliseer beide vectoren eerst met L2).

Implementatienotities

  • De HEF bevat een eigen normalisatielaag, dus de applicatie letterboxt naar 112x112, converteert BGR naar RGB en stuurt uint8-pixels ongewijzigd door.
  • De embedding wordt gelezen uit de arcface_mobilefacenet/fc1-uitvoer wanneer de vstream-naam beschikbaar is; anders wordt de eerste uitvoertensor gebruikt. De eerste inferentie logt alle vstream-namen en shapes zodat de mapping op de hardware te controleren is.
  • Lege embeddings of embeddings met niet-eindige waarden worden geweigerd in plaats van als geldig resultaat teruggegeven.

Ontwikkelnotities

  • Bronmodule: src/rpi5_hailo8_arcface_mobilefacenet/
  • Dockerfile: docker/hailo8/arcface_mobilefacenet.dockerfile
  • Container: ghcr.io/seeed-projects/recomputer-hailo8-cv/arcface_mobilefacenet:latest
  • HEF: model/arcface_mobilefacenet.hef (4.100.573 bytes)
  • De module gebruikt de HailoRT 4.23 VStreams-API en een Hailo-8-specifieke HEF.

Invoer en uitvoer

Invoer: afbeelding (112x112 RGB). Uitvoer: 512-dimensionale gezichtsembedding; de vergelijking gebeurt in de client.