Aller au contenu principal

Architecture : Inférence par Batch Distribuée

Le Système de Vision FirstBreath est conçu pour résoudre un problème critique d'évolutivité : Les threads Python ne peuvent pas gérer efficacement les boucles d'inférence IA lourdes en parallèle à cause du GIL (Global Interpreter Lock).

Pour contourner cela, nous avons implémenté un pipeline Producteur-Consommateur utilisant Redis comme courtier (broker) haute vitesse.

Le Pipeline en 3 Étapes

1. 📷 Camera Manager (Le Producteur)

  • Service : services/camera-manager
  • Rôle : Lié aux E/S (I/O Bound)
  • Logique :
    • Se connecte aux flux RTSP via OpenCV (Décodé matériellement).
    • Redimensionne les images à la taille d'entrée du modèle (640x640) immédiatement.
    • Sérialise les images (Binaire/JPEG) et les pousse dans la liste Redis batch_frames.
  • Pourquoi ? : Garde les opérations lourdes d'E/S loin du processus GPU. Peut s'adapter horizontalement (plusieurs managers pour des centaines de caméras).

2. 🧠 Batch Inference (Le Worker)

  • Service : services/batch-inference
  • Rôle : Lié au Calcul (GPU Bound)
  • Logique :
    • Récupère N images de Redis en une fois (Batching Dynamique).
    • Construit un Tensor unique [BatchSize, 3, 640, 640].
    • Exécute l'inférence une seule fois sur le GPU.
    • Sépare les résultats par ID de caméra.
    • Pousse les boîtes englobantes brutes vers batch_results.
  • Performance : Augmente le débit de ~400% par rapport au traitement séquentiel.

3. ⚙️ Redis Worker (Le Logicien)

  • Service : services/redis-worker
  • Rôle : Lié au CPU / Logique
  • Logique :
    • Consomme les résultats de détection.
    • Post-traitement : Suppression des non-maxima (NMS), filtrage de faible confiance.
    • Logique Métier : "Le cheval est-il couché ?", "Bouge-t-il trop vite ?".
    • Lissage : Applique des filtres à fenêtre glissante pour éviter les faux positifs.
    • Persistance : Envoie des alertes au Backend.

Technologies Clés

🚀 TensorRT & YOLOv11

Nous utilisons ONNX Runtime (GPU) avec le fournisseur TensorRT. Le modèle YOLOv11 est exporté avec le support de taille de batch dynamique pour permettre le traitement de 1 à 32 caméras en une seule passe.

⚡ Redis & Serialization

Pour atteindre une latence minimale (<50ms) :

  • Les images sont encodées en JPEG (Qualité 85) avant transmission pour réduire la bande passante.
  • Redis est configuré comme un stockage éphémère en mémoire (pas de persistance pour les files d'attente d'images).