Führen Sie die Bildsegmentierung mit Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence durch. Vertikale Suche. Ai.

Führen Sie die Bildsegmentierung mit Amazon SageMaker JumpStart durch

Im Dezember 2020, AWS angekündigt die allgemeine Verfügbarkeit von Amazon SageMaker-JumpStart, eine Fähigkeit von Amazon Sage Maker das Ihnen den schnellen und einfachen Einstieg in Machine Learning (ML) erleichtert. JumpStart bietet mit einem Klick die Feinabstimmung und Bereitstellung einer Vielzahl vortrainierter Modelle für beliebte ML-Aufgaben sowie eine Auswahl an End-to-End-Lösungen, die allgemeine Geschäftsprobleme lösen. Diese Funktionen entlasten jeden Schritt des ML-Prozesses, erleichtern die Entwicklung hochwertiger Modelle und verkürzen die Bereitstellungszeit.

Dieser Beitrag ist der dritte in einer Reihe über die Verwendung von JumpStart für bestimmte ML-Aufgaben. In dem erster Beitraghaben wir gezeigt, wie Sie Anwendungsfälle zur Bildklassifizierung auf JumpStart ausführen können. In dem zweiter Beitraghaben wir gezeigt, wie Sie Anwendungsfälle zur Textklassifizierung auf JumpStart ausführen können. In diesem Beitrag bieten wir eine Schritt-für-Schritt-Anleitung zur Feinabstimmung und Bereitstellung eines Bildsegmentierungsmodells mithilfe von trainierten Modellen von MXNet. Wir untersuchen zwei Möglichkeiten, dasselbe Ergebnis zu erzielen: über die grafische Benutzeroberfläche von JumpStart Amazon SageMaker-Studio, und programmgesteuert durch JumpStart-APIs.

Wenn Sie direkt in den JumpStart-API-Code springen möchten, den wir in diesem Beitrag erläutern, können Sie sich auf die folgenden Beispiel-Jupyter-Notebooks beziehen:

JumpStart-Übersicht

JumpStart hilft Ihnen beim Einstieg in ML-Modelle für eine Vielzahl von Aufgaben, ohne eine einzige Codezeile schreiben zu müssen. Zum Zeitpunkt der Erstellung dieses Artikels können Sie mit JumpStart Folgendes tun:

  • Stellen Sie vortrainierte Modelle für allgemeine ML-Aufgaben bereit – JumpStart ermöglicht es Ihnen, allgemeine ML-Aufgaben ohne Entwicklungsaufwand zu bewältigen, indem es eine einfache Bereitstellung von Modellen bereitstellt, die auf großen, öffentlich verfügbaren Datensätzen vortrainiert wurden. Die ML-Forschungsgemeinschaft hat große Anstrengungen unternommen, um einen Großteil der kürzlich entwickelten Modelle öffentlich zugänglich zu machen. JumpStart hostet eine Sammlung von über 300 Modellen, die die 15 beliebtesten ML-Aufgaben wie Objekterkennung, Textklassifizierung und Textgenerierung abdecken, was es Anfängern leicht macht, sie zu verwenden. Diese Modelle stammen von beliebten Modell-Hubs wie TensorFlow, PyTorch, Hugging Face und MXNet.
  • Optimieren Sie vortrainierte Modelle – JumpStart ermöglicht Ihnen die Feinabstimmung vortrainierter Modelle, ohne dass Sie Ihren eigenen Trainingsalgorithmus schreiben müssen. Im ML wird die Fähigkeit bezeichnet, das in einer Domäne erlernte Wissen auf eine andere Domäne zu übertragen Transferlernen. Sie können Transfer Learning verwenden, um genaue Modelle für Ihre kleineren Datasets zu erstellen, und zwar mit viel geringeren Schulungskosten als beim Training des ursprünglichen Modells. JumpStart enthält auch beliebte Trainingsalgorithmen basierend auf LightGBM, CatBoost, XGBoost und Scikit-learn, die Sie von Grund auf neu für tabellarische Regression und Klassifizierung trainieren können.
  • Verwenden Sie vorgefertigte Lösungen – JumpStart bietet eine Reihe von 17 Lösungen für gängige ML-Anwendungsfälle, wie z. B. Bedarfsprognosen und Industrie- und Finanzanwendungen, die Sie mit nur wenigen Klicks bereitstellen können. Lösungen sind End-to-End-ML-Anwendungen, die verschiedene AWS-Services aneinanderreihen, um einen bestimmten geschäftlichen Anwendungsfall zu lösen. Sie benutzen AWS CloudFormation Vorlagen und Referenzarchitekturen für eine schnelle Bereitstellung, was bedeutet, dass sie vollständig anpassbar sind.
  • Siehe Notebook-Beispiele für SageMaker-Algorithmen – SageMaker bietet eine Reihe integrierter Algorithmen, um Data Scientists und ML-Praktikern den Einstieg in das Training und die schnelle Bereitstellung von ML-Modellen zu erleichtern. JumpStart stellt Beispiel-Notebooks bereit, mit denen Sie diese Algorithmen schnell verwenden können.
  • Sehen Sie sich Schulungsvideos und Blogs an – JumpStart bietet auch zahlreiche Blogbeiträge und Videos, die Ihnen beibringen, wie Sie verschiedene Funktionen in SageMaker verwenden.

JumpStart akzeptiert benutzerdefinierte VPC-Einstellungen und AWS-Schlüsselverwaltungsservice (AWS KMS)-Verschlüsselungsschlüssel, damit Sie die verfügbaren Modelle und Lösungen sicher in Ihrer Unternehmensumgebung verwenden können. Sie können Ihre Sicherheitseinstellungen innerhalb von Studio oder über das SageMaker Python SDK an JumpStart übergeben.

Semantische Segmentierung

Die semantische Segmentierung grenzt jede Klasse von Objekten ab, die in einem Eingangsbild erscheinen. Es markiert (klassifiziert) jedes Pixel des Eingabebildes mit einer Klassenbezeichnung aus einem vordefinierten Satz von Klassen. Mehrere Objekte derselben Klasse werden derselben Maske zugeordnet.

Das für die Feinabstimmung verfügbare Modell baut einen „Kopf“ eines vollständig gefalteten Netzwerks (FCN) auf dem Basisnetzwerk auf. Der Feinabstimmungsschritt führt eine Feinabstimmung des FCNHead durch, während die Parameter des Rests des Modells eingefroren bleiben, und gibt das feinabgestimmte Modell zurück. Das Ziel besteht darin, den Softmax-Kreuzentropieverlust pro Pixel zu minimieren, um das FCN zu trainieren. Das durch die Feinabstimmung zurückgegebene Modell kann für die Inferenz weiter eingesetzt werden.

Das Eingabeverzeichnis sollte wie im folgenden Code aussehen, wenn die Trainingsdaten zwei Bilder enthalten. Die Namen der .png-Dateien können beliebig sein.

input_directory
    |--images
        |--abc.png
        |--def.png
    |--masks
        |--abc.png
        |--def.png
    class_label_to_prediction_index.json

Die Maskendateien sollten Klassenbezeichnungsinformationen für jedes Pixel haben.

Instanzsegmentierung

Die Instanzsegmentierung erkennt und grenzt jedes einzelne interessierende Objekt ab, das in einem Bild erscheint. Es markiert jedes Pixel mit einem Instanzlabel. Während die semantische Segmentierung dasselbe Tag Pixeln mehrerer Objekte derselben Klasse zuweist, kennzeichnet die Instanzsegmentierung Pixel, die jedem Vorkommen eines Objekts auf dem Bild entsprechen, mit einem separaten Tag.

Derzeit bietet JumpStart Nur-Inferenz-Modelle für die Instance-Segmentierung und unterstützt keine Feinabstimmung.

Die folgenden Abbildungen veranschaulichen den Unterschied zwischen der Inferenz bei der semantischen Segmentierung und der Instanzsegmentierung. Das Originalbild hat zwei Personen im Bild. Die semantische Segmentierung behandelt mehrere Personen im Bild als eine Einheit: Person. Die Instanzsegmentierung identifiziert jedoch einzelne Personen innerhalb der Person Apps.

Lösungsüberblick

Die folgenden Abschnitte bieten eine Schritt-für-Schritt-Demo zur Durchführung einer semantischen Segmentierung mit JumpStart, sowohl über die Studio-Benutzeroberfläche als auch über JumpStart-APIs.

Wir gehen durch die folgenden Schritte:

  1. Greifen Sie über die Studio-Benutzeroberfläche auf JumpStart zu:
    1. Führen Sie eine Inferenz für das vorab trainierte Modell aus.
    2. Optimieren Sie das vortrainierte Modell.
  2. Verwenden Sie JumpStart programmgesteuert mit dem SageMaker Python SDK:
    1. Führen Sie eine Inferenz für das vorab trainierte Modell aus.
    2. Optimieren Sie das vortrainierte Modell.

Wir diskutieren auch zusätzliche erweiterte Funktionen von JumpStart.

Greifen Sie über die Studio-Benutzeroberfläche auf JumpStart zu

In diesem Abschnitt zeigen wir, wie Sie JumpStart-Modelle über die Studio-Benutzeroberfläche trainieren und bereitstellen.

Führen Sie Rückschlüsse auf das vorab trainierte Modell aus

Das folgende Video zeigt Ihnen, wie Sie ein vortrainiertes semantisches Segmentierungsmodell auf JumpStart finden und bereitstellen. Die Modellseite enthält wertvolle Informationen über das Modell, seine Verwendung, das erwartete Datenformat und einige Details zur Feinabstimmung. Sie können jedes der in JumpStart verfügbaren vortrainierten Modelle bereitstellen. Für Rückschlüsse wählen wir den Instanztyp ml.g4dn.xlarge. Es bietet die GPU-Beschleunigung, die für eine niedrige Inferenzlatenz erforderlich ist, jedoch zu einem niedrigeren Preis. Nachdem Sie die SageMaker-Hosting-Instanz konfiguriert haben, wählen Sie Deploy. Es kann 5–10 Minuten dauern, bis Ihr persistenter Endpunkt betriebsbereit ist.

Nach einigen Minuten ist Ihr Endpunkt betriebsbereit und bereit, auf Inferenzanforderungen zu reagieren.

Auf ähnliche Weise können Sie ein vortrainiertes Instance-Segmentierungsmodell bereitstellen, indem Sie denselben Schritten im vorherigen Video folgen, während Sie in der JumpStart-Suchleiste nach Instance-Segmentierung anstelle von semantischer Segmentierung suchen.

Optimieren Sie das vortrainierte Modell

Das folgende Video zeigt, wie Sie ein semantisches Segmentierungsmodell in JumpStart finden und optimieren. Im Video verfeinern wir das Modell mit dem PennFudanPed-Datensatz, standardmäßig in JumpStart bereitgestellt, das Sie unter herunterladen können Apache 2.0 Lizenz.

Die Feinabstimmung Ihres eigenen Datensatzes umfasst die korrekte Formatierung der Daten (wie auf der Modellseite erläutert) und das Hochladen in Amazon Simple Storage-Service (Amazon S3) und Angabe des Speicherorts in der Datenquellenkonfiguration. Wir verwenden die gleichen Hyperparameterwerte, die standardmäßig festgelegt sind (Anzahl der Epochen, Lernrate und Stapelgröße). Wir verwenden auch eine GPU-unterstützte ml.p3.2xlarge als unsere SageMaker-Trainingsinstanz.

Sie können Ihren laufenden Trainingsjob direkt auf der Studio-Konsole überwachen und werden nach Abschluss benachrichtigt. Nach Abschluss des Trainings können Sie das optimierte Modell von derselben Seite aus bereitstellen, auf der sich auch die Trainingsauftragsdetails befinden. Der Bereitstellungsworkflow ist derselbe wie bei der Bereitstellung eines vorab trainierten Modells.

Verwenden Sie JumpStart programmgesteuert mit dem SageMaker SDK

In den vorangegangenen Abschnitten haben wir gezeigt, wie Sie die JumpStart-Benutzeroberfläche verwenden können, um ein vortrainiertes Modell bereitzustellen und es mit wenigen Klicks interaktiv zu optimieren. Sie können die Modelle von JumpStart und die einfache Feinabstimmung jedoch auch programmgesteuert verwenden, indem Sie APIs verwenden, die in das SageMaker SDK integriert sind. Wir gehen jetzt ein kurzes Beispiel durch, wie Sie den vorherigen Prozess replizieren können. Alle Schritte in dieser Demo sind in den begleitenden Notizbüchern verfügbar Einführung in JumpStart – Instanzsegmentierung und Einführung in JumpStart – Semantische Segmentierung.

Führen Sie Rückschlüsse auf das vorab trainierte Modell aus

In diesem Abschnitt wählen wir ein geeignetes vortrainiertes Modell in JumpStart aus, stellen dieses Modell auf einem SageMaker-Endpunkt bereit und führen die Inferenz auf dem bereitgestellten Endpunkt aus.

SageMaker ist eine Plattform, die auf Docker-Containern basiert. JumpStart verwendet das verfügbare Framework-spezifisch SageMaker Deep Learning-Container (DLCs). Wir rufen alle zusätzlichen Pakete sowie Skripte ab, um das Training und die Inferenz für die ausgewählte Aufgabe zu handhaben. Schließlich werden die vortrainierten Modellartefakte separat mit abgerufen model_uris, was der Plattform Flexibilität verleiht. Sie können mit einem einzigen Trainings- oder Inferenzskript eine beliebige Anzahl von Modellen verwenden, die für dieselbe Aufgabe vortrainiert wurden. Siehe folgenden Code:

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Zum Beispiel Segmentierung können wir einstellen model_id zu mxnet-semseg-fcn-resnet50-ade. Das ist in der Kennung entspricht der Instanzsegmentierung.

Als nächstes speisen wir die Ressourcen in a SageMaker-Modell Instanz und stellen Sie einen Endpunkt bereit:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

Nach ein paar Minuten wird unser Modell bereitgestellt und wir können Vorhersagen daraus in Echtzeit erhalten!

Das folgende Code-Snippet gibt Ihnen einen Eindruck davon, wie die semantische Segmentierung aussieht. Die vorhergesagte Maske für jedes Pixel wird visualisiert. Um Rückschlüsse aus einem bereitgestellten Modell zu erhalten, muss ein Eingabebild im Binärformat bereitgestellt werden. Die Antwort des Endpunkts ist ein vorhergesagtes Etikett für jedes Pixel im Bild. Wir benutzen das query_endpoint und parse_response Hilfsfunktionen, die in der definiert sind Begleitnotizbuch:

query_response = query(base_model_predictor, pedestrian_img)
predictions, labels, image_labels = parse_response(query_response)
print("Objects present in the picture:", image_labels)

Optimieren Sie das vortrainierte Modell

Um ein ausgewähltes Modell zu optimieren, müssen wir den URI dieses Modells sowie den des Trainingsskripts und das für das Training verwendete Container-Image abrufen. Glücklicherweise hängen diese drei Eingaben ausschließlich vom Modellnamen und der Version ab (eine Liste der verfügbaren Modelle finden Sie unter Tabelle der verfügbaren JumpStart-Modelle), und den Instanztyp, für den Sie trainieren möchten. Dies wird im folgenden Code-Snippet demonstriert:

from sagemaker import image_uris, model_uris, script_uris

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"
training_instance_type = "ml.p3.2xlarge"
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,)# 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 to further fine-tune

train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

Wir holen die ab model_id entspricht dem gleichen Modell, das wir zuvor verwendet haben. Sie können dieses JumpStart-Modell jetzt mit dem SageMaker SDK an Ihrem eigenen benutzerdefinierten Dataset optimieren. Wir verwenden einen Datensatz, der öffentlich auf Amazon S3 gehostet wird und sich praktischerweise auf die semantische Segmentierung konzentriert. Der Datensatz sollte für die Feinabstimmung wie im vorherigen Abschnitt erläutert strukturiert werden. Siehe folgenden Beispielcode:

# URI of your training dataset
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_SemSeg/"
training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning")# Create SageMaker Estimator instance
semseg_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 SageMaker Training job by passing s3 path of the training data
semseg_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Wir erhalten die gleichen Standard-Hyperparameter für unser ausgewähltes Modell wie die, die wir im vorherigen Abschnitt gesehen haben, indem wir verwenden sagemaker.hyperparameters.retrieve_default(). Dann instanziieren wir einen SageMaker-Schätzer und rufen den auf .fit -Methode, um mit der Feinabstimmung unseres Modells zu beginnen und ihm den Amazon S3-URI für unsere Trainingsdaten zu übergeben. Das entry_point Das bereitgestellte Skript heißt transfer_learning.py (dasselbe gilt für andere Aufgaben und Modelle) und der Eingabedatenkanal wird übergeben .fit muss benannt werden training.

Während der Algorithmus trainiert, können Sie seinen Fortschritt entweder im SageMaker-Notebook überwachen, in dem Sie den Code selbst ausführen, oder auf Amazon CloudWatch. Wenn das Training abgeschlossen ist, werden die feinabgestimmten Modellartefakte an den Amazon S3-Ausgabespeicherort hochgeladen, der in der Trainingskonfiguration angegeben ist. Sie können das Modell jetzt auf die gleiche Weise wie das vorab trainierte Modell bereitstellen.

Erweiterte Funktionen

Neben der Feinabstimmung und Bereitstellung vortrainierter Modelle bietet JumpStart viele erweiterte Funktionen.

Die erste ist, Automatisches Modelltuning. Auf diese Weise können Sie Ihre ML-Modelle automatisch optimieren, um die Hyperparameterwerte mit der höchsten Genauigkeit innerhalb des von der SageMaker-API bereitgestellten Bereichs zu finden.

Die zweite ist inkrementelles Training. Auf diese Weise können Sie ein Modell trainieren, das Sie bereits fein abgestimmt haben, indem Sie einen erweiterten Datensatz verwenden, der ein zugrunde liegendes Muster enthält, das in früheren Feinabstimmungsläufen nicht berücksichtigt wurde, was zu einer schlechten Modellleistung führte. Inkrementelles Training spart Zeit und Ressourcen, da Sie das Modell nicht von Grund auf neu trainieren müssen.

Zusammenfassung

In diesem Beitrag haben wir gezeigt, wie Sie ein vortrainiertes semantisches Segmentierungsmodell optimieren und bereitstellen und wie Sie es beispielsweise für die Segmentierung mit JumpStart anpassen können. Sie können dies erreichen, ohne Code schreiben zu müssen. Probieren Sie die Lösung selbst aus und senden Sie uns Ihre Kommentare.

Um mehr über JumpStart zu erfahren und wie Sie vortrainierte Open-Source-Modelle für eine Vielzahl anderer ML-Aufgaben verwenden können, sehen Sie sich Folgendes an AWS re:Invent 2020-Video.


Über die Autoren

Führen Sie die Bildsegmentierung mit Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence durch. Vertikale Suche. Ai.Vivek Madan ist ein angewandter Wissenschaftler im 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.

Führen Sie die Bildsegmentierung mit Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence durch. Vertikale Suche. Ai.Santosh Kulkarni ist Enterprise Solutions Architect bei Amazon Web Services und arbeitet mit Sportkunden in Australien zusammen. Er entwickelt leidenschaftlich gerne groß angelegte verteilte Anwendungen, um Geschäftsprobleme zu lösen, indem er sein Wissen in den Bereichen KI/ML, Big Data und Softwareentwicklung nutzt.

Führen Sie die Bildsegmentierung mit Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence durch. Vertikale Suche. Ai.Leonardo Bachega ist Senior Scientist und Manager im Amazon SageMaker JumpStart-Team. Er entwickelt leidenschaftlich KI-Dienste für Computer Vision.

Zeitstempel:

Mehr von AWS Maschinelles Lernen