Semantischer Segmentierungsalgorithm - Amazon SageMaker KI

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 von SageMaker KI 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: SageMaker KI Bildklassifizierung - MXNet ist ein überwachter Lernalgorithmus, der nur ganze Bilder analysiert und sie in eine von mehreren Ausgabekategorien einordnet. 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 Algorithmus für die semantische Segmentierung von SageMaker KI basiert auf dem Gluon-Framework und dem MXNet 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), den PSP-Algorithmus (Pyramid Scene Parsing) oder V3 verwenden. DeepLab

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-, PSP- und V3-Algorithmen: 50 oder 101. DeepLab ResNet ResNet Zu diesen Backbones gehören vortrainierte Artefakte, die ursprünglich für die Klassifikationsaufgabe trainiert wurden. ImageNet 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 trainieren. Die Decoder werden niemals vortrainiert.

Verwenden Sie den SageMaker KI-Hosting-Service, um das trainierte Modell für Inferenzen 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 Algorithmus für semantische Segmentierung von SageMaker KI verwendet, um ein Modell zu trainieren und es für die Durchführung von Inferenzen bereitzustellen, finden Sie im Beispiel für semantische Segmentierung. Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instanzen, mit denen Sie das Beispiel in KI ausführen können, finden Sie unter. SageMaker Amazon SageMaker Notebook-Instances

Um eine Liste aller SageMaker KI-Beispiele zu sehen, erstellen und öffnen Sie eine Notebook-Instanz und wählen Sie den Tab SageMaker KI-Beispiele aus. 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 Bei der semantischen KI-Segmentierung wird davon ausgegangen, 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 Format der Eingabeschnittstelle für die semantische SageMaker KI-Segmentierung ähnelt dem der meisten standardisierten Benchmarking-Datensätze zur semantischen Segmentierung. Der Datensatz 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. Der Datensatz 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 Trainings

Die Trainingsdaten sind in vier Verzeichnisse unterteilt: train, train_annotation, validation und validation_annotation. Es gibt einen Kanal für jedes dieser Verzeichnisse. Der Datensatz erwartet außerdem eine label_map.json-Datei pro Kanal für train_annotation bzw. validation_annotation. Wenn Sie diese JSON-Dateien nicht bereitstellen, stellt SageMaker AI die standardmäßige Label-Map bereit.

Der Datensatz, der 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 Trainings- 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 des Trainings 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 KI-Algorithmus für semantische Segmentierung eine Neuskalierungsoption, mit der die Werte auf tatsächliche Labelwerte herunterskaliert werden können. 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 im Training 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 Trainings 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.

Training 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 Erweiterte Manifestdateien für Schulungsjobs.

Inkrementelles Training

Sie können das Training eines neuen Modells auch mit einem Modell beginnen, das Sie zuvor mit KI trainiert haben. SageMaker Dieses inkrementelle Training verkürzt die Trainingsdauer, wenn Sie ein neues Modell mit denselben oder ähnlichen Daten trainieren möchten. Derzeit wird inkrementelles Training nur für Modelle unterstützt, die mit der integrierten Semantischen Segmentierung der SageMaker KI trainiert wurden.

Um ein eigenes vortrainiertes 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 vortrainierten Modell, das Sie in den Modellkanal hochladen, einheitlich angegeben werden. Für die vortrainierte Modelldatei können Sie die komprimierten (.tar.gz) Artefakte aus KI-Ausgaben verwenden. SageMaker 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 AI SageMaker .

Erstellen von Inferenzen

Zum Abfragen eines trainierten 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 Instanzempfehlung für den semantischen Segmentierungsalgorithmus

Der SageMaker KI-Algorithmus für semantische Segmentierung unterstützt nur GPU-Instanzen für das Training. Wir empfehlen die Verwendung von GPU-Instanzen mit mehr Speicher für das Training mit großen Batchgrößen. Der Algorithmus kann mit P2-, P3-, G4dn- oder G5-Instances in Einzelmaschinenkonfigurationen trainiert werden.

Für Inferenzen können Sie entweder CPU-Instances (z. B. C5 und M5) und GPU-Instances (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 bieten, finden Sie unter Amazon SageMaker AI ML-Instance-Typen.