Découvrir Azure OpenAI et son studio

Lorsque votre souscription Azure aura été autorisée à déployer le service OpenAI (voir ce précédent article), vous pourrez accéder à l’écran ci-dessous.

Au cours de cet article, nous allons donner un premier aperçu des fonctionnalités disponibles et insister sur les différences entre le service OpenAI directement disponible et son intégration au sein du cloud Microsoft Azure.

Playground de OpenAI (hors Azure)

Afin d’expérimenter les différents modèles, nous allons tout d’abord nous connecter au studio Azure OpenAI sur l’URL https://oai.azure.com/

Studio Azure OpenAI

La page d’accueil fournit de nombreux liens d’exemples et de documentation.

Nous retrouvons le playground de OpenAI et la possibilité d’expérimenter des prompts dans différents scénarios :

  • résumé
  • classification
  • génération de code
  • etc.

Nous ne retrouvons toutefois pas, pour l’instant (février 2023), l’intégralité des exemples proposés dans le playground d’OpenAI.

Déployer un modèle

C’est la première opération à réaliser afin de pouvoir utiliser les différents services : déployer l’un des modèles disponibles. Par défaut, aucun modèle n’est déployé dans le studio.

Il faut tout d’abord sélectionner l’un des modèles de base.

Une description rapide des différents modèles est donnée, afin d’aider à la sélection. Les modèles dédiés au langage naturel, dérivant de GPT-3, sont décrits dans cette partie de la documentation officielle.

Il est alors possible de retourner dans le playground et de sélectionner le déploiement réalisé.

Complétion de texte

C’est ici que l’expérience avec un modèle GPT-3 peut s’avérer déstabilisante. En effet, nous sommes face à un outil destiné à traiter le langage naturel et également à interagir de la sorte. Nous n’avons donc d’un simple prompt pour exprimer notre demande. Attention à l’angoisse de la page blanche !

Le résultat généré est identifié par un surlignage vert. On remarquera l’indicateur du nombre de tokens, correspondant à la longueur du texte contenu dans le prompt.

Le paramètre de température permet de gérer l’aspect stochastique du modèle (comprendre que les prévisions peuvent changer même avec un prompt similaire). Dans l’exemple ci-dessous, le résultat est généré trois fois, avec une température de valeur 1.

Write a original prompt for image generation with DALL-E 2

What would DALL-E draw if you asked it to generate an image of a "perfect day"?

What if DALL-E was asked to generate an image of a world where everyone was happy and there was no conflict?

What if the world was made of candy?

Premiers scénarios d’utilisation

Approprions-nous maintenant le terrain de jeu !

Résumé

On soumet un texte long afin d’obtenir un résumé.

L’intention est ici exprimée par le terme “Tl;dr:” (“trop long; n’a pas lu) mais pourrait être formulée d’une autre façon, par exemple en précisant le public cible.

Les guillemets encadrent ici la partie de texte à résumer.

Classification

Nous donnons tout d’abord l’intention, celle d’établir un classifieur. La dizaine d’exemples ci-dessous est issue d’un jeu de données connu sur le sujet.

Il s’agit bien d’un spam !

Avec si peu de données d’entrainement, le résultat peut paraitre impressionnant mais n’oublions pas qu’il y a une chance sur deux de trouver la bonne réponse (pile ou face) ! Contrairement à un classifieur issu par exemple du framework Scikit-Learn, nous ne pouvons pas accéder à la probabilité d’appartenance à la classe.

Génération

Nous demandons une liste, donnons un exemple puis débutons la suite de la liste par le chiffre 2.

Attention, tous ces produits ne sont pas réellement Open Source !

Parsing de données non structurées

Peut-être l’illustration la plus surprenante, le moteur va réussir à mettre en tableau un texte donné en langage naturel.

Seul le premier exemple a été soumis.

Extraction d’information

A nouveau, nous donnons une description du document qui sera soumis entre guillemets.

Toutefois, en essayant le même prompt dans ChatGPT (basé sur GPT 3.5), nous obtenons une réponse tout à fait correcte !

Code view

Prenons maintenant l’exemple d’un résumé de texte, avec pour objectif d’utiliser cette fonctionnalité en dehors du studio Azure OpenAI.

Le code correspondant à cet appel dans le playground est disponible (en Python).

Ce code utilise la librairie Python openai (à installer avec la commande pip install) et nécessitera de connaître une des clés du service.

Pourquoi ne pas demander au modèle de générer un code Python appelant cette API ? Voici le résultat obtenu.

Nous ne disposons pas ici d’un quota suffisant pour que le code s’écrive en entier. L’utilisation de GitHub Copilot sera plus adaptée dans ce cas de figure.

En résumé (et sans l’aide de GPT-3 !), nous pouvons successivement déployer un modèle, l’expérimenter à l’intérieur du terrain de jeu (playground) puis déployer une application qui s’appuiera sur l’API mise à disposition par Azure OpenAI.

Avantages d’Azure pour OpenAI

Utiliser OpenAI au travers d’Azure donne accès à trois pratiques d’entreprise :

  • la disponibilité régionale
  • la mise en réseau privé
  • le filtrage de contenu d’IA responsable

Une logique d’accès par RBAC (Role Based Access Control) pourra également être mise en place, tout comme l’authentification par identité managée (MSI).

Le portail Azure permet également une gestion des clés d’API par rotation.

Bien sûr, l’utilisation au travers d’Azure engendre une facturation dont les modalités sont détaillées sur cette page. Les coûts seront engendrés par l’inférence (utilisation prédictive) des modèles ainsi que par leur personnalisation (entrainement de type transfer learning).

Cette réponse n’est pas juste ! N’oubliez pas que GPT-3 ne scanne pas le web pour répondre.

Veuillez également prendre en compte les quotas et limites appliquées. Une demande au support permettra de lever certaines de ces limites.

Choix de la région

A ce jour (février 2023), seules trois régions Azure sont disponibles.

L’utilisation de deux régions différentes permet d’assurer une continuité d’activité. Ainsi, si un datacenter vient à être indisponible dans une région, il est possible de basculer (par modification du endpoint) vers une autre région Azure.

Utilisation dans un réseau privé

L’utilisation d’un réseau privé sécurise l’accès au studio Azure OpenAI, qui devra par exemple se faire au travers d’un VPN.

Il est également possible d’enclencher le pare-feu Azure (firewall) et de n’autoriser qu’une liste d’adresses IP à accéder au studio OpenAI.

IA responsable

Outre les engagements pris au travers du formulaire de demande du service, la documentation de Microsoft nous incite à respecter les points suivants lors d’une intégration des services Azure OpenAI :

  • Mettre en œuvre une surveillance humaine significative.
  • Mettre en place des limites techniques strictes sur les entrées et les sorties afin de réduire la probabilité d’une utilisation abusive au-delà de l’objectif prévu de l’application.
  • Tester les applications de manière approfondie afin de détecter et d’atténuer les comportements indésirables.
  • Établir des canaux de feedback.
  • Mettre en œuvre des mesures d’atténuation (bias mitigation) supplémentaires propres à chaque scénario.

A termes (ce n’est pas aujourd’hui le cas), un filtrage de contenu supplémentaire sera mis en place par Microsoft. Celui-ci est décrit dans la documentation. Concrètement, un utilisateur proposant un prompt avec un contenu inapproprié recevra, à l’appel de l’API, un code erreur HTTP 400 et une description “content_filter” dans le corps de la réponse. Une demande au support permet d’activer dès à présent ce filtrage.

EDIT : le filtrage de contenu sera activé le 13 février 2023.

With our latest update we’re providing content filters with significant quality and precision improvements. We have adjusted the system to filter at higher severity levels with each category (Hate and Fairness, Sexual, Violence, Self-harm) and expanded coverage across other languages. 

Once the filters are turned back on, the system will resume blocking harmful prompts and model generations.

email Azure OpenAI Support

S’inscrire au service OpenAI sous Azure

Est-il besoin de présenter la société Open AI dont le modèle GPT3 connaît une renommée planétaire, suite à la mise en service de ChatGPT ?

Au delà du buzz, des exemples humoristiques ou de la recherche des erreurs (souvent dans des cas d’utilisation pour lesquels il n’a pas été entrainé), nous disposons dorénavant d’un accès professionnel aux modèles d’Open AI sous Azure, et ce sous le statut de general availability (GA), c’est-à-dire avec tout le support et garantis de service (SLA) attendus.

Une recherche de “openAI” dans la barre du portail Azure nous donne accès à la création de notre première ressource Azure OpenAI. Il faut remarquer ici que ce service est catégorisé comme un service cognitif, services qui représentent l’intelligence artificielle “appliquée” au sein des services Azure.

Un descriptif du service est donné, citant ses principales fonctionnalités (résumé, génération de contenu ou de code) :

Enable new business solutions with OpenAI’s language generation capabilities powered by GPT-3 models. These models have been pretrained with trillions of words and can easily adapt to your scenario with a few short examples provided at inference. Apply them to numerous scenarios, from summarization to content and code generation.

Azure portal

A ce jour, le modèle GPT est disponible ainsi que CODEX qui s’exprime au travers de GitHub Copilot. La génération d’images grâce au modèle DALL-E est encore en préversion (preview) sous Azure.

Avant de pouvoir réellement accéder à la création du service, un avertissement est donné :

Azure OpenAI Service is currently available to customers via an application process. Request access to Azure OpenAI Service.

Un formulaire sera nécessaire pour obtenir le droit de créer une ressource Azure OpenAI. Au bout d’un délai de quelques jours, vous serez informés de l’approbation ou du rejet de votre demande. Nous allons ici détailler quelques-unes des 35 questions posées afin de bien comprendre les cas d’usage autorisés et les garde-fous posés par Microsoft.


Description des cas d’usage

Please explain how you will use Azure OpenAI Service in your application.

  • Please explain the data you will use,
  • how you plan to use the models,
  • how people will consume or interact with the outputs,
  • and more details about the domain or industry in which you will use the application.

PLEASE PROVIDE AT LEAST 5+ SENTENCES. IF YOUR USE CASE IS TOO SHORT OR TOO VAGUE, YOU WILL BE DENIED.

Il s’agit tout d’abord de décrire l’usage qui sera fait du service Azure OpenAI, sur un principe de “bout en bout” : données en entrée, modèle(s) utilisé(s) et interactions avec l’utilisateur. Le cas d’usage doit être suffisamment détaillé et il convient de préciser le domaine ou le secteur d’activités concerné, même si ce dernier point fera l’objet de la question suivante.

Ce paragraphe est particulièrement important et vous devez démontrer qu’une réflexion a déjà été élaborée autour de l’application que vous souhaitez développer. Lorsque vous achetez des outils dans un magasin de bricolage, vous avez sans doute déjà une idée de ce pour quoi vous allez les utiliser !

Domaine(s) d’utilisation

Applications in these domains may require additional mitigations and will be approved only if the customer demonstrates that the risks associated with the application are well-managed and outweighed by the beneficial uses.

Le terme à retenir ici est celui de mitigation (atténuation) que l’on emploie dans l’expression “bias mitigation” pour éviter la correction des biais possibles d’un modèle d’apprentissage. Outre la détection des biais, des actions devront être entreprises pour éviter l’effet néfaste qu’ils pourraient avoir sur les utilisateurs. Des librairies spécifiques existent pour cela comme le produit Open Source FairLearn, développé par Microsoft.

Les différents domaines “à risque” ou dits encore “à enjeux élevés” sont :

  • Law enforcement, legal, and criminal justice
  • Healthcare and medicine Government and civil services, such as essential private and public services Politics
  • Financial services and banking Social media
  • Management and operation of critical infrastructure
  • Pollution and emission management and control
  • Migration, asylum, and border control management
  • Education, vocational training, hiring, and employment, such as applications in consequential decision making that impacts one’s opportunities
  • Therapy, wellness, relationship coaching or forecasting, such as relationship advice or bots for companionship, emotional support, or romance
  • Military or intelligence
  • Other scenario that could have a consequential impact on legal position, life opportunities, or result in physical or psychological injury to an individual if misused
  • None of the above. The domain, industry, or scenario do not have the potential to have a consequential impact on legal position, life opportunities, or result in physical or psychological injury to an individual if misused

Il conviendra de cocher “None of the above” si aucun de ces domaines n’est concerné.

Fonctionnalités attendues

Il serait tentant de tout cocher dans cette question 26 ! En effet, vous avez sûrement beaucoup d’idées d’utilisation des services d’OpenAI mais il faut ici se limiter à ceux qui seront réellement utiles à votre cas d’usage décrit ci-dessus. Il est peu probable qu’un agent conversationnel (chatbot), dans un scénario d’entreprise, propose des images générées par DALL-E ! Soyez donc raisonnables sur les fonctionnalités demandées et si besoin, remplissez plusieurs formulaires, en isolant les applications.

Fonctionnalités spécifiques de l’agent conversationnel

Si vous avez coché la case “Conversational AI” à la question 26, vous devez préciser les fonctionnalités attendues pour l’agent conversationnel.

Attention à nouveau si vous prévoyez de déployer ce bot dans un domaine “à enjeux élevés”.

Acceptation des conditions d’utilisation

Enfin, il sera nécessaire d’approuver explicitement les conditions d’utilisation (“Yes, I agree“) énoncées dans les questions 29 à 35. C’est tout particulièrement sur l’usage en production que vous allez devoir vous engager.

Question 29

29. I understand that mitigations should be considered early in development and must be implemented prior to production.

N’attendez pas d’être en production pour atténuer les biais !

Question 30

30.My application will ensure human oversight prior to production.

This includes never automatically posting generated outputs and never automatically executing generated code. This may also include clearly disclosing AI’s role, communicating relevant limitations to stakeholders (including developers and end users), making sure people (e.g., end users) have a role in decision-making, highlighting inaccuracies in generated outputs, and letting people edit generated outputs.

Ce point nous alerte sur des chaines de CI/CD trop automatisées : un contrôle humain est nécessaire. (Si vous me connaissez bien, vous m’avez déjà entendu pester contre le Continuous Training :))

Question 31

31.My application will implement strong technical limits on inputs from end users and outputs from the system prior to production.

This increases the likelihood your application will perform as expected and decreases the likelihood it can be misused beyond its intended purpose. This may include limiting the length of inputs and outputs, exposing the service to end users through a front end, requiring that inputs and outputs follow a specific structure, returning outputs only from validated source materials, implementing blocklists or content filtering, and implementing rate limits.

En production, un contrôle fort sur les entrées et les sorties sera essentiel. Il s’agit par exemple d’éviter tout détournement de l’usage intial prévu. Ainsi, au démarrage de ChatGPT, il était possible de contourner certaines de ses limites en lui demandant de jouer un rôle.

Question 32

32.I will test my application thoroughly prior to production to ensure it responds in a way that is fit for the application’s purpose.

This includes conducting adversarial testing where trusted testers attempt to find system failures, undesirable behaviors such as producing offensive content, and ways that application can be misused by malicious actors beyond its intended purpose.

Non, tester n’est pas douter ! Ici, il s’agira même d’essayer de “hacker” votre propre application.

Question 33

33.My application will establish feedback channels for users and impacted groups prior to production.

This includes providing ways to report problematic content and misuse such as building feedback features into the user experience and providing an easy to remember email address for feedback submission. 

A minima, votre application devra donner un contact simple, par exemple par email, aux utilisateurs qui souhaiteraient faire part de leur réaction. Au mieux, vous pourrez penser une vraie boucle de feedback (human feedback loop), qui vous servira à termes à améliorer le modèle et l’expérience utilisateur.

Question 34

34.My application will follow the Microsoft guidelines for responsible development of conversational AI systems prior to production.

Prenez connaissance des principes pour une IA responsable, donnés par Microsoft.

Question 35

35.I will resubmit this form for a production review before going into production.

Avant le passage en production, et surtout si des changements sont apparus par rapport à l’expression du cas d’usage intial, il sera nécessaire de soumettre à nouveau le formulaire.

Maintenant que vous connaissez les conditions à remplir, vous voilà prêts à décider si l’expérience Azure OpenAI est une opportunité pour vous et votre organisation !

Réviser la certification AI-102

Obtenir le titre “Azure AI Engineer Associate” ne demande que de passer une seule certification Microsoft, celle nommé AI-102 et dont le descriptif est disponible ici. Elle a remplacé la certification AI-100 en 2021 et s’oriente vers le choix et l’utilisation des services cognitifs Azure, alors que la précédente version pouvait également aborder des thèmes comme l’implémentation et le monitoring.

Je vous conseille toutefois d’associer à cette certification la AI-900 “Microsoft Azure AI Fundamentals” qui, comme toutes les “900”, se veut plus générique et moins technique (certains diront plus faciles à obtenir). Elle aborde en particulier les grands principes pour une utilisation responsable de l’Intelligence Artificielle :

  • fairness (équité)
  • reliability (fiabilité)
  • privacy (vie privée)
  • inclusiveness (inclusivité)
  • transparency (transparence)
  • accountability (responsabilité)

Pour préparer l’AI-900, utilisez les parcours d’apprentissage de Microsoft Learn, comme celui-ci.

Observons maintenant en détail les cinq compétences mesurées qui seront autant de chapitres dans la liste des éléments à réviser :

  • Planifier et gérer une solution Azure Cognitive Services
  • Mettre en œuvre des solutions de vision par ordinateur
  • Mettre en œuvre des solutions de traitement du langage naturel
  • Mettre en œuvre des solutions d’exploration des connaissances
  • Mettre en œuvre des solutions de AI conversationnelle

Le détail est fourni dans ce document PDF, en anglais, et il faut en surveiller les mises à jour.

La documentation Microsoft sera bien sûr l’un de vos principaux alliés. Préférez une lecture en anglais pour vous familiariser avec la terminologie utilisée dans les questions de l’examen.

Nous travaillerons autour des quatre familles principales de services cognitifs :

  • vision
  • langage
  • speech
  • décision

Plusieurs questions porteront vraisemblablement sur le choix du bon service pour répondre à des scénarios précis. Ces questions ne devraient pas vous poser de difficulté une fois que vous aurez en tête les grandes fonctionnalités de chacun des services listés sur l’image ci-dessus.

Les services de la catégorie Décision ne seront pas présentés dans les quatre autres chapitres.

Mais attention, le contenu détaillé agrandit un peu le périmètre des services de base et se réorganise de la sorte :

  • Computer Vision
  • Natural Language Processing
  • Knowledge Mining
  • Conversational AI

Nous allons donc avoir à faire à quelques services que Microsoft désigne maintenant par le terme “Azure Applied AI Services” (voir ce lien) et en particulier aux services Azure Bot et Cognitive Search.

Plan and Manage an Azure Cognitive Services Solution

Nous allons nous concentrer ici sur trois points du programme :

  • la création d’une ressource
  • les aspects de sécurité
  • l’utilisation de conteneurs

Implement Computer Vision Solutions

Les services cognitifs concernés par ce chapitre sont :

  • Computer Vision
  • Custom Vision
  • Face

Implement Natural Language Processing Solutions

Les services cognitifs concernés par ce chapitre sont :

  • Text Analytics
  • Speech to Text & Text to Speech
  • Translate
  • Language Understanding Service (LUIS)Computer Vision

Implement Knowledge Mining Solutions

L’unique service cognitif concerné par ce chapitre est Azure Cognitive Search.

A priori, et selon le programme détaillé, vous ne devriez pas rencontrer de questions sur l’API Bing Search (présentée ici).

Implement Conversational AI Solutions

Les services cognitifs concernés par ce chapitre sont :

  • QnA Maker
  • Bot Framework

Ne pas oublier le service Dispatch pour la gestion du multi-langue.

En conclusion

Nous espérons vous avoir fourni ici les premières bases pour guider vos révisions. N’oubliez pas que la pratique est indispensable (profitez des free tiers souvent disponibles qui n’affecteront pas votre crédit Azure) et méfiez-vous des bases de questions (et encore plus des réponses !) que l’on peut trouver sur Internet.

Intelligence artificielle : bénéficier de l’AI as a Service [3/3]

La donnée classique et structurée n’a plus de secret pour vous si vous avez lu les deux billets précédents (ici et ) traitant de l’analyse avancée et de la modélisation des données. Pour autant, ces méthodes sont valables, et performantes, lorsque la donnée est de type alphanumérique et organisée sous forme tabulaire. Pour les données dites non structurées comme les images, le son ou encore le texte rédigé, il faut faire appel à un tout autre arsenal d’outils.

Du temps, de la puissance et des données

Soyons pragmatiques, pour être ingérée par un algorithme, toute donnée devra devenir numérique mais le cheminement pour y arriver va être complexe. Des approches comme la métrique TF-IDF ont fait leurs preuves, pour le référencement de documents pertinents dans des corpus de textes. Cela reste vrai tant que la puissance de calcul disponible est suffisante, et donc le volume de données relativement raisonnable. Dans le domaine des images, on distinguera deux usages principaux : la classification (catégoriser une image parmi des labels existants) et la reconnaissance d’objets (présence et position sur l’image). Les progrès ont été remarquables avec l’arrivée (voire le retour…) des réseaux de neurones dits profonds, ce que l’on nomme le « Deep Learning ».

Les frameworks de Deep Learning sont aujourd’hui nombreux : Cognitive Toolkit créé par Microsoft, TensorFlow mis en place par Google ou encore PyTorch. Leur maîtrise implique une bonne connaissance du fonctionnement mathématique des réseaux de neurones et de l’état de l’art des différents types de couches de neurones pouvant être utilisées. Mais ensuite, il faudra beaucoup de données et beaucoup de puissance de calcul pour obtenir un modèle performant.

C’est ici que le mécanisme du Transfer Learning prend tout son intérêt. En effet, au fur et à mesure des couches du réseau de neurones profond, l’apprentissage va se spécifier. Pour donner une image didactique, on pourrait dire que l’algorithme commence par reconnaître des formes simples avant d’identifier des formes plus complexes. C’est d’une certaine manière ce que font nos yeux et notre cerveau lorsque nous découvrons un nouvel environnement. J’entre dans un nouveau bâtiment et je vois des bureaux, des écrans, des tasses à café, un babyfoot, je reconnais… l’open space d’une ESN parisienne !

Les services cognitifs

Imiter les capacités humaines de perception ou de cognition est depuis longtemps un défi pour le monde de l’informatique et la discipline de l’Intelligence Artificielle s’y emploie, présentant des succès majeurs depuis quelques années. Pensons ici à la qualité des outils de traduction automatique, à l’efficacité de la transcription orale en texte ou encore à la pertinence des moteurs de recommandation.

Les départements de Recherche et Développement des géants du numérique rivalisent de performances dans ces différents domaines et mettent à disposition leurs algorithmes, en les encapsulant dans des interfaces (web, API, SDK…) facilitant leur utilisation. En ce sens, nous pouvons parler d’Intelligence Artificielle as a Service !

Les services cognitifs de Microsoft se répartissent en cinq catégories présentées sur l’image suivante.

Documentation Microsoft

Plusieurs de ces services sont accessibles en démonstration ou test sur le site de Microsoft. Pour une utilisation plus régulière et dans un cadre professionnel, un abonnement Azure sera nécessaire.

Pour une entreprise est convaincue de la création de valeur potentielle au travers des données non structurées (texte, image, son, vidéo…), elle doit dorénavant s’interroger sur la faisabilité d’un développement équivalent : existe-t-il des ressources (personnes et machines) capables de produire le niveau de performance attendu des algorithmes ? A la négative, il pourra être très intéressant d’exploiter les services cognitifs.

Microsoft Custom Vision

Le site customvision.ai de Microsoft vous permet de vous lancer rapidement dans l’évaluation de modèles de classification ou de reconnaissance d’objets, sans avoir à saisir une seule ligne de code !

Identifiez-vous sur le portail, avec votre compte Azure. Il sera possible de créer et conserver simultanément deux projets sur la plateforme, et ce, sans facturation. Dans l’exemple ci-dessous, nous choisissons un projet de type « Object detection ». Notre cas d’usage sera ici d’identifier l’existence d’un panneau de limitation de vitesse sur une photo.

Il sera alors nécessaire de créer ou d’associer un groupe de ressources Azure. Si cette notion ne vous parle pas, rapprochez-vous des administrateurs de votre souscription Azure.

Trois domaines sont proposés : il s’agit ici de spécifier le « début » du réseau de neurones profond qui sera employé dans notre démarche d’apprentissage par transfert. Nous restons ici sur le domaine général. L’utilisation du domaine « Logo » permettrait de bénéficier de couches de neurones déjà entrainées à la reconnaissance de logos de marques commerciales.

Chargement des images et ajout de tags

L’écran suivant correspond à l’interface de chargement des données et d’entrainement du modèle. Nous rentrons ici dans la logique dite supervisée de l’apprentissage automatique : il faut fournir des exemples que le réseau interprétera pour construire le modèle, qui lui permettra ensuite de réaliser des prévisions. En résumé, prédire le futur correspond à reproduire le passé, en le généralisant !

La première étape consiste à charger des images (« add images ») à partir de l’ordinateur que nous utilisons. Ces images peuvent être de format .jpg, .png, .bmp ou .gif et il n’y a pas d’exigence à ce qu’elles soient de la même résolution. Le poids de l’image utilisée en entrainement ne pourra pas dépasser 6Mo et 4Mo en prévision. Les images dont la largeur se situe en dessous de 256 pixels sont automatiquement remises à l’échelle par le service.

Un minimum de 15 images est requis pour débuter un modèle de détection d’un objet. Toutefois, il faudra viser une cinquantaine d’images pour une première expérience significative et s’en tenir à des cas d’usage relativement « visibles ». Même si la technologie s’en rapproche, ce n’est pas cet outil qui sert par exemple à détecter des pathologies dans des clichés médicaux.

Il est maintenant nécessaire de travailler chaque image en entourant la zone souhaitée (ici le panneau rond de limitation) et en y associant un « tag » (mot clé identifiant l’objet). C’est la partie manuelle et sans doute la plus rébarbative de l’entrainement du modèle.

Si l’on souhaite reconnaitre plusieurs objets, il sera nécessaire de compter au moins 15 images par objet.

Première itération du modèle

Lors de la phase d’entrainement, l’algorithme cherche à réduire l’erreur de prévision sur la base des images déjà taguées.

Deux types d’entrainement sont disponibles :

  • Fast training
  • Advanced training

Deux règles s’appliquent ici de manière assez générale :

  • Plus il y a beaucoup de données, plus le temps d’entrainement sera long et meilleur sera le modèle.
  • Plus l’entrainement est long ou sollicite de machines puissantes, plus celui-ci sera cher.

L’entrainement peut durer plusieurs minutes et s’étendre sur plusieurs heures en cas de volumétrie et de complexité importante. Nous privilégions ici dans un premier temps l’entrainement rapide.

Evaluer et tester le modèle

Le menu Performance permet de consulter les indicateurs de qualité du modèle.

La précision correspond, pour un tag donné, à la proportion d’images correctement classées ou avec une reconnaissance d’objets exacte sur l’ensemble des images.

Le rappel (Recall) correspond à la proportion d’images appartenant réellement à une classe parmi toutes les images prédites dans cette classe.

On définira le seuil de probabilité (Probability Threshold) pour savoir si la confiance dans une prévision est suffisante pour classer une image ou détecter un objet.

Le score mAP (mean Average Precision) est un calcul synthétisant les indicateurs de précision et de rappel, en moyenne pour l’ensemble des classes ou des objets à détecter.

On cherchera à maximiser ces trois indicateurs mais attention, ce n’est pas forcément souhaitable que de disposer d’un modèle « parfait » comme sur l’illustration ci-dessus. La perfection en apprentissage automatique est nommée surapprentissage (« overfitting ») et peut se traduire par un manque de capacité de généralisation. Concrètement, le modèle a de forts risques d’échec dès que de nouvelles images dévieront des images d’entrainement.

Une solution consiste ici à augmenter le nombre d’images utilisées pour l’apprentissage, en prenant soin de varier les contextes d’images (routes de jour / de nuit, panneaux étrangers, etc.).

L’interface de Custom Vision nous propose maintenant de tester le modèle établi.

Nous utilisons bien sûr ici une image qui n’a pas servi à l’entrainement du modèle. Il est possible d’utiliser une image de l’ordinateur local ou bien une URL web d’image.

Il sera également possible de comparer les résultats du test sur les différentes itérations d’entrainement.

Sur cette première image, le panneau est bien identifié avec une probabilité de plus de 98% mais nous observons également que l’arrière du camion a été analysé comme un panneau. Pour autant, la probabilité est très faible (< 25%) et nous pourrons rejeter cette hypothèse en définissant un seuil d’acceptation.

Le panneau de limitation est bien identifié, avec un score de confiance dépassant 82%

Sur ce second test, deux panneaux sont identifiés avec une probabilité forte (> 80%) d’être une limitation de vitesse. Ce n’est pourtant le cas que sur le panneau de bas. Nous devons à nouveau grossir le jeu d’entrainement, en incluant plus de diversité de panneaux et relancer une itération !

Microsoft donne plusieurs conseils pour améliorer un classifieur sur cette page. Un principe générique consistera à ajouter des images variées selon l’arrière-plan, l’éclairage, les tailles d’objet, les angles de vue…

Exploiter le modèle depuis une application tierce

Bien sûr, un usage professionnel du modèle obtenu ne pourra se faire au niveau du portail. On utilisera une application tierce qui appellera le modèle au travers d’une API.

Le modèle obtenu au travers de la meilleure itération doit tout d’abord être publié (bouton « Publish ») et associé au groupe de ressources préalablement défini sur le portail Azure.

En cliquant ensuite sur « Prediction URL », on obtiendra l’URL et la clé de prévision (prediction URL & prediction-key). L’URL de prévision est aussi appelée endpoint.

La prediction key est aussi visible depuis le portail Azure, au niveau de la ressource créée pour l’utilisation du service Custom Vision.

Deux kits de développement (SDK) existent également et permettent de réaliser l’ensemble des étapes en programmation .NET (téléchargeables pour l’entrainement et la prévision) ou en Python à l’aide de la commande suivante :

pip install azure-cognitiveservices-vision-customvision

La documentation Microsoft vous guidera sur le reste du code à écrire pour appeler le modèle.