Objekterkennung – TensorFlow - Amazon SageMaker

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.

Objekterkennung – TensorFlow

Der Amazon SageMaker Object Detection - TensorFlow Algorithmus ist ein Algorithmus für überwachtes Lernen, der Transfer Learning mit vielen vortrainierten Modellen aus dem TensorFlow Model microSD unterstützt. Verwenden Sie Transfer Learning, um eines der verfügbaren vortrainierten Modelle anhand Ihres eigenen Datensatzes zu optimieren, auch wenn eine große Menge an Bilddaten nicht verfügbar ist. Der Objekterkennungsalgorithmus verwendet ein Bild als Eingabe und gibt eine Liste von Begrenzungsrahmen aus. Trainingsdatensätze müssen aus Bildern bestehen. jpg,.jpeg, oder .png Format.

So verwenden Sie den SageMaker Objekterkennungsalgorithmus TensorFlow

Sie können Object Detection TensorFlow als integrierten Amazon SageMaker -Algorithmus verwenden. Im folgenden Abschnitt wird beschrieben, wie Sie die Objekterkennung TensorFlow mit dem SageMaker Python-SDK verwenden. Informationen zur Verwendung der Objekterkennung über TensorFlow die Amazon SageMaker Studio Classic-Benutzeroberfläche finden Sie unter SageMaker JumpStart.

Der Objekterkennungsalgorithmus TensorFlow unterstützt Transfer Learning mit einem der kompatiblen vortrainierten TensorFlow Modelle. Eine Liste aller verfügbaren vortrainierten Modelle finden Sie unter TensorFlow Modelle. Jedes vortrainierte Modell hat ein Unikat model_id. Im folgenden Beispiel wird ResNet50 (model_id: tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8) verwendet, um einen benutzerdefinierten Datensatz zu optimieren. Die vortrainierten Modelle werden alle vorinstalliert und in Amazon S3-Buckets TensorFlow gespeichert, sodass Schulungsaufträge in Netzwerkisolierung ausgeführt werden können. Verwenden Sie diese vorgenerierten Modelltrainingsartefakte, um einen SageMaker Schätzer zu erstellen.

Rufen Sie zunächst den Docker-Image-URI, den Trainingsskript-URI und den vortrainierten Modell-URI ab. Ändern Sie dann die Hyperparameter nach Bedarf. Sie können ein Python-Wörterbuch mit allen verfügbaren Hyperparametern und ihren Standardwerten mit hyperparameters.retrieve_default sehen. Weitere Informationen finden Sie unter Objekterkennung – TensorFlow Hyperparameter. Verwenden Sie diese Werte, um einen SageMaker Schätzer zu erstellen.

Anmerkung

Die Standard-Hyperparameterwerte sind für verschiedene Modelle unterschiedlich. Bei größeren Modellen ist die Standardanzahl von Epochen beispielsweise kleiner.

In diesem Beispiel wird der PennFudanPed Datensatz verwendet, der Bilder von Fußgängern auf der Straße enthält. Wir haben den Datensatz vorab heruntergeladen und mit Amazon S3 verfügbar gemacht. Rufen Sie zur Feinabstimmung Ihres Modells an, .fit indem Sie den Amazon S3 S3-Speicherort Ihres Trainingsdatensatzes verwenden.

from sagemaker import image_uris, model_uris, script_uris, hyperparameters from sagemaker.estimator import Estimator model_id, model_version = "tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*" training_instance_type = "ml.p3.2xlarge" # Retrieve the Docker image train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None) # Retrieve the training script train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pretrained model tarball for transfer learning train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training") # Retrieve the default hyperparameters for fine-tuning the model hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version) # [Optional] Override default hyperparameters with custom values hyperparameters["epochs"] = "5" # Sample training data is available in this bucket training_data_bucket = f"jumpstart-cache-prod-{aws_region}" training_data_prefix = "training-datasets/PennFudanPed_COCO_format/" training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}" output_bucket = sess.default_bucket() output_prefix = "jumpstart-example-od-training" s3_output_location = f"s3://{output_bucket}/{output_prefix}/output" # Create an Estimator instance tf_od_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location, ) # Launch a training job tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Weitere Informationen zur Verwendung des SageMaker Objekterkennungsalgorithmus TensorFlow für Transfer Learning in einem benutzerdefinierten Datensatz finden Sie im Notebook Einführung in SageMaker TensorFlow – Objekterkennung.

Eingabe- und Ausgabeschnittstelle für den Objekterkennungsalgorithmus TensorFlow

Jedes der unter TensorFlow Modelle aufgeführten vortrainierten Modelle kann auf jeden Datensatz mit einer beliebigen Anzahl von Bildklassen abgestimmt werden. Beachten Sie, wie Sie Ihre Trainingsdaten für die Eingabe in das Objekterkennungsmodell TensorFlow formatieren.

  • Eingabeformat für Trainingsdaten: Ihre Trainingsdaten sollten ein Verzeichnis mit einem images Unterverzeichnis und einer annotations.json Datei sein.

Es folgt ein Beispiel für eine Eingabeverzeichnisstruktur. Das Eingabeverzeichnis sollte in einem Amazon S3-Bucket mit einem Pfad gehostet werden, der dem folgenden ähnelt: s3://bucket_name/input_directory/. Beachten Sie, dass das Trailing / erforderlich ist.

input_directory |--images |--abc.png |--def.png |--annotations.json

Die annotations.json Datei sollte Informationen für Bounding Boxes und ihre Klassenbezeichnungen in Form eines Wörterbuchs "images" und "annotations" Schlüsseln enthalten. Der Wert für den "images" Schlüssel sollte eine Liste von Wörterbüchern sein. Für jedes Bild sollte es ein Wörterbuch mit den folgenden Informationen geben:. {"file_name": image_name, "height": height, "width": width, "id": image_id} Der Wert für den "annotations" Schlüssel sollte auch eine Liste von Wörterbüchern sein. Für jedes Begrenzungsfeld sollte es ein Wörterbuch mit den folgenden Informationen geben: {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Nach dem Training werden eine Beschriftung-Mapping-Datei und ein trainiertes Modell in Ihrem Amazon S3-Bucket gespeichert.

Inkrementelles Training

Sie können das Training eines neuen Modells mit Artefakten aus einem Modell starten, das Sie zuvor mit trainiert haben SageMaker. Diese inkrementelle Schulung verkürzt die Schulungsdauer, wenn Sie ein neues Modell mit denselben oder ähnlichen Daten schulen möchten.

Anmerkung

Sie können ein SageMaker TensorFlow Objekterkennungsmodell nur mit einem anderen TensorFlow Objekterkennungsmodell starten, das in trainiert wurde SageMaker.

Sie können jeden Datensatz für das inkrementelle Training verwenden, solange der Klassensatz derselbe bleibt. Der inkrementelle Trainingsschritt ähnelt dem Feinabstimmungsschritt, aber anstatt mit einem vortrainierten Modell zu beginnen, beginnen Sie mit einem vorhandenen fein abgestimmten Modell. Weitere Informationen zur Verwendung von inkrementellem Training mit der SageMaker Objekterkennung – TensorFlowfinden Sie im Notebook Einführung in SageMaker TensorFlow – Objekterkennung.

Inferenz mit dem Objekterkennungsalgorithmus TensorFlow

Sie können das fein abgestimmte Modell, das sich aus Ihrem TensorFlow Object Detection-Training ergibt, zur Inferenz hosten. Jedes Eingabebild für die Inferenz muss sich in .jpg, .jpeg, oder .png Format befinden und vom Inhaltstyp application/x-image sein. Der Objekterkennungsalgorithmus TensorFlow ändert die Größe der Eingabebilder automatisch.

Das Ausführen von Inferenzen führt zu Begrenzungsfeldern, vorhergesagten Klassen und den Ergebnissen jeder Vorhersage, die im JSON-Format codiert sind. Das TensorFlow Objekterkennungsmodell verarbeitet ein einzelnes Bild pro Anfrage und gibt nur eine Zeile aus. Nachfolgend finden Sie ein Beispiel für eine Antwort im JSON Lines-Format:

accept: application/json;verbose {"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], "classes":[classidx1, class_idx2,...], "scores":[score_1, score_2,...], "labels": [label1, label2, ...], "tensorflow_model_output":<original output of the model>}

Wenn accept auf gesetzt application/json ist, gibt das Modell nur normalisierte Boxen, Klassen und Ergebnisse aus.

Amazon EC2-Instance-Empfehlung für den Objekterkennungs- TensorFlow Algorithmus

Der Objekterkennungsalgorithmus unterstützt alle GPU- TensorFlow Instances für das Training, einschließlich:

  • ml.p2.xlarge

  • ml.p2.16xlarge

  • ml.p3.2xlarge

  • ml.p3.16xlarge

Wir empfehlen die Verwendung von GPU-Instances mit mehr Arbeitsspeicher zum Training mit großen Stapelgrößen. Es können jedoch sowohl CPU-Instances (wie C5 und M5) als auch GPU-Instances (wie P2 und P3) für die Interferenz verwendet werden. Eine umfassende Liste der SageMaker Trainings- und Inferenz-Instances in AWS allen Regionen finden Sie unter Amazon- SageMaker Preise.

Objekterkennung – TensorFlow Beispiel-Notebooks

Weitere Informationen zur Verwendung des SageMaker Object Detection - TensorFlow Algorithmus für Transfer Learning in einem benutzerdefinierten Datensatz finden Sie im Notebook Einführung in SageMaker TensorFlow - Object Detection.

Anweisungen zum Erstellen von Jupyter-Notebook-Instances, mit denen Sie das Beispiel in ausführen können SageMaker, finden Sie unter Amazon- SageMaker Notebook-Instances. Nachdem Sie eine Notebook-Instance erstellt und geöffnet haben, wählen Sie die Registerkarte SageMaker Beispiele aus, um eine Liste aller SageMaker Beispiele anzuzeigen. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Verwenden und dann Kopie erstellen aus.