Ah, sportsball . Pouvez-vous oublier la première fois que vous attrapez cette passe, que vous volez sur le court et que vous faites couler cette rondelle à travers le filet alors que vos fans hurlent avec adoration depuis les gradins, TOUCHDOWN!
Non? Vous ne sonnez pas une cloche? Moi non plus. C'est ce que vous obtenez lorsque vous passez vos années de lycée à apprendre le calcul et le glaçage sur des gâteaux aux biscuits au lieu de faire du sport.
Il est temps tu ne reviens jamais. À moins, bien sûr, que vous ne trouviez un moyen d’utiliser les mathématiques du lycée pour devenir un meilleur athlète.
C'est ce que nous allons examiner aujourd'hui. Dans cet article, je vais vous montrer comment utiliser l'apprentissage automatique pour analyser vos performances dans le sport de votre choix (à titre d'exemple, j'utiliserai mon service de tennis, mais vous pouvez facilement adopter la technique pour d'autres jeux). D'ailleurs, ce projet a été inspiré par mon récent entretien avec Zack Akil, qui a utilisé les mêmes techniques pour analyser les tirs au but dans le football.
M l'apprentissage achine joue un rôle important dans le sport: les entreprises l'utilisent pour identifier les talents uniques des joueurs, détecter les blessures plus tôt et négocier des échanges optimaux. De plus, presque tous les sports professionnels (NFL, NHL, MLB, NBA, football, golf, cricket, pour n'en nommer que quelques-uns) utilisent la technologie ML pour le suivi. La NBA, par exemple, a déployé un système sophistiqué basé sur la vision sur les courts, suivant les mouvements des joueurs, lisant les chiffres sur leurs maillots, analysant la vitesse à laquelle ils passent le ballon et déterminant avec quelle précision ils tirent sous pression.
Mais en tant que débutant, j'aimerais utiliser cette même technologie simplement pour me dire ce que je fais de mal et où je fais des erreurs. Idéalement, je créerais une application que je configurerais sur mon téléphone et que je monterais sur un trépied (par exemple) pendant que je suis sur le court de tennis qui analyse la vidéo de moi en train de servir et me donne des conseils utiles (par exemple, «redressez votre bras, " "pliez vos genoux"). Dans cet article, je vais vous montrer les techniques de base qui rendraient possible une application comme celle-là.
Vous voulez passer directement au code? Consultez le repo sur Github.
Utilisation de l'apprentissage automatique pour analyser mon service de tennis
Il y a quelques semaines, je suis allé sur un court de tennis, installé un trépied, et a capturé des images de moi servant une balle de tennis. Je l'ai envoyé à mon ami JT, un entraîneur de tennis, et je lui ai demandé ce que je faisais de mal. Il a renvoyé ceci:
Vous pouvez voir que c'était gentil
Mais ce que JT avait fait était très utile – il a analysé des parties clés de mon service qui différaient de celles des athlètes professionnels. Ne serait-il pas intéressant qu'un modèle de machine learning puisse faire la même chose? Comparez vos performances avec des professionnels et dites-vous ce que vous faites différemment?
Avec les commentaires de JT en main, j'ai décidé de me concentrer sur trois aspects du service:
- Mes genoux étaient-ils pliés pendant que je servais?
- mon bras tendu quand je frappe la balle?
- À quelle vitesse la balle a-t-elle réellement voyagé après que je l'ai frappée? (Celui-ci était juste pour mon intérêt personnel)
Analyse de la posture avec détection de pose
Pour calculer l'angle de mes genoux et de mes bras, j'ai décidé d'utiliser la détection de pose – une technique d'apprentissage automatique qui analyse des photos ou des vidéos d'humains et essaie de localiser les parties de leur corps. Il existe de nombreux outils que vous pouvez utiliser pour faire la détection de pose (comme TensorFlow.js ), mais pour ce projet, je voulais essayer la nouvelle fonctionnalité de détection de personne (beta!) De Google Cloud API Video Intelligence . (Vous pouvez reconnaître cette API dans mes Archives vidéo alimentées par l'IA où je l'ai utilisée pour analyser les objets, le texte et la parole dans mes vidéos familiales.) La fonction Détection de personne reconnaît un tas de parties du corps, traits du visage et vêtements. Extrait des documents :
Pour commencer, j'ai coupé la vidéo de mes services de tennis aux sections où je servais. Comme je n'ai capturé que 17 services à la caméra, cela m'a pris environ une minute. Ensuite, j'ai téléchargé la vidéo sur Google Cloud Storage et l'ai exécutée via l'API Video Intelligence. Tout ce code est documenté de manière pratique dans un notebook Colab que vous pouvez exécuter vous-même sur votre propre vidéo (vous aurez juste besoin d'un compte Google Cloud). Le cahier vous montre même comment configurer l'authentification et créer des seaux et tout ce jazz. La pose intéressante d'analyse de bits est celle-ci:
Pour appeler l'API, vous transmettez l'emplacement dans Cloud Storage où votre vidéo est stockée comme ainsi qu'une destination de stockage cloud où l'API Video Intelligence peut écrire les résultats.
Ici, j'appelle la version asynchrone de l'API Video Intelligence. Il analyse la vidéo sur le backend de Google, dans le cloud, même après la fermeture de mon ordinateur portable. C'est pratique pour les longues vidéos, mais il existe aussi une version synchrone et en streaming de cette API!
Lorsque l'API Video Intelligence a fini d'analyser ma vidéo, j'ai visualisé les résultats en utilisant cet outil soigné construit par @wbobeirne . Il crache des vidéos de visualisation soignées comme celle-ci:
La détection de pose constitue une excellente étape de prétraitement pour la formation de modèles d'apprentissage automatique. Par exemple, je pourrais utiliser la sortie de l'API (la position de mes articulations au fil du temps) comme fonctionnalités d'entrée dans un deuxième modèle d'apprentissage automatique qui tente de prédire (par exemple) si je sers ou non, ou si oui ou non mon servir ira sur le net. Mais pour l'instant, je veux faire quelque chose de beaucoup plus simple: analyser mon service avec les mathématiques du lycée!
Pour commencer, j'ai tracé la position y de mes poignets gauche et droit au fil du temps:
It peut sembler désordonné, mais ces données montrent en fait assez clairement la durée de vie d'un service. La ligne bleue montre la position de mon poignet gauche, qui culmine lorsque je lance la balle de tennis quelques secondes avant de la frapper avec ma raquette (la pointe du poignet droit ou ligne orange).
En utilisant ces données, je peut dire assez précisément à quel moment je lance la balle et la frappe. Je voudrais aligner cela avec l’angle que fait mon coude lorsque je frappe la balle. Pour ce faire, je vais devoir convertir la sortie de l'API Video Intelligence (emplacements des pixels bruts) en angles. Comment tu fais ça? La loi des cosinus, duh ! (Je plaisante, j'ai définitivement oublié ceci et j'ai dû le chercher. Voici une excellente explication et du code Python.)
La loi des cosinus est la clé de la conversion des points dans l'espace aux angles. Dans le code, cela ressemble à quelque chose comme:
Consultez le cahier pour voir tous les détails. En utilisant ces formules, j'ai tracé l'angle de mon coude au fil du temps:
En alignant la hauteur de mon poignet et l'angle de mon coude, j'ai pu déterminer que l'angle était d'environ 120 degrés (et non tout droit!). Si JT ne m'avait pas dit quoi chercher, il aurait été bien pour une application de comprendre que l'angle de mon bras était différent de celui des professionnels et de me le faire savoir.
J'ai utilisé la même formule pour calculer les angles de mes genoux et les épaules. Encore une fois, regardez plus de détails dans le cahier.
Calcul de la vitesse de mon service
La détection de pose m'a permis de calculer les angles de mon corps, mais je voulais aussi calculer la vitesse de la balle après l'avoir frappée avec mon raquette. Pour ce faire, je devais être capable de suivre la petite et rapide balle de tennis au fil du temps.
J'ai géré cela comme Zack l'a fait dans son projet Football Pier : j'ai formé un modèle AutoML Vision personnalisé.
Si vous n'êtes pas familier avec AutoML Vision c'est un moyen sans code de créer des modèles de vision par ordinateur à l'aide de réseaux neuronaux profonds. La meilleure partie est que vous n'avez rien à connaître sur le ML pour l'utiliser! Le pire, c'est le coût. C'est cher (vous en saurez plus dans une minute).
AutoML Vision vous permet de télécharger vos propres données étiquetées (c'est-à-dire avec des balles de tennis étiquetées) et entraîne un modèle pour vous.
Entraînement d'un modèle de détection d'objets avec AutoML vision [19659019] Pour commencer, j'ai pris un clip de trente secondes de moi en train de servir et je l'ai divisé en images individuelles que je pourrais utiliser comme données d'entraînement pour un modèle de vision:
[19659008] Vous pouvez exécuter cette commande depuis le notebook que j'ai fourni, ou depuis la ligne de commande si ffmpeg est installé. Il prend un mp4 et crée un tas d'instantanés (ici à fps = 20, soit 20 images par seconde) en jpgs. L'indicateur -ss
contrôle jusqu'où dans la vidéo les instantanés doivent commencer (c'est-à-dire commencer à «rechercher» à 1 seconde) et l'indicateur -t
contrôle le nombre de secondes à inclure (30 dans ce cas).
Une fois que vous avez créé tous vos instantanés, vous pouvez les télécharger sur le stockage Google Cloud avec la commande:
Ensuite, accédez à la console Google Cloud et sélectionnez Vision dans le menu de gauche:
Récapitulatif rapide: qu'est-ce qu'un classificateur Machine Learning? C’est un type de modèle qui apprend comment étiqueter des choses à partir d’exemples. Par conséquent, pour entraîner notre propre modèle AutoML Vision, nous devrons fournir des données d'apprentissage étiquetées dont le modèle pourra tirer des enseignements.
Une fois vos données téléchargées, vous devriez les voir dans l'onglet "IMAGES" d'AutoML Vision: [19659008]
Ici, vous pouvez commencer à appliquer des étiquettes. Cliquez sur une image. Dans la vue d'édition (ci-dessous), vous pourrez cliquer et faire glisser un petit cadre de sélection:
Félicitations, vous venez de commencer une longue et enrichissante carrière en tant que data étiqueteuse. Prochain arrêt, MIT!
Pour mon modèle, j'ai étiqueté à la main environ 300 images, ce qui m'a pris environ 30 minutes. Une fois que vous avez terminé d'étiqueter les données, il suffit d'un clic pour entraîner un modèle avec AutoML – cliquez simplement sur le bouton «Former un nouveau modèle» et attendez.
Une fois votre modèle terminé, vous être en mesure d'évaluer sa qualité dans l'onglet «Évaluer» ci-dessous.
Comme vous pouvez le voir, mon modèle était sacrément précis, avec une précision d'environ 96% et un rappel – hot dog!
Ceci était plus que suffisant pour pouvoir suivre la position de la balle dans mes images, et donc calculer sa vitesse:
Une fois que vous avez formé votre modèle, vous pouvez utiliser le code du notebook Jupyter pour faire une petite vidéo mignonne comme celle que j'ai tracée ci-dessus.
Vous pouvez ensuite l'utiliser pour tracer la position de la balle dans le temps, pour calculer la vitesse (voir le cahier pour plus de détails):
Voilà, quelques techniques que vous pouvez utiliser pour créer votre propre application d'entraînement de machine learning sportif!
Note sur les coûts
Clause de non-responsabilité: Je travaille pour Google, et J'utilise Google Cloud gratuitement. J'essaie de recommander des outils gratuits ici chaque fois que c'est possible, mais je me tourne vers GCP par instinct, et parfois je ne remarque pas le coût.
Whelp, en ce qui concerne AutoML Vision, s'est avéré être une mauvaise idée. Voici ce que ce projet m'a coûté:
Le tout était d'environ 450 dollars – _ouch_. Mais avant que vous ne soyez complètement désactivé par le $$, décomposons les choses:
J'ai formé deux modèles AutoML et le coût de la formation pour les deux était de 91,11 $. Bien sûr, c'est cher, mais la qualité était assez élevée et peut-être pour certains cas d'utilisation commerciale, cela a du sens.
Le coût réel provient de ce premier élément de campagne – AutoML Image Object Detection Online Prediction. Qu'est-ce que c'est? Il s'agit du coût que Google facture pour l'hébergement de votre modèle pour vous dans le cloud, afin que vous puissiez l'appeler avec une API REST standard. Bizarrement, vous êtes continuellement facturé pour le coût d'hébergement de ce modèle, même si vous ne faites pas de prédictions, ce qui accélère vraiment les coûts.
La bonne nouvelle est qu'AutoML Vision fonctionne de trois manières:
- Vous pouvez configurer un modèle pour qu'il soit hébergé dans le cloud, où vous pouvez l'atteindre à un point de terminaison REST à tout moment (le plus cher).
- Vous ne pouvez l'utiliser qu'en mode batch (les prédictions sont exécutées de manière asynchrone fashion, pas pour les cas d'utilisation en temps réel), ce qui élimine l'essentiel de ce coût supplémentaire.
- Vous pouvez en fait entraîner votre modèle pour qu'il soit exportable, ce qui vous permet de le télécharger en tant que modèle TensorFlow et de l'utiliser hors ligne. Cela permet également de réduire considérablement les coûts, ou de renoncer complètement à AutoML et de le braver seul avec TensorFlow ou PyTorch. Bonne chance et faites-moi savoir ce que vous choisissez.
Publié le 22 juillet 2020 – 13:00 UTC
Source link