Le machine learning sur mobile au service de la location de voiture

Mathieu Hausherr
5 min readMar 2, 2018

--

Chez Virtuo nous faisons de la location de voiture 100% mobile depuis bientôt 2 ans. Avec notre app vous pouvez louer une Mercedes Classe A, en France ou en Belgique, directement dans un parking sans jamais faire la queue à un guichet. Tout se fait depuis votre téléphone : la réservation, l’état des lieux et même l’ouverture et le démarrage de la voiture en utilisant votre smartphone comme une clé.

L’été dernier, le monde du machine learnig sur mobile a bougé d’un seul coup : Apple annonce CoreML un outil pour exécuter des algorithmes de machine learning sur iPhone et Google annonce un équivalent pour Android, Tensorflow Lite. Chez Virtuo, on a justement plus de 14 000 photos de nos voitures endommagées prisent par nos utilisateurs, nos partenaires ou même par nous. C’est l’occasion de tester si tout ça fonctionne vraiment en dehors des effets d’annonce et des tests sur de la classification de fleurs. Mon rêve ? Je suis un client Virtuo, je remarque une rayure sur l’aile avant droite de ma voiture, je veux déclarer ce dommage, je prends une photo, et mon téléphone me répond “Ça ne serait pas une aile avant droite par hasard ?”. Essayons de voir ce qui est possible avec ces outils.

Quel est mon matériel de départ ? Ces fameuses 14 000 photos, classifiées plus ou moins correctement dans des dossiers par catégorie et mon fidèle Mac Book Pro, celui qui me sert tous les jours à développer les applications mobiles de Virtuo. En plus, les images sont plutôt cohérentes : elles representent toutes des Classe A ou des GLA, noires ou grises prisent avec des conditions de lumière identique dans un parking.

Et ensuite ?

Mon objectif est d’avoir une application mobile sur iPhone pour détecter, sans avoir besoin de réseau, de quelle catégorie est un dommage. Pour cela je vais entrainer un modèle avec Tensorflow puis le convertir en CoreML afin de l’intégrer dans une application iPhone. Vous voulez faire la même chose ? Déployer la même solution sur Android ? Tous les articles que j’ai suivi pour réaliser cette application sont en lien à la fin de l’article.

On choisit un modèle pré-entrainé : commençons par Inception V3 qui est sensé être plus lourd mais plus efficace. Il ne reste plus qu’à faire tourner un peu la magie :

python tensorflow/examples/image_retraining/retrain.py --image_dir ../images
2h de calcul plus tard

Premier résulat

Un fichier de 87Mo intégrable dans une application. Bonne nouvelle, ce fichier est téléchargeable à la demande et ne doit pas forcément être embarqué dans l’application de base.

Pour tester de façon impartiale une seule solution : attendre qu’un nouveau dommage soit détecté sur une de nos voitures et tester la première image envoyée. Résultat :

Pas mal du tout !

Le modèle a été entrainé avec des images de voitures : que se passe-t-il si on essaye de lui envoyer une image qui n’a rien à voir ?

Moins correct

Que c’est-il passé ? Ce genre de modèle ne donne pas vraiment un pronostic de ce qu’il y a sur une image mais donne des probabilités pour chaque catégorie (des classes en langage de machine learning) avec une somme de 100%. Ici le résultat ne nous dit pas “Cette image de nos nouveaux bureaux a 9% de chance d’être un sigle arrière”. Il nous dit “Cette image si elle était un dommages de Mercedes Classe A prise dans un parking aurait 9% de chance d’être un sigle arrière”. La nuance a son importance !

Peut-on améliorer la taille du fichier ?

87Mo c’est lourd. Que peut-on faire avec MobileNet, qui apparement est plus adpaté au mobile ? Niveau poids du fichier c’est beaucoup mieux, 2.2Mo, mais pour le résultat c’est moins impressionnant. Autant les premiers pronostics sont les mêmes, autant ensuite c’est beaucoup moins précis.

python tensorflow/examples/image_retraining/retrain.py \
--image_dir ../images --architecture mobilenet_0.25_128_quantized
Ok pour les 2 premiers mais pourquoi phare avant ?

Et maintenant on fait quoi ?

Est-ce que cette fonctionnalité sera présente dans la prochaine version de l’application Virtuo ? Malheureusement non. Tout n’est pas encore prêt et il y a encore trop d’erreurs.

Autant nous avons 14 000 photos, autant certaines catégories comportent très peu de photos. Et si une catégorie comporte moins de 30 photos l’analyse ne se lance même pas. Il ne reste plus qu’a prendre un téléphone, se rendre dans un parking et prendre les photos manquantes. Mais vu qu’il s’agit de photo de dommages est-ce vraiment possible ? Nous ne sommes pas encore prêt à rayer nos belles voitures pour faire avancer la science !

De plus certaines photos sont encore mal classifiées, il faudrait repasser toutes les photos une à une pour vérifier la classification.

Bref vous l’aurez compris, vous ne pourrez pas tester tout ça dès demain. Mais peut être dans 6 mois qui sait. 😉

Ça vous a plu ?

Vous voulez tester notre produit ? Tout se passe sur notre site ou cherchez Virtuo sur l’App Store et le Play Store.

Vous voulez nous aidez à faire progresser la science ? Vous rêvez de travailler pour un projet comme le notre ? Envoyez nous un mail à contact@govirtuo.com on a surement quelque chose à vous proposer !

Vous voulez refaire ça chez vous ? Quelques ressources pour aller plus loin :

Installer tensorflow https://www.tensorflow.org/install/ Personnellement j’ai choisi la solution Anaconda

Les commandes utilisées dans mes exemples : https://www.tensorflow.org/tutorials/image_retraining

Convertir le fichier tensorflow pour CoreML (iPhone) https://github.com/tf-coreml/tf-coreml et principalement le fichier inception_v3.ipynb

Intégrer un modèle CoreML dans une app iOS https://www.raywenderlich.com/164213/coreml-and-vision-machine-learning-in-ios-11-tutorial avec un projet d’exemple prêt à l’emploi

Comment intégrer un modèle Tensorflow lite dans une app Android https://medium.com/@sandra.duprep/mobile-first-to-ai-first-machine-learning-inside-our-apps-5314ab5f86d8

--

--

Mathieu Hausherr

Mobile developer (iPhone, Android, …) Lives in Paris. Works @goVirtuo / former @OctoTechnology Disapproves of hybrids apps.