Publié par et
Il y a 9 mois · 13 minutes · Data

TensorFlow Dev Summit, comme si vous y étiez (2/2)

Le 15 février 2017 à Mountain View s’est tenu le tout premier TensorFlow Dev Summit. Au programme de cette conférence, la sortie de la version 1.0 de TensorFlow, mais aussi de nombreuses présentations sur les optimisations internes propres à TensorFlow, les différentes APIs ainsi que de nombreux cas d’usage.

Si vous avez raté cet évènement, pas de panique, les vidéos sont déjà en ligne ! Nous les avons visionnées pour vous et vous proposons dans cet article un résumé des principales informations à retenir de cette conférence qui a été suivie par le monde entier en Live Streaming.

Dans le premier article, nous sommes revenus sur les présentations techniques autour de TensorFlow et de la release de la version 1.0. Dans ce deuxième article, nous couvrirons les cas d’application de TensorFlow qui ont été présentés lors de cette conférence.

Mobile and Embedded TensorFlow (Pete Warden)

Pete Warden présente les solutions offertes par TensorFlow pour exécuter des modèles de Deep Learning sur mobiles (Android et iOS) et Raspberry Pi, et les expose comme un moyen exceptionnel d’offrir aux utilisateurs des expériences uniques que l’on ne pouvait pas se permettre auparavant.

Trois exemples sont disponibles pour Android:

  • TF Classify : Utilise le modèle pré-entraîné inception v3 pour labéliser en temps réel les images de la caméra du smartphone
  • TF Detect : Permet de faire de la détection de personnes en dessinant des boites autour de celles-ci
  • TF Stylize : Permet de faire du transfert de style en temps réel sur la caméra du smartphone

Quelques exemples (moins nombreux) existent aussi pour iOS et Raspberry Pi.

Pete revient ensuite sur l’une des principales contraintes liées à l’intégration de modèles TensorFlow dans ces appareils : la taille des modèles sérialisés. Le modèle le plus utilisé, inception v3, ne fait pas moins de 93 Mo ! Autant dire que c’est beaucoup trop volumineux pour une application mobile actuelle. Il existe cependant quelques astuces pour réduire la taille du modèle sérialisé :

  • Geler le graphe : Convertir le GraphDef et le checkpoint dans un seul et même fichier GraphDef avec les paramètres en tant que constantes
  • Graph Transform Tool : Permet notamment de supprimer les nœuds inutiles du graphe pour la prédiction (on ne garde que les noeuds de la phase d’inférence)
  • Quantifier les poids : C’est l’optimisation qui aide le plus à la réduction de la taille du modèle sérialisé (réduction de la taille jusqu’à 75 %). Les poids du réseau de neurones ont tous les valeurs différentes qu’il faut sauvegarder. L’idée est de quantifier ces poids afin d’en avoir moins à sauvegarder. Ces approximations ne dégradent a priori que très peu les performances globales du réseau de neurones.
  • Quantifier les calculs : Optimisations pour la RAM (passage des calculs en 8-bits)

De même, on peut ajuster quelques paramètres pour diminuer la taille de l’exécutable (qui rajoute 12 Mo sans optimisation, 2Mo après).

Tout cela permet aux développeurs de construire des applications sur mobile et Raspberry Pi optimisées. Pour chaque exemple fourni dans TensorFlow, il est possible de remplacer le modèle proposé par son propre modèle (notamment un modèle d’inception ré-entraîné via du Transfer Learning).

TensorFlow medical use-cases (Breet Kuprel)

Au-delà de la théorie, ce premier Dev Summit, c’est aussi la présentation de Use Cases réalisés avec TensorFlow. Pour cette première édition, c’est dans le domaine de la santé que les chercheurs de Google expérimentent leurs réseaux de neurones. On retrouve dans cette journée deux présentations dédiées aux sujets que sont :

  • La classification de cancers de la peau depuis des images de lésions cutanées (animé par Breet Kuprel)
  • La détection de diabète rétinopathique basée sur des fonds d’oeil (animé par Lily Peng).

Concernant ce premier projet, celui-ci est une collaboration entre le laboratoire intelligence artificiel et la faculté de médecine de Stanford. En dermatologie, on appelle lésion cutanée,  toute anomalie qui se produit sur la peau, d’une petite excoriation à une blessure profonde. Bien qu’une bonne partie de ces lésions ne mettent pas la vie d’un patient en danger, certaines d’entre elles peuvent être malignes et mener à des cancers de la peau. le rôle, entre autre, des dermatologues, est de dépister ces lésions et de les traiter si celles-ci présentent un danger pour le patient. Les équipes de Stanford se sont également penchées sur le problème et se proposent, au travers d’un réseau de neurones, de classifier automatiquement des photos de lésions cutanées selon leurs dangerosités. Sur l’image de gauche, des exemples de lésions cutanées bénignes et sur l’image de droite, des lésions cutanées malignes.

Pour entrainer et valider son modèle, l’équipe a pu s’appuyer sur une bibliothèque de 129 000 images de lésions cutanées portant sur plus de 2000 types de maladie de la peau. L’apprentissage a ensuite été basé sur une architecture Inception V3, un réseau de neurones convolutif profond. L’apprentissage s’est également basé sur le découpage de l’image en patterns, c’est à dire de régions de l’espace.

Au niveau de l’évaluation du modèle, l’équipe s’est concentrée sur l’évaluation de la sensibilité et de la spécificité des tumeurs malignes de leurs modèle. En effet, pour ce Use Case, il est préférable de prédire une tumeur bénigne en tant que maligne, qu’une lésion maligne en tant que bénigne. L’idée est donc de déplacer la frontière de classification (le threshold) entre les deux catégories tel que celui-ci ne rate aucune lésion bénigne lors de ses prédictions :

 

Les résultats ont ensuite été comparés avec ceux obtenus auprès de deux dermatologistes. Nous remarquons par exemple que pour le modèle TensorFlow, de nombreuses tumeurs bénignes sont prédites comme inflammatoires (catégorie 6) ou bien encore que les résultats du réseau de neurones sont moins disparses que les prédictions des dermatologistes. Cerise sur le gâteau, la portabilité de TensorFlow sur iOS et Android qui permet d’utiliser le modèle directement depuis son smartphone. Démonstration en directe de Breet Kuprel sur des photographies de lésions cutanées :

 

TensorFlow in Medicine – Retinal Imaging (Lily Peng)

Pour ce deuxième Use Case médical, Lily Peng (product manager chez Google Search) et TensorFlow s’attaquent à l’une des cinq grandes causes de cécité dans le monde: la rétinopathie diabétique. Cette maladie est une complication du diabète qui conduit à une détérioration des vaisseaux sanguins de la rétine. Dans le monde, 450 millions de personnes sont touchées ou peuvent être concernées par cette maladie. Côté bonnes nouvelles, la rétinopathie diabétique peut être traitée de façon préventive et curative à condition évidemment que la maladie soit diagnostiquée. Pour obtenir un diagnostic, les ophtalmologistes se basent sur la réalisation de fonds d’œil, éventuellement complétés par des angiographies par fluorescence (traceur fluorescent pour mieux voir les vaisseaux sanguins). La rétinopathie diabétique peut ensuite être catégorisée en 5 types, suivant la gravité de la maladie.

Et c’est ici que TensorFlow et le Deep Learning entrent en scène. Avec les capacité des réseaux de neurones, et plus particulièrement des modèles convolutifs, à faire de la reconnaissance d’image, les équipes de Google Search ont alors créé un algorithme capable de classifier les fonds d’œil parmi l’une des cinq catégories décrites précédemment. Côté données, l’équipe a pu s’appuyer sur un panel de 130 000 images réparties sur les cinq catégories ainsi que sur l’expertise de 54 ophtalmologistes afin de les labeliser. Pour remarque, chaque cliché a été évalué par 6 à 7 ophtalmologistes différents, ce qui donne un total de 880 000 diagnostics. En effet, la détection de la gravité de la maladie est ardue et la catégorisation peut souvent varier d’un médecin à l’autre. L’image de droite montre un exemple d’évaluation mené sur 19 fonds d’œil de patients (contenant plusieurs observations de chaque catégorie) par 33 ophtalmologistes différents. Chaque ligne du graphique représente un patient et chaque colonne représente les avis d’un ophtalmologiste sur les 19 fonds d’œil. Les catégories sont représentées par des couleurs, du bleu au rouge suivant la gravité de la maladie.

Une fois les données nettoyées et labellisées (assignation d’une des 5 catégories), un modèle est entrainé avec TensorFlow. Il s’agit d’un réseau de neurones convolutif, c’est à dire un modèle de Deep Learning adapté spécialement à la reconnaissance d’images. Celui-ci possède 26 couches et peut être schématisé de la façon suivante :

Au niveau des résultats, l’équipe a opté pour un F-Score comme métrique de validation. Ce score est la proportion de prédiction justes sur tout le jeu de données de tests. Le score de validation a été calculé sur 9963 images de tests à la fois par l’algorithme mais également par plusieurs ophtalmologistes. Les résultats ont alors donné :

  • un score de 0.95 pour le réseau de neurones TensorFlow.
  • un score médian de 0.91 des ophtalmologistes.

Le réseau de neurones obtient donc plus de justesse que la majorité des ophtalmologistes. Pour compléter cette recherche, une première interface front-end a été crée et un article a été publié dans le prestigieux « Journal of the American Medical Association » (JAMA).

Wide & Deep Learning: Memorization + Generalization with TensorFlow (Heng-Tze Cheng)

Le projet Wide & Deep a pour objectif de combiner les avantages de la mémorisation et de la généralisation dans une plateforme de Machine Learning unifiée. Cette combinaison se fait entre des modèles linéaires « wide » (entraînés sur les données sparses) et des réseaux de neurones profonds via des représentations latentes des données (embeddings). Le tout est proposé via une API haut niveau utilisable dans TensorFlow.

À titre d’exemple, la mémorisation permet à l’être humain de dire qu’un aigle sait voler, et la généralisation permet de dire que tous les animaux avec des ailes savent voler (ce qui permet d’affirmer des choses sur des animaux que l’on a jamais vu auparavant). La généralisation a cependant ses propres limites, et ne fonctionne pas dans tous les cas, de même que la mémorisation qui nous oblige à nous limiter à ce que l’on a déjà observé. Combiner les deux approches permet de combler le manque de chacune des deux.

Ce type de modèle peut par exemple être utilisé dans des Systèmes de Recommandation pour trouver un équilibre entre précision et diversité des recommandations. Les modèles sont entraînés conjointement dans TensorFlow via de la back-propagation et en partageant la même fonction de coût. C’est une vision relativement différentes des modèles d’ensemble car les modèles ne sont pas entraînés séparément. La bonne nouvelle est qu’il est simple de créer des Wide & Deep Models avec l’API de plus haut niveau proposée par TensorFlow: tf.learn.

Tensorflow at Deepmind (Daniel Visentin)

DeepMind est une entreprise, originellement britannique, spécialisée dans le Deep Learning et qui fut rachetée par Google en 2014 pour 628 millions de dollars. En mars 2016, leur algorithme AlphaGo a fait les gros titres pour avoir battu l’un des meilleurs joueurs de Go au monde, Lee Sedol. Fait moins connu du grand public cependant, les travaux AlphaGo et de nombreux autres projets de DeepMind ont été réalisés avec Tensorflow.

Selon Daniel Visentin, un choix raisonné de technologie est primordial. En effet, cette variable projet joue à la fois sur la qualité du travail ainsi que la vitesse avec laquelle les travaux peuvent être délivrés. Pour les équipes de DeepMind, cinq aspects de Tensorflow les ont convaincues d’utiliser cette technologie :

  • La flexibilité
  • La proximité utilisateur
  • La mise à l’échelle
  • La performance
  • La robustesse en production

La flexibilité de Tensorflow assure une grande vitesse de développement aux projets réalisés avec cette technologie. Également, la proximité utilisateur, c’est à dire la facilité d’utilisation des API Tensorflow et l’interface de visualisation Tensorboard, y est pour beaucoup.

La scalabilité et la performance de Tensorflow, sont également, pour Daniel Visentin, l’assurance de pouvoir entrainer de gros réseaux de neurones avec un faible temps d’entrainement. Enfin, la robustesse en production de Tensorflow, entre autre assurée par Tensorflow Serving, permet d’apporter une qualité supplémentaire aux livrables finaux.

Magenta: Music and Art Generation (Doug Eck)

Magenta est un projet issu de Google Brain utilisant du Deep Learning et du Reinforcement Learning pour générer du contenu artistique et musical. La librairie se base majoritairement sur TensorFlow et se base sur une communauté à la fois de développeurs et d’artistes (pour fournir du feedback constructif). L’objectif principal est de faire avancer la recherche dans la génération de contenu et la créativité, en mettant à disposition des outils facilitant le travail des développeurs.

Durant la présentation, Doug Eck est revenu sur deux exemples d’utilisation de magenta. Pour le premier usage, il revient sur le concept de l’Image Inpainting pour reconstruire des morceaux d’image qui ont été effacés. Il cherche ensuite à appliquer cela à de la musique pour ajouter ou supprimer des voix et ré-échantilloner les bits manquants. Le résultat permet notamment de générer de la musique focalisée sur le style de Bach, en enlevant tout ce qu’il y a autour, pour obtenir un contenu qualifié de « More Bach than Bach ». Le deuxième Use Case parlait de transfert de style sur des images, à l’image de ce qui est proposé dans les exemples pour les appareils Android.

Pourquoi avoir choisi TensorFlow ? Plusieurs raisons à cela. Premièrement parce que Python est un langage tout à fait adapté pour la gestion des I/O audio, image et vidéo. De plus, TensorBoard est un outil quasiment devenu indispensable pour ajuster les hyper-paramètres des réseaux de neurones et jouer avec les modèles durant l’apprentissage. Et enfin, la communauté de développeurs TensorFlow grandissant de jour en jour est un argument de poids à son utilisation.

Conclusion

En une seule petite journée, ce TensorFlow Dev Summit a été d’une grande richesse et diversité. Toutes les avancées techniques liées à la version 1.0 de TensorFlow ont été abordées, accompagnées d’un grand nombre d’exemples d’utilisation et de Use Cases divers et variés.

Si vous êtes intéressés pour rentrer plus en détail dans le fonctionnement et les implémentations en TensorFlow, vous pouvez suivre notre série d’articles sur le sujet.

Yoann Benoit
Yoann est Data Scientist chez Xebia. Il est également formateur au sein de Xebia Training .
Thibaud Vienne
Thibaud est Data Scientist chez Xebia. Ses champs d'application vont du machine learning conventionnel au Big Data Analytics. Curieux de nature, il s'intéresse également aux réseaux de neurones et au deep learning.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *