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 SageMaker semantische Segmentierungsalgorithmus bietet einen differenzierten Ansatz auf Pixelebene für die Entwicklung von Computer-Vision-Anwendungen. 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 ist ein SageMaker Bildklassifikation - MXNet Algorithmus für überwachtes Lernen, der nur ganze Bilder analysiert und sie in eine von mehreren Ausgabekategorien klassifiziert. Objekterkennung – MXNet 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, bzw. eine Segmentierungsmaske, dargestellt. Eine Segmentierungsmaske ist ein Graustufenbild mit derselben Form wie das Eingabebild.

Der SageMaker semantische Segmentierungsalgorithmus basiert auf dem MXNet Gluon-Framework und dem Gluon CV-Toolkit . Er bietet Ihnen die Wahl zwischen drei integrierten Algorithmen zum Trainieren eines tiefen neuronalen Netzwerks. Sie können den FCN-Algorithmus (Fully-Convolutional Network), denPSP-Algorithmus (Parsing) oder DeepLabV3 verwenden.

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

  • Der Backbone (oder Encoder)—Ein Netzwerk, das zuverlässige Aktivierungszuordnungen von Funktionen erstellt.

  • Der Decoder—Ein Netzwerk, das die Segmentierungsmaske aus den codierten Aktivierungszuordnungen erstellt.

Sie haben auch die Wahl zwischen Backbones für die FCN-, Bol- und DeepLabV3-Algorithmen: ResNet50 oder ResNet101. Zu diesen Backbones gehören vortrainierte Artefakte, die ursprünglich für die ImageNet Klassifizierungsaufgabe trainiert 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.

Verwenden Sie den SageMaker Hosting-Service, um das trainierte Modell für die Inferenz bereitzustellen. 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 für ein Jupyter-Notebook, das den SageMaker semantischen Segmentierungsalgorithmus verwendet, um ein Modell zu trainieren und es für die Durchführung von Inferenzen bereitzustellen, finden Sie im Beispiel für die semantische Segmentierung . 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.

Um eine Liste aller SageMaker Beispiele anzuzeigen, erstellen und öffnen Sie eine Notebook-Instance und wählen Sie die Registerkarte SageMaker Beispiele. 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 Verwenden und dann Kopie erstellen aus.

E/A-Schnittstelle für den semantischen Segmentierungsalgorithmus

SageMaker Die semantische Segmentierung erwartet, dass sich der Trainingsdatensatz des Kunden auf Amazon Simple Storage Service (Amazon S3) befindet. Nach dem Training werden die resultierenden Modellartefakte in Amazon S3 erstellt. Das Eingabeschnittstellenformat für die SageMaker semantische Segmentierung ähnelt dem der meisten standardisierten Benchmarking-Datensätze für die semantische Segmentierung. Das Dataset in Amazon S3 sollte in zwei Kanälen dargestellt werden, einen für train und einen für validation unter Verwendung von 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. Darüber hinaus unterstützt das erweiterte Manifest-Bildformat (application/x-image) für Training 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 bereitstellen, SageMaker stellt die Standardsatz-Bezeichnungszuordnung bereit.

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 SageMaker semantische Segmentierungsalgorithmus eine Neuskalierungsoption, um die Werte auf tatsächliche Labelwerte 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–Linien-Format vorliegen, wie in der CreateTrainingJob-Anforderung beschrieben. Jede Zeile in der Manifestdatei ist ein Eintrag der die Amazon S3 URI für das Bild enthält, und dem URI für das Anmerkungsbild.

Jedes JSON-Objekt in der Manifestdatei muss einen source-ref-Schlüssel enthalten. Der source-ref-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 Datensatz-Metadaten für Trainingsaufträ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 inkrementelles Training nur für Modelle unterstützt, die mit der integrierten SageMaker semantischen Segmentierung trainiert wurden.

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 Verwenden Sie inkrementelles Training in Amazon SageMaker.

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 SageMaker semantische Segmentierungsalgorithmus unterstützt nur GPU-Instances für das Training, und wir empfehlen, GPU-Instances mit mehr Speicher für das Training mit großen Batchgrößen zu verwenden. Der Algorithmus kann mit P2-, P3-, G4dn- oder G5-Instanzen in Einzelmaschinenkonfigurationen trainiert werden.

Für Inferenzen können Sie entweder CPU-Instanzen (z.B. C5 und M5) und GPU-Instanzen (z.B. P3 und G4dn) oder beides verwenden. Informationen zu den Instance-Typen, die unterschiedliche Kombinationen von CPU, GPU, Arbeitsspeicher und Netzwerkkapazität für Inferenzen bereitstellen, finden Sie unter Amazon SageMaker ML-Instance-Typen.