Computer Vision

Computer Vision pour la surveillance et la sécurité

Context

La Computer Vision (CV) est en plein boom. L'émergence du deep learning, combinée à la baisse des coûts de stockage et des coûts de calculs informatiques, ainsi qu’à l’explosion du nombre de vidéos et de photos prises et disponibles permettent en effet la multiplication des possibilités d’usage de la computer vision. Notre client conçoit et développe des logiciels spécialisés pour aider les entreprises de sécurité et de la défense à monitorer leurs sites physiques et à détecter des potentielles menaces sur ces sites. La détection de présence ou d’activité, qui était auparavant limitée à la capacité d’un humain à se concentrer sur un écran pendant un long moment et sur un nombre limité de moniteurs, peut désormais bénéficier de l’aide des technologies de Computer Vision pour augmenter ou automatiser cette tâche 24H/24 et 7J/7. Notre client aimerait pouvoir en bénéficier pour améliorer ses produits. Néanmoins, il y a encore un fossé non négligeable entre la théorie et la pratique quand on parle de Computer Vision. Les challenges pour développer et implémenter un tel système de détection sont multiples. Dans ce cas présent, la taille des images (plus de 100Mb), la nécessite du temps réel, le bruit sur l’image (par exemple le brouillard ou les reflets sur la mer), la taille variable des objets à détecter en fonction de leur distance (parfois pas plus gros que 10 pixels), la variabilité dans les objets à détecter (qu’est-ce qu’une menace en mer et comment la définir ? est-ce un zodiac? un simple voilier?), le nombre d’exemples labellisés, etc… tous ces éléments rendent difficile l’implémentation d’un tel système. Notre client souhaitait l’accompagnement d’experts pour les aider à résoudre certains de ces challenges. Notre client a décidé de se faire accompagner par MFG Labs dans une phase de R&D pour essayer de trouver une solution appropriée.

Solutions

Travail préliminaire

La première partie d’une telle mission est de clarifier ce qui doit être achevé. Dans un projet data, l’objectif la plupart du temps est de définir de façon claire une métrique essentielle à un problème donné, et de chercher à améliorer cette métrique. Comment déterminer la capacité à détecter correctement une menace sur un flux vidéo ? Dans ce cas client, nous avons défini les objectifs suivants : chercher à maximiser le rappel (recall en anglais), c’est-à-dire faire en sorte de ne rater aucune menace potentielle, et s’assurer qu’un objet est bien détecté, c’est à dire considérer qu’un objet est détecté si on arrive à détecter au moins 50% de sa surface, et ce afin de ne pas impacter les performances du modèle.

En parallèle, nous avons aussi passé du temps à explorer le jeu de données. Notre jeu de données était composé de 84,000 photos au format raw et jpeg, parmi lesquelles environ 10,000 étaient labellisées par 26,000 bounding boxes couvrant 900 objets. Ce jeu de données représente plusieurs séquences vidéos prises lors de la surveillance de ports et de sites maritimes. Ce jeu de données a été choisi pour représenter un certain nombre de situations dans lesquelles les conditions diffèrent (la météo et les conditions maritimes, la distance par rapport aux objets à détecter, etc.).

L’analyse exploratoire nous a permis de comprendre les différentes classes d’objets avec lesquelles nous devions travailler, les distributions typiques et commencer à réfléchir sur des approches algorithmiques à tester.

Nous avons pu également avoir un aperçu de la spécificité des images infrarouges (IR), de tester différents traitements pour obtenir une image JPG classique en 8b, ce qui est un pré-requis pour la majorité des algorithmes de Computer Vision, et de tester aussi des filtres spatiaux et temporels qui permettent de mieux faire ressortir les cibles : si notre oeil le voit mieux, alors ça sera aussi le cas pour la machine.

La conclusion de cette analyse préliminaire a été de comprendre qu’il nous fallait différents types de solutions en fonction de deux dimensions : la taille de la cible à détecter (petite cible indéfinie vs des cibles pour lesquelles on voit clairement les formes d’un bateau) et le type d’arrière-plan (une mer encombrée et bruitée vs une mer calme et plate). La priorité de notre client a été de s’orienter prioritairement vers la détection de petits objets et la détection sur des arrières-plans très bruités, bien évidemment avec la nécessité de ne pas manquer les cibles évidentes et de taille conséquente.

Nous avons donc décidé de partir sur la conception d’un algorithme de détection d’objet qui respecte ces priorités.

1ere approche :

Algorithmes de détection d’anomalies

Dans cette première approche, nous avons considéré les cibles comme des anomalies sur l’image. Cette approche est particulièrement adéquate pour les très petits bateaux isolés sur la mer, où il est difficile d’apercevoir autre chose qu’un groupe de pixels qui ne donne pas l’air de représenter un bateau.

Différents algorithmes de détection d’anomalies sur image ont été testés, comme le Filtres Mixtes Spatiaux-Temporels, l’Analyse en Composantes Principales Robuste (RCPA), méthodes NL-means et méthodes a-contrario et des variations “maison_”_ qui prennent en compte la dimension temporelle.

Performances

Alors que le RCPA a montré de bons résultats sur des images où la bruit est faible (mer calme) et particulièrement pour détecter de toutes petites cibles, la méthode par NL-means a eu de meilleures performances, en particulier sur un arrière-plan bruité et pour des cibles de petites et moyennes tailles. La méthode NL-means a eu l’avantage d’être approprié pour différentes tailles de cibles, alors que pour l’approche par RCPA, les paramètres dépendent fortement de la taille des cibles à détecter.

Néanmoins, ces approches ont un désavantage de taille : ils requièrent une capacité de calcul fort, et la contrainte de détection en temps réel sur des images full-HD (+100Mb) est un réel challenge qui contraint fortement une implémentation. Ces approches produisent également de nombreux faux-positifs. Notre objectif est de maximiser le rappel (c’est-à-dire identifier tous les vrais positifs), ce qui implique nécessairement de détecter également des faux-positifs, mais il est nécessaire de trouver un compromis afin de ne pas déclencher trop de fausses alertes pour l’utilisateur final. Dans ce cas, la prise en compte de la dimension temporelle nous a permis de réduire significativement le nombre de faux positifs, mais également de perdre un certain nombre de cibles.

2ème approche

Détection d’objets via Deep Learning

Dans un second temps, nous avons considéré les cibles comme des objets avec une forme spécifique. Nous parlons alors de détection d’objet plutôt que de détection d’anomalies. Dans l’étape précédente, nous nous efforcions de modéliser l’arrière plan, alors qu’ici on apprend à un algorithme à reconnaître spécifiquement ce qu’est un bateau et comment différencier les différents types de bateaux.

Les réseaux de convolution ont récemment démontré des résultats impressionnants quand il s’agit de classification d’objets et de détection. Néanmoins, ceux-ci reposent sur un apprentissage d’un jeu de données conséquent que nous n’avions pas à disposition. Un moyen de contourner ce problème est d’utiliser des techniques de transfer learning, en utilisant des algorithmes pré-entraînés sur des millions d’images génériques, et de les fine tuner dans le but de :

  • être applicable correctement sur des images infra-rouges, alors que les algorithmes ont été entraînés sur le spectre visible
  • reconnaître des objets correspondants à nos cibles

Pour avoir rapidement une idée sur l’adéquation d’une telle approche avec notre problématique, nous avons entraîné sur des images de notre jeu de données un simple réseau de classification pré-entraîné. La classification des différents types de bateaux a montré de bonnes performances, et même s’il pouvait rester des erreurs de classifications sur certaines classes d’objets (des types de bateaux), la matrice de confusion a montré que seulement de rares bateaux étaient classifié comme de l’arrière plan. Ce travail nous a permis de valider l’approche deep learning pour notre challenge et notre jeu de données.

Il existe déjà des algorithmes très efficaces pour la détection d’objets sur des images, et nous avons décidé de tirer partie de ce qui se fait de mieux. Nous avons donc sélectionné l’algorithme Faster-RCNN, l’un des meilleurs algorithmes à l’état de l’art en termes de performance de détection et avec une vitesse plus que correcte. Il existe des algorithmes plus rapides mais avec de moins bonnes performances de détection, et nous cherchions d’abord à valider une capacité à détecter de façon plus précise les objets par rapport à la méthode précédente. Nous avons utilisé la librairie Facebook’s Detectron2, parue en Octobre 2019.

Après différents étapes de fine-tuning sur les différents noeuds du modèles, nous avons réussi à adapter un algorithme pré-entraîné sur le spectre visible à des images infrarouges et appliqué à la détection exclusive de bateaux.

Performances

Nous avons réussi à obtenir un rappel “absolu” d’un peu plus de 55%, ce qui signifie que sur toutes les images du jeu de test, notre algorithme détectait plus de la moitié des cibles. Toutefois, pour avoir une interprétation correcte des performances de notre algorithme pour le cas présent, il convient de prendre en compte également les métriques de suivi. Ces métriques indiquent deux choses :

  • on ne peut considérer qu’une cible est détectée (et affichée en tant que telle à l’utilisateur sur l’écran) si seulement on peut la détecter trois fois de suite;
  • si une cible est détectée, on peut anticiper sa trajectoire (sur les images suivantes de la séquence) et donc il est acceptable d’en perdre quelques fois.

Dit autrement, il est acceptable de rater plusieurs fois la détection d’une cible si on est quand même en mesure de la détecter trois fois consécutives à un moment donné. En prenant en compte ces métriques de suivi, nous avons donc réussi à montrer que l’on pouvait détecter plus de 80% des cibles, ce qui représente un bond en avant considérable par rapport à la solution en place chez notre client, notamment sur les arrières-plans bruités et pour les petites cibles à détecter.

Il est intéressant de noter qu’avec cette approche, les cibles pour lesquelles le taux de détection était le plus faible étaient des cibles de grande taille, car elles étaient sous-représentées dans le jeux de données. Cela constitue une source potentielle d’amélioration future des performances.

Que dire des faux-positifs ? Ce projet était avant tout destiné à maximiser le rappel plutôt que la précision, mais il est important de garder la vision utilisateur en tête, et de ne pas déclencher de fausses alertes sur le système utilisateur. Nous avons obtenu des taux de précision de 30% pour la détection d’objet, ce qui est bien supérieur aux autres approches et valide donc l’approche par CNN pour identifier les éléments clefs représentatifs d’un bateau. Encore une fois, il faut également prendre en compte l’approche complémentaire qui intègre des métriques de suivi : la plupart des faux-positifs ne passeront pas ce second filtre de suivi car il est hautement improbable que l’algorithme trouve trois fois un faux-positif qui suive une trajectoire qui paraît plausible.

Résultats

La détection d’objet en utilisant une approche deep learning a montré de vrais avantages par rapport à des techniques de détection d’anomalies en ce qui concerne la performance de détection et de vélocité, ce qui était le but de cette mission de R&D.

Il convient de nuancer toutefois ces résultats puisque les algorithmes testés ont du mal à être performant sur de grandes images (équivalent à 30 images full-HD) en temps réel. Il y a donc une marge de progression encore importante, tant sur l’aspect algorithmique que sur l’aspect hardware, pour obtenir des performances adéquates qui permettraient une implémentation de cette solution dans le logiciel client.

.