Semantischer Segmentierungsalgorithm - 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.

Semantischer Segmentierungsalgorithm

Der semantische -Segmentierungsalgorithmus SageMaker stellt einen fein abgestimmten Ansatz auf Pixelebene bereit, um Computer Vision-Anwendungen zu entwickeln. Jedes Pixel in einem Bild wird mit einer Klassenbezeichnung aus einem vordefinierten Satz von Klassen markiert. Das Markieren ist von grundlegender Bedeutung, Szenen zu verstehen, was besonders für eine wachsende Anzahl von Computer Vision-Anwendungen wichtig ist, wie z. B. selbstfahrende Fahrzeuge, medizinische Diagnose per Bildgebungsverfahren und Robotererkennung.

Zum Vergleich: Der SageMakerBildklassifikationsalgorithmusist ein überwachter Lernalgorithmus, der nur ganze Bilder analysiert und sie in eine von mehreren Ausgabekategorien klassifiziert. Objekterkennungsalgorithmus ist ein überwachter Lernalgorithmus, der alle Instances eines Objekts in einem Bild erkennt und klassifiziert. Er gibt den Speicherort und die Größe jedes Objekts im Bild mit einem rechteckigen Begrenzungsrahmen an.

Da der semantische Segmentierungsalgorithmus jedes Pixel in einem Bild klassifiziert, stellt er auch Informationen über die Formen der Objekte, die im Bild enthalten sind, zur Verfügung. Die Segmentierungsausgabe wird als Graustufenbild, die sogenannteSegmentierungsmaskeaus. Eine Segmentierungsmaske ist ein Graustufenbild mit derselben Form wie das Eingabebild.

Der semantische Segmentierungsalgorithmus von SageMaker wird mit demMxNet Gluon Framework und das Gluon CV Toolkitund bietet Ihnen eine Auswahl von drei integrierten Algorithmen zum Schulen eines tiefen neuronalen Netzes. Sie können den Fully-Convolutional Network (FCN)-Algorithmus , den Pyramid Scene Parsing (PSP)-Algorithmus oder DeepLabV3 verwenden.

Jeder der drei Algorithmen verfügt über zwei verschiedene Komponenten:

  • DieRückgrat(oderEncoder): Ein Netzwerk, das zuverlässige Aktivierungskarten von Features erstellt.

  • DieDecoder: Ein Netzwerk, das die Segmentierungsmaske aus den codierten Aktivierungszuordnungen erstellt.

Ihnen steht außerdem eine Auswahl von Backbones für die FCN-, PSP- und DeepLabV3-Algorithmen zur Verfügung: ResNet50 oder ResNet101aus. Diese Backbones umfassen vorgeschulte Artefakte, die ursprünglich im Rahmen der ImageNet-Klassifizierungsaufgabe geschult wurden. Sie können diese Backbones für die Segmentierung mithilfe Ihrer eigenen Daten optimieren. Sie können diese Netzwerke mithilfe Ihrer eigenen Daten auch von Grund auf initialisieren und schulen. Die Decoder werden niemals vorgeschult.

Zum Bereitstellen des geschulten Modells zur Inferenz verwenden Sie den SageMaker -Hosting-Service. Während der Inferenz können Sie die Segmentierungsmaske entweder als PNG-Bild oder als eine Reihe von Wahrscheinlichkeiten für jede Klasse und jedes Pixel anfordern. Sie können diese Masken als Teil einer größeren Pipeline mit zusätzlicher nachgelagerter Bildverarbeitung oder anderen Anwendungen einsetzen.

Beispiel-Notebooks für die semantische Segmentierung

Ein Beispiel-Jupyter-Notebook, das den semantischen -Segmentierungsalgorithmus von SageMaker zum Schulen eines Modells und zum Bereitstellen dieses Modells zum Ausführen von Inferenzen verwendet, finden Sie unterBeispiel für eine Semantische Segmentierungaus. Anweisungen zum Erstellen von und Zugreifen auf Jupyter-Notebook-Instances, die Sie verwenden können, um das Beispiel in SageMaker auszuführen, finden Sie unter.Verwenden von Amazon SageMaker Notebook-Instancesaus.

Um eine Liste aller SageMaker Beispiele zu sehen, erstellen und öffnen Sie eine Notebook-Instance und wählen Sie die OptionSageMaker Beispiele-Registerkarte Die Beispiel-Notebooks für die semantische Segmentierung befinden sich unter Einführung in die Amazon Algorithmen. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Use (Verwenden) und dann Create copy (Kopie erstellen) aus.

E/A-Schnittstelle für den semantischen Segmentierungsalgorithmus

SageMaker semantische Segmentierung erwartet das Schulungsdatensatz des KundenAmazon Simple Storage Service (Amazon S3)aus. Nach der Schulung werden die resultierenden Modellartefakte in Amazon S3 erstellt. Das Eingabeschnittstellenformat für die semantische Segmentierung von SageMaker ähnelt dem Format der meisten standardisierten Benchmark-Datasets für die semantische Segmentierung. Das Dataset in Amazon S3 sollte in zwei Kanälen dargestellt werden, einen fürtrainund eine fürvalidationmit vier Verzeichnissen, zwei für Bilder und zwei für Anmerkungen. Anmerkungen sind voraussichtlich unkomprimierte PNG-Bilder. Das Dataset kann auch über eine Label-Map verfügen, die beschreibt, wie die Anmerkungszuweisungen erstellt sind. Wenn dies nicht der Fall ist, verwendet der Algorithmus einen Standardwert. Es unterstützt auch das erweiterte Manifestbildformat(application/x-image)für Schulungen im Pipe-Eingabemodus direkt aus Amazon S3. Für Inferenz akzeptiert ein Endpunkt Bilder mit einem image/jpeg-Inhaltstyp.

So funktionieren Schulungen

Die Schulungsdaten sind in vier Verzeichnisse unterteilt: train, train_annotation, validation und validation_annotation. Es gibt einen Kanal für jedes dieser Verzeichnisse. Das Dataset erwartet außerdem eine label_map.json-Datei pro Kanal für train_annotation bzw. validation_annotation. Wenn Sie diese JSON-Dateien nicht angeben, stellt SageMaker die Standard-Label-Map zur Verfügung.

Das Dataset, das diese Dateien angibt, sollte dem folgenden Beispiel ähneln:

s3://bucket_name | |- train | | - 0000.jpg | - coffee.jpg |- validation | | - 00a0.jpg | - bananna.jpg |- train_annotation | | - 0000.png | - coffee.png |- validation_annotation | | - 00a0.png | - bananna.png |- label_map | - train_label_map.json | - validation_label_map.json

Jedes JPG-Bild im Schulungs- und Validierungsverzeichnis verfügt über ein entsprechendes PNG-Bezeichnungsbild mit demselben Namen in den Verzeichnissen train_annotation und validation_annotation. Diese Namenskonvention hilft dem Algorithmus, eine Bezeichnung während der Schulung dem entsprechenden Bild zuzuordnen. Die Kanäle train, train_annotation, validation und validation_annotation sind obligatorisch. Die Anmerkungen sind Einzelkanal-PNG-Bilder. Das Format funktioniert, solange die Metadaten (Modi) im Bild dem Algorithmus dabei helfen, die Anmerkungsbilder in einer 8-Bit-Einzelkanal-Ganzzahl ohne Vorzeichen einzulesen. Weitere Informationen zu unserer Unterstützung für Modi finden Sie in der Python Image Library documentation. Wir empfehlen die Verwendung des 8-Bit-Pixel, True Color P-Modus.

Das Bild, das codiert ist, ist bei der Verwendung von Modi eine einfache 8-Bit-Ganzzahl. Um von dieser Zuweisung zu einer Zuweisung einer Bezeichnung zu gelangen, verwendet der Algorithmus eine Zuweisungsdatei pro Kanal, die so genannte Label-Map. Die Label-Map wird verwendet, um die Werte im Bild tatsächlichen Bezeichnungsindizes zuzuweisen. In der Standard-Label-Map, die standardmäßig bereitgestellt wird, wenn Sie dies nicht tun, indiziert der Pixelwert in einer Anmerkungsmatrix (Bild) die Bezeichnung direkt. Diese Bilder können PNG-Graustufendateien oder indizierte 8-Bit-PNG-Dateien sein. Die Label-Map-Datei für den unskalierten Standardfall lautet wie folgt:

{ "scale": "1" }

Um etwas Kontrast zum Anzeigen bereitzustellen, skalieren einige Anmerkungssoftwareanwendungen die Bezeichnungsbilder anhand einer konstanten Menge. Um dies zu unterstützen, bietet der semantische -Segmentierungsalgorithmus von SageMaker eine Neuskalierungsoption, um die Werte auf tatsächliche Bezeichnungswerte herunterzuskalieren. Wenn der Wert durch Herunterskalierung nicht in eine entsprechende Ganzzahl konvertiert wird, verwendet der Algorithmus standardmäßig die größte Ganzzahl kleiner als oder gleich dem Wert für die Skalierung. Der folgende Code zeigt, wie der Skalierungswert zum erneuten Skalieren der Bezeichnungswerte festgelegt wird:

{ "scale": "3" }

Das folgende Beispiel zeigt, wie dieser "scale"-Wert verwendet wird, um die encoded_label-Werte des Eingabeanmerkungsbilds neu zu skalieren, wenn sie den in der Schulung zu verwendenden mapped_label-Werten zugewiesen werden. Die Bezeichnungswerte im Eingabeanmerkungsbild sind 0, 3, 6, mit der Skalierung 3, sodass sie 0, 1, 2 für Schulungen zugewiesen werden:

encoded_label = [0, 3, 6] mapped_label = [0, 1, 2]

In einigen Fällen müssen Sie möglicherweise eine bestimmte Farbzuweisung für jede Klasse angeben. Verwenden Sie die Zuweisungsoption in der Bezeichnungszuweisung, wie im folgenden Beispiel einer label_map-Datei gezeigt:

{ "map": { "0": 5, "1": 0, "2": 2 } }

Die Bezeichnungszuweisung für dieses Beispiel lautet:

encoded_label = [0, 5, 2] mapped_label = [1, 0, 2]

Mit Bezeichnungszuweisungen können Sie unterschiedliche Anmerkungssysteme und -softwareanwendungen verwenden, um Daten ohne aufwändige Vorverarbeitung zu erhalten. Sie können eine Label-Map pro Kanal bereitstellen. Die Dateien für eine Label-Map im label_map-Kanal müssen den Namenskonventionen für die vier Verzeichnisstrukturen folgen. Wenn Sie keine Label-Map angeben, geht der Algorithmus von einer Skalierung von 1 (Standardwert) aus.

Schulung mit dem erweiterten Manifestformat

Im erweiterten Manifestformat können Sie das Training mit den Bilddateien im Pipe-Modus vornehmen, ohne RecordIO-Dateien erstellen zu müssen. Die erweiterte Manifestdatei enthält Datenobjekte und sollte im JSON-Format vorliegen, wie in der CreateTrainingJob-Anforderung beschrieben. Jede Zeile im Manifest ist ein Eintrag mit dem Amazon S3 URI für das Bild und dem URI für das Anmerkungsbild.

Jedes JSON-Objekt in der Manifestdatei muss einen source-ref-Schlüssel enthalten. Diesource-refDer -Schlüssel sollte den Wert des Amazon S3 URI für das Bild enthalten. Die Bezeichnungen werden gemäß dem AttributeNames-Parameterwert wie in der CreateTrainingJob-Anforderung angegeben bereitgestellt. Es können auch zusätzliche Metadaten unter dem metadata-Tag enthalten sein. Diese werden jedoch vom Algorithmus ignoriert. Im folgenden Beispiel sind die AttributeNames in der Liste der Bild- und Anmerkungsreferenzen ["source-ref", "city-streets-ref"] enthalten. Diese Namen müssen -ref angehängt werden. Wenn Sie den Algorithmus für die semantische Segmentierung mit erweitertem Manifest verwenden, muss der Wert des RecordWrapperType-Parameters "RecordIO" lauten und Wert des ContentType-Parameters muss application/x-recordio sein.

{"source-ref": "S3 bucket location", "city-streets-ref": "S3 bucket location", "city-streets-metadata": {"job-name": "label-city-streets", }}

Weitere Informationen zu erweiterten Manifestdateien finden Sie unter Bereitstellen von Dataset-Metadaten für Schulungsaufträge mit einer erweiterten Manifestdatei.

Inkrementelles Training

Sie können die Schulung eines neuen Modells auch mit einem Modell vornehmen, das Sie zuvor mit SageMaker geschult haben. Diese inkrementelle Schulung verkürzt die Schulungsdauer, wenn Sie ein neues Modell mit denselben oder ähnlichen Daten schulen möchten. Derzeit wird inkrementelle Schulungen nur für Modelle unterstützt, die mit der in integrierten semantischen Segmentierung von SageMaker trainiert werden.

Um ein eigenes vorgeschultes Modell zu verwenden, geben Sie den ChannelName "model" in der InputDataConfig für die CreateTrainingJob-Anforderung an. Legen Sie den ContentType für den Modellkanal auf application/x-sagemaker-model fest. Die Eingabeparameter backbone, algorithm, crop_size und num_classes, die die Netzwerkarchitektur definieren, müssen in den Eingabehyperparametern des neuen Modells und im vorgeschulten Modell, das Sie in den Modellkanal hochladen, einheitlich angegeben werden. Für die vortrainierte Modelldatei können Sie die komprimierten (.tar.gz) Artefakte aus SageMaker Ausgaben verwenden. Sie können nur Bildformate für Eingabedaten verwenden. Weitere Informationen zum inkrementellen Training und Anweisungen zu dessen Verwendung finden Sie unter in Amazon SageMaker inkrementelle Schulung.

Erstellen von Inferenzen

Zum Abfragen eines geschulten Modells, das an einem Endpunkt bereitgestellt wird, müssen Sie ein Bild und einen AcceptType zur Verfügung stellen, der die Art der erforderlichen Ausgabe angibt. Der Endpunkt akzeptiert JPEG-Bilder mit einem image/jpeg-Inhaltstyp. Wenn Sie einen AcceptType vom Typ image/png anfordern, gibt der Algorithmus eine PNG-Datei mit einer Segmentierungsmaske im selben Format wie die Bezeichnungen selbst aus. Wenn Sie einen Akzeptanztyp application/x-recordio-protobuf anfordern, gibt der Algorithmus im recordio-protobuf-Format codierte Klassenwahrscheinlichkeiten zurück. Das letzte Format gibt einen 3D-Tensor aus, wobei die Größe der dritten Dimension der Anzahl von Klassen entspricht. Diese Komponente bezeichnet die Wahrscheinlichkeit der einzelnen Klassenbezeichnungen für jedes Pixel.

EC2-Instance-Empfehlung für den semantischen Segmentierungsalgorithmus

Der semantische -Segmentierungsalgorithmus von SageMaker unterstützt nur GPU-Instances für Schulungen. Wir empfehlen die Verwendung von GPU-Instances mit mehr Arbeitsspeicher für Schulungen mit großen Stapelgrößen. Der Algorithmus kann mit P2/P3 EC2 Amazon Elastic Compute Cloud (Amazon EC2)-Instances in Einzelcomputerkonfigurationen geschult werden. Er unterstützt die folgenden GPU-Instances für Schulungen:

  • ml.p2.xlarge

  • ml.p2.8xlarge

  • ml.p2.16xlarge

  • ml.p3.2xlarge

  • ml.p3.8xlarge

  • ml.p3.16xlarge

Für Inferenzen können Sie entweder CPU-Instances (z. B. "c5" und "m5") und GPU-Instances (z. B. p2 und p3) oder beides verwenden. Weitere Informationen zu den Instance-Typen, die unterschiedliche Kombinationen von CPU-, GPU-, Speicher- und Netzwerkkapazität für Inferenzen zur Verfügung stellen, finden Sie unter Amazon SageMaker-ML-Instance-Typen.