L'apprentissage automatique a incroyablement évolué ces dernières années. Aujourd’hui, ce qui pourrait prendre des heures à une personne peut être réalisé en quelques microsecondes par un ordinateur.
Microsoft le sait et c'est pourquoi ils ont créé les services Azure AI : un ensemble de ressources qui permet à un utilisateur de n'importe quel niveau de profiter de l'intelligence artificielle et de l'implémenter dans ses applications. Le catalogue de services est assez important : il est possible de synthétiser la parole, de reconnaître le locuteur, d'analyser un texte, d'extraire les intentions d'une phrase, d'analyser une vidéo et d'identifier le moment exact où une action s'est produite ou même de décrire ce qui se passe à l'intérieur d'une image, parmi d'autres fonctionnalités intéressantes.
Tous ces éléments ont de nombreuses applications dans plusieurs domaines. Quoi qu'il en soit, on utilisera les services Azure AI pour une tâche très importante : identifier si l'animal dans une image est un axolotl ou un ornithorynque. Normalement, cela prendrait un temps élevé pour le développement, mais avec Azure, c'est en fait assez simple.
Création de la ressource Azure AI
La première chose à faire est de créer la ressource Azure qui hébergera le modèle et classera les images. Vous aurez besoin d’une ressource Custom Vision ou d’une ressource multi-service Azure AI. J'utiliserai Azure CLI pour la créer, mais vous pouvez faire de même en utilisant d'autres outils comme le portail Azure, IaC ou les différents SDKs (cf. comment faire créer et gérer des ressources dans Azure ? et créer une ressource multiservices pour les Azure AI services).
Il faut par la suite vous connecter avec vos identifiants Azure.
az login
Ensuite, si vous n'avez pas un groupe de ressources existant, vérifiez les emplacements disponibles avec :
az account list-locations --query "[].{Region:name}" --out table
et créez-en un en sélectionnant un emplacement et en utilisant la commande suivante :
az group create --location <LOCATION> --resource-group <NAME_OF_RESOURCE_GROUP>
Il est maintenant temps de créer la ressource Azure AI :
az cognitiveservices account create --name <NAME_OF_RESOURCE> --resource-group <NAME_OF_RESOURCE_GROUP> --kind CognitiveServices --sku S0 --location <LOCATION> --yes
⚠️ Le niveau tarifaire F0 n’est pas disponible pour ce type de ressource.
Ou si vous souhaitez utiliser une ressource Custom Vision, vous devez créer à la fois une ressource d'entraînement :
az cognitiveservices account create --name <NAME_OF_TRAINING_RESOURCE> --resource-group <NAME_OF_RESOURCE_GROUP> --kind CustomVision.Training --sku F0 --location <LOCATION> --yes
et une ressource de prédiction :
az cognitiveservices account create --name <NAME_OF_PREDICTION_RESOURCE> --resource-group <NAME_OF_RESOURCE_GROUP> --kind CustomVision.Prediction --sku F0 --location <LOCATION> --yes
Vous êtes maintenant prêt à démarrer votre modèle !
Jeu de données
J'ai téléchargé 10 images d'ornithorynques et 10 images d'axolotl sur Internet et les ai placées dans deux dossiers nommés respectivement « ornithorynque » et « axolotl ». Ce seront les images d'entraînement. Par ailleurs, j'ai téléchargé aussi six images pour tester le modèle. Vous pouvez télécharger encore plus d'images si vous le souhaitez (ceci pourrait augmenter la précision des prédictions du modèle).
Création du projet
On utilisera le Custom Vision Studio pour créer le projet. Cependant, le même processus peut être effectué à l'aide du SDK pour C#, Go, Java, JavaScript et Python, ou à l'aide de l'API REST (pour plus d'informations, cliquez ici).
On commence par créer un nouveau projet en cliquant sur « New project ».
Ensuite, on attribue un nom au projet et la ressource d'entraînement qu'on avait créé auparavant. Le type de projet est de classification. Ce genre de projets sert à faire la distinction parmi différentes images en leur attribuant un ou plusieurs labels. Par contre, les projets du type détection d'objets sont utiles à trouver l'emplacement d'une chose spécifique dans une image (ce qui n'est pas d'intérêt pour ce projet).
Il faut par ailleurs considérer le type de classification. Il en existe deux :
- Multi-label : le modèle attribue plusieurs labels à une image. Par exemple, prenons le cas d'un modèle qui identifie les habits d'une personne. Une seule image pourrait avoir de nombreux labels correspondant à chaque vêtement.
- Multi-classe : d'un autre côté, la classification multi-classe ne peut qu'attribuer un label pour chaque image, normalement dans le but de les différencier. Pour ce projet, on se sert de cette classification.
On choisit aussi le domaine à utiliser. Ceci est fait afin d'optimiser les prédictions selon les types de données traitées et aussi le temps d'entraînement. J'ai sélectionné un domaine général A2, qui a un temps d'inférence réduit et nécessite de moins de temps d'entraînement, mais vous pourriez en choisir un autre. Pour plus d'informations sur les domaines, cliquez ici.
Il faut maintenant ajouter les images qui serviront à entraîner le modèle. Pour cela faire, il n'y a qu'à cliquer sur « Add images ».
On commence d'abord par les images des ornithorynques. Une fois qu'elles sont importées, il faut les attribuer le label ornithorynque (ou platypus en anglais) et on clique sur « Upload images ».
On fait de même pour les images des axolotls.
Vous pouvez remarquer que les vingt images sont correctement chargées et que chacune d'elles a le bon label.
Il est temps de passer au moment le plus attendu : l'entraînement du modèle. Et malgré la complexité qu'on pourrait penser, il suffit juste de cliquer sur le bouton « Train ».
J'ai choisi l'entraînement rapide (quick training), mais il est tout à fait possible de choisir l'entraînement avancé (advanced training). Cliquez encore sur « Train » pour commencer le processus.
Une fois le modèle entraîné, le portail affiche les performances pour l'itération. Il y a trois métriques à considérer :
- Précision : elle représente la quantité de données prédites correctement divisée par le nombre total de données.
- Rappel (recall) : le rappel sert à mesurer le pourcentage de labels prédits correctement parmi les labels qui étaient censés d'être prédits correctement. C'est-à-dire, si on attend dix données prédites en tant qu'ornithorynque, combien de données ont été prédites ainsi.
- Précision moyenne (average precision) : elle résume la précision et le rappel dans une seule métrique.
Passons aux choses sérieuses, c'est le moment de tester le modèle ! Pour ce faire, il faut simplement cliquer sur « Quick Test ».
On importe la première image, notre mascotte Axo. Le modèle estime avec une probabilité de 91 % que l'image est un axolotl.
On fait la même chose pour la deuxième image de test et le modèle arrive à prédire correctement qu'il s'agit d'un ornithorynque avec une probabilité de 63,5 %.
J'ai réalisé cette expérience avec quatre autres images et voici les résultats :
Image | Prédiction | Probabilité |
---|---|---|
Axolotl | 99,8% | |
Ornithorynque | 82,4% | |
Axolotl | 68,2% | |
Ornithorynque | 96,1% |
Ce modèle entraîné peut maintenant être déployé et consommé par des requêtes HTTP ou en utilisant les différents SDKs. Il suffit simplement de cliquer sur « Publish » et le modèle sera disponible pour son utilisation.
Conclusion
Vous pouvez remarquer la facilité à entraîner et implémenter un modèle de classification d'images en utilisant les services Azure AI. Bien que le projet analysé dans cet article soit assez simple, il est possible d'étendre son utilisation à des projets comportant une complexité plus importante dans plusieurs domaines.
Le modèle a rencontré des difficultés avec les images qui ne ressemblent pas complètement à celles de l'entraînement (par exemple, des bandes dessinés ou la peluche). Ceci pourrait être résolu en incluant des images similaires dans le jeu de données et en entraînant à nouveau le modèle. Tout de même, le modèle a prédit correctement le label dans tous les cas.
Je vous invite alors à jouer avec cet outil et à découvrir l'ensemble de services Azure AI !