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

Die SageMaker Der semantische Segmentierungsalgorithmus bietet einen feinkörnigen 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: Die SageMaker Bildklassifizierung - MXNetist 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 dargestellt, das alsSegmentmaske. Eine Segmentierungsmaske ist ein Graustufenbild mit derselben Form wie das Eingabebild.

Die SageMaker Der semantische Segmentierungsalgorithmus wird mit demMXNet Gluon Framework und das Gluon CV Toolkit. Es bietet Ihnen die Wahl zwischen drei integrierten Algorithmen, um ein tiefes neuronales Netzwerk zu trainieren. Sie können dasFully-Convolutional Network (FCN) -Algorithmus,Pyramid Scene Parsing (PSP) -Algorithmus, oderDeepLabV3.

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

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

  • DieDecoder— Ein Netzwerk, das die Segmentierungsmaske aus den codierten Aktivierungs-Maps erstellt.

Sie haben auch die Wahl zwischen Backbones für FCN, PSP und DeepLabV3-Algorithmen: ResNet50 oder ResNet101. Zu diesen Rückgräten gehören vortrainierte Artefakte, die ursprünglich auf demImageNetKlassifizierungsaufgabe. 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.

Um das trainierte Modell für Inferenzen bereitzustellen, verwenden Sie die SageMaker Hosting-Dienst. 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

Für ein Jupyter-Beispiel-Notizbuch, das die SageMaker semantischer Segmentierungsalgorithmus zum Trainieren eines Modells und dessen Bereitstellung zur Durchführung von Rückschlüssen, sieheBeispiel für eine semantische Segmentierung. Anweisungen zum Erstellen und Zugreifen auf Jupyter-Notebook-Instanzen, mit denen Sie das Beispiel ausführen können, finden Sie in SageMaker, sieheAmazon SageMaker Notebook-Instances verwenden.

Die Liste aller SageMaker Samples, erstellen und öffnen Sie eine Notebook-Instanz und wählen SieSageMaker BeispieleTabulator. 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 Bei der semantischen Segmentierung wird erwartet, dass der Trainingsdatensatz des Kunden aktiviert istAmazon Simple Storage Service (Amazon S3). Nach dem Training werden die resultierenden Modellartefakte auf Amazon S3 erzeugt. Das Input-Interface-Format für die SageMaker Die semantische Segmentierung ähnelt der der meisten standardisierten Benchmarking-Datensätze für die semantische Segmentierung. Der Datensatz in Amazon S3 wird voraussichtlich in zwei Kanälen präsentiert, einer fürtrainund eine fürvalidationverwendet vier Verzeichnisse, 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 Manifest-Bildformat (application/x-image) für das 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 voreingestellte Labelzuordnung 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, hat der SageMaker Der semantische Segmentierungsalgorithmus bietet eine Neuskalierungsoption, um die Werte auf tatsächliche Labelwerte zu skalieren. 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 inJSON-LinienFormat, wie in derCreateTrainingJobanfragen. Jede Zeile im Manifest ist ein Eintrag, der den Amazon S3 S3-URI für das Bild und den URI für das Anmerkungsbild enthält.

Jedes JSON-Objekt in der Manifestdatei muss einen source-ref-Schlüssel enthalten. Diesource-refSchlüssel sollte den Wert des Amazon S3 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 inkrementelles Training nur für Modelle unterstützt, die mit dem integrierten SageMaker Semantische Segmentierung.

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 vorab trainierte Modelldatei können Sie die komprimierten (.tar.gz) Artefakte aus SageMaker Ausgaben. Sie können nur Bildformate für Eingabedaten verwenden. Weitere Informationen zum inkrementellen Training und Anweisungen zu dessen Verwendung finden Sie unter Inkrementelle Schulungen bei 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

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

Für die Inferenz können Sie entweder CPU-Instanzen (wie C5 und M5) und GPU-Instanzen (wie P3 und G4dn) oder beide verwenden. Hinweise zu den Instance-Typen, die unterschiedliche Kombinationen aus CPU, GPU, Arbeitsspeicher und Netzwerkkapazität für Inferenzen bereitstellen, finden Sie unterAmazon SageMaker ML Instanztypen.