Windows ML, un nouveau venu !

Annoncé en Mars 2018, Windows ML (Machine Learning) s'inscrit dans la politique de Microsoft de s'investir (toujours plus) dans les technologies d'Intelligence Artificielle (IA) à l'image de l'actualité partagé dans le cadre des derniers billets publiés sur ce blog.

Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.

Qu'est-ce que Windows ML ?

L'objectif réside dans le cas présent à permettre à tous les développeurs d'applications ou de services Windows de pouvoir utiliser des fonctionnalités d'IA.

Windows ML est une plateforme qui apporte des fonctionnalités d'apprentissage automatique ou Machine Learning à des applications Windows UWP.

Cette dernière permet d'exécuter des modèles de Machine Learning préalablement entrainés, au format ONNX, c.à.d. un format standard de l'industrie, développé par Microsoft, Facebook et Amazon Web Services (AWS) - un billet sur ce blog a été consacré à ONNX -.

Cette vidéo de Channel 9 AI Show vous donne une idée des possibilités ainsi offertes.

(Le code de l'application exemple est disponible via ce billet de blog.)

Windows ML exécute ces modèles de Machine Learning sur la machine Windows locale, et se charge d'exploiter au mieux les capacités de celle-ci.

A ce titre, remarquons cependant que Windows ML n'est pas un Framework de Machine Learning ou Deep Learning (apprentissage profond) comme cette plateforme ne permet pas dans la pratique d'entrainer ou de paramétriser des modèles ; elle permet juste de les utiliser.

D'autres outils Microsoft sont disponibles pour entrainer des modèles de Machine Learning/Deep Learning (tels que le Microsoft Cognitive Toolkit (CNTK) ou ML.NET - un billet sur ce blog a été consacré à ML.NET -.

Windows ML offre une flexibilité de lieu d'exécution qui ne dépend plus uniquement du Cloud (où la plupart des exécutions de modèles de Machine Learning ont (encore) lieu actuellement) : si l'appareil est déconnecté du Cloud ou que les données ne peuvent pas y être envoyées – pour des questions de coût, de taille, de latence par exemple – on peut toujours décider d'effectuer le processus de Machine Learning sur la machine locale.

Ceci s'inscrit pleinement dans la stratégie d'« Intelligent Cloud – Intelligent Edge » de Microsoft.

Quelques fonctionnalités de Windows ML

Windows ML permet de s'abstraire des spécificités système qu'il est généralement nécessaire de prendre en compte lors de l'exploitation de modèles de Machine Learning.

Pour cela, la plateforme se place en couche intermédiaire entre l'application et les sous-couches responsable de gérer les interactions avec les composants physiques du système.

Avec des appareils compatibles, WindowsML exploite les accélérations matérielles possibles (carte graphique, optimisations de processeur, etc.), ainsi que l'optimisation de certains types de donnés (image et vidéo par exemple) afin d'augmenter les performances d'évaluation de modèles de Lachine Learning. Ceci permet d'utiliser des fonctionnalités de Machine Learning dans un environnement où les résultats sont nécessaires en temps réel à l'image des moteurs de jeu.

Du côté du code, Windows ML se charge aussi de générer une interface autour du modèle de Machine Learning, permettant de l'utiliser facilement depuis une application UWP.

Sur Visual Studio 2017 (en version 15.7), cette génération se fait automatiquement.

Dans l'Explorateur de Solution, cliquez sur votre dossier ressource, puis sélectionnez « Ajouter > Elément existant ».

Après avoir choisi votre modèle ONNX (mnist.onnx dans notre illustration), le modèle est ajouté au projet ainsi que le fichier mnist.cs qui contient l'interface automatiquement générée.

On peut également générer ce fichier supplémentaire grâce à l'outil mlgen si on n'utilise pas Visual Studio par exemple.

Cette interface permet d'interagir assez facilement avec les fonctionnalités proposées par les modèles de Machine Learning. Elle suit le patron « Load, Bind and Evaluate », c.à.d. « Charger, Lier et Evaluer » : autrement dit, on commence par charger en mémoire le modèle de Machine Learning à partir d'un fichier sous format ONNX, on lie ensuite les données d'entrée correspondant au type d'entrée attendu, puis on évalue le modèle sur les données d'entrée. Cette dernière étape fournis des résultats qui peuvent être consultés et analysés.

C'est pour cela que 3 classes sont créées dans le fichier automatiquement généré : MNISTModelInput ,MNISTModelOutput et MNISTModel.

La première définit le type attendu en entrée, la seconde celui qui sera donné en sortie, et la troisième s'occupe de charger le modèle, de le lier aux entrées réelles et à la sortie, puis d'exposer une méthode d'évaluation du modèle.

Voilà pour les principes de base !

Commencer avec Windows ML

Avant de commencer, il est nécessaire d'avoir installé le kit de développement Windows 10 SDK et d'utiliser une version de Windows 10 au moins aussi récente que la 17110. Il est par ailleurs recommandé d'utiliser Visual Studio en tant qu'IDE notamment pour la génération automatique d'interface comme nous l'avons illustré.

Cette page présente une prise en main claire de Windows ML basée sur exemple simple préexistant. Cette prise en main permet d'appréhender les outils et méthodes nécessaires pour utiliser WindowsML dans le cadre d'une application UWP simple.

Pour aller plus loin

D'autres projets servant d'exemples sont disponibles sur ce repo GitHub et permettent de voir d'autre cas d'applications de Windows ML.

Il ne vous reste plus qu'à développer vos applications intelligentes ! ;-)