Deep Learning Web App par fastai v1

Pierre Guillou
Feb 4 · 7 min read
Deep Learning Web App par fastai v1

Cet article fait partie de la série “Deep Learning in Practice”.

Résumé

Cet article explique comment créer une Web App de Deep learning via la librairie fastai v1 et le service Render tel que présenté dans le cours fastai et son tutoriel en ligne. Après avoir rappelé les 3 étapes à suivre (1. entraîner un modèle et l’exporter, 2. tester localement la Web App utilisant le modèle, 3. Déployer en ligne la Web App), nous les détaillons sur la base d’un jupyter notebook et d’une Web App que nous avons créée. Cette Web App permet de classifier une image dans 1000 catégories. Elle utilise la version Resnet50 du modèle Resnet vainqueur du concours ImageNet en 2015.

ImageNet Classifier Web App créée par Pierre Guillou avec fastai v1 et Render

(Développement) Entraînement d’un modèle

Apprendre à développer un modèle de Réseau Neuronal Profond ou Deep Learning est aujourd’hui accessible à tous.

Il existe en effet de nombreux cours en ligne (avec vidéos, slides et notebooks) et dans les universités pour apprendre le Deep Learning. Impossible de ne pas citer le cours fastai de Jeremy Howard, la spécialisation de Andrew Ng sur Coursera, le cours de Facebook sur Pytorch sur Udacity, le cours de Google, ainsi que les cours de l’université de Stanford disponibles en ligne avec une année de décalage comme le cours cs231n (à consulter également les livres en ligne comme Deep Learning textbook et Neural Networks and Deep Learning).

Ces cours sont de haut niveau et tout passionné de DL doit les suivre. Ils vous enseigneront la théorie derrière le DL, les principales architectures (ConvNet, RNN, GANs…) ainsi que les frameworks (Tensorflow+Keras ou Pytorch+fastai) permettant de coder et d’entraîner votre modèle de DL dans un jupyter notebook.

(Production) Création d’un service

Ainsi, grâce à cet ensemble de ressources, à l’utilisation d’un GPU (via celui de votre ordinateur ou par l’utilisation d’un service de cloud comme AWS, Google Cloud ou encore Crestle ou Paperspace) et (de beaucoup) de volonté, vous arriverez à développer votre modèle de DL dans un jupyter notebook (par exemple, un classifieur d’images reposant sur un ConvNet).

Mais comment passer ensuite à la mise en production de votre modèle, cad à la création d’un service comme une Web App ou une application mobile? Comment permettre à un non spécialiste de DL d’appliquer votre modèle dans son quotidien via une interface interactive et simple d’utilisation?

Après tout, l’intérêt d’un modèle de DL ne réside pas dans sa phase de développement mais dans son usage dans des cas réels.

Fastai | Du développement à la production

Le cours fastai aporte une réponse à cette question. Enseigné pour la première fois par Jeremy Howard et Rachel Thomas à l’université de San Francisco en 2016 et réactualisé chaque année, le cours fastai explique le DL par la pratique via des vidéos en ligne ainsi qu’un tutoriel. Il repose sur une librairie avec documentation en ligne intégrant les dernières techniques d’entraînement d’un modèle de DL et dispose d’un forum en ligne.

Si cet ensemble de ressources place déjà fastai comme un des cours de référence sur le DL en 2019, la présentation dans la lesson 2 de la création d’une Web App à partir d’un modèle de DL le positionne définitivement en première place de la catégorie “cours de DL par la pratique”!

Les 3 étapes à suivre sont les suivantes:

  1. Entraîner un modèle de DL et l’exporter
  2. Tester localement la Web App
  3. Installer la Web App sur un serveur

Note: il existe de nombreux articles en ligne décrivant la création d’une Web App utilisant un modèle de Deep Learning, en particulier avec Tensorflow+Keras ou scikit-learn (cf. liste en bas de cet article). L’objet ici n’est donc pas de dire que fastai est la seule librairie permettant la création d’un Web App de DL, ce qui serait erroné. En revanche, le cours fastai intègre la création d’une telle Web App dans ses contenus, ce qui semble unique en comparaison des autres cours de même niveau.

Etape 1 | Entraîner et exporter un modèle de DL

Si vous êtes intéressé par le DL, vous connaissez nécessairement le concours ImageNet lancé par l’université de Stanford en 2010 et qui constitue la référence en classification d’images (et également aujourd’hui en segmentation). Chaque année, les meilleurs spécialistes de DL des meilleures entreprises data rivalisent de créativité pour proposer un modèle se rapprochant des 100% de reconnaissance d’objets dans des images.

En 2012, le modèle AlexNet a gagné la compétition ImageNet. Il a ainsi montré l’efficacité des réseaux neuronaux profonds de type ConvNet pour ce type de tâche. Dans les années suivantes, de nouveaux modèles sont venus améliorer sa performance et en 2015, Microsoft a gagné la compétition avec son modèle Resnet 152. Resnet (et ses différentes versions (ie, selon le nombre de couches cachées: 18, 34, 50, 101, 152) est aujourd’hui le modèle de référence en traitement des images par DL. Par ailleurs, comme ses paramètres sont téléchargeables en ligne, il est très fréquemment utilisé en Transfer Learning, cad en tant que modèle pré-entraîné permettant de créer un autre modèle plus spécialisé.

En utilisant fastai v1, nous avons ainsi pu créer un jupyter notebook “Pretrained ImageNet Classifier with fastai v1” consultable en ligne et permettant de recréer le mythique classifieur d’images utilisant Resnet, puis de l’exporter en un fichier exécutable via la fonction learn.export().

Prédiction des 3 catégories les plus probables avec le classifieur vainqueur de ImageNet en 2015 (notebook)

Note: dans la suite de cet article, nous utiliserons ce modèle de classification d’images mais tout autre modèle exporté par fastai v1 est utilisable pour créer une Web App.

Etape 2 | Tester localement la Web App

A ce jour, fastai v1 propose 3 services en ligne pour mettre en production son modèle de DL, cad pour créer une Web app utilisant votre modèle entraîné et exporté via fastai. Chacun de ces services dispose d’un mode d’emploi en ligne: Render, AWS BeanStalk et Google App Engine.

Pour sa simplicité d’utilisation et sa gratuité pendant 5 mois, nous avons utilisé le service Render pour déployer notre Web app ImageNet Classifier. Voici les étapes suivies avec la version 1.0.42 de fastai v1 sur Windows 10:

  1. Se rendre sur https://github.com/render-examples/fastai-v3 et télécharger le fichier fastai-v3-master.zip de ce répertoire en cliquant sur le bouton vert “Clone or Download” (ou faire un git clone sur votre terminal).
  2. Extraire le zip sur votre espace de test. Par exemple file:///C:/webapp/fastai-v3-master/
  3. Lancer votre terminal Anaconda Prompt et activer votre environnement fastai (activate fastai-v1 par exemple, si fastai-v1 est le nom de votre environnement fastai).
  4. Dans votre terminal, installer via pip les librairies nécessaires pour disposer d’un serveur Starlette de Web App en local:
pip install Starlette
pip install aiofiles
pip install uvicorn
pip install aiohttp
pip install python-multipart

Voilà! Vous disposez à présent d’un serveur de Web App en local. Vous pouvez tester son fonctionnement en lançant dans votre terminal la commande python app/server.py serve: votre Web App sera disponible dans votre navigateur Web à http://localhost:5042/

Il ne vous reste plus qu’à personnaliser les différents fichiers server.py, index.html, style.css et client.js pour tester votre application avec votre modèle. Il faudra en particulier inscrire dans le fichier server.py le lien vers le fichier de votre modèle fastai v1 exporté dans l’étape 1, son nom de fichier et ses classes comme expliqué dans le paragraphe “Per-project setup” du guide “Deploying on Render”.

Vous pouvez également visualiser et interagir avec votre Web App dans un jupyter notebook via le code suivant:

from IPython.display import IFrame
IFrame('http://localhost:5042/', width='100%', height=520)

Etape 3 | Installer la Web App sur un serveur

Pour cette dernière étape, nous vous invitons à suivre le paragraphe “Deploy” du guide “Deploying on Render”.

L’idée est que vous devez installer sur votre compte Github le répertoire de votre Web App, créer un compte sur Render et lier ce répertoire sur Github avec votre Web service sur votre compte Render. A vous de jouer!

Autres ressources

Liste d’articles en ligne sur la création d’une Web app avec Flask et utilisant un modèle Pytorch+fastai, Tensorflow+Keras ou scikit-learn:

Pierre Guillou

Written by

AI, Machine Learning, Deep learning | Fastai | Brasília, Paris

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade