Tools & Stacks

AWS Python Pandas Numpy PIL PySpark Jupyter-Notebook Tensorflow
portfolio thumbnail

Déployez un modèle dans le cloud

Détail du projet

Problématique:

"Fruits!" une startup de l'AgriTech souhaite développer des robots ceuilleurs intelligents. Dans ce but une première étape de récolte des données est mise en place par le développement d'une application permettant aux utilisateurs de prendre ene photo un fruit et d'obtenir des informations à propos de celui-ci.

 

Notre travail consiste à développer une première chaîne de traitement des données, dans un environnement Big Data, qui comprendra le preprocessing et la réduction de données. Cette application utilisera le framework PySpark afin de préparer à l'augmentation rapide du volume de donnée qui se produira rapidement.

 

Les données utilisées sont disponibles ici

 

 

Préparation des données

 

Le prototypage a été effectué sur une instance Amazon EC2, un script bash télécharge les données depuis kaggle et appelle un script python qui se charge de renommer les images pour inclure la catégorie dans le nom du fichier. Ce même script bash upload le nouveau dataset dans un bucket S3.

 

Afin de limiter la quantité de données (et donc les coûts) pendant la phase de prototypage, on s'est limité à 5 catégories de fruits. Toutefois, pour s'assurer que les features créées pendant la réduction de dimension sont utilisables par un moteur de classification, on a choisi des fruits de très semblables (Apple Red 1 et Apple Red 2) à très différents (Physalis)

 

 

Réduction de dimensions

Les images sont chargées depuis AWS S3 (par l'intermédiaire d'un groupe utilisateur AWS IAM) au format binaire dans un dataframe Spark. On utilise ensuite un modèle ResNet50 parallélisé à l'aide d'une pandas_UDF (User Defined Function) pour obtenir les features numériques.

 

Enfin, le dataframe obtenu est sauvegardé sur AWS S3 au format parquet pour une utilisation ultérieure facilitée.

 

 

Test des features

 

Pour vérifier que les features obtenues ont du sens, nous avons rapidement entraîné une régression logistique simpliste qui a obtenu une précision supérieure à 98% (entraînée sur 399 images, testée sur 101).

 

Ce n'est pas étonnant au vu des images très propres et au format similaire du dataset, et il est probable que le modèle soit beaucoup moins bon sur des images provenant d'utilisateurs, mais cela démontre que la réduction de dimension est efficace.

 

Finalisation

 

L'étape finale du projet a été le déploiement de l'application PySpark sur un cluster AWS EMR, beaucoup plus économique qu'AWS EC2 et qui permet un passage à l'échelle très simple.