Une application concrète des réseaux de neurones en 7 minutes

Ivan Alt
BeTomorrow
Published in
7 min readMay 24, 2019

Présentation

Le réseau de neurones de convolutions est un type d’intelligence artificielle basé sur l’interprétation d’images via machine learning. Nous avons décidé d’expliquer ce que peut concrètement apporter une intelligence artificielle de ce type avec un projet digital concret.

Je vous conseille de lire cet article au préalable si vous voulez vous renseigner sur le fonctionnement des réseaux de neurones de convolutions : Les réseaux de neurones de convolutions pour les néophytes.

Application de départ : Toilet Finder

Le fait de savoir où se trouvent les sanitaires à proximité est toujours une information utile, et c’est de ce besoin qu’est née l’application mobile Toilet Finder que nous avons développé chez BeTomorrow en 2009 et que nous maintenons depuis. Elle permet, depuis votre position GPS, de vous tracer un itinéraire vers le sanitaire le plus proche, enfin, parmi ceux que l’application connaît. Ainsi, la qualité du service dépend de la richesse de la base de données. C’est d’ailleurs le premier critère de comparaison avec les autres applications similaires.

Nous laissons donc nos utilisateurs nous suggérer des sanitaires publics non répertoriés dans la base de données. En revanche, le processus de mise à jour nécessite une validation manuelle avant d’y être définitivement répertorié. Ce processus constitue le goulot d’étranglement et souffre de plusieurs contraintes, notamment l’imprécision de certaines coordonnées GPS rendant le processus parfois long et fastidieux, la disponibilité des modérateurs, leur efficacité, …

Afin d’améliorer cette chaîne de validation, BeTomorrow s’est aidé du machine learning pour accélérer la confirmation de l’existence de sanitaires aux positions suggérées par les utilisateurs.

Et c’est là que le pôle IA de BeTomorrow intervient !

Contexte

L’objectif ici était de disposer d’un algorithme capable de parcourir régulièrement la base de données de Toilet Finder et de faire une pré-sélection des positions GPS en mettant en avant, pour les modérateurs, les endroits ayant le plus de chances de contenir des sanitaires publics. Il fallait donc un programme qui puisse fonctionner en continu et pour un temps de calcul de l’ordre de quelques secondes.

Nous avons choisi de détecter la présence de sanitaires sur les images de la vue Google Street View associées à la position GPS indiquée par l’utilisateur.

La forte variabilité des sanitaires (forme, taille, orientation, couleur, …) rend une analyse d’image directe impossible. Nous nous sommes donc orientés vers les réseaux de neurones de convolutions afin de profiter de leur capacité de détection de caractéristiques pour une détection intelligente.

La détection devant être faite dans un temps convenable, nous avons décidé d’utiliser l’algorithme YOLO (You Only Look Once). C’est un réseau de neurones de convolutions qui n’a besoin de charger l’image qu’une seule fois avant d’effectuer sa détection, en faisant ainsi un des meilleurs réseaux de neurones de classification et détection d’objets en terme de rapidité et d’efficacité.

Résultat de recherche d'images pour "yolo ai"
Exemple de l’algorithme Yolo qui détecte sur une image en temps réel la présence de voitures, vélos, camions, feux de croisement et êtres humains. // image tirée de https://youtu.be/MPU2HistivI

Premiers pas

Nous avons effectué ce projet en Python en utilisant les librairies TensorFlow et Keras. Nous avons développé puis testé en utilisant Keras avant d’exporter le projet avec TensorFlow Lite, pour garder une exécution rapide.

L’intérêt du réseau de neurones YOLO est qu’il fournit une détection d’objets sur une image en temps réel. Afin de l’adapter à notre problème, il nous a suffit de l’entraîner sur des sanitaires publics pour qu’il soit ensuite capable de les détecter seul.

Nous avons constitué notre propre jeu d’essais en utilisant des données de la base Toilet Finder et en labellisant manuellement les images pour l’entraînement de YOLO. Une fois le réseau entraîné et testé, nous avons effectué plusieurs constats :

  • La détection de sanitaires publics en ville est généralement satisfaisante
  • Lorsque la position GPS est en milieu trop rural, l’IA ne trouve presque jamais la présence de sanitaires
  • Lorsque la forme d’un sanitaire est trop exotique, l’IA n’arrive pas à la détecter (ce qui est aussi souvent le cas pour les sanitaires hors d’un milieu urbain)
Sanitaire publique commun
Sanitaire “exotique”

À partir de ces constats, nous avons en premier lieu mis en place un petit réseau de neurones de convolutions supplémentaire entraîné à déterminer à partir d’une image 360° si la position GPS associée correspond à un position en ville ou non.

Ainsi, nous pouvons éviter d’effectuer la détection lorsque nous ne sommes pas capable de détecter des sanitaires, notre version de YOLO n’étant pas encore capable de détecter des sanitaires en milieu rural.

Puis nous avons décidé d’entraîner YOLO à reconnaître les sanitaires publiques automatiques de ville principalement, leur forme régulière permettant une détection efficace et rapide assez facilement.

Résultats

Le premier réseau de neurones consistant à dire si oui ou non la position GPS se trouve en ville s’est avéré être très efficace et nous a permis d’écarter les images sur lesquelles notre IA n’était pas encore capable d’effectuer une détection correcte. Nous avons donc intégré ce premier réseau de neurones de convolutions à notre algorithme final.

YOLO quant à lui effectue une détection des sanitaires publics de ville très satisfaisante. Le second réseau trouve presque systématiquement les sanitaires de ce type, et arrive parfois même à trouver des sanitaires qui ont une forme un peu plus originale, ce qui est très plus qu’encourageant !

Ci dessous se trouve l’affichage que notre algorithme effectue lorsqu’il trouve un sanitaire. Il récupère l’image 360° de Google Street View, effectue la détection de YOLO dessus et, si il en détecte un, trace un rectangle rouge autour du sanitaire qu’il a trouvé.

Sanitaire de ville (forme courante) // Google Street View
Sanitaire de ville (forme non courante) // Google Street View
Sanitaire de ville (forme non courante) // Google Street View

Le temps total d’exécution de notre détection intelligente (réseau de neurones ville/rural + YOLO) met en moyenne quelques secondes lorsque la position GPS est en ville (entre 2 et 3 secondes sur une machine 8 CPU utilisant toute ses ressources). Ces résultats tombent en accord avec nos contraintes initiales.

Observations

Ce projet a renforcé notre avis déjà très positif sur YOLO qui se montre très utile pour la détection d’images en un temps court (d’autres projets de BeTomorrow ont également été menés en utilisant cette technologie).

Ce projet a également nécessité un ensemble de compétences diversifié pour être mis en production, puisqu’il a fallu jongler entre traitement d’images, interactions avec une base de données existante et création d’une infrastructure cloud de détection automatisée et performante.

Cela nous a aussi demandé de choisir entre plusieurs facteurs impactant les performances, tel que le choix de la technologie de l’intelligence artificielle, ou bien l’optimisation du code ou de l’infrastructure pour que le coût de processus ne soient pas mis à défaut.

De la même manière, notre méthode dépend beaucoup de Google Street View. Ainsi, notre détection ne marche pas lorsqu’il n’y a aucune vue de disponible, mais elle est également influencée par la distance entre le point GPS virtuel et la position réelle du sanitaire. Un camion peut par exemple bloquer la vue, ou le sanitaire peut être trop éloigné et apparaître trop petit sur l’image, ce qui rend la détection difficile voire impossible dans certains cas.

Ensuite, la détection est performante pour des sanitaires qui sont déjà évidents pour l’œil humain et n’est presque pas capable de détecter celles pour lesquels elle n’est pas entraînée. C’est un comportement prévisible dans le sens où notre algorithme a été entraîné à chercher des sanitaires publics d’un seul type, et va donc exceller dans sa détection lorsque le cas va se présenter. Inversement, lors d’un cas hors du commun, le programme aura des difficultés à les trouver.

Utiliser un set de données plus conséquent améliorerait grandement la qualité des détections et nous permettrait aussi de détecter différents type de sanitaires, que ce soit en ville ou en milieu rural.

Conclusion

La mise en place de la détection automatique de sanitaires via leur position GPS a permis d’accélérer le travail des modérateurs, proposant en premier lieu les positions GPS préalablement traitées par notre intelligence artificielle.

Notre méthode démontre l’utilité d’intégrer l’intelligence artificielle dans ce projet, puisque nous avons réussi à contourner le problème technique lié de la détection pur de sanitaires directement sur une image. L’enjeu se retrouve alors sur l’entraînement des réseaux de neurones, mais aussi sur une intégration transparente de l’intelligence artificielle dans une système déjà existant.

Outre le succès du travail effectué il s’agit d’un projet riche en enseignements qui nous permet d’aborder le problème de détection d’image via un angle d’attaque différent d’une détection directe de l’image. Il ne reste plus qu’à faire en sorte que les modérateurs puissent entraîner eux mêmes l’intelligence artificielle en injectant le résultat de leur modération dans le processus d’entraînement de l’IA pour avoir un système autonome et qui gagne de l’efficacité avec le temps.

Et voilà ! Vous avez désormais compris l’intérêt qu’apporte l’intégration d’une intelligence artificielle dans un projet, en particulier les réseaux de neurones de convolutions.

Vous avez aimé cet article ? Cliquez sur 👏 en bas de page pour que d’autres lecteurs puissent le trouver !

BeTomorrow est une agence de conseil, design et développement. Pour aller plus loin, nous vous invitons à lire nos derniers articles ou nous contacter directement.

--

--

Ivan Alt
BeTomorrow

Software developper, nerd and always intrested in science stuff ! Currently working for BeTomorrow in the artificial intelligence department as an intern.