Actief leren implementeren

Active Learning gebruiken om snel uw modellen op Roboflow te verbeteren.

Written by Mohamed Traore

Last published at: June 30th, 2022

"Actief leren is een machine learning-trainingsstrategie die een algoritme in staat stelt om proactief subsets van trainingsgegevens te identificeren die de prestaties het meest efficiënt kunnen verbeteren. Eenvoudiger: actief leren is een strategie om te identificeren welke specifieke voorbeelden in onze trainingsgegevens de modelprestaties het best kunnen verbeteren. Het is een subset van human-in-the-loop machine learning-strategieën om onze modellen te verbeteren door het meeste uit onze trainingsgegevens te halen." - Wat is actief leren?

Het mooie van Active Learning is dat het u kan helpen een robuuster model te maken met minder afbeeldingen. De trainingsrondes die nodig zijn om uw model goed te laten werken en te verbeteren, zullen na verloop van tijd snel afnemen.

Er zijn 3 belangrijke manieren om actief leren te implementeren:

1. Verzamel willekeurig continu nieuwe afbeeldingen

U kunt willekeurige steekproeven coderen in uw implementatieoplossing.

Willekeurige steekproeven helpen om meer afbeeldingen in uw project te brengen die representatief zijn voor de werkelijke implementatieomgeving.

Voordelen:

  1. Het model leert snel wat wel en niet moet worden gedetecteerd in de omgeving waarin het zich bevindt.
  2. Meer afbeeldingen die de objecten van belang bevatten (wat ons model is getraind om te detecteren) - na labeling en hertraining zal ons model het veel beter doen binnen zijn implementatieomgeving!

Voorbeeld:

U voert inferentie uit (het implementeren van uw model) gedurende een periode van 6 uur. In dit tijdsbestek van 6 uur stelt u uw apparaat (dwz NVIDIA Jetson of OAK Device) programmatisch in om elke 15 minuten een bepaald aantal afbeeldingen op te slaan (dwz "elke 15 minuten 3 afbeeldingen opslaan"). Retourneer de verzamelde afbeeldingen naar Roboflow of sla ze op uw apparaten/systeem op voor toekomstige upload naar Roboflow .

  • Na verloop van tijd zult u minder valse detecties zien.
    • Bovendien krijgt u enkele afbeeldingen met de objecten van belang (wat uw model is getraind om te "zien"), ongeacht het betrouwbaarheidsniveau .
    • Het voordeel hiervan is dat uw model wordt versterkt om "goed werk" te blijven doen op de objecten van belang, en te verbeteren waar het "slecht werk" heeft gedaan (detectie met lage betrouwbaarheid , of geen detectie wanneer er een één) ongeacht het betrouwbaarheidsniveau waarop het werd gedetecteerd.

2. Verzamel nieuwe afbeeldingen onder een bepaalde betrouwbaarheidsdrempel

Deze methode kan worden gebruikt door een betrouwbaarheidsdrempel voor detecties te selecteren en (binnen uw eigen code) te vereisen dat alle detecties van objecten (waarvoor het model is getraind om te herkennen) met een betrouwbaarheidsdrempel van minder dan ___% of 0.___ wordt bemonsterd en verzonden terug naar uw werkruimte op Roboflow voor verder onderzoek, dwz testen in de Hosted Web App of Inference API om het probleem te vinden + labeling en hertraining.

Voordelen:

  1. Het model leert snel wat wel en niet moet worden gedetecteerd in de omgeving waarin het zich bevindt.
  2. Het betrouwbaarheidsniveau voor detecties zal snel toenemen, aangezien je in wezen je model vertelt (na labeling en hertraining): "Hé, je hebt het hier slecht gedaan - dit is wat je moest doen."
  3. Meer afbeeldingen die de objecten van belang bevatten (wat ons model is getraind om te detecteren) - na labeling en hertraining zal ons model het veel beter doen binnen zijn implementatieomgeving!

Voorbeelden:

  • Begin met een ingestelde betrouwbaarheidsdrempel van 40% - alle objecten (of elk __ aantal keren dat een object) wordt gedetecteerd met een betrouwbaarheidsniveau van minder dan 40%, of 0,40, moeten programmatisch worden ingesteld om terug te keren naar Roboflow of worden opgeslagen op uw apparaten voor toekomstige upload naar Roboflow .
    • Volgende : Nadat u opnieuw hebt getraind en betere trainingsstatistieken en/of meer gegevens uit de productieomgeving hebt ontvangen, stelt u de betrouwbaarheidsdrempel in op 50%, en alle objecten die worden gedetecteerd met een betrouwbaarheidsniveau van minder dan 50% of 0,50, moeten programmatisch worden ingesteld om terug te keren naar Roboflow of opgeslagen op uw apparaten/systeem voor toekomstige upload naar Roboflow .
    • Later : na verloop van tijd kunt u een hogere benchmark voor betrouwbaarheidsniveaus instellen, zoals 60%, 75% of 80%. De reden dat u niet op deze niveaus wilt beginnen voor betrouwbaarheidsbenchmarks , is dat u bij nieuwere modellen een zeer groot aantal valse detecties of detecties met een lage betrouwbaarheid zult ontvangen.

3. Vraag de gebruikers van uw applicatie om modelvoorspellingen te verifiëren

Voordelen:

  1. Gebruikersfeedback is een geweldig hulpmiddel. U krijgt in wezen meer paar ogen om te helpen bij de kwaliteitscontrole van uw model.
  2. U kunt ook repo toevoegen voor het geval het model helemaal niet werkt (dwz waarschuwingen voor wanneer het systeem of de app crasht of het model draait maar niets detecteert).

Voorbeeld:

  • Voeg " repo " toe aan uw dashboard, mobiele app of hoe u uw computer vision-product ook wilt maken. Gebruik deze repo om snel manieren te vinden om de functionaliteit van uw computer vision-product te verbeteren en, belangrijker nog, ervoor te zorgen dat gebruikers een model hebben dat niet alleen goed werkt, maar ook klaar is om snel te verbeteren.
    • Neem afbeeldingen van bugrapporten en stel ze programmatisch in om terug te keren naar repo of Roboflow ze op uw systeem op voor toekomstige upload naar Roboflow .

Bronnen voor het implementeren van actief leren

Voorbeeldcode

Installeer eerst het Roboflow Python pip-pakket (PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. Kopieer/plak het onderstaande codeblok in VSCode, XCode, PyCharm, Spyder (of een andere code-editor)
  2. Werk de waarden voor model [naam], modelversie, api_key en apparaatnaam bij binnen het "rf"-object.
  3. Sla het python -bestand op in een map - noteer de mapnaam en bestandsnaam, want deze hebben we later nodig om de implementatie te laten werken .
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)

De upload-API van Roboflow

De Upload API kan worden gebruikt om afbeeldingen naar een nieuw project te uploaden

  • voorbeeld : Project 1 : Momenteel geïmplementeerd model | Project 2 : Actieve leerafbeeldingen - willekeurig verzamelde afbeeldingen | Project 3 : Actieve leerbeelden - afbeeldingen onder de betrouwbaarheidsdrempel van 30% | Project 4: Actieve leerbeelden - afbeeldingen onder een betrouwbaarheidsdrempel van 50%

De inferentie -API van Roboflow

De scripts "InferenceHosted" en "UploadHosted" moeten worden gebruikt voor afbeeldingen die op een server worden gehost. De scripts "InferenceLocal" en "UploadLocal" moeten worden gebruikt voor afbeeldingen die op uw apparaat worden gehost (dwz de harde schijf van de computer of het edge-apparaat).

Het Python-pakket van Roboflow