Comment nous avons remplacé le scoutisme sportif par un réseau de neurones


Oui, en effet, nous avons pu remplacer le réseau de neurones scouts sportifs et avons commencé à collecter automatiquement des données sur le jeu. Et maintenant, nous en savons plus sur l'événement sportif que le public présent, et parfois le juge.

Nous ( Constanta ) sommes spécialisés dans le développement de produits informatiques pour les paris: applications mobiles, sites, et récemment nous développons des projets dans le domaine de la vision par ordinateur et du machine learning. L'un d'eux sera discuté.

Alors que les athlètes se battent pour de grandes et petites victoires, le bookmaker a besoin de connaître le déroulement des événements en temps réel afin de recalculer les coefficients, selon lesquels, en fait, les paris sont acceptés. Pour ce faire, les scouts sportifs directement sur les terrains de jeux collectent et transmettent une grande quantité de données à l'aide d'une application spéciale sur un smartphone. Un éclaireur est la même personne que nous tous, donc les risques associés au facteur humain surviennent naturellement. Notre objectif est de les minimiser, en augmentant simultanément le volume et l'efficacité de la collecte et de la transmission des données, plus - de réduire le coût de tout ce travail. Une petite balle survole une table de tennis ou une balle sur un terrain de football - le côté technique de la mise en œuvre d'un système de vision par ordinateur pour la collecte de données n'a pas de différences conceptuelles. Nous avons décidé qu'il était plus intéressant de construire immédiatement un système pour un jeu avec un grand nombre de balles en interaction, comme au billard.


J'ai besoin des coordonnées et des vitesses de toutes tes boules et de ton signal.

Notez que dans l'analyse de nombreux jeux de sport pour déterminer correctement le résultat, vous devez suivre avec précision la chaîne d'événements. D'où les exigences élevées de fiabilité des composants responsables de la détermination de ces événements. Expliquons-nous dans un exemple simple: si en moyenne, les joueurs roulent toutes les balles dans les poches pendant 20 coups, alors avec la fiabilité de déterminer le résultat d'un coup de 99%, la probabilité de déterminer le vainqueur du tirage n'est que d'environ 82% (0,99 20 ≈0,817). Le match dure jusqu'à cinq victoires de l'un des joueurs, c'est-à-dire que 5 à 9 matchs nuls ont lieu, en moyenne 7. Ainsi, en moyenne, avec une telle fiabilité dans la détermination des événements, le résultat correct du match est obtenu avec une probabilité d'environ 24% seulement (0,817 7 ≈0, 24). Mais au départ, la probabilité d'erreur n'était que de 1%!

Neuf piscine


Parmi toute la variété des jeux de billard, pensez à Pool-9. Le gagnant est le joueur qui a calé le ballon avec le numéro 9 dans la poche. Initialement, le «neuf» est situé au centre d'un losange de boules colorées. La balle de visée sur laquelle la bille blanche doit frapper est la balle avec le numéro le plus bas sur la table. Si un joueur n'a pas pu marquer une balle ou une faute d'une seule couleur, par exemple, s'il n'a pas frappé la balle de visée ou marqué une balle de repère dans le trou, le mouvement va à l'adversaire. Afin de marquer correctement un point, il est nécessaire de déterminer le coup de balle dans les poches et tous les événements entraînant un changement de joueur.

Vision par ordinateur


Tout d'abord, parlons de la façon dont un réseau de neurones reçoit des données. Flux d'informations d'entrée - diffusion vidéo à partir d'une caméra située au-dessus de la table et prise de vue à une fréquence de 60 images par seconde.


Un exemple d'une trame d'un flux vidéo traité par le système.

Une segmentation clé du traitement d'un flux vidéo par un réseau de neurones est la segmentation sémantique. Il s'agit d'une tâche classique de la vision par ordinateur, consistant dans le fait que l'algorithme doit attribuer des pixels d'image à une ou plusieurs classes. Autrement dit, sur les images vidéo, vous devez déterminer ce qui est quoi. Le réseau neuronal produit des «masques», mettant en évidence des pixels liés, par exemple, à une balle ou à un joueur. Après avoir traversé une série d'algorithmes de post-traitement, le «masque» des boules se transforme en coordonnées. Selon eux, après lissage par un filtre, pour chaque balle la vitesse et la trajectoire de mouvement sont déterminées. À ce stade, les événements de bas niveau ou intermédiaires, tels que les collisions de balles entre elles et avec les côtés de la table, sont suivis. Les données reçues sont envoyées au module de traitement des règles, qui implémente toute la logique du jeu. Au final, il le donne au consommateur final, c'est-à-dire bookmaker, événements de haut niveau: enfoncer les balles dans les poches, les fautes, les transitions de coups et, en fait, le résultat du match.


Le schéma général du système.

Pour résoudre le problème, tout d'abord, il est nécessaire de trouver l'emplacement de la table sur le cadre et toutes les boules dessus. Un autre participant important à l'action est la queue, c'est lui qui détermine la direction du coup et, par conséquent, la trajectoire de la bille. Les joueurs se penchent sur la table, la couvrant partiellement de la caméra. Du point de vue de l'analyse du jeu, ce sont des «objets étrangers», comme un support pour balles, ainsi que des téléphones portables, des gants, des serviettes et d'autres choses qui, par la volonté des joueurs, apparaissent sur les côtés de la table. Ainsi, plusieurs classes cibles sont obtenues pour la segmentation sémantique des images: une table, ses côtés, des poches, un repère, des objets étrangers et, bien sûr, des balles. De plus, chaque balle est représentée par une classe distincte, selon sa couleur.

Pour la segmentation sémantique, un réseau neuronal entièrement convolutionnel avec une architecture LinkNet-34 est utilisé . Il fonctionne relativement rapidement et a fait ses preuves dans diverses tâches de «combat» des compétitions de vision par ordinateur. Pour déterminer l'ensemble de classes ci-dessus, un seul réseau neuronal est utilisé, ce qui résout tous les problèmes de vision par ordinateur.


Architecture de réseau LinkNet-34 (voir arXiv ).

Les images sont entrées et une pile de «masques» de toutes les classes requises est obtenue en sortie. Les «masques de prédiction» sont des tableaux bidimensionnels de nombres avec des valeurs de 0 à 1. La valeur de chaque élément du «masque» correspond à la confiance du réseau que le pixel correspondant appartient à la classe de ce «masque». Pour la classification finale des pixels, les prédictions obtenues sont binarisées par un filtre de seuil.

Vous pouvez former un réseau de neurones pour classer les pixels sur un grand nombre d'exemples avec des «masques» correspondants. Pour ce faire, nous avons collecté un grand nombre de vidéos, divisées en images, et le service de balisage a préparé manuellement des «masques» pour elles. Dans les cas difficiles, des ensembles de données supplémentaires étaient nécessaires. Par exemple, lorsqu'une balle «plonge» dans une poche ou se tient près d'elle près du côté de la table, une ombre tombe dessus, à cause de laquelle les couleurs semblent différentes. Ou, lorsqu'un joueur casse un losange, les balles volent rapidement le long de chemins complexes, c'est pourquoi leurs images sont floues. Si le réseau neuronal a «vu» quelques exemples de ce type, la classification correcte sera difficile.


Un exemple d'image et son balisage correspondant. La tâche du réseau neuronal est d'obtenir de tels «masques» à partir de l'image d'entrée.

Rapide, plus rapide, encore plus rapide ...


L'utilisateur final de données a besoin d'informations en temps réel (ou encore mieux - plus rapidement qu'en temps réel). Pour accélérer le fonctionnement du réseau neuronal, plusieurs techniques ont été appliquées, telles que la combinaison de la normalisation des paquets avec la convolution 2D (BatchNorm Fusion), qui vous permet d'obtenir un réseau équivalent sans plusieurs couches. La préparation et le chargement d'une nouvelle image en parallèle avec le traitement de la précédente sur la carte vidéo donne également un bon résultat. De plus, une partie des opérations préparatoires avec le personnel et le post-traitement des «masques» sont effectués sur gpu. Même l'idée simple a permis de réduire le temps de traitement total pour chaque image - de transférer le résultat du réseau de la carte vidéo vers la RAM après binarisation sous la forme uint8 au lieu de celui reçu du réseau float32.

En conséquence, la segmentation sémantique d'une trame avec tous les pré et post-traitement requis ne prend en moyenne que 17 ms! Et pour le fonctionnement du système, une seule carte vidéo de jeu suffit.

Y a-t-il eu un affrontement?


Nous déterminons les coordonnées des balles à l'aide de «masques», mais nous devons d'abord exclure ce qui ne ressemble qu'à une balle, par exemple les rayures rondes sur les t-shirts des joueurs. Ici l'heuristique entre en jeu: la forme et la taille des boules, leur position par rapport au passé, est bien connue. De plus, si tout est en ordre avec le «masque», son centroïde est pris pour traitement.


Joueur de billard dans les terribles rêves des développeurs.

C'est étrange à première vue, mais le fait est que le résultat de la détermination de la position des balles peut différer entre les images même avec des balles immobiles. L'explication est simple - le «bruit» d'une vraie vidéo, les artefacts de compression de flux vidéo, qui, associés à une erreur dans la détermination de la position des images floues des billes en mouvement, entraînent la nécessité de lisser les résultats.

Sur la base des coordonnées des billes reçues du réseau et déterminées sur les trames précédentes, la vitesse est estimée comme une dérivée numérique. Le nombre de points pris en compte et l'intervalle entre eux sont sélectionnés de manière adaptative pendant le fonctionnement du système, en fonction de la disponibilité des données et des événements tels que les collisions. Ensuite, les informations sur la position et la vitesse des billes sont envoyées au filtre à point sigma de Kalman . Il vous permet de lisser les données bruyantes, ce qui est particulièrement important pour déterminer la vitesse et sa direction. De plus, le résultat du modèle dynamique à partir de celui-ci peut être utilisé pour prédire le futur proche.


Démonstration de lissage de la détermination de la position et de la vitesse des balles par le filtre de Kalman.
Gauche: Brut: résultat de la mesure directe, les vecteurs des billes correspondent à la vitesse, les nombres indiquent une estimation de la vitesse; UKF: résultat du filtre.
À droite: un exemple de lissage de la direction de la vitesse d'une balle avec un filtre de Kalman. La couleur bleue montre les résultats de la mesure, le rouge - le résultat du filtrage. Des sauts brusques de direction correspondent à des collisions de balles.

Les données sur l'état et la trajectoire des billes permettent de déterminer l'occurrence de ce que l'on appelle l'événement de bas niveau, même lorsqu'il est tombé «entre les images».



Les balles se déplacent si rapidement pendant un coup qu'il n'y a souvent pas d'image qui montre directement un événement, par exemple une collision de balles. Par conséquent, pour tous les types d'interactions (collision de balles les unes avec les autres, avec la planche ou tombant dans le trou), une liste d'événements possibles est d'abord construite. Il y a deux critères. Tout d'abord, l'arrangement mutuel extrêmement critique des billes. Lorsque vous vous déplacez lentement, il y a une grande erreur relative dans la détermination de la vitesse et de la trajectoire, par conséquent, la distance entre les objets en interaction est importante. Deuxièmement, à une vitesse de déplacement élevée des billes, les événements possibles sont déterminés par l'intersection des trajectoires obtenues à partir du modèle dynamique. Cette approche donne un très bon bonus: la possibilité de prévoir un peu à l'avance le coup probable du ballon dans la poche.


Images séquentielles du flux vidéo lors de la rupture initiale d'un losange de balles. Sans modèle décrivant les trajectoires des boules, il est difficile de déterminer à quelle boule la bille de choc a été confrontée.

Un changement de direction et d'amplitude du vecteur vitesse nous permet de juger qu'un événement, à savoir une collision, s'est produit. Dans le cas où la balle roulerait dans une poche, elle "disparaît". Mais il y a un point important: il est nécessaire d'utiliser des données sur sa trajectoire et de vérifier que le ballon a été précisément martelé, et n'a pas disparu du champ de vision de la caméra du fait que la main d'un joueur ou un autre objet était accidentellement au-dessus.

Et si quelque chose tournait mal? Disons que certains événements ont chuté en raison d'une perte de trame ou de la silhouette d'un joueur suspendue au-dessus de la table. De telles omissions sont essentielles à la logique du jeu. Enregistre un système de correction automatique heuristique qui augmente la stabilité du système. Par exemple, si un coup sur la bille blanche est détecté et que la bille cible tombe dans le trou, mais qu'aucune collision de bille blanche n'est détectée et que les autres balles restent immobiles, il est logique d'ajouter une collision de bille blanche avec la bille cible.

Jouons-nous ou non?


Les balles roulent, entrent en collision, tombent dans les poches ... Mais le jeu se déroule-t-il vraiment à ce moment? Ou, au contraire, tout sur la table semble inébranlable ... Alors le jeu s'est arrêté? La bonne réponse à ces questions est probablement aussi importante que la définition des collisions. Lorsqu'un joueur se prépare à un coup, y réfléchit, vise, il n'y a pas de mouvement. Mais cela arrive, et vice versa, dans les moments non-jeu, la vie sur la table peut se dérouler de manière très dynamique: les boules obstruées sont déplacées d'une poche à l'autre, la boule blanche peut être roulée autour de la table lorsqu'elle est installée après une faute, et cela se fait en incluant la pointe de la queue (très similaire à un coup! ) Si la fin du coup en cours peut être facilement déterminée - après un coup correct, toutes les balles cessent de bouger, alors au début, tout n'est pas si clair. Bien sûr, vous pouvez entraîner le réseau neuronal à détecter les événements dans la vidéo, y compris les frappes de repère réelles sur la boule de repère. Et vous pouvez faire un ensemble d'heuristiques qui analysent la position et l'angle de la queue, la trajectoire et la vitesse de ses extrémités et la trajectoire de la boule de queue après l'impact présumé. Nous sommes allés dans la deuxième voie, et le résultat a été un algorithme très rapide et fiable qui détermine l'état actuel du jeu.


Le système essaie de comprendre si le jeu a commencé ou non.

Et qui a finalement gagné?


Toutes les données sur les événements de bas niveau (un coup sur la bille blanche, la position et la collision des balles, tombant dans les poches) sont envoyées au module, qui détermine à partir de leur séquence qu'une faute s'est produite ou que la balle est tombée correctement dans le trou, le mouvement est passé ou le jeu se termine. Le module impartial marque et annonce le gagnant. Sa particularité est qu'il fonctionne sans aucune correction automatique ni heuristique, en appliquant simplement formellement les règles du jeu. Le bloc de règles peut être complètement remplacé, ce qui vous permet de l'adapter aux règles locales du tournoi sans intervention significative dans le système ou de l'utiliser pour traiter d'autres types de jeux de billard.
Comme les véhicules sans pilote ne se sont toujours pas complètement débarrassés de l'ingénieur de test dans la cabine, qui surveille la sécurité, notre module de règles permet un contrôle manuel externe via l'interface Web. Une intervention peut être nécessaire en cas de défaillance du système automatique. De plus, vous devez saisir manuellement des données qui ne sont pas dans le flux vidéo: à propos d'un joueur novice, des hits spéciaux qui sont annoncés pendant le jeu par la voix, etc. Une personne peut potentiellement surveiller plusieurs jeux à la fois.

Comment ça marche


Après un lancement et une configuration réussis du système, nous avons non seulement commencé à recevoir les données requises, mais aussi découvert beaucoup de choses intéressantes. Donc, parfois, le juge, étant à la table, ne peut pas déterminer avec certitude si la bille blanche a frappé la balle ciblée ou une autre se tenant à proximité. Alors que la vision objective de notre système nous permet de voir comment la situation s'est réellement développée. De plus, le système recueille de nombreuses informations utiles à une analyse plus approfondie, qu'une personne n'est tout simplement pas en mesure de déterminer et de transmettre en temps réel: la position et la vitesse des balles, les paramètres des coups de repère par chacun des joueurs.


Actuellement, le système fonctionne et est utilisé par le bookmaker. À l'avenir, il est prévu d'améliorer le système, notamment en ajoutant l'identification automatique des joueurs, la détermination automatique des résultats de la première frappe.


Visualisation technique du fonctionnement du système. La balle à côté de la "Cue ball" indique la première balle à laquelle la bille a été confrontée; «État» - l'état du système: il peut être «attendre» - jusqu'à ce que le joueur ait touché, et «jouer» - pendant que les balles sont en mouvement; «Joueur» - joueur actuel; les chiffres autour des billes indiquent l'estimation de vitesse en cm / s.

Source: https://habr.com/ru/post/fr430030/


All Articles