Trainieren eines Amazon Rekognition Custom Labels-Modells - Rekognition

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Trainieren eines Amazon Rekognition Custom Labels-Modells

Sie können ein Modell mit der Amazon Rekognition Custom Labels-Konsole oder mit der Amazon Rekognition Custom Labels API trainieren. Wenn das Modelltraining fehlschlägt, verwenden Sie die Informationen in Debuggen eines fehlgeschlagenen Modelltrainings, um die Ursache des Fehlers zu ermitteln.

Anmerkung

Ihnen wird die Zeit in Rechnung gestellt, die für das erfolgreiche Trainieren eines Modells benötigt wird. In der Regel dauert es zwischen 30 Minuten und 24 Stunden, bis das Training abgeschlossen ist. Weitere Informationen finden Sie unter Trainingsdauer.

Jedes Mal, wenn das Modell trainiert wird, wird eine neue Version eines Modells erstellt. Amazon Rekognition Custom Labels erstellt einen Namen für das Modell, der eine Kombination aus dem Projektnamen und dem Zeitstempel der Erstellung des Modells ist.

Um Ihr Modell zu trainieren, erstellt Amazon Rekognition Custom Labels eine Kopie Ihrer ursprünglichen Trainings- und Testbilder. Standardmäßig werden die kopierten Bilder im Ruhezustand mit einem Schlüssel verschlüsselt, der AWS gehört und von AWS verwaltet wird. Sie haben auch die Möglichkeit, Ihren eigenen AWS KMS key zu verwenden. Wenn Sie Ihren eigenen KMS-Schlüssel verwenden, benötigen Sie die folgenden Berechtigungen für den KMS-Schlüssel.

  • km: CreateGrant

  • km: DescribeKey

Weitere Informationen finden Sie unter AWS Key Management Service-Konzepte. Ihre Quellbilder sind davon nicht betroffen.

Sie können die serverseitige KMS-Verschlüsselung (SSE-KMS) verwenden, um die Trainings- und Testbilder in Ihrem Amazon-S3-Bucket zu verschlüsseln, bevor sie von Amazon Rekognition Custom Labels kopiert werden. Um Amazon Rekognition Custom Labels Zugriff auf Ihre Bilder zu gewähren, benötigt Ihr AWS Konto die folgenden Berechtigungen für den KMS-Schlüssel.

  • km: GenerateDataKey

  • kms:Decrypt

Weitere Informationen finden Sie unter Schutz von Daten mit serverseitiger Verschlüsselung mit in AWS Key Management Service (SSE-KMS) gespeicherten KMS-Schlüsseln.

Nachdem Sie ein Modell trainiert haben, können Sie dessen Leistung bewerten und Verbesserungen vornehmen. Weitere Informationen finden Sie unter Verbessern eines geschulten Amazon Rekognition Custom Labels-Modells.

Informationen zu anderen Modellaufgaben, wie z. B. dem Markieren eines Modells, finden Sie unter Verwaltung eines Amazon-Rekognition-Custom-Labels-Modells.

Ein Modell trainieren (Konsole)

Sie können die Amazon Rekognition Custom Labels-Konsole verwenden, um ein Modell zu trainieren.

Für das Training ist ein Projekt mit einem Trainingsdatensatz und einem Testdatensatz erforderlich. Wenn Ihr Projekt keinen Testdatensatz hat, teilt die Amazon Rekognition Custom Labels-Konsole den Trainingsdatensatz während des Trainings auf, um einen für Ihr Projekt zu erstellen. Bei den ausgewählten Bildern handelt es sich um eine repräsentative Stichprobe und sie werden nicht im Trainingsdatensatz verwendet. Wir empfehlen, Ihren Trainingsdatensatz nur aufzuteilen, wenn Sie keinen alternativen Testdatensatz haben. Durch das Aufteilen eines Trainingsdatensatzes wird die Anzahl der für das Training verfügbaren Bilder reduziert.

Anmerkung

Ihnen wird die Zeit in Rechnung gestellt, die für das Trainieren eines Modells benötigt wird. Weitere Informationen finden Sie unter Trainingsdauer.

So trainieren Sie Ihr Modell (Konsole)
  1. Öffnen Sie die Amazon Rekognition-Konsole unter https://console.aws.amazon.com/rekognition/.

  2. Wählen Sie Benutzerdefinierte Labels verwenden.

  3. Wählen Sie im linken Navigationsbereich die Option Projekte aus.

  4. Wählen Sie auf der Seite Projekte das Projekt aus, das das zu trainierende Modell enthält.

  5. Wählen Sie auf der Seite Projekte Modell trainieren aus.

    Schaltfläche „Trainingsmodus“ zum Trainieren eines Modells für maschinelles Lernen anhand des Datensatzes im aktuellen Projekt.
  6. (Optional) Wenn Sie Ihren eigenen AWS KMS-Verschlüsselungsschlüssel verwenden möchten, gehen Sie wie folgt vor:

    1. Wählen Sie unter Bilddatenverschlüsselung die Option Verschlüsselungseinstellungen anpassen (erweitert) aus.

    2. Geben Sie in encryption.aws_kms_key den Amazon-Ressourcennamen (ARN) Ihres Schlüssels ein, oder wählen Sie einen vorhandenen AWS-KMS-Schlüssel aus. Um einen neuen Schlüssel zu erstellen, wählen Sie AWS IMS-Schlüssel erstellen.

  7. (Optional) Gehen Sie wie folgt vor, wenn Sie Ihr Modell mit Tags versehen möchten:

    1. Klicken Sie im Abschnitt Tags auf Neuen Tag hinzufügen.

    2. Geben Sie Folgendes ein:

      1. Den Namen des Schlüssels im Feld Schlüssel.

      2. Den Wert des Schlüssels im Feld Wert.

    3. Um weitere Tags hinzuzufügen, wiederholen Sie die Schritte 6a und 6b.

    4. (Optional) Wenn Sie ein Tag entfernen möchten, wählen Sie neben dem Tag, das Sie entfernen möchten, die Option Entfernen aus. Wenn Sie ein zuvor gespeichertes Tag entfernen, wird es entfernt, wenn Sie Ihre Änderungen speichern.

  8. Wählen Sie auf der Seite Modell trainieren die Option Modell trainieren aus. Der Amazon-Ressourcenname (ARN) für Ihr Projekt sollte im Bearbeitungsfeld Projekt auswählen angezeigt werden. Wenn nicht, geben Sie den ARN für Ihr Projekt ein.

    Schaltfläche „Modell trainieren“, um mit dem Training eines KI-Modells im Amazon Rekognition Custom Labels-Service zu beginnen.
  9. Wählen Sie im Dialogfenster Möchten Sie Ihr Modell trainieren? Modell trainieren aus.

    Seite zur Konfiguration des Zugmodells mit der Schaltfläche „Modell trainieren“.
  10. Im Bereich Modelle der Projektseite können Sie den aktuellen Status in der Model Status Spalte überprüfen, in der das Training gerade läuft. Das Trainieren eines Modells ist zeitaufwändig.

    Der Modellstatus zeigt „TRAINING_IN_PROGRESS“ an, was bedeutet, dass das Modell gerade trainiert wird.
  11. Wählen Sie nach Abschluss des Trainings den Modellnamen aus. Das Training ist abgeschlossen, wenn der Modellstatus TRAINING_COMPLETED lautet. Wenn das Training fehlschlägt, lesen Sie Debuggen eines fehlgeschlagenen Modelltrainings.

    Schnittstelle, die ein trainiertes Modell und den Status TRAINING_COMPLETED anzeigt, was anzeigt, dass das Modell betriebsbereit ist.
  12. Nächster Schritt: Bewerten Sie Ihr Modell. Weitere Informationen finden Sie unter Verbessern eines geschulten Amazon Rekognition Custom Labels-Modells.

Ein Modell trainieren (SDK)

Sie trainieren ein Modell, indem Sie anrufen. CreateProjectVersion Um ein Modell zu trainieren, werden die folgenden Informationen benötigt:

  • Name — Ein eindeutiger Name für die Modellversion.

  • Projekt-ARN — Der Amazon-Ressourcenname (ARN) des Projekts, das das Modell verwaltet.

  • Speicherort der Trainingsergebnisse — Der Amazon S3-Standort, an dem die Ergebnisse gespeichert werden. Sie können denselben Speicherort wie den Amazon-S3-Bucket für die Konsole verwenden oder einen anderen Speicherort wählen. Wir empfehlen, einen anderen Speicherort zu wählen, da Sie so Berechtigungen festlegen und potenzielle Namenskonflikte mit der Trainingsausgabe vermeiden können, wenn Sie die Amazon Rekognition Custom Labels-Konsole verwenden.

Beim Training werden die dem Projekt zugeordneten Trainings- und Testdatensätze verwendet. Weitere Informationen finden Sie unter Verwalten von Datensätzen.

Anmerkung

Optional können Sie Manifestdateien für Trainings- und Testdatensätze angeben, die sich außerhalb eines Projekts befinden. Wenn Sie die Konsole öffnen, nachdem Sie ein Modell mit externen Manifestdateien trainiert haben, erstellt Amazon Rekognition Custom Labels die Datensätze für Sie, indem es den letzten Satz von Manifestdateien verwendet, der für das Training verwendet wurde. Sie können eine Modellversion für das Projekt nicht mehr trainieren, indem Sie externe Manifestdateien angeben. Weitere Informationen finden Sie unter CreatePrjectVersion.

Die Antwort von CreateProjectVersion ist ein ARN, mit dem Sie die Modellversion in nachfolgenden Anfragen identifizieren. Sie können auch den ARN verwenden, um die Modellversion zu sichern. Weitere Informationen finden Sie unter Sicherung von Amazon Rekognition Custom Labels-Projekten.

Das Trainieren einer Modellversion dauert eine Weile. In den Python- und Java-Beispielen in diesem Thema wird mithilfe von Waiters auf den Abschluss des Trainings gewartet. Waiter sind Hilfsprogrammmethoden, die einen bestimmten Status abfragen. Alternativ können Sie den aktuellen Status des Trainings erfahren, indem Sie DescribeProjectVersions aufrufen. Das Training ist abgeschlossen, wenn der Status Feldwert TRAINING_COMPLETED lautet. Nach Abschluss des Trainings können Sie die Qualität des Modells anhand der Bewertungsergebnisse bewerten.

Ein Modell trainieren (SDK)

Das folgende Beispiel zeigt, wie ein Modell mithilfe der einem Projekt zugeordneten Trainings- und Testdatensätze trainiert wird.

So trainieren Sie ein Modell (SDK)
  1. Falls Sie dies noch nicht getan haben, installieren und konfigurieren Sie die AWS CLI und die AWS SDKs. Weitere Informationen finden Sie unter Schritt 4: Richten Sie die AWS CLI und SDKs ein AWS.

  2. Verwenden Sie den folgenden Beispielcode, um ein Projekt zu trainieren.

    AWS CLI

    Im folgenden Beispiel wird ein Modell erstellt. Der Trainingsdatensatz wird aufgeteilt, um den Testdatensatz zu erstellen. Ersetzen Sie Folgendes:

    • my_project_arn mit dem Amazon-Ressourcennamen (ARN) des Projekts.

    • version_name mit einem eindeutigen Versionsnamen Ihrer Wahl.

    • output_bucket mit dem Namen des Amazon-S3-Buckets, in dem Amazon Rekognition Custom Labels die Trainingsergebnisse speichert.

    • output_folder mit dem Namen des Ordners, in dem die Trainingsergebnisse gespeichert werden.

    • (optionaler Parameter) --kms-key-id mit der Kennung für Ihren AWS Key Management Service-Kunden-Masterschlüssel.

    aws rekognition create-project-version \ --project-arn project_arn \ --version-name version_name \ --output-config '{"S3Bucket":"output_bucket", "S3KeyPrefix":"output_folder"}' \ --profile custom-labels-access
    Python

    Im folgenden Beispiel wird ein Modell erstellt. Geben Sie die folgenden Befehlszeilenargumente an:

    • project_arn – der Amazon-Ressourcenname (ARN) des Projekts.

    • version_name – ein eindeutiger Versionsname Ihrer Wahl für das Modell.

    • output_bucket – der Name des Amazon-S3-Buckets, in dem Amazon Rekognition Custom Labels die Trainingsergebnisse speichert.

    • output_folder – der Name des Ordners, in dem die Trainingsergebnisse gespeichert werden.

    Geben Sie optional die folgenden Befehlszeilenparameter an, um Ihrem Modell ein Tag zuzuweisen:

    • tag – ein Tag-Name Ihrer Wahl, den Sie an das Modell anhängen möchten.

    • tag_value der Tag-Wert.

    #Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. #PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-custom-labels-developer-guide/blob/master/LICENSE-SAMPLECODE.) import argparse import logging import json import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def train_model(rek_client, project_arn, version_name, output_bucket, output_folder, tag_key, tag_key_value): """ Trains an Amazon Rekognition Custom Labels model. :param rek_client: The Amazon Rekognition Custom Labels Boto3 client. :param project_arn: The ARN of the project in which you want to train a model. :param version_name: A version for the model. :param output_bucket: The S3 bucket that hosts training output. :param output_folder: The path for the training output within output_bucket :param tag_key: The name of a tag to attach to the model. Pass None to exclude :param tag_key_value: The value of the tag. Pass None to exclude """ try: #Train the model status="" logger.info("training model version %s for project %s", version_name, project_arn) output_config = json.loads( '{"S3Bucket": "' + output_bucket + '", "S3KeyPrefix": "' + output_folder + '" } ' ) tags={} if tag_key is not None and tag_key_value is not None: tags = json.loads( '{"' + tag_key + '":"' + tag_key_value + '"}' ) response=rek_client.create_project_version( ProjectArn=project_arn, VersionName=version_name, OutputConfig=output_config, Tags=tags ) logger.info("Started training: %s", response['ProjectVersionArn']) # Wait for the project version training to complete. project_version_training_completed_waiter = rek_client.get_waiter('project_version_training_completed') project_version_training_completed_waiter.wait(ProjectArn=project_arn, VersionNames=[version_name]) # Get the completion status. describe_response=rek_client.describe_project_versions(ProjectArn=project_arn, VersionNames=[version_name]) for model in describe_response['ProjectVersionDescriptions']: logger.info("Status: %s", model['Status']) logger.info("Message: %s", model['StatusMessage']) status=model['Status'] logger.info("finished training") return response['ProjectVersionArn'], status except ClientError as err: logger.exception("Couldn't create model: %s", err.response['Error']['Message'] ) raise def add_arguments(parser): """ Adds command line arguments to the parser. :param parser: The command line parser. """ parser.add_argument( "project_arn", help="The ARN of the project in which you want to train a model" ) parser.add_argument( "version_name", help="A version name of your choosing." ) parser.add_argument( "output_bucket", help="The S3 bucket that receives the training results." ) parser.add_argument( "output_folder", help="The folder in the S3 bucket where training results are stored." ) parser.add_argument( "--tag_name", help="The name of a tag to attach to the model", required=False ) parser.add_argument( "--tag_value", help="The value for the tag.", required=False ) def main(): logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") try: # Get command line arguments. parser = argparse.ArgumentParser(usage=argparse.SUPPRESS) add_arguments(parser) args = parser.parse_args() print(f"Training model version {args.version_name} for project {args.project_arn}") # Train the model. session = boto3.Session(profile_name='custom-labels-access') rekognition_client = session.client("rekognition") model_arn, status=train_model(rekognition_client, args.project_arn, args.version_name, args.output_bucket, args.output_folder, args.tag_name, args.tag_value) print(f"Finished training model: {model_arn}") print(f"Status: {status}") except ClientError as err: logger.exception("Problem training model: %s", err) print(f"Problem training model: {err}") except Exception as err: logger.exception("Problem training model: %s", err) print(f"Problem training model: {err}") if __name__ == "__main__": main()
    Java V2

    Im folgenden Beispiel wird ein Modell trainiert. Geben Sie die folgenden Befehlszeilenargumente an:

    • project_arn – der Amazon-Ressourcenname (ARN) des Projekts.

    • version_name – ein eindeutiger Versionsname Ihrer Wahl für das Modell.

    • output_bucket – der Name des Amazon-S3-Buckets, in dem Amazon Rekognition Custom Labels die Trainingsergebnisse speichert.

    • output_folder – der Name des Ordners, in dem die Trainingsergebnisse gespeichert werden.

    /* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: Apache-2.0 */ package com.example.rekognition; import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.waiters.WaiterResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionRequest; import software.amazon.awssdk.services.rekognition.model.CreateProjectVersionResponse; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsRequest; import software.amazon.awssdk.services.rekognition.model.DescribeProjectVersionsResponse; import software.amazon.awssdk.services.rekognition.model.OutputConfig; import software.amazon.awssdk.services.rekognition.model.ProjectVersionDescription; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import software.amazon.awssdk.services.rekognition.waiters.RekognitionWaiter; import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; public class TrainModel { public static final Logger logger = Logger.getLogger(TrainModel.class.getName()); public static String trainMyModel(RekognitionClient rekClient, String projectArn, String versionName, String outputBucket, String outputFolder) { try { OutputConfig outputConfig = OutputConfig.builder().s3Bucket(outputBucket).s3KeyPrefix(outputFolder).build(); logger.log(Level.INFO, "Training Model for project {0}", projectArn); CreateProjectVersionRequest createProjectVersionRequest = CreateProjectVersionRequest.builder() .projectArn(projectArn).versionName(versionName).outputConfig(outputConfig).build(); CreateProjectVersionResponse response = rekClient.createProjectVersion(createProjectVersionRequest); logger.log(Level.INFO, "Model ARN: {0}", response.projectVersionArn()); logger.log(Level.INFO, "Training model..."); // wait until training completes DescribeProjectVersionsRequest describeProjectVersionsRequest = DescribeProjectVersionsRequest.builder() .versionNames(versionName) .projectArn(projectArn) .build(); RekognitionWaiter waiter = rekClient.waiter(); WaiterResponse<DescribeProjectVersionsResponse> waiterResponse = waiter .waitUntilProjectVersionTrainingCompleted(describeProjectVersionsRequest); Optional<DescribeProjectVersionsResponse> optionalResponse = waiterResponse.matched().response(); DescribeProjectVersionsResponse describeProjectVersionsResponse = optionalResponse.get(); for (ProjectVersionDescription projectVersionDescription : describeProjectVersionsResponse .projectVersionDescriptions()) { System.out.println("ARN: " + projectVersionDescription.projectVersionArn()); System.out.println("Status: " + projectVersionDescription.statusAsString()); System.out.println("Message: " + projectVersionDescription.statusMessage()); } return response.projectVersionArn(); } catch (RekognitionException e) { logger.log(Level.SEVERE, "Could not train model: {0}", e.getMessage()); throw e; } } public static void main(String args[]) { String versionName = null; String projectArn = null; String projectVersionArn = null; String bucket = null; String location = null; final String USAGE = "\n" + "Usage: " + "<project_name> <version_name> <output_bucket> <output_folder>\n\n" + "Where:\n" + " project_arn - The ARN of the project that you want to use. \n\n" + " version_name - A version name for the model.\n\n" + " output_bucket - The S3 bucket in which to place the training output. \n\n" + " output_folder - The folder within the bucket that the training output is stored in. \n\n"; if (args.length != 4) { System.out.println(USAGE); System.exit(1); } projectArn = args[0]; versionName = args[1]; bucket = args[2]; location = args[3]; try { // Get the Rekognition client. RekognitionClient rekClient = RekognitionClient.builder() .credentialsProvider(ProfileCredentialsProvider.create("custom-labels-access")) .region(Region.US_WEST_2) .build(); // Train model projectVersionArn = trainMyModel(rekClient, projectArn, versionName, bucket, location); System.out.println(String.format("Created model: %s for Project ARN: %s", projectVersionArn, projectArn)); rekClient.close(); } catch (RekognitionException rekError) { logger.log(Level.SEVERE, "Rekognition client error: {0}", rekError.getMessage()); System.exit(1); } } }
  3. Wenn das Training fehlschlägt, lesen Sie Debuggen eines fehlgeschlagenen Modelltrainings.