Zephyrnet-Logo

Objekterkennung und Modellumschulung mit Amazon SageMaker und Amazon Augmented AI

Datum:

Branchen wie Gesundheitswesen, Medien und Social Media-Plattformen verwenden Bildanalyse-Workflows, um Objekte und Entitäten in Bildern zu identifizieren und das gesamte Bild zu verstehen. Beispielsweise kann eine E-Commerce-Website Objekte verwenden, die in einem Bild vorhanden sind, um relevante Suchergebnisse anzuzeigen. Manchmal kann die Bildanalyse schwierig sein, wenn die Bilder verschwommen oder nuancierter sind. In diesen Fällen benötigen Sie möglicherweise einen Menschen, der die maschinelle Lernschleife (ML) abschließt und anhand seines menschlichen Urteils über das Bild berät.

In diesem Beitrag verwenden wir Amazon Sage Maker Erstellen, Trainieren und Bereitstellen eines ML-Modells zur Objekterkennung und -verwendung Amazon Augmented AI (Amazon A2I) zum Erstellen und Rendern einer benutzerdefinierten Worker-Vorlage, mit der Prüfer in einem Bild gefundene Objekte identifizieren oder überprüfen können. Amazon SageMaker ist ein vollständig verwalteter Dienst, mit dem Entwickler und Datenwissenschaftler ML-Modelle schnell erstellen, trainieren und bereitstellen können. Amazon SageMaker entfernt das schwere Heben aus jedem Schritt des ML-Prozesses, um die Entwicklung hochwertiger Modelle zu vereinfachen. Amazon A2I ist ein vollständig verwalteter Dienst, mit dem Sie Workflows für die Überprüfung von Personen erstellen können, um die Vorhersagen der ML-Modelle zu überprüfen und zu validieren.

Sie können auch Amazon-Anerkennung zur Objekterkennung zur Identifizierung von Objekten aus einem vordefinierten Satz von Klassen oder zur Verwendung Benutzerdefinierte Etiketten von Amazon Rekogition Trainieren Sie Ihr benutzerdefiniertes Modell, um Objekte und Szenen in Bildern zu erkennen, die auf Ihre Geschäftsanforderungen zugeschnitten sind, indem Sie einfach Ihre eigenen Daten mitbringen.

Einige andere häufige Anwendungsfälle, die möglicherweise menschliche Arbeitsabläufe erfordern, sind die Moderation von Inhalten in Bildern und Videos, das Extrahieren von Text und Entitäten aus Dokumenten, die Übersetzung und die Stimmungsanalyse. Obwohl Sie ML-Modelle verwenden können, um unangemessene Inhalte zu identifizieren oder Entitäten zu extrahieren, müssen Menschen möglicherweise die Modellvorhersagen basierend auf dem Anwendungsfall validieren. Mit Amazon A2I können Sie diese menschlichen Workflows schnell erstellen.

Sie können auch Amazon A2I verwenden, um eine zufällige Stichprobe von ML-Vorhersagen an menschliche Prüfer zu senden. Sie können diese Ergebnisse verwenden, um Stakeholder über die Leistung des Modells zu informieren und Modellvorhersagen zu prüfen.

Voraussetzungen:

Für diesen Beitrag müssen folgende Voraussetzungen erfüllt sein:

  • Eine IAM-Rolle - Um einen Workflow für die Überprüfung von Personen zu erstellen, müssen Sie einen bereitstellen AWS Identity and Access Management and (IAM) -Rolle, die Amazon A2I die Zugriffsberechtigung gewährt Amazon Simple Storage-Service (Amazon S3) zum Lesen von Objekten zum Rendern in einer Benutzeroberfläche für menschliche Aufgaben und zum Schreiben der Ergebnisse. Diese Rolle benötigt auch eine angehängte Vertrauensrichtlinie, um Amazon SageMaker die Berechtigung zum Übernehmen der Rolle zu erteilen. Auf diese Weise kann Amazon A2I Aktionen gemäß den Berechtigungen ausführen, die Sie der Rolle zuweisen. Weitere Informationen und Beispielrichtlinien finden Sie unter Hinzufügen von Berechtigungen zur IAM-Rolle, die zum Erstellen einer Flow-Definition verwendet wird.
  • Begleitendes Trainingsheft zur Objekterkennung - Dieser Beitrag bietet eine Begleitnotizbuch für diese exemplarische Vorgehensweise. In diesem Beitrag konzentrieren wir uns auf die Verwendung von Amazon A2I und darauf, wie wichtig es ist, menschliche Prüfer auf den neuesten Stand zu bringen. Daher nehmen wir ein trainiertes Objekterkennungsmodell aus einem S3-Bucket und Hosten Sie es auf einem von Amazon SageMaker gehosteten Endpunkt zur Echtzeitvorhersage. Weitere Informationen zum Trainieren eines Objekterkennungsmodells mit dem integrierten Amazon SageMaker Single Shot Multibox Detector (SSD) Algorithmus mit PASCAL VOC-Datensatz und Hosting für Echtzeit-Vorhersage, siehe die GitHub Repo. Wenn Sie daran interessiert sind, ein eigenes Modell zu erstellen, befolgen Sie das Notizbuch zur Objekterkennung. Wenn Sie einen großen Datensatz ohne haben Amazon Sagemaker Ground Truth Mit Beschriftungen können Sie Ground Truth verwenden, um Ihre Bilder effizient im Maßstab zu beschriften.

Exemplarische Vorgehensweise

Um diese Lösung zu implementieren, führen Sie die folgenden Schritte aus:

  1. Hosten Sie ein Objekterkennungsmodell auf Amazon SageMaker.
  2. Erstellen Sie eine Arbeitsaufgabenvorlage.
  3. Erstellen Sie ein privates Arbeitsteam.
  4. Erstellen Sie einen Workflow für die Überprüfung von Personen.
  5. Rufen Sie den Amazon SageMaker-Endpunkt auf.
  6. Vervollständige die menschliche Überprüfung.
  7. Verarbeiten Sie die JSON-Ausgabe für inkrementelles Training.

Für diesen Beitrag haben wir die exemplarische Vorgehensweise ausgeführt us-east-1, aber Amazon A2I ist in vielen Regionen verfügbar. Weitere Informationen finden Sie unter Regionstabelle.

Schritt 1: Hosten Sie ein Objekterkennungsmodell auf Amazon SageMaker

Dieser Schritt ist in der verfügbar begleitendes Jupyter-Notizbuch. Geben Sie zum Einrichten Ihres Endpunkts den folgenden Python-Code ein (dies kann einige Minuten dauern):

# provided trained model in the public bucket
source_model_data_s3_uri = 's3://aws-sagemaker-augmented-ai-example/model/model.tar.gz' !aws s3 cp {source_model_data_s3_uri} {MODEL_PATH}/model.tar.gz model_data_s3_uri = f'{MODEL_PATH}/model.tar.gz' timestamp = time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
endpoint_name = 'DEMO-object-detection-augmented-ai-' + timestamp # the docker image for the SageMaker built-in object detection algorithm
image = sagemaker.amazon.amazon_estimator.get_image_uri(region, 'object-detection', repo_version='latest') # loading up a Model object from the provided trained model model = sagemaker.model.Model(model_data_s3_uri, image, role = role, predictor_cls = sagemaker.predictor.RealTimePredictor, sagemaker_session = sess)
# deploying the model into one ml.m4.xlarge instance
object_detector = model.deploy(initial_instance_count = 1, instance_type = 'ml.m4.xlarge', endpoint_name = endpoint_name)
# defining the input content type. We will be sending images of jpeg format to the endpoint. object_detector.content_type = 'image/jpeg' 

Wenn der Endpunkt aktiv ist, sollte das angezeigt werden InService Status auf der Amazon SageMaker-Konsole. (Beachten Sie, dass Sie über die URL zur Konsole in us-east-1 gelangen, auf der wir die Demo erstellt haben. Amazon A2I ist jedoch in vielen weiteren Versionen verfügbar Regionen. Wechseln Sie unbedingt in Ihre Region.)

Geben Sie den folgenden Code ein, um zu sehen, wie die Objekterkennung aussieht. Die vorhergesagte Klasse und die Vorhersagewahrscheinlichkeit werden zusammen mit dem Begrenzungsrahmen unter Verwendung der Hilfsfunktionen visualisiert visualize_detection und load_and_predict definiert in der begleitendes Jupyter-Notizbuch.

test_photos_index = ['980382', '276517', '1571457'] if not os.path.isdir('sample-a2i-images'): os.mkdir('sample-a2i-images') for ind in test_photos_index: !curl https://images.pexels.com/photos/{ind}/pexels-photo-{ind}.jpeg > sample-a2i-images/pexels-photo-{ind}.jpeg test_photos = ['sample-a2i-images/pexels-photo-980382.jpeg', # motorcycle 'sample-a2i-images/pexels-photo-276517.jpeg', # bicycle 'sample-a2i-images/pexels-photo-1571457.jpeg'] # sofa results, detection_filtered, f = load_and_predict(test_photos[1], object_detector, threshold=0.2) 

Der folgende Screenshot zeigt die Ausgabe eines Bildes mit Beschriftung und Begrenzungsrahmen.

Wir haben dieses SSD-Modell zu Demonstrationszwecken in der USA untertrainiert Objekterkennungs-Trainingsheft. Obwohl das Modell ein Fahrrad im Bild identifiziert, wird eine Wahrscheinlichkeit von 0.245 als gering angesehen, um eine vertrauenswürdige Vorhersage in der modernen Computer Vision zu sein. Darüber hinaus ist die Lokalisierung des Objekts nicht ganz genau; Der Begrenzungsrahmen bedeckt nicht das Vorderrad und den Sattel. Dieses unterausgebildete Modell ist jedoch ein perfektes Beispiel dafür, wie man menschliche Prüfer hinzuzieht, wenn ein Modell keine Vorhersage mit hoher Sicherheit macht.

Schritt 2: Erstellen Sie eine Arbeitsaufgabenvorlage

Mit Amazon A2I können Sie eine menschliche Überprüfung in jeden ML-Workflow integrieren. In diesem Beitrag müssen Sie eine benutzerdefinierte Aufgabe erstellen, um Amazon A2I in den von Amazon SageMaker gehosteten Endpunkt zu integrieren. Wenn Sie einen benutzerdefinierten Aufgabentyp verwenden, erstellen und starten Sie eine menschliche Schleife mithilfe der Amazon A2I Runtime-API, um die zu überprüfenden Daten mithilfe einer Arbeitsaufgabenvorlage zu senden. Weitere Informationen finden Sie unter Verwenden Sie Amazon Augmented AI mit benutzerdefinierten Aufgabentypen.

Crowd HTML-Elemente sind Webkomponenten, die verschiedene Aufgaben-Widgets und Designelemente bereitstellen, die Sie an die gewünschte Frage anpassen können. Mit diesen Crowd-Elementen können Sie eine benutzerdefinierte Worker-Vorlage erstellen und in einen Amazon A2I-Workflow für die Überprüfung von Mitarbeitern integrieren, um die Worker-Konsole und -Anweisungen anzupassen. Wir bieten über 60 Beispielvorlagen für benutzerdefinierte Aufgaben in der GitHub Repo die Sie unverändert oder als Ausgangspunkt verwenden können, um Ihre eigenen Vorlagen anzupassen. Für einen Anwendungsfall der Objekterkennung muss der Prüfer normalerweise Beschriftungen auswählen und Begrenzungsrahmen zeichnen. Für diesen Beitrag verwenden Sie eine der Beispielaufgabenvorlagen. Bounding-Box.liquid.html, aus dem Repository und nehmen Sie einige Anpassungen vor. Diese Vorlage enthält Beschriftungsanweisungen, Beschriftungsfunktionen (Zeichnen, Vergrößern und Verkleinern sowie Beschriftungssuche) und liest ein Bild aus einem bestimmten Amazon S3-Pfad. Sie können die Vorlage auch an anpassen Zeigen Sie die Begrenzungsrahmen an sowie einem initial-value Damit die Arbeiter mit einem vom ML-Modell vorhergesagten Begrenzungsrahmen beginnen können, anstatt den Begrenzungsrahmen von Grund auf neu zu zeichnen.

Dieser Schritt ist in der verfügbar begleitendes Jupyter-Notizbuch. Führen Sie die folgenden Schritte aus, um eine benutzerdefinierte Worker-Vorlage auf der Amazon A2I-Konsole zu erstellen:

  1. Navigieren Vorlagen für Arbeitsaufgaben.
  2. Auswählen Vorlage erstellen.
  3. Aussichten für Name der VorlageGeben Sie in Ihrem Konto einen Namen ein, der innerhalb der Region eindeutig ist. zum Beispiel, a2i-demo-object-detection-ui.
  4. Aussichten für Vorlagentyp, wählen Maßgeschneidert.
  5. Im VorlageneditorGeben Sie die Beispielaufgabe für HTML-Vorlagen ein Bounding-Box.liquid.html.
    1. ändern Sie die labels Variable im Editor gemäß den im PASCAL VOC-Datensatz und Objekterkennungsmodell enthaltenen Klassen: ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat','chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person','pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']
  6. Auswählen Erstellen.

Schritt 3: Erstellen Sie ein privates Arbeitsteam

Mit Amazon A2I können Sie Bewertungen ganz einfach an Ihre privaten Mitarbeiter weiterleiten. Sie können auch auf eine Belegschaft von über 500,000 unabhängigen Auftragnehmern zugreifen, die bereits ML-bezogene Aufgaben ausführen Amazon Mechanischer Türke. Wenn Ihre Daten Vertraulichkeit oder besondere Fähigkeiten erfordern, können Sie alternativ Mitarbeiter einsetzen, die Erfahrung mit Überprüfungsprojekten haben und von AWS auf Qualitäts- und Sicherheitsverfahren überprüft werden.

Unabhängig davon, welchen Belegschaftstyp Sie wählen, übernimmt Amazon A2I das Senden von Aufgaben an Mitarbeiter. Für diesen Beitrag erstellen Sie ein Arbeitsteam mit einer privaten Belegschaft und fügen sich dem Team hinzu, um eine Vorschau des Amazon A2I-Workflows anzuzeigen.

Sie erstellen und verwalten Ihre privaten Mitarbeiter in der Beschriften der Belegschaftsseite auf der Amazon SageMaker-Konsole. Wenn Sie den Anweisungen folgen, können Sie eine private Belegschaft erstellen, indem Sie Mitarbeiter-E-Mails eingeben oder eine bereits vorhandene Belegschaft aus einer importieren Amazon Cognito Benutzerpool.

Wenn Sie bereits ein Arbeitsteam für Amazon SageMaker Ground Truth erstellt haben, können Sie dasselbe Arbeitsteam mit Amazon A2I verwenden und mit dem folgenden Abschnitt fortfahren.

Dieser Schritt ist im zugehörigen Jupyter-Notizbuch nicht verfügbar.

Führen Sie die folgenden Schritte aus, um Ihr privates Arbeitsteam zu erstellen:

  1. Navigieren Sie in der Amazon SageMaker-Konsole zu Kennzeichnung von Arbeitskräften
  2. Auf dem Privat Tab, wählen Sie Erstellen Sie ein privates Team.
  3. Auswählen Laden Sie neue Mitarbeiter per E-Mail ein.
  4. Geben Sie für diesen Beitrag Ihre E-Mail-Adresse ein, um Ihre Dokumentverarbeitungsaufgaben zu bearbeiten.

Sie können eine Liste mit bis zu 50 durch Kommas getrennten E-Mail-Adressen in das Feld eingeben E-mailadressen Box.

  1. Geben Sie einen Organisationsnamen ein und kontaktieren Sie die E-Mail-Adresse.
  2. Auswählen Erstellen Sie ein privates Team.

Nachdem Sie das private Team erstellt haben, erhalten Sie eine E-Mail-Einladung. Der folgende Screenshot zeigt eine Beispiel-E-Mail.

Nachdem Sie auf den Link geklickt und Ihr Passwort geändert haben, werden Sie als verifizierter Mitarbeiter für dieses Team registriert. Der folgende Screenshot zeigt die aktualisierten Informationen auf der Privat Tab.

Ihr Ein-Personen-Team ist jetzt bereit und Sie können einen Workflow für die Überprüfung von Personen erstellen.

Ersetzen 'IHR_ARBEITSTEAM_ARN' der begleitendes Jupyter-Notizbuch mit der ARN des von Ihnen erstellten Arbeitsteams:

WORKTEAM_ARN = 'YOUR_WORKTEAM_ARN'

Schritt 4: Erstellen Sie einen Workflow für die Überprüfung von Personen

Ein menschlicher Überprüfungsworkflow wird auch als bezeichnet Flussdefinition. Sie verwenden die Ablaufdefinition, um Ihr menschliches Arbeitsteam zu konfigurieren und Informationen zum Ausführen der Überprüfungsaufgabe bereitzustellen. Sie können eine Flussdefinition verwenden, um mehrere menschliche Schleifen zu erstellen.

Dieser Schritt ist in der verfügbar begleitendes Jupyter-Notizbuch. Führen Sie dazu auf der Amazon A2I-Konsole die folgenden Schritte aus:

  1. Navigieren zu den Workflows zur Überprüfung von Menschen
  2. Auswählen Erstellen Sie einen Workflow für die Überprüfung von Personen.
  3. Im Workflow-Einstellungen Abschnitt, für Name und VornameGeben Sie einen eindeutigen Workflownamen ein. zum Beispiel, a21-demo-1.
  4. Aussichten für S3-EimerGeben Sie den S3-Bucket ein, in dem Sie die Ergebnisse der menschlichen Überprüfung speichern möchten.

Der Bucket muss sich in derselben Region wie der Workflow befinden. Zum Beispiel, wenn Sie einen Bucket namens erstellen a2i-demosGeben Sie den Pfad ein s3://a2i-demos/.

  1. Aussichten für IAM-Rolle, wählen Erstellen Sie eine neue Rolle Aus dem Dropdown-Menü.

Amazon A2I kann automatisch eine Rolle für Sie erstellen.

  1. Aussichten für Von Ihnen angegebene S3-BucketsWählen Spezifische S3-Eimer.
  2. Geben Sie den zuvor angegebenen S3-Bucket ein. Zum Beispiel a2i-Demos.
  3. Auswählen Erstellen.

Sie sehen eine Bestätigung, wenn die Rollenerstellung abgeschlossen ist und Ihre Rolle jetzt in der Liste ausgefüllt ist IAM-Rolle Dropdown-Menü.

  1. Aussichten für AufgabentypWählen Maßgeschneidert.

In den nächsten Schritten wählen Sie die zuvor erstellte UI-Vorlage aus.

  1. Im Vorlage für Arbeitsaufgaben Abschnitt auswählen Verwenden Sie Ihre eigene Vorlage.
  2. Aussichten für TemplateWählen Sie die Vorlage aus, die Sie erstellt haben.
  3. Aussichten für AufgabenbeschreibungGeben Sie eine kurze Beschreibung der Aufgabe ein.
  4. Im Arbeitskräfte Wählen Sie im Bereich Privat die Option Privat.
  5. Aussichten für Private TeamsWählen Sie das zuvor erstellte Arbeitsteam aus.
  6. Auswählen Erstellen.

Sie werden zum weitergeleitet Workflows zur Überprüfung von Menschen Seite und sehen Sie eine Bestätigungsmeldung ähnlich dem folgenden Screenshot.

Notieren Sie Ihren neuen ARN für die Überprüfung menschlicher Überprüfungen, mit dem Sie im nächsten Abschnitt Ihre menschliche Schleife konfigurieren.

Schritt 5: Rufen Sie den Amazon SageMaker-Endpunkt auf

Nachdem Sie Ihren Amazon A2I-Workflow für die Überprüfung von Personen eingerichtet haben, können Sie Ihren Objekterkennungsendpunkt in Amazon SageMaker aufrufen und Ihre menschlichen Schleifen starten. In diesem Anwendungsfall möchten Sie eine menschliche Schleife nur starten, wenn die höchste von Ihrem Modell für erkannte Objekte zurückgegebene Vorhersagewahrscheinlichkeit weniger als 50% beträgt (SCORE_THREHOLD). Mit ein wenig Logik (siehe folgenden Code) können Sie die Antwort für jeden Aufruf des Amazon SageMaker-Endpunkts mithilfe von überprüfen load_and_predict Hilfsfunktion, und wenn die höchste Vorhersagewahrscheinlichkeit weniger als 50% beträgt, erstellen Sie eine menschliche Schleife.

Sie verwenden eine menschliche Schleife, um Ihren menschlichen Überprüfungsworkflow zu starten. Wenn eine menschliche Schleife ausgelöst wird, werden menschliche Überprüfungsaufgaben an die Mitarbeiter gesendet, wie in der Flussdefinition angegeben.

Dieser Schritt ist in der verfügbar begleitendes Jupyter-Notizbuch.

human_loops_started = []
SCORE_THRESHOLD = .50
for fname in test_photos: # Call SageMaker endpoint and not display any object detected with probability lower than 0.4. response, score_filtered, fig = load_and_predict(fname, object_detector, threshold=0.4) # Sort by prediction score so that the first item has the highest probability score_filtered.sort(key=lambda x: x[1], reverse=True) # Our condition for triggering a human review # if the highest probability is lower than the threshold, send it to human review # otherwise proceed to the next image if (score_filtered[0][1] < SCORE_THRESHOLD): s3_fname='s3://%s/a2i-results/%s' % (BUCKET, fname) print(s3_fname) humanLoopName = str(uuid.uuid4()) inputContent = { "initialValue": score_filtered[0][0], "taskObject": s3_fname # the s3 object will be passed to the worker task UI to render } # start an a2i human review loop with an input start_loop_response = a2i.start_human_loop( HumanLoopName=humanLoopName, FlowDefinitionArn=flowDefinitionArn, HumanLoopInput={ "InputContent": json.dumps(inputContent) } ) human_loops_started.append(humanLoopName) print(f'Object detection Confidence Score of %s is less than the threshold of %.2f' % (score_filtered[0][0], SCORE_THRESHOLD)) print(f'Starting human loop with name: {humanLoopName} n') else: print(f'Object detection Confidence Score of %s is above than the threshold of %.2f' % (score_filtered[0][0], SCORE_THRESHOLD)) print('No human loop created. n')

Der vorhergehende Code verwendet eine einfache if-else-Anweisung, aber für dynamische Bedingungen können Sie auch verwenden AWS Lambda zu bewerten, ob ein Objekt eine menschliche Überprüfung benötigt. Wenn Sie entscheiden, dass eine Überprüfung durch den Menschen erforderlich ist, können Sie mit eine menschliche Schleife erstellen a2i.start_human_loop.

Schritt 6: Abschluss einer menschlichen Überprüfung

Nachdem Sie die Bilder mit geringer Vorhersagewahrscheinlichkeit über das an Amazon A2I gesendet haben start_human_loop Wenn Sie anrufen, können Sie oder die als Prüfer zugewiesene Person sich beim Etikettierungsportal anmelden, um die Bilder zu überprüfen. Sie finden die URL in der Amazon SageMaker-Konsole auf der Privat Registerkarte der Kennzeichnung der Belegschaft Seite. Sie können die URL auch programmgesteuert mit dem folgenden Code abrufen:

print('https://' + sagemaker_client.describe_workteam(WorkteamName=workteamName)['Workteam']['SubDomain'])

Für diesen Beitrag Arbeitsteamname is a2i-demo-1.

Führen Sie die folgenden Schritte aus, um eine Überprüfung durch den Menschen durchzuführen:

  1. Wenn Sie zum Portal navigieren, werden Sie aufgefordert, sich mit Ihrem Benutzernamen und Passwort anzumelden (wenn Sie das Portal zum ersten Mal besuchen, müssen Sie ein neues Passwort erstellen).

Sie können einen neuen Job für Sie in der sehen Jobs .

  1. Auswählen Objekterkennung a2i Demo.
  2. Auswählen Beginne zu arbeiten.

Die Seite enthält ein anpassbares Bedienfeld, das Bild und verfügbare Beschriftungen.

  1. Wählen Sie in der Symbolleiste aus Box.
  2. Der Etiketten, wählen Fahrrad.
  3. Zeichnen Sie Ihren Begrenzungsrahmen um das Objekt.
  4. Auswählen Absenden.

Nachdem Sie alle Bildprüfungen abgeschlossen haben, können Sie die Ausgabe der menschlichen Schleife analysieren. Amazon A2I speichert die Ergebnisse in Ihrem S3-Bucket und sendet Ihnen eine Amazon CloudWatch Ereignis.

Ihre Ergebnisse sollten im Amazon S3-Ausgabepfad verfügbar sein, der in der Definition des Workflows für die menschliche Überprüfung angegeben ist, wenn alle Arbeiten abgeschlossen sind. Die menschliche Antwort, das Etikett und der Begrenzungsrahmen werden zurückgegeben und in der JSON-Datei gespeichert. Der folgende Code zeigt eine Beispiel-JSON-Ausgabedatei für Amazon A2I:

{'flowDefinitionArn': 'arn:aws:sagemaker:us-east-1:xxxxxxxx:flow-definition/fd-sagemaker-object-detection-demo-2020-05-01-18-08-47', 'humanAnswers': [{'answerContent': { 'annotatedResult': { 'boundingBoxes': [{'height': 1801, 'label': 'bicycle', 'left': 1042, 'top': 627, 'width': 2869}], 'inputImageProperties': {'height': 2608, 'width': 3911}}}, 'submissionTime': '2020-05-01T18:24:53.742Z', 'workerId': 'xxxxxxxxxx'}], 'humanLoopName': 'xxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxx', 'inputContent': {'initialValue': 'bicycle', 'taskObject': 's3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg'}}

Sie können diese Informationen abrufen und für weitere Analysen analysieren. Im nächsten Schritt zeigen wir Ihnen, wie Sie diese vom Menschen überprüften Daten für die nächste Umschulungsiteration Ihres Modells verwenden.

Schritt 7: Verarbeiten der JSON-Ausgabe für inkrementelles Training

Im Objekterkennungs-TrainingsheftSie haben den in Amazon SageMaker integrierten Objekterkennungsalgorithmus verwendet, um die erste Version des Modells zu trainieren. Sie haben das Modell verwendet, um Vorhersagen für einige zufällige Bilder außerhalb der Stichprobe zu generieren, und haben eine unbefriedigende Vorhersage erhalten (geringe Wahrscheinlichkeit). Sie haben Amazon A2I auch verwendet, um das Bild anhand Ihrer benutzerdefinierten Kriterien zu überprüfen und zu kennzeichnen (<50% Konfidenzwertschwelle). Der nächste Schritt in einem typischen ML-Lebenszyklus besteht darin, die Fälle, mit denen das Modell Probleme hatte, in den nächsten Stapel von Trainingsdaten für Umschulungszwecke aufzunehmen. Auf diese Weise kann das Modell aus einer Reihe neuer Trainingsdaten zur kontinuierlichen Verbesserung lernen. In ML heißt das inkrementelles Training.

Dieser Schritt ist in der verfügbar begleitendes Jupyter-Notizbuch.

Sie können die Bilddaten und Anmerkungen auf drei verschiedene Arten an den Objekterkennungsalgorithmus senden. Weitere Informationen finden Sie unter Eingabe- / Ausgabeschnittstelle für den Objekterkennungsalgorithmus. Für diesen Beitrag haben wir unser Originalmodell mit dem trainiert RecordIO-Format weil wir die PASCAL VOC-Bilder und Anmerkungen in das RecordIO-Format konvertiert haben. Anweisungen zum Erstellen benutzerdefinierter RecordIO-Daten finden Sie unter Bereiten Sie benutzerdefinierte Datensätze für die Objekterkennung vor.

Alternativ verwendet der Objekterkennungsalgorithmus auch eine JSON-Datei als Eingabe. Sie können eine JSON-Datei pro Bild erstellen oder davon profitieren Rohrmodus mit einem erweitertes Manifest Datei als Eingabeformat. Der Pipe-Modus beschleunigt die Trainingszeit des gesamten Modells um bis zu 35%, indem die Daten während der Ausführung in den Trainingsalgorithmus gestreamt werden, anstatt Daten in den zu kopieren Amazon Elastic Block-Shop (Amazon EBS) Volume, das an die Trainingsinstanz angehängt ist. Sie können eine erweiterte Manifestdatei aus der Amazon A2I-Ausgabe mit dem folgenden Code erstellen:

object_categories_dict = {str(i): j for i, j in enumerate(object_categories)} def convert_a2i_to_augmented_manifest(a2i_output): annotations = [] confidence = [] for i, bbox in enumerate(a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['boundingBoxes']): object_class_key = [key for (key, value) in object_categories_dict.items() if value == bbox['label']][0] obj = {'class_id': int(object_class_key), 'width': bbox['width'], 'top': bbox['top'], 'height': bbox['height'], 'left': bbox['left']} annotations.append(obj) confidence.append({'confidence': 1}) augmented_manifest={'source-ref': a2i_output['inputContent']['taskObject'], 'a2i-retraining': {'annotations': annotations, 'image_size': [{'width': a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['inputImageProperties']['width'], 'depth':3, 'height': a2i_output['humanAnswers'][0]['answerContent']['annotatedResult']['inputImageProperties']['height']}]}, 'a2i-retraining-metadata': {'job-name': 'a2i/%s' % a2i_output['humanLoopName'], 'class-map': object_categories_dict, 'human-annotated':'yes', 'objects': confidence, 'creation-date': a2i_output['humanAnswers'][0]['submissionTime'], 'type':'groundtruth/object-detection'}} return augmented_manifest

Dies führt zu einem JSON-Objekt wie dem folgenden Code, der damit kompatibel ist, wie Ground Truth das Ergebnis ausgibt und wie der in SageMaker integrierte Objekterkennungsalgorithmus die Eingabe erwartet:

{ 'source-ref': 's3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg', 'a2i-retraining': { 'annotations': [ { 'class_id': 1, 'height': 1801, 'left': 1042, 'top': 627, 'width': 2869}], 'image_size': [ { 'depth': 3, 'height': 2608, 'width': 3911}]}, 'a2i-retraining-metadata': { 'class-map': { '0': 'aeroplane', '1': 'bicycle', '2': 'bird', '3': 'boat', '4': 'bottle', '5': 'bus', '6': 'car', '7': 'cat', '8': 'chair', '9': 'cow' '10': 'diningtable', '11': 'dog', '12': 'horse', '13': 'motorbike', '14': 'person', '15': 'pottedplant', '16': 'sheep', '17': 'sofa', '18': 'train', '19': 'tvmonitor',}, 'creation-date': '2020-05-01T18:24:53.742Z', 'human-annotated': 'yes', 'job-name': 'a2i/fc3cea7e-ead8-4c5c-b52d-166ff6147ff0', 'objects': [{'confidence': 1}], 'type': 'groundtruth/object-detection'}}

Der vorhergehende Code ist nur ein Bild. Um eine Kohorte von Trainingsbildern aus allen Bildern zu erstellen, die von menschlichen Prüfern auf der Amazon A2I-Konsole neu beschriftet wurden, können Sie die gesamte Amazon A2I-Ausgabe durchlaufen, die JSON-Datei konvertieren und sie mit jeder Zeile in eine JSON-Zeilendatei verketten repräsentiert die Ergebnisse eines Bildes. Siehe folgenden Code:

with open('augmented.manifest', 'w') as outfile: for resp in completed_human_loops: # completed_human_loops contains a list of responses from a2i.describe_human_loop() calls splitted_string = re.split('s3://' + BUCKET + '/', resp['HumanLoopOutput']['OutputS3Uri']) output_bucket_key = splitted_string[1] response = s3.get_object(Bucket=BUCKET, Key=output_bucket_key) content = response["Body"].read() json_output = json.loads(content) augmented_manifest = convert_a2i_to_augmented_manifest(json_output) json.dump(augmented_manifest, outfile) outfile.write('n')
!head -n2 augmented.manifest
{"source-ref": "s3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-276517.jpeg", "a2i-retraining": {"annotations": [{"class_id": 1, "width": 2869, "top": 627, "height": 1801, "left": 1042}], "image_size": [{"width": 3911, "depth": 3, "height": 2608}]}, "a2i-retraining-metadata": {"job-name": "a2i/fc3cea7e-ead8-4c5c-b52d-166ff6147ff0", "class-map": {"0": "aeroplane", "1": "bicycle", "2": "bird", "3": "boat", "4": "bottle", "5": "bus", "6": "car", "7": "cat", "8": "chair", "9": "cow", "10": "diningtable", "11": "dog", "12": "horse", "13": "motorbike", "14": "person", "15": "pottedplant", "16": "sheep", "17": "sofa", "18": "train", "19": "tvmonitor"}, "human-annotated": "yes", "objects": [{"confidence": 1}], "creation-date": "2020-05-21T18:36:33.834Z", "type": "groundtruth/object-detection"}}
{"source-ref": "s3://sagemaker-us-east-1-xxxxxxx/a2i-results/sample-a2i-images/pexels-photo-1571457.jpeg", "a2i-retraining": {"annotations": [{"class_id": 17, "width": 1754, "top": 1285, "height": 1051, "left": 657}], "image_size": [{"width": 3500, "depth": 3, "height": 2336}]}, "a2i-retraining-metadata": {"job-name": "a2i/8241d6e4-8078-4036-b065-ccdd5ebf955f", "class-map": {"0": "aeroplane", "1": "bicycle", "2": "bird", "3": "boat", "4": "bottle", "5": "bus", "6": "car", "7": "cat", "8": "chair", "9": "cow", "10": "diningtable", "11": "dog", "12": "horse", "13": "motorbike", "14": "person", "15": "pottedplant", "16": "sheep", "17": "sofa", "18": "train", "19": "tvmonitor"}, "human-annotated": "yes", "objects": [{"confidence": 1}], "creation-date": "2020-05-21T18:36:22.268Z", "type": "groundtruth/object-detection"}}

Nachdem Sie genügend Datenpunkte gesammelt haben, können Sie einen neuen erstellen Estimator für inkrementelles Training. Weitere Informationen finden Sie unter Trainieren Sie Modelle einfach mit Datensätzen, die mit Amazon SageMaker Ground Truth gekennzeichnet sind. In diesem Blog verwenden wir die Hyperparameter genauso wie das erste Modell im Objekterkennungs-Trainingsheft, mit der Ausnahme, dass die Gewichte aus dem trainierten Modell anstelle der mit dem Algorithmus gelieferten vorgeübten Gewichte verwendet werden (use_pretrained_model=0).

Das folgende Codebeispiel zeigt ein inkrementelles Training mit ein oder zwei neuen Beispielen. Da wir in diesem Beitrag nur zwei Bilder überprüft haben, ergibt dies kein Modell mit bedeutender Verbesserung.

s3_train_data = 's3://bucket/path/to/training/augmented.manifest'
s3_validation_data = 's3://bucket/path/to/validation/augmented.manifest'
s3_output_location = 's3://bucket/path/to/incremental-training/'
num_training_samples = 1234 from sagemaker.amazon.amazon_estimator import get_image_uri
training_image = get_image_uri(region, 'object-detection', repo_version='latest') # Create a model object set to using "Pipe" mode because we are inputing augmented manifest files.
new_od_model = sagemaker.estimator.Estimator(training_image, role, train_instance_count=1, train_instance_type='ml.p3.2xlarge', train_volume_size = 50, train_max_run = 360000, input_mode = 'Pipe', output_path=s3_output_location, sagemaker_session=sess) # the hyperparameters are the same from how the original model is trained new_od_model.set_hyperparameters(base_network='resnet-50', use_pretrained_model=0, num_classes=20, mini_batch_size=32, epochs=1, lr_scheduler_step='3,6', lr_scheduler_factor=0.1, optimizer='sgd', momentum=0.9, weight_decay=0.0005, overlap_threshold=0.5, nms_threshold=0.45, image_shape=300, label_width=350, num_training_samples=num_training_samples) train_data = sagemaker.session.s3_input(s3_train_data, distribution='FullyReplicated', content_type='application/x-recordio', record_wrapping='RecordIO', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'a2i-retraining'])
validation_data = sagemaker.session.s3_input(s3_validation_data, distribution='FullyReplicated', content_type='application/x-recordio', record_wrapping='RecordIO', s3_data_type='AugmentedManifestFile', attribute_names=['source-ref', 'a2i-retraining'])
# Use the output model from the previous job. model_data = sagemaker.session.s3_input(model_data_s3_uri, distribution='FullyReplicated', content_type='application/x-sagemaker-model', s3_data_type='S3Prefix', input_mode = 'File') data_channels = {'train': train_data, 'validation': validation_data, 'model': model_data} new_od_model.fit(inputs=data_channels, logs=True)

Nach dem Training erhalten Sie ein neues Modell in der s3_output_location. Sie können dieses Modell dann auf einem neuen Inferenzendpunkt bereitstellen oder einen vorhandenen Endpunkt aktualisieren. Beim Aktualisieren eines vorhandenen Endpunkts tritt kein Verfügbarkeitsverlust auf. Um einen Endpunkt zu aktualisieren, müssen Sie eine neue Endpunktkonfiguration bereitstellen. Weitere Informationen finden Sie unter Endpunkt aktualisieren.

Aufräumen

Löschen Sie Ressourcen wie den Amazon SageMaker-Endpunkt, die Notebook-Instanz und die Modellartefakte in Amazon S3, um zukünftige Gebühren zu vermeiden, wenn diese nicht verwendet werden.

Zusammenfassung

Dieser Beitrag hat lediglich die Oberfläche dessen zerkratzt, was Amazon A2I in einem typischen ML-Lebenszyklus leisten kann. Wir haben gezeigt, wie Sie alles einrichten, was Sie benötigen, um einen arbeitenden Menschen im Loop-Framework zu haben: eine Amazon A2I Worker Task-Vorlagenoberfläche, einen menschlichen Überprüfungsworkflow und ein Arbeitsteam. Wir haben auch gezeigt, wie eine menschliche Amazon A2I-Schleife programmgesteuert ausgelöst wird, nachdem ein von Amazon SageMaker gehosteter Objekterkennungsendpunkt eine geringe Vertrauensinferenz zurückgegeben hat. Zuletzt haben wir Sie durch die Arbeit mit der JSON-Ausgabedatei von Amazon A2I geführt, um mithilfe des in Amazon SageMaker integrierten Objekterkennungsalgorithmus einen neuen Stapel von Trainingsdaten in einem erweiterten Manifestformat für inkrementelles Training zu erstellen.

Beispielvideopräsentationen, Beispiel-Jupyter-Notizbücher oder weitere Informationen zu Anwendungsfällen wie Dokumentverarbeitung, Inhaltsmoderation, Stimmungsanalyse, Textübersetzung und anderen finden Sie unter Amazon Augmented AI-Ressourcen.

Bibliographie

  • Everingham, Mark et al. "Die Herausforderung der pascalen visuellen Objektklassen: Eine Retrospektive." Internationale Zeitschrift für Computer Vision 111.1 (2015): 98-136.
  • Liu, Wei et al. "SSD: Single-Shot-Multibox-Detektor." Europäische Konferenz über Computer Vision. Springer, Cham, 2016.

Über die Autoren

Michael Hsieh ist Senior AI / ML Specialist Solutions Architect. Er arbeitet mit Kunden zusammen, um ihre ML-Reise mit einer Kombination aus AWS ML-Angeboten und seinem ML-Domänenwissen voranzutreiben. Als Transplantation in Seattle liebt er es, die großartige Natur zu erkunden, die die Stadt zu bieten hat, wie Wanderwege, Kajakfahren in der SLU und den Sonnenuntergang in der Shilshole Bay.

Anuj Gupta ist Senior Product Manager für Amazon Augmented AI. Er konzentriert sich auf die Bereitstellung von Produkten, die es Kunden erleichtern, maschinelles Lernen anzuwenden. In seiner Freizeit genießt er Roadtrips und schaut sich die Formel 1 an.

Quelle: https://aws.amazon.com/blogs/machine-learning/object-detection-and-model-retraining-with-amazon-sagemaker-and-amazon-augmented-ai/

spot_img

Neueste Intelligenz

spot_img