Transfer Learning für TensorFlow-Objekterkennungsmodelle in Amazon SageMaker

Amazon Sage Maker bietet eine Reihe von eingebaute Algorithmen, vorgefertigte Modelle und vorgefertigte Lösungsvorlagen um Datenwissenschaftler und Praktiker des maschinellen Lernens (ML) beim schnellen Einstieg in das Training und die Bereitstellung von ML-Modellen zu unterstützen. Sie können diese Algorithmen und Modelle sowohl für überwachtes als auch für unüberwachtes Lernen verwenden. Sie können verschiedene Arten von Eingabedaten verarbeiten, darunter Tabellen, Bilder und Text.

Dieser Beitrag ist der zweite in einer Reihe über die neuen integrierten Algorithmen in SageMaker. In dem erster Beitraghaben wir gezeigt, wie SageMaker einen integrierten Algorithmus zur Bildklassifizierung bereitstellt. Heute kündigen wir an, dass SageMaker einen neuen integrierten Algorithmus zur Objekterkennung mit TensorFlow bereitstellt. Dieser überwachte Lernalgorithmus unterstützt Transfer Learning für viele vortrainierte Modelle, die in TensorFlow verfügbar sind. Es nimmt ein Bild als Eingabe und gibt die im Bild vorhandenen Objekte zusammen mit den Begrenzungsrahmen aus. Sie können diese vortrainierten Modelle mithilfe von Transfer Learning optimieren, selbst wenn eine große Anzahl von Trainingsbildern nicht verfügbar ist. Es ist über den SageMaker verfügbar eingebaute Algorithmen sowie durch die SageMaker JumpStart-Benutzeroberfläche in Amazon SageMaker-Studio. Weitere Informationen finden Sie unter Objekterkennung Tensorflow und das Beispiel-Notizbuch Einführung in SageMaker Tensorflow – Objekterkennung.

Die Objekterkennung mit TensorFlow in SageMaker bietet Transfer Learning für viele vortrainierte Modelle, die in TensorFlow Hub verfügbar sind. Entsprechend der Anzahl der Klassenlabels in den Trainingsdaten ersetzt ein neuer zufällig initialisierter Objekterkennungskopf den vorhandenen Kopf des TensorFlow-Modells. Entweder das gesamte Netzwerk, einschließlich des vortrainierten Modells, oder nur die oberste Schicht (Objekterkennungskopf) kann auf die neuen Trainingsdaten abgestimmt werden. In diesem Transfer-Lernmodus können Sie auch mit einem kleineren Datensatz trainieren.

So verwenden Sie den neuen TensorFlow-Objekterkennungsalgorithmus

In diesem Abschnitt wird beschrieben, wie Sie den TensorFlow-Objekterkennungsalgorithmus mit dem verwenden SageMaker Python-SDK. Informationen zur Verwendung über die Studio-Benutzeroberfläche finden Sie unter SageMaker-JumpStart.

Der Algorithmus unterstützt das Transferlernen für die in aufgeführten vortrainierten Modelle TensorFlow-Modelle. Jedes Modell wird durch ein Unikat identifiziert model_id. Der folgende Code zeigt die Feinabstimmung eines ResNet50 V1 FPN-Modells, das durch gekennzeichnet ist model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 auf einem benutzerdefinierten Trainingsdatensatz. Für jeden model_id, um einen SageMaker-Schulungsjob über die zu starten Estimator -Klasse des SageMaker Python SDK müssen Sie den Docker-Image-URI, den Trainingsskript-URI und den vortrainierten Modell-URI über die in SageMaker bereitgestellten Hilfsfunktionen abrufen. Der Trainingsskript-URI enthält den gesamten erforderlichen Code für die Datenverarbeitung, das Laden des vorab trainierten Modells, das Modelltraining und das Speichern des trainierten Modells für die Inferenz. Der URI des vortrainierten Modells enthält die Architekturdefinition des vortrainierten Modells und die Modellparameter. Beachten Sie, dass der Docker-Image-URI und der Trainingsskript-URI für alle TensorFlow-Objekterkennungsmodelle gleich sind. Der vortrainierte Modell-URI ist spezifisch für das jeweilige Modell. Die vortrainierten Modell-Tarballs wurden vorab von TensorFlow heruntergeladen und mit der entsprechenden Modellsignatur gespeichert Amazon Simple Storage-Service (Amazon S3)-Buckets, sodass der Trainingsjob in Netzwerkisolation ausgeführt wird. Siehe folgenden Code:

from sagemaker import image_uris, model_uris, script_urisfrom 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 pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-od-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Mit diesen modellspezifischen Trainingsartefakten können Sie ein Objekt der erstellen Estimator Klasse:

# Create SageMaker 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,)

Als Nächstes müssen Sie für das Transferlernen in Ihrem benutzerdefinierten Dataset möglicherweise die Standardwerte der Trainings-Hyperparameter ändern, die in aufgeführt sind Hyperparameter. Sie können ein Python-Wörterbuch dieser Hyperparameter mit ihren Standardwerten abrufen, indem Sie aufrufen hyperparameters.retrieve_default, aktualisieren Sie sie nach Bedarf und übergeben Sie sie dann an die Estimator-Klasse. Beachten Sie, dass die Standardwerte einiger Hyperparameter für verschiedene Modelle unterschiedlich sind. Bei großen Modellen ist die Standardstapelgröße kleiner und die train_only_top_layer hyperparameter ist auf gesetzt True. Der Hyperparameter train_only_top_layer definiert, welche Modellparameter sich während des Feinabstimmungsprozesses ändern. Wenn train_only_top_layer is Trueändern sich Parameter der Klassifikationsschichten und die restlichen Parameter bleiben während des Feinabstimmungsprozesses konstant. Andererseits, wenn train_only_top_layer is Falsewerden alle Parameter des Modells feinabgestimmt. Siehe folgenden Code:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters 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"

Wir bieten die PennFudanPed-Datensatz als Standarddatensatz für die Feinabstimmung der Modelle. Der Datensatz umfasst Bilder von Fußgängern. Der folgende Code stellt das standardmäßige Trainings-Dataset bereit, das in S3-Buckets gehostet wird:

# 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}"

Um schließlich den SageMaker-Trainingsjob für die Feinabstimmung des Modells zu starten, rufen Sie an .fit auf dem Objekt der Estimator-Klasse, während der S3-Speicherort des Trainingsdatensatzes übergeben wird:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Weitere Informationen zur Verwendung des neuen SageMaker TensorFlow-Objekterkennungsalgorithmus zum Transferlernen für ein benutzerdefiniertes Dataset, Bereitstellen des feinabgestimmten Modells, Ausführen von Rückschlüssen auf das bereitgestellte Modell und Bereitstellen des vorab trainierten Modells ohne vorherige Feinabstimmung für ein benutzerdefiniertes Dataset finden Sie im folgenden Beispiel-Notebook: Einführung in SageMaker TensorFlow – Objekterkennung.

Eingabe-/Ausgabeschnittstelle für den TensorFlow-Objekterkennungsalgorithmus

Sie können jedes der in aufgeführten vortrainierten Modelle optimieren TensorFlow-Modelle auf einen beliebigen gegebenen Datensatz, der Bilder umfasst, die zu einer beliebigen Anzahl von Klassen gehören. Ziel ist es, Vorhersagefehler bei den Eingabedaten zu minimieren. Das durch die Feinabstimmung zurückgegebene Modell kann für die Inferenz weiter eingesetzt werden. Im Folgenden finden Sie Anweisungen dazu, wie die Trainingsdaten für die Eingabe in das Modell formatiert werden sollten:

  • zufuhr – Ein Verzeichnis mit Unterverzeichnis images und einer Datei annotations.json.
  • Output – Es gibt zwei Ausgänge. Das erste ist ein fein abgestimmtes Modell, das für Inferenz eingesetzt oder durch inkrementelles Training weiter trainiert werden kann. Zweitens ist eine Datei, die Klassenindizes auf Klassenetiketten abbildet; diese wird zusammen mit dem Modell gespeichert.

Das Eingabeverzeichnis sollte wie im folgenden Beispiel aussehen:

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

Das annotations.json Datei sollte Informationen für haben bounding_boxes und ihre Klassenbezeichnungen. Es sollte ein Wörterbuch mit den Schlüsseln haben "images" und "annotations". Der Wert für die "images" Schlüssel sollte eine Liste von Einträgen sein, einer für jedes Bild des Formulars {"file_name": image_name, "height": height, "width": width, "id": image_id}. Der Wert der "annotations" Schlüssel sollte eine Liste von Einträgen sein, einer für jeden Begrenzungsrahmen des Formulars {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Inferenz mit dem TensorFlow-Objekterkennungsalgorithmus

Die generierten Modelle können für Inferenz gehostet werden und unterstützen kodierte .jpg-, .jpeg- und .png-Bildformate als application/x-image Inhaltstyp. Die Größe des Eingabebildes wird automatisch angepasst. Die Ausgabe enthält die Felder, vorhergesagten Klassen und Bewertungen für jede Vorhersage. Das Objekterkennungsmodell von TensorFlow verarbeitet ein einzelnes Bild pro Anfrage und gibt nur eine Zeile im JSON aus. Das Folgende ist ein Beispiel für eine Antwort in JSON:

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":}

If accept eingestellt ist application/json, dann gibt das Modell nur vorhergesagte Boxen, Klassen und Bewertungen aus. Weitere Einzelheiten zu Training und Inferenz finden Sie im Beispielnotebook Einführung in SageMaker TensorFlow – Objekterkennung.

Verwenden Sie die integrierten SageMaker-Algorithmen über die JumpStart-Benutzeroberfläche

Sie können auch die Objekterkennung von SageMaker TensorFlow und alle anderen integrierten Algorithmen mit wenigen Klicks über die JumpStart-Benutzeroberfläche verwenden. JumpStart ist eine SageMaker-Funktion, mit der Sie integrierte Algorithmen und vortrainierte Modelle aus verschiedenen ML-Frameworks und Modell-Hubs über eine grafische Oberfläche trainieren und bereitstellen können. Es ermöglicht Ihnen auch, vollwertige ML-Lösungen bereitzustellen, die ML-Modelle und verschiedene andere AWS-Services aneinanderreihen, um einen gezielten Anwendungsfall zu lösen.

Im Folgenden finden Sie zwei Videos, die zeigen, wie Sie denselben Feinabstimmungs- und Bereitstellungsprozess, den wir gerade durchlaufen haben, mit wenigen Klicks über die JumpStart-Benutzeroberfläche replizieren können.

Optimieren Sie das vortrainierte Modell

Hier ist der Prozess zur Feinabstimmung desselben vortrainierten Objekterkennungsmodells.

Stellen Sie das optimierte Modell bereit

Nachdem das Modelltraining abgeschlossen ist, können Sie das Modell mit einem Klick direkt auf einem dauerhaften Echtzeit-Endpunkt bereitstellen.

Zusammenfassung

In diesem Beitrag haben wir die Einführung des integrierten Algorithmus zur Objekterkennung von SageMaker TensorFlow angekündigt. Wir haben Beispielcode bereitgestellt, wie Transfer Learning für ein benutzerdefiniertes Dataset unter Verwendung eines vortrainierten Modells von TensorFlow mit diesem Algorithmus durchgeführt wird.

Für weitere Informationen, besuche Dokumentation und für Beispiel Notizbuch.


Über die Autoren

Übertragen Sie das Lernen für TensorFlow-Objekterkennungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Vivek Madan ist Angewandte Wissenschaftlerin bei der Amazon SageMaker JumpStart-Team. Er promovierte an der University of Illinois at Urbana-Champaign und war Postdoktorand an der Georgia Tech. Er ist ein aktiver Forscher in den Bereichen maschinelles Lernen und Algorithmendesign und hat Artikel auf Konferenzen von EMNLP, ICLR, COLT, FOCS und SODA veröffentlicht.

Übertragen Sie das Lernen für TensorFlow-Objekterkennungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Joao Moura ist AI/ML Specialist Solutions Architect bei Amazon Web Services. Er konzentriert sich hauptsächlich auf NLP-Anwendungsfälle und hilft Kunden, das Training und die Bereitstellung von Deep-Learning-Modellen zu optimieren. Er ist auch ein aktiver Befürworter von Low-Code-ML-Lösungen und ML-spezialisierter Hardware.

Übertragen Sie das Lernen für TensorFlow-Objekterkennungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Dr. Ashish Khetan ist Senior Applied Scientist mit Integrierte Amazon SageMaker-Algorithmen und hilft bei der Entwicklung von Algorithmen für maschinelles Lernen. Er promovierte an der University of Illinois Urbana Champaign. Er ist ein aktiver Forscher auf dem Gebiet des maschinellen Lernens und der statistischen Inferenz und hat viele Artikel auf den Konferenzen NeurIPS, ICML, ICLR, JMLR, ACL und EMNLP veröffentlicht.

Zeitstempel:

Mehr von AWS Maschinelles Lernen