Implementieren von aktivem Lernen

Verwenden Sie Active Learning, um Ihre Modelle auf Roboflow schnell zu verbessern.

Written by Mohamed Traore

Last published at: June 30th, 2022

„Aktives Lernen ist eine Trainingsstrategie für maschinelles Lernen, die es einem Algorithmus ermöglicht, Teilmengen von Trainingsdaten proaktiv zu identifizieren, die die Leistung am effizientesten verbessern können. Einfacher gesagt – aktives Lernen ist eine Strategie zur Identifizierung, welche spezifischen Beispiele in unseren Trainingsdaten die Modellleistung am besten verbessern können. Es handelt sich um eine Teilmenge von Human-in-the-Loop-Machine-Learning-Strategien zur Verbesserung unserer Modelle, indem wir das Beste aus unseren Trainingsdaten herausholen." - Was ist aktives Lernen?

Das Schöne am aktiven Lernen ist, dass es Ihnen dabei helfen kann, ein robusteres Modell mit weniger Bildern zu erstellen. Die Trainingsrunden, die erforderlich sind, um Ihr Modell am Laufen zu halten und zu verbessern, werden mit der Zeit schnell abnehmen.

Es gibt 3 Schlüsselmethoden, um aktives Lernen zu implementieren:

1. Sammeln Sie kontinuierlich neue Bilder nach dem Zufallsprinzip

Sie können Zufallsstichproben in Ihre Bereitstellungslösung codieren.

Zufallsstichproben helfen dabei, mehr Bilder in Ihr Projekt zu bringen, die repräsentativ für die tatsächliche Bereitstellungsumgebung sind.

Vorteile:

  1. Das Modell lernt schnell, was in der Umgebung, in der es sich befindet, zu erkennen und was nicht zu erkennen ist.
  2. Mehr Bilder, die die interessierenden Objekte enthalten (wofür unser Modell trainiert ist) – nach der Kennzeichnung und dem erneuten Training wird unser Modell in seiner Einsatzumgebung viel besser abschneiden!

Beispiel:

Sie führen die Inferenz (Bereitstellung Ihres Modells) für einen Zeitraum von 6 Stunden aus. In diesem 6-Stunden-Zeitrahmen stellen Sie Ihr Gerät (z. B. NVIDIA Jetson oder OAK Device) programmgesteuert so ein, dass alle 15 Minuten eine festgelegte Anzahl von Bildern gespeichert wird (z. B. „3 Bilder alle 15 Minuten speichern“). Geben Sie die gesammelten Bilder an Roboflow oder speichern Sie sie auf Ihren Geräten/Systemen, um sie später auf Roboflow hochzuladen.

  • Im Laufe der Zeit werden Sie weniger falsche Erkennungen sehen.
    • Zusätzlich erhalten Sie unabhängig vom Konfidenzniveau einige Bilder mit den interessierenden Objekten (was Ihr Modell "sehen" soll).
    • Der Vorteil davon ist, dass Ihr Modell verstärkt wird, um bei den interessierenden Objekten weiterhin „gute Arbeit“ zu leisten und sich dort zu verbessern, wo es „schlechte Arbeit“ geleistet hat (Erkennung mit geringem Vertrauen oder keine Erkennung, wenn dies hätte der Fall sein sollen eins) unabhängig von dem Konfidenzniveau , auf dem es erkannt wurde.

2. Sammeln Sie neue Bilder unterhalb einer gegebenen Konfidenzschwelle

Diese Methode kann verwendet werden, indem Sie einen Konfidenzschwellenwert für Erkennungen auswählen und (innerhalb Ihres eigenen Codes) verlangen, dass alle Erkennungen von Objekten (für deren Erkennung das Modell trainiert ist) mit einem Konfidenzschwellenwert unter ___ % oder 0,___ abgetastet und gesendet werden Zurück zu Ihrem Arbeitsbereich auf Roboflow zur weiteren Untersuchung, dh zum Testen in der gehosteten Web-App oder Inferenz -API, um das Problem + Kennzeichnung zu finden, und erneutes Training.

Vorteile:

  1. Das Modell lernt schnell, was in der Umgebung, in der es sich befindet, zu erkennen und was nicht zu erkennen ist.
  2. Das Konfidenzniveau für Erkennungen wird schnell steigen, da Sie Ihrem Modell im Wesentlichen (nach der Kennzeichnung und dem erneuten Training) mitteilen: „Hey, Sie haben hier einen schlechten Job gemacht – das sollten Sie tun.“
  3. Mehr Bilder, die die interessierenden Objekte enthalten (wofür unser Modell trainiert ist) – nach der Kennzeichnung und dem erneuten Training wird unser Modell in seiner Einsatzumgebung viel besser abschneiden!

Beispiele:

  • Beginnen Sie mit einem festgelegten Konfidenzschwellenwert von 40 % – alle Objekte (oder alle __ Mal ein Objekt), die mit einem Konfidenzniveau unter 40 % oder 0,40 erkannt werden, sollten programmgesteuert so eingestellt werden, dass sie an Roboflow oder für zukünftige Uploads auf Ihren Geräten gespeichert werden Roboflow .
    • Weiter : Legen Sie nach dem erneuten Training und dem Erhalt besserer Trainingsmetriken und/oder weiterer Daten aus der Produktionsumgebung den Konfidenzschwellenwert auf 50 % fest, und alle Objekte, die mit einem Konfidenzniveau unter 50 % oder 0,50 erkannt werden, sollten programmgesteuert auf Rückgabe gesetzt werden auf Roboflow oder auf Ihren Geräten/Systemen zum späteren Hochladen auf Roboflow .
    • Später : Im Laufe der Zeit werden Sie in der Lage sein, einen höheren Maßstab für Vertrauensniveaus festzulegen, z. B. 60 %, 75 % oder 80 %. Der Grund, warum Sie nicht mit diesen Werten für Konfidenz -Benchmarks beginnen möchten, ist, dass Sie bei neueren Modellen eine sehr hohe Anzahl falscher Erkennungen oder Erkennungen mit geringer Konfidenz erhalten.

3. Fordern Sie die Benutzer Ihrer Anwendung auf, Modellvorhersagen zu überprüfen

Vorteile:

  1. Benutzerfeedback ist ein großartiges Werkzeug. Sie erhalten im Wesentlichen mehr Augen, um bei der Qualitätskontrolle Ihres Modells zu helfen.
  2. Sie können auch repo hinzufügen, falls das Modell überhaupt nicht funktioniert (dh Warnungen, wenn das System oder die App abstürzt oder das Modell läuft, aber nichts erkennt).

Beispiel:

  • Fügen Sie Ihrem Dashboard, Ihrer mobilen App oder wie auch immer Sie sich entschieden haben, Ihr Computer-Vision-Produkt zu erstellen, „ repo “ hinzu. Verwenden Sie diese repo , um schnell Möglichkeiten zur Verbesserung der Funktionalität Ihres Computer-Vision-Produkts zu identifizieren, und stellen Sie vor allem sicher, dass die Benutzer ein Modell haben, das nicht nur gut funktioniert, sondern auch darauf vorbereitet ist, sich schnell zu verbessern.
    • Nehmen Sie alle Bilder aus Fehlerberichten und legen Sie sie programmgesteuert für die Rückgabe an repo fest oder speichern Sie sie auf Ihrem System, um sie später auf Roboflow Roboflow .

Ressourcen für die Implementierung von aktivem Lernen

Beispielcode

Installieren Sie zuerst das Roboflow Python-Pip-Paket (PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. Kopieren Sie den folgenden Codeblock und fügen Sie ihn in VSCode, XCode, PyCharm, Spyder (oder einen anderen Code-Editor) ein.
  2. Aktualisieren Sie die Werte für model [name], model version, api_key und device_name innerhalb des „rf“-Objekts.
  3. Speichern Sie die python -Datei in einem Verzeichnis – notieren Sie sich unbedingt den Verzeichnisnamen und den Dateinamen, da wir diese später benötigen, damit die Bereitstellung funktioniert .
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)

Die Upload-API Roboflow

Die Upload-API kann verwendet werden, um Bilder in ein neues Projekt hochzuladen

  • Beispiel : Projekt 1 : Derzeit bereitgestelltes Modell | Projekt 2 : Aktive Lernbilder – zufällig gesammelte Bilder | Projekt 3 : Aktive Lernbilder – Bilder unterhalb der Vertrauensschwelle von 30 % | Projekt 4: Aktive Lernbilder – Bilder unterhalb einer Konfidenzschwelle von 50 %

Die Inferenz -API Roboflow

Für Bilder, die auf einem Server gehostet werden, sind die Skripte „InferenceHosted“ und „UploadHosted“ zu verwenden. Die Skripte „InferenceLocal“ und „UploadLocal“ sind für Bilder zu verwenden, die auf Ihrem Gerät (dh Computerfestplatte oder Edge-Gerät) gehostet werden.

Das Python-Paket Roboflow