computer vision football

Deep learning pour le football : Computer vision (Partie I)

deep learning pour le football
Computer vision pour l’extraction automatique de statistiques sur un match de foot

Dans cette série d’articles nous allons voir comment le deep learning est utilisé dans le football. Plutôt que de faire un simple catalogue de ce qui se fait, nous allons mettre les mains à la patte et construire un vrai système d’analyse de performance. Les deux premiers articles seront consacrés à la construction d’un système pour détecter les joueurs sur le terrain avec des techniques de computer vision.

Deep learning pour le football : Computer vision (Partie I)

La vision par ordinateur, ou computer vision, est une des utilisations principales du machine learning.

Jusqu’en 2017 les progrès fait dans ce domaine étaient impressionnants. Malgré une baisse de régime ces dernières années, on a déjà des systèmes qui permettent de faire pas mal de choses intéressantes. Dans cet article je vous introduit YOLO : You Only Look Once.

Introduction à la détection automatique d’objets : computer vision

Pour l’œil humain la détection d’objets dans une image est une action très simple, pour un ordinateur la tâche est beaucoup plus complexe. Jusque très récemment la détection d’objets se faisait grâce à des méthodes de gradients d’images. Sauf que ces méthodes sont très couteuses et beaucoup moins fiables, il en résulte des systèmes lents et peu exploitables.

Utilisation de YOLO pour la détection d'objet dans une route d'un centre ville
Exemple d’utilisation de YOLO pour superviser le trafic routier

L’avènement du deep learning et l’apparition de modèles comme les réseaux de neurones de convolution, ont propulsé la vision par ordinateur dans une nouvelle dimension.

D’ailleurs, la computer vision est une des composantes essentielles de la voiture autonome. C’est d’ailleurs une des applications qui a aidé a préserver l’engouement pour ce domaine.

Aujourd’hui les systèmes de computer vision sont très développées et ont atteints des niveaux de performances impressionnants. Ainsi les IA ont dépassés les performances des médecins pour le diagnostic des cancers.

Même si ces dernières années semblent être un plateau pour la computer vision avec peu de découvertes majeures, la recherche est encore très active et nous avons des outils très robustes. YOLO en est le parfait exemple.

Comment fonctionne YOLO ?

YOLO est un système open source de computer vision qui au moment de sa création en 2016, proposait une approche novatrice du problème. Il permet de détecter dans une image ou une vidéo les objets présents et l’endroit dans lequel ils se trouvent.

Dans le cas de l’analyse d’une vidéo, la séquence est découpée en plusieurs images. L’idée est ensuite d’analyser l’image avec un réseau de neurones. On découpe ensuite l’image en plusieurs petites régions et on applique le système de détection à chaque fois.

Le système encadre la région, lui donne un label à partir des données d’entraînements qu’il aura étudié et calcul un score de confiance de la prédiction.

deep learning pour la détection d'objets avec YOLO
Fonctionnement de YOLO pour la détection d’objets dans une image

YOLO est devenu incontournable notamment grâce à ses performances et sa rapidité. Il permet l’analyse d’images instantanément.

Par ailleurs, cette approche permet aussi d’optimiser le rendement des réseaux à convolutions utilisés. Au lieu de traiter les objets les uns après les autres avec des données d’entraînements dédiés à chaque fois (comme on avait fait pour Fashion MNIST), on approche le problème de façon plus globale.

YOLO est un projet qui est suivi par beaucoup d’ingénieurs et chercheurs en machine learning. Cela assure des mises à niveau récurrentes. D’ailleurs la version 5 a été publiée récemment et elle permet d’aller encore plus vite sans perdre en efficacité ! Jusqu’où va-t-on aller ?

Deep learning pour le football : détection de la position des joueurs dans un match de foot

Maintenant qu’on en sait un peu plus sur YOLO, testons ses performances pour l’analyse de matchs de football.

Si vous n’aimez pas le foot restez quand même, vous apprendrez à vous servir de l’outil pour une autre application qui vous tient à cœur 🙂

Introduction

Le deep learning est en train de rendre tout le monde fou !

Et le sport ne fait pas exception à la règle. Analyse de performances, aide au recrutement, prévention des blessures, les applications du deep learning au football sont nombreuses.

Pendant longtemps la collecte de statistiques sur les matchs (nombres de passes, kilomètres parcourus, nombres de ballons touchés, etc.) étaient calculés par des humains (souvent sous rémunérés) qui suivaient les matchs chaque weekend et envoyaient les résultats à différents acteurs du foot.

Aujourd’hui des systèmes de computer vision très avancés permettent de faire ce travail instantanément et avec une plus grande précision. Sans construire un système aussi développé, dans la suite de cet article je vous montre comment YOLO permet de faire ce genre de choses.

Application de la version pré-entraînée de YOLO pour une séquence de football

On part de la séquence suivante. L’objectif est d’abord d’avoir la même vidéo avec la détection des joueurs. YOLO affichera aussi un score de confiance pour la prédiction en pourcentage au dessus de chaque objet qui sera détecter comme étant un joueur.

Séquence non labellisée extraite de la rencontre Atlético-Barça

Pour éviter les problèmes liés à la gestion de l’environnement, je vous conseille d’utiliser Google Colab. Vous aurez en plus accès à un GPU gratuit ce qui permettra d’accélérer l’entraînement du modèle.

Si vous avez un matériel assez puissant (ou si vous avez du temps, beaucoup de temps…et encore je suis pas sur que ça va marcher), vous aurez d’autres choses à régler pour faire fonctionner ce projet.

Tous les codes ci-dessous sont disponible sur Colab.

Sur Colab il vous suffira d’activer le GPU. Pour cela cliquez sur Exécution puis Modifier le type d’exécution, cette fenêtre devrait s’afficher. Dans Accélérateur matériel sélectionnez GPU :

Deep learning pour le football : Computer vision (Partie I)
Utiliser le GPU gratuit proposé par Google Colab

On peut maintenant commencer à écrire le code.

La première étape est d’accorder à Google Colab l’accès à votre Google Drive, on aura besoin d’y stocker des fichiers.

from google.colab import drive
drive.mount('/content/gdrive')

Une fois cette cellule éxecutée, vous devrez cliquer sur un lien Google pour sélectionner votre compte. Vous devrez alors cliquez sur Autoriser :

Deep learning pour le football : Computer vision (Partie I)
Autoriser à Google Colab l’accès à votre Drive

Une fois que vous aurez autorisé l’accès, une clé d’authentification devrait s’afficher. Copiez cette clé et collez là dans la cellule de Google Colab :

Deep learning pour le football : Computer vision (Partie I)
Collez votre clé d’authentification et appuyez sur entrer

Google Colab a maintenant accès à votre Google Drive.

Nous allons maintenant utiliser un module appelé Darknet (je vous le garantie rien à voir avec le deep web ou quoi haha). On doit d’abord cloner le repository GitHub qui le contient. Voici le code à écrire :

import os
os.environ['PATH'] += ':/usr/local/cuda/bin'
!rm -fr darknet
!git clone https://github.com/AlexeyAB/darknet/

Si tout se passe bien le fichier devrait apparaître dans la colonne Fichiers à droite.

Ensuite vous devrez installer plusieurs commandes qui permettront l’execution de YOLO sur Google Colab. J’ai récupéré ces lignes depuis le site officiel de YOLOv3. L’installation devrait être assez rapide :

!apt install gcc-5 g++-5 -y
!ln -s /usr/bin/gcc-5 /usr/local/cuda/bin/gcc 
!ln -s /usr/bin/g++-5 /usr/local/cuda/bin/g++

Un fois être entrer dans le fichier Darknet avec %cd darknet on doit initialiser le GPU et le fichier darknet. Si vous travaillez souvent avec l’invité de commande vous devriez être plutôt à l’aise avec ces opérations.

La commande cd permet de changer d’environnement de travail et sed -i permet de modifier le fichier source.

%cd darknet
!sed -i 's/GPU=0/GPU=1/g' Makefile
!sed -i 's/OPENCV=0/OPENCV=1/g' Makefile
!make

A présent on doit récupérer le modèle pré-entraîné en reprenant les poids du réseau de neurones.

!wget https://pjreddie.com/media/files/yolov3.weights
!chmod a+x ./darknet

On a maintenant un modèle entraîné prêt à l’emploi. Testons le !

from google.colab import drive
drive.mount('/content/drive')

Vous aurez quelques librairies à installer :

!apt install ffmpeg libopencv-dev libgtk-3-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils

Et maintenant on peut lancer l’analyse de notre vidéo. N’oubliez pas de mettre le fichier baratl.mp4 dans le dossier darknet. Vous pouvez le télécharger ici.

!./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -dont_show baratl.mp4 -i 0 -out_filename output1.avi -thresh 0.7

Enfin, on télécharge la vidéo qui contient notre séquence avec tous les labels :

from google.colab import files
files.download('resultat.avi')

Résultats

Voici ce que l’on obtient :

La même séquence du match avec cette fois les labels sur les personnes

Pour un début ce n’est pas si mal. Rappelez-vous que l’on a utilisé un système déjà entraîné qui est donc très généraliste. Il est quasiment impossible de créer un système qui donne des résultats satisfaisants dans tous les domaines. On voit d’ailleurs que beaucoup de joueurs ne sont pas détecter.

J’ai essayer d’utiliser la version 5 de YOLO, le résultat est quasiment identique.

On voudra par ailleurs désactiver la détection pour les supporters ou d’autres personnes ou objets. Il serait aussi intéressant de séparer les deux équipes en Equipe A/Equipe B. Ensuite, un des défis les plus importants sera de créer un système qui fasse la prédiction de façon instantanée. On a donc encore pas mal de travail !

Pour atteindre un certain niveau de performances il nous faudra un système entièrement dédié à notre application. Ca sera l’objet du prochain article.

Inscrivez-vous à la story pour recevoir les prochains articles de cette série !