Reconnaissance automatique d’images en machine learning, avec Yolo, Python et Tensorflow

Comment développer concrètement une routine de reconnaissance d’images en temps réel. Avec Tensor Flow (Google), Python, et Yolo ?

Voici un exemple du résultat final.
Toute l’analyse de ce flux d’images est automatique. Les rectangles colorés, les tags, les mouvements sont générés par l’algorithme.
L’original est une vidéo filmée par un touriste à Saint-Martin. Un atterrissage spectaculaire à Juliana Airport.
L’objectif, pour un tour operator, était de classer automatiquement cette vidéo dans le bon dossier.

Les modèles utilisés ne sont pas infaillibles, loin de là.
L’entrainement est essentiel. Les modèles doivent recevoir un jeu de données d’entrainement très proches des futures images à analyser.  Prenons l’exemple d’une vidéo tournée à Trinidad, dans la rue. Les villes trinidadiennes sont particulièrement chaotiques…

Pas si mal. Les véhicules sont bien repérés, les piétons aussi… mais aussi :

Le manguier « broccoli » !

et

Stop soups !

Le manguier n’est pas un broccoli, les maisons ne sont pas des « trucks »… Un entrainement plus spécifique semble nécessaire pour s’y retrouver.
Tout ceci souligne l’importance culturelle de « training set » (jeu de données d’entrainement) : choisissez le le plus près possible des données futures.

Voici toutes les étapes nécessaires à la mise en place du moteur de reconnaissance.

Etape 1 : installer

Tensorflow est un framework de machine learning, open source, de Google.
Yolo, qui veut dire « You Only Look Once », c’est un réseau de neurones spécialisé dans la détection et l’analyse d’objets dans l’image. Sa grande force est la rapidité : il peut travailler en temps réel (à 45 im / sec). Yolo est plus rapide que des R-CNN, car il découpe l’image en petits blocs et génère des tenseurs pour chaque blocs.
Au départ Yolo était écrit en Darknet, une version plus User-Friendly TensorFlow a été développée : Darkflow.
Pour ceux qui veulent comprendre comment Yolo fonctionne : https://medium.com/@jonathan_hui/real-time-object-detection-with-yolo-yolov2-28b1b93e2088 ou (En savoir plus)
Enfin OpenCV (Open Source Computer Vision Library) est une librairie Python spécialisée dans la « vision machine ». (En savoir plus)

 

Etape 2 : Récupérer Darkflow sur github

 

Etape 3 : Créer un dossier

  • Créez un dossier sur votre bureau et déposez-y le repo darklow-master

Etape 4 : Faire un build

  • Il vous faut maintenant créer un « build » de la librairie.
    Important : Avec le terminal mettez vous dans le bon dossier (darklow-master).
    Ensuite entrez les lignes de code :
python setup.py build_ext --inplace

Vous devez voir un dossier « build » apparaitre dans le darkflow-master.

Etape 5 : Télécharger les weights

  • Sur le site de Yolo, récupérer les weights correspondant à notre version (ici la V2). Yolo a été entrainé sur le dataset COCO qui comporte 300 000 images.

  • Une fois les weights téléchargés :
  • Créez un dossier « bin »
  • Déposez les weights à l’intérieur

C’est terminé pour l’installation !

 

Etape 2 : la vidéo

Passons aux choses amusantes. Nous n’allons pas utiliser la webcam pour faire de la détection en temps réel, mais une vidéo enregistrée.

  • Récupérez une vidéo sur internet avec les éléments que vous souhaitez détecter.
    Eventuellement vous pouvez la raccourcir pour aller plus vite dans les analyses.
    Voici notre vidéo originale :

  • Déposez la vidéo à traiter dans le dossier darkflow-master
  • Nous allons ensuite lancer la détection sur le fichier vidéo
python flow --model cfg/yolov2.cfg --load bin/yolov2.weights
--demo stmarteen.mp4 --gpu 1.0 --saveVideo
  • Et voilà !
    Le système est lancé sur l’analyse de la vidéo, selon votre machine cela peut prendre « un certain temps ».
    Une fois l’analyse et le rendu effectués, il vous suffit d’ouvrir le fichier video.avi pour voir le résultat final.

 

Cette première approche nous permet d’imaginer toutes les applications en marketing / étude de comportement / détection de tendances. De même en sécurité (détection de présence, gestes « suspects » etc).


Contactez-nous