Mettre en œuvre l'apprentissage actif

Utiliser Active Learning pour améliorer rapidement vos modèles sur Roboflow .

Written by Mohamed Traore

Last published at: June 30th, 2022

"L'apprentissage actif est une stratégie de formation en apprentissage automatique qui permet à un algorithme d'identifier de manière proactive des sous-ensembles de données de formation susceptibles d'améliorer le plus efficacement les performances. Plus simplement, l'apprentissage actif est une stratégie permettant d'identifier les exemples spécifiques de nos données de formation qui peuvent le mieux améliorer les performances du modèle. Il s'agit d'un sous-ensemble de stratégies d'apprentissage automatique humain dans la boucle pour améliorer nos modèles en tirant le meilleur parti de nos données de formation." - Qu'est-ce que l'apprentissage actif ?

La beauté de l'apprentissage actif est qu'il peut vous aider à créer un modèle plus robuste avec moins d'images. Les cycles de formation qui seront nécessaires pour maintenir le bon fonctionnement de votre modèle et l'améliorer diminueront rapidement avec le temps.

Il existe 3 façons principales de mettre en œuvre l'apprentissage actif :

1. Collectez continuellement de nouvelles images au hasard

Vous pouvez coder l'échantillonnage aléatoire dans votre solution de déploiement.

L'échantillonnage aléatoire aidera à intégrer davantage d'images dans votre projet qui sont représentatives du véritable environnement de déploiement.

Avantages :

  1. Le modèle apprendra rapidement ce qu'il faut détecter et ce qu'il ne faut pas détecter dans l'environnement dans lequel il se trouve.
  2. Plus d'images contenant les objets d'intérêt (ce que notre modèle est entraîné à détecter) - après étiquetage et réentraînement, notre modèle fera beaucoup mieux dans son environnement de déploiement !

Exemple:

Vous exécutez l' inférence (déployez votre modèle) pendant une période de 6 heures. Dans ce laps de temps de 6 heures, vous configurez par programme votre appareil (c'est-à-dire NVIDIA Jetson ou OAK Device) pour enregistrer un nombre défini d'images toutes les 15 minutes (c'est-à-dire "enregistrer 3 images toutes les 15 minutes"). Renvoyez les images collectées à Roboflow ou stockez-les sur vos appareils/système pour un téléchargement ultérieur sur Roboflow .

  • Au fil du temps, vous verrez moins de fausses détections.
    • De plus, vous obtiendrez des images avec les objets d'intérêt (ce que votre modèle est entraîné à "voir"), quel que soit le niveau de confiance .
    • L'avantage de ceci est que votre modèle sera renforcé pour continuer à faire du "bon travail" sur les objets d'intérêt, et s'améliorer là où il a fait un "mauvais travail" (détection à faible confiance , ou pas de détection alors qu'il aurait dû y avoir un) quel que soit le niveau de confiance auquel il a été détecté.

2. Collectez de nouvelles images en dessous d'un seuil de confiance donné

Cette méthode peut être utilisée en sélectionnant un seuil de confiance pour les détections et en exigeant (dans votre propre code) que toute détection d'objets (que le modèle est entraîné à reconnaître) avec un seuil de confiance inférieur à ___ % ou 0,___ soit échantillonnée et envoyée Retournez à votre espace de travail sur Roboflow pour un examen plus approfondi, c'est-à-dire des tests dans l'application Web hébergée ou l'API d' inférence pour trouver le problème + l'étiquetage et une nouvelle formation.

Avantages :

  1. Le modèle apprendra rapidement ce qu'il faut détecter et ce qu'il ne faut pas détecter dans l'environnement dans lequel il se trouve.
  2. Le niveau de confiance pour les détections commencera rapidement à augmenter puisque vous dites essentiellement à votre modèle (après l'étiquetage et le réentraînement), "hé, vous avez fait du mauvais travail ici - c'est ce que vous étiez censé faire".
  3. Plus d'images contenant les objets d'intérêt (ce que notre modèle est entraîné à détecter) - après étiquetage et réentraînement, notre modèle fera beaucoup mieux dans son environnement de déploiement !

Exemples:

  • Commencez avec un seuil de confiance défini de 40 % - tous les objets (ou chaque __ nombre de fois qu'un objet) est détecté à un niveau de confiance inférieur à 40 %, ou 0,40, doivent être définis par programmation pour revenir à Roboflow ou stockés sur vos appareils pour un téléchargement futur vers Roboflow .
    • Suivant : après avoir réentrainé et reçu de meilleures métriques d'entraînement et/ou plus de données de l'environnement de production, définissez le seuil de confiance sur 50 %, et tous les objets détectés à un niveau de confiance inférieur à 50 %, ou 0,50, doivent être programmés pour revenir à Roboflow ou stocké sur vos appareils/système pour un téléchargement futur sur Roboflow .
    • Plus tard : Au fil du temps, vous pourrez définir une référence plus élevée pour les niveaux de confiance , tels que 60 %, 75 % ou 80 %. La raison pour laquelle vous ne souhaitez pas commencer à ces niveaux pour les benchmarks de confiance est que vous recevrez un nombre très élevé de fausses détections, ou de détections à faible niveau de confiance , avec des modèles plus récents.

3. Sollicitez les utilisateurs de votre application pour vérifier les prédictions du modèle

Avantages :

  1. Les commentaires des utilisateurs sont un excellent outil. Vous obtenez essentiellement plus de paires d'yeux pour vous aider dans le contrôle de la qualité de votre modèle.
  2. Vous pouvez également ajouter des repo de bogues, au cas où le modèle ne fonctionnerait pas du tout (c'est-à-dire des alertes lorsque le système ou l'application plante ou que le modèle s'exécute mais ne détecte rien).

Exemple:

  • Ajoutez des " repo de bogues" dans votre tableau de bord, votre application mobile ou la manière dont vous avez choisi de créer votre produit de vision par ordinateur. Utilisez ces repo de bogues pour identifier rapidement les moyens d'améliorer les fonctionnalités de votre produit de vision par ordinateur et, surtout, assurez-vous que les utilisateurs disposent d'un modèle qui non seulement fonctionne bien, mais est prêt à s'améliorer rapidement.
    • Prenez toutes les images des rapports de bogues et configurez-les par programmation pour les renvoyer à repo ou Roboflow -les sur votre système pour les télécharger ultérieurement sur Roboflow .

Ressources pour la mise en œuvre de l'apprentissage actif

Exemple de code

Tout d'abord, installez le Roboflow Python pip (PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. Copiez/collez le bloc de code ci-dessous dans VSCode, XCode, PyCharm, Spyder (ou un autre éditeur de code)
  2. Mettez à jour les valeurs pour le modèle [nom], la version du modèle, api_key et device_name dans l'objet "rf".
  3. Enregistrez le fichier python dans un répertoire - assurez-vous de noter le nom du répertoire et le nom du fichier car nous en aurons besoin plus tard pour que le déploiement fonctionne .
from roboflow import Roboflow
import json
# private api key found in Roboflow > YOURWORKSPACE > Roboflow API
# NOTE: this is your private key, not publishable key!
# https://docs.roboflow.com/rest-api#obtaining-your-api-key
private_api_key = "INSERT API KEY HERE"

# gain access to your workspace
rf = Roboflow(api_key=private_api_key)
workspace = rf.workspace()

# you can obtain your model path from your project URL, it is located
# after the name of the workspace within the URL - you can also find your
# model path on the Example Web App for any dataset version trained
# with Roboflow Train
# https://docs.roboflow.com/inference/hosted-api#obtaining-your-model-endpoint
model_path = "INSERT MODEL PATH HERE"
project = workspace.project(f"{model_path}")

# be sure to replace with a path to your file
# if you run this in Colab, be sure to upload the file to colab, hover over
# the file name, and select the 3 dots on the right of the file name to copy
# the file path, and paste it as the value for "imgpath"
img_path = "INSERT IMAGE PATH HERE"

# establish number of retries to use in case of upload failure
project.upload(f"{img_path}", num_retry_uploads=3)

API de téléchargement de Roboflow

L'API de téléchargement peut être utilisée pour télécharger des images dans un nouveau projet

  • exemple : Projet 1 : Modèle actuellement déployé | Projet 2 : Images d'apprentissage actif - images collectées au hasard | Projet 3 : Images d'apprentissage actif - images sous le seuil de confiance de 30 % | Projet 4: Images d'apprentissage actif - images en dessous d'un seuil de confiance de 50 %

API d' inférence de Roboflow

Les scripts "InferenceHosted" et "UploadHosted" sont à utiliser pour les images hébergées sur un serveur. Les scripts "InferenceLocal" et "UploadLocal" doivent être utilisés pour les images hébergées sur votre appareil (c'est-à-dire le disque dur de l'ordinateur ou l'appareil périphérique).

Paquet Python de Roboflow