Le tennis est un sport pratiqué dans le monde entier et de nombreux flux vidéo à caméra unique sont disponibles. Tous ces flux contiennent des informations qui pourraient être transformées en statistiques structurées sur les matchs et les joueurs. En regardant un match de tennis, vous pourriez enrichir la vue automatiquement avec le nombre de services au milieu ou dans les coins, la profondeur à laquelle la balle est jouée, les préférences pour la gauche ou la droite, en fonction de l'endroit où le joueur est positionné... La liste des informations que vous pouvez extraire en convertissant ces flux vidéo en données structurées est immense.
Avant d'obtenir des statistiques, l'analyse de ces flux vidéo doit être décomposée en plusieurs tâches :
Cette idée a constitué la base de mon stage chez ML6. Un grand merci à l'équipe pour leur aide et surtout à Jules pour avoir été un mentor formidable. Pour mon stage, nous avons décidé de commencer par la détection des lignes de court.
Tous les amateurs de tennis savent que le système Hawk-Eye est capable de détecter les lignes (et la balle) avec une très grande précision en utilisant au moins six caméras à haute vitesse sous différents angles du court.
Nous souhaitons toutefois effectuer cette tâche avec les flux vidéo standard d'une caméra fixe et être en mesure de faire des prédictions quasiment en temps réel.
Ce n'est pas la première fois que quelqu'un essaie de détecter un terrain de sport. Avant de décider de notre approche, nous avons examiné les travaux connexes suivants.
Auparavant, la tâche était principalement abordée avec une approche d'IA symbolique suivant un modèle similaire pour détecter les limites d'un court de tennis. Dans un premier temps, une technique est utilisée pour extraire les lignes de l'image. Les transformations de lignes de Hough conviennent parfaitement à cet objectif. Une explication détaillée des transformations de Hough et de leur utilisation dans OpenCV est disponible ici. L'étape suivante consiste à déterminer lesquelles de ces lignes sont les lignes de la cour extérieure. En prenant les intersections de 4 des lignes trouvées, vous pouvez déterminer la matrice de transformation (également appelée homographie) qui projette un court de tennis de référence sur les 4 intersections de lignes dans le cadre. À l'aide de cette matrice, vous pouvez projeter le court de référence sur le cadre, puis compter les chevauchements entre les pixels de la ligne dans le cadre et les lignes projetées du court de référence. En répétant ce processus pour toutes les intersections de lignes trouvées, nous pouvons trouver le meilleur chevauchement qui, théoriquement, devrait être les lignes extérieures du court.
Il est également possible de combiner un CNN léger avec une couche de Hough, qui est décrite en détail dans le présent document. Un travail similaire peut être trouvé dans LSDNet où un détecteur de segments de ligne classique est combiné avec un CNN léger.
Dans d'autres sports, les caméras sont souvent mobiles et ne montrent qu'une partie du terrain. La définition d'une grille de points clés sur le terrain a donné de bons résultats pour ce cas d'utilisation particulier. Cet article détaille cette approche.
Voyons tout d'abord dans quelle mesure l'approche symbolique permet d'atteindre les objectifs de détection des lignes en temps quasi réel sur différents terrains. Ensuite, nous examinerons si l'apprentissage par transfert sur un modèle formé pour la classification peut apprendre à prédire les points clés aux intersections des lignes de court. Pour conclure, nous verrons si les performances peuvent être encore améliorées en combinant les deux approches.
Avant de nous plonger dans l'apprentissage par transfert, nous allons voir jusqu'où nous pouvons aller avec une approche symbolique de l'IA.
Comme décrit ci-dessus, les étapes de haut niveau sont les suivantes :
L'étape de prétraitement est très importante car elle détermine la qualité de l'extraction des lignes par la transformation de Hough.
À partir d'une bonne image prétraitée, les résultats sont très précis :
Bien qu'elle donne de bons résultats pour certaines juridictions, il est difficile de généraliser cette approche à tous les types de juridictions. Un autre inconvénient est que le processus itératif de détermination de l'homographie, de création de la perspective de distorsion et de calcul des succès et des échecs est lent et gourmand en ressources.
L'idée de base est de prendre un système de vision par ordinateur relativement simple pour la classification et d'y ajouter une tête personnalisée pour déterminer 16 points clés aux intersections des lignes du court de tennis.
Nous commençons avec un backbone ResNet50v2 (application Keras) et expérimentons avec une tête CNN complète et une tête Fully Connected Network. Les paramètres suivants donnent les meilleurs résultats avec un réseau ResNet50v2 :
Les prévisions (points bleus) sont encore assez éloignées, mais nous avons appris que
Pour augmenter notre ensemble de données, nous utilisons l'outil d'annotation OpenCV qui dispose d'une excellente interface pour étiqueter les données et les exporter vers - entre autres - le format de points clés COCO. En prime, il prend également en charge l'interpolation, de sorte que vous n'avez qu'à étiqueter les images clés.
En poursuivant l'apprentissage et le réglage avec différents backends, tout en gardant à l'esprit une vitesse d'inférence proche du temps réel, les résultats se sont considérablement améliorés.
Nous constatons toujours que les prédictions (points bleus) sont un peu éloignées de la cible. Afin de rechercher des schémas dans le modèle appris, nous projetons la cour de référence (lignes noires) avec l'homographie des points clés prédits extérieurs.
Cela montre que le modèle formé trouve les relations entre les intersections des lignes avec une très grande précision (les points bleus prédits sont exactement sur les intersections des lignes noires). Ne mettons-nous pas trop l'accent sur la relation entre les points dans notre modèle ?
Nous essayons donc de prédire uniquement les 4 points clés extérieurs du terrain. Pour faire court, les modèles formés sur les 4 points clés ont produit des résultats très similaires à ceux des 16 points clés.
Au cours de la formation et des expériences, quelques autres dorsales ont également été essayées et MobileNetv3Small a obtenu de bien meilleurs résultats que les autres dorsales.
Si l'on revient à la sortie des 16 points clés, on peut s'attendre à des améliorations similaires avec la nouvelle épine dorsale, MobileNetv3Small, et l'erreur moyenne de pixel a en effet diminué de plus de 50 % par rapport aux meilleurs résultats obtenus précédemment avec EfficientNetV2Small.
C'est un assez bon résultat, mais nous voulons l'améliorer et nous avons décidé de post-traiter le modèle en utilisant une variante de l'approche symbolique de la section précédente.
L'idée est de prendre une zone rectangulaire autour de chaque point clé prédit de l'image originale et de déterminer dans chaque rectangle les lignes et leur point d'intersection.
Si nous recadrons une zone standard autour des points clés prédits (croix rouges), le point de départ zoomé pour le post-traitement ressemble à ceci :
Vous pouvez voir que la détermination de l'intersection des lignes peut être plus compliquée à travers les joueurs (15), les lignes peu claires (5). Il sera également difficile de travailler avec les points clés du filet (8, 9).
L'algorithme de détection des intersections de lignes est décrit dans la section sur l'IA symbolique :
Il en résulte les améliorations suivantes :
Ou dans l'image complète :
Si l'on examine l'image avant et après le post-traitement, la performance est nettement meilleure. Cependant, le post-traitement peut parfois s'avérer insuffisant, car les lignes ne sont pas extraites avec précision. La comparaison de l'erreur absolue moyenne montre maintenant des résultats très similaires avec ou sans post-traitement. Ce résultat peut probablement être amélioré par une étape de vérification supplémentaire qui ne prend en compte le post-traitement que lorsque l'intersection calculée par post-traitement se trouve sur un pixel blanc ou correspond à un petit filtre spécifique pour le point clé (par exemple un filtre en forme de L pour la ligne de base inférieure gauche). Cette dernière étape de vérification n'a pas encore été testée.
Les performances sont bonnes, mais qu'en est-il de la vitesse d'inférence ?
Sur un processeur Intel i9 à 8 cœurs et 2,3 GHz avec un GPU NVIDIA T2000 de 4 Go, le modèle d'IA a prédit environ 100 images/seconde. En incluant le post-traitement, la vitesse d'inférence est tombée à 50 images/seconde. Ces chiffres sont donnés à titre indicatif, sans aucun effort d'optimisation de la vitesse.
Ces résultats sont prometteurs en termes de performances et de vitesse d'inférence.
Nous pouvons conclure que notre modèle ML est plus robuste et plus rapide que notre modèle symbolique.
Pour le modèle ML, il est vital de trouver un backbone avec un bon équilibre entre performance et vitesse d'inférence, dans notre cas MobileNetv3Small. Pour toutes les épines dorsales testées, les variantes CNN complètes étaient les meilleures en tant que tête et MAE en tant que fonction de perte produisant de meilleures performances. L'augmentation des données a été cruciale, mais il faut s'assurer que la majorité des transformations ont encore un sens pour un court de tennis. Le post-traitement peut encore augmenter les performances, comme on l'a vu dans certains échantillons, mais il faut s'assurer qu'il se généralise bien.
Avec un peu plus d'investissement dans le post-traitement, en ajoutant un lissage temporel (il n'y aura que de légers changements dans le mouvement de la caméra entre les images) et en donnant un peu d'amour à l'optimisation de la vitesse d'inférence, cette approche est un bon candidat pour faire de la détection de ligne de court presque en temps réel... Une première étape dans l'automatisation des statistiques d'un match de tennis.
Cet article a été écrit par Bart Timmermans dans le cadre de son stage chez ML6 et supervisé par Jules Talloen.
>> Lire l'article de blog sur la plateforme Medium .