Algoritmo di segmentazione semantica - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Algoritmo di segmentazione semantica

L'algoritmo di segmentazione SageMaker semantica fornisce un approccio preciso a livello di pixel allo sviluppo di applicazioni di visione artificiale. Applica il tag a ogni pixel di un'immagine con un'etichetta di classe da un set predefinito di classi. Il tagging è fondamentale per comprendere le scene, che è un aspetto determinante per un numero sempre crescente di applicazioni di visione artificiale, come i veicoli a guida autonoma, la diagnosi per immagini cliniche e i sensori di robot.

Per fare un confronto, SageMaker Classificazione delle immagini - MXNet è un algoritmo di apprendimento supervisionato che analizza solo immagini intere, classificandole in una delle diverse categorie di output. L'Rilevamento degli oggetti - MXNet è un algoritmo di apprendimento supervisionato che rileva e classifica tutte le istanze di un oggetto in un'immagine. Indica la posizione e la dimensione di ciascun oggetto dell'immagine con un rettangolo di selezione.

Poiché l'algoritmo di segmentazione semantica classifica ogni pixel di un'immagine, fornisce anche informazioni sulle forme degli oggetti contenuti nell'immagine. L'output della segmentazione è rappresentato da un'immagine in scala di grigi, chiamata maschera di segmentazione. Una maschera di segmentazione è un'immagine in scala di grigi con la stessa forma dell'immagine di input.

L'algoritmo di segmentazione SageMaker semantica è costruito utilizzando il framework MXNet Gluon e il toolkit Gluon CV. Offre una scelta di tre algoritmi integrati per addestrare una rete neurale profonda. È possibile utilizzare l'algoritmo Fully-Convolutional Network (FCN), l'algoritmo Pyramid Scene Parsing (PSP) o V3. DeepLab

Ciascuno dei tre algoritmi ha due componenti distinti:

  • Il backbone (o codificatore): una rete che produce mappe di attivazione affidabili delle funzionalità.

  • Il decoder: una rete che costruisce la maschera di segmentazione a partire dalle mappe di attivazione codificate.

Hai anche una scelta di backbone per gli algoritmi FCN, PSP e V3:50 o 101. DeepLab ResNet ResNet Queste dorsali includono artefatti preaddestrati originariamente addestrati per l'attività di classificazione. ImageNet Puoi ottimizzare questi backbone per la segmentazione utilizzando i tuoi dati. In alternativa, puoi inizializzare e sottoporre al training queste reti da zero utilizzando solo i tuoi dati. I decodificatori non vengono mai sottoposti al training.

Per implementare il modello addestrato per l'inferenza, utilizzate il servizio di hosting. SageMaker Durante l'inferenza, puoi richiedere la maschera di segmentazione come immagine PNG o come set di probabilità per ogni classe per ciascun pixel. È possibile utilizzare queste maschere come parte di una pipeline più ampia che include l'elaborazione di immagini downstream aggiuntive o altre applicazioni.

Notebook di esempio di segmentazione semantica

Per un esempio di notebook Jupyter che utilizza l'algoritmo di segmentazione SageMaker semantica per addestrare un modello e distribuirlo per eseguire inferenze, vedi l'esempio di segmentazione semantica. Per istruzioni su come creare e accedere alle istanze di notebook Jupyter che è possibile utilizzare per eseguire l'esempio, vedere. SageMaker Istanze Amazon SageMaker Notebook

Per visualizzare un elenco di tutti gli SageMaker esempi, crea e apri un'istanza di notebook e scegli la scheda Esempi. SageMaker I notebook di segmentazione semantica di esempio si trovano in Introduction to Amazon Algorithms (Introduzione agli algoritmi Amazon). Per aprire un notebook, seleziona la relativa scheda Use (Utilizza) e scegli Create copy (Crea copia).

Interfaccia di input/output per l'algoritmo di segmentazione semantica

SageMaker la segmentazione semantica prevede che il set di dati di formazione del cliente si trovi su Amazon Simple Storage Service (Amazon S3). Una volta sottoposto al training, produce gli artefatti del modello risultanti in Amazon S3. Il formato dell'interfaccia di input per la segmentazione SageMaker semantica è simile a quello della maggior parte dei set di dati di benchmarking della segmentazione semantica standardizzati. Il set di dati in Amazon S3 dovrebbe essere presentato in due canali, uno per train e uno per validation usando quattro directory, due per le immagini e due per le annotazioni. Le annotazioni devono essere immagini PNG non compresse. Il set di dati può anche avere una mappa di etichette che descrive come vengono stabiliti i mapping di annotazione. In caso contrario, l'algoritmo usa l'impostazione predefinita. Supporta anche il formato di immagine manifest aumentato (application/x-image) per l'addestramento in modalità di input Pipe direttamente da Amazon S3. Per l'inferenza, un endpoint accetta le immagini con il tipo di contenuto image/jpeg.

Come funziona il training

I dati di training sono suddivisi in quattro directory: train, train_annotation, validation e validation_annotation. C'è un canale per ciascuna di queste directory. Anche il set di dati deve avere un file label_map.json per canale per train_annotation e validation_annotation rispettivamente. Se non fornisci questi file JSON, fornisce la mappa delle etichette impostata di default. SageMaker

Il set di dati che specifica questi file è simile al seguente esempio:

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

Ogni immagine JPG nelle directory di training e di convalida ha un'immagine di etichetta PNG corrispondente con lo stesso nome nelle directory train_annotation e validation_annotation. Questa convenzione di denominazione aiuta l'algoritmo ad associare un'etichetta all'immagine corrispondente durante il training. I canali train, train_annotation, validation e validation_annotation sono obbligatori. Le annotazioni sono immagini PNG a canale singolo. Il formato funziona fintanto che i metadati (modalità) dell'immagine aiutano l'algoritmo a leggere le immagini di annotazione in un numero intero senza segno a 8 bit a canale singolo. Per ulteriori informazioni sul supporto per le modalità, consulta la documentazione di Python Image Library. Ti consigliamo di usare pixel a 8 bit, modalità truecolor P.

L'immagine codificata è un semplice numero intero a 8 bit quando si usano le modalità. Per passare da questa mappatura a una mappa di un'etichetta, l'algoritmo utilizza un file di mappatura per canale, chiamato mappa delle etichette. La mappa delle etichette viene utilizzata per mappare i valori nell'immagine con indici di etichette reali. Nella mappa di etichette predefinita, che viene fornita per impostazione predefinita se non ne fornisci una, il valore del pixel in una matrice di annotazioni (immagine) indicizza direttamente l'etichetta. Queste immagini possono essere file PNG in scala di grigi o file PNG indicizzati a 8 bit. Il file della mappa delle etichette per il caso predefinito non ridimensionato è il seguente:

{ "scale": "1" }

Per offrire il contrasto della visualizzazione, alcuni software di annotazione ridimensionano le immagini delle etichette a una quantità costante. A supporto di ciò, l'algoritmo di segmentazione SageMaker semantica fornisce un'opzione di ridimensionamento per ridurre i valori ai valori effettivi delle etichette. Quando il ridimensionamento non converte il valore in un numero intero appropriato, l'algoritmo imposta automaticamente il numero intero più grande minore o uguale al valore di ridimensionamento. Il codice seguente mostra come impostare il valore per ridimensionare i valori dell'etichetta:

{ "scale": "3" }

L'esempio seguente mostra il modo in cui il valore "scale" viene utilizzato per ridimensionare i valori encoded_label dell'immagine di annotazione di input quando sono mappati ai valori mapped_label che devono essere utilizzati nel training. I valori dell'etichetta nell'immagine di annotazione di input sono 0, 3, 6, con il ridimensionamento 3, quindi vengono associati a 0, 1, 2 per il training:

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

In alcuni casi, potrebbe essere necessario specificare una particolare mappatura di colori per ogni classe. Utilizza l'opzione mappa nella mappatura dell'etichetta come mostrato nel seguente esempio di file label_map:

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

Questo mapping di etichette per questo esempio è:

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

Con i mapping di etichette, è possibile utilizzare diversi sistemi e software di annotazione per ottenere i dati senza molte pre-elaborazioni. Puoi fornire una mappa di etichette per canale. I file per una mappa di etichette nel canale label_map devono seguire le convenzioni di denominazione per la struttura delle quattro directory. Se non fornisci una mappa di etichette, l'algoritmo utilizza una scala di 1 (impostazione predefinita).

Training con il formato di manifest aumentato

Il formato di manifest aumentato ti consente di eseguire il training in modalità Pipe usando i file di immagine senza dover creare file RecordIO. Il file manifest aumentato contiene oggetti dati e dovrebbe essere nel formato JSON Lines, come descritto nella richiesta CreateTrainingJob. Ogni riga nel manifest è una voce contenente l'URI Amazon S3 per l'immagine e l'URI per l'immagine di annotazione.

Ogni oggetto JSON nel file manifest deve contenere una chiave source-ref. La chiave source-ref dovrebbe contenere il valore dell'URI Amazon S3 dell'immagine. Le etichette sono fornite nel valore del parametro AttributeNames specificato nella richiesta CreateTrainingJob. Può anche contenere metadati aggiuntivi nel tag di metadati, ma questi vengono ignorati dall'algoritmo. Nell'esempio seguente, gli AttributeNames sono contenuti nell'elenco di riferimenti a immagini e annotazioni ["source-ref", "city-streets-ref"]. A questi nomi deve essere accodato -ref. Quando si utilizza l'algoritmo di segmentazione semantica con manifest aumentato, il valore del parametro RecordWrapperType deve essere "RecordIO" e il valore del parametro ContentType deve essere application/x-recordio.

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

Per ulteriori informazioni sui file manifest aumentati, consulta Fornitura dei metadati dei set di dati ai processi di addestramento con un file manifest aumentato.

Training incrementale

Puoi anche eseguire il training di un nuovo modello usando un modello che hai già precedentemente sottoposto al training in SageMaker. Il training incrementale consente di risparmiare tempo quando vuoi sottoporre al training un nuovo modello con dati uguali o simili. Attualmente, la formazione incrementale è supportata solo per i modelli addestrati con la segmentazione semantica integrata. SageMaker

Per utilizzare il tuo modello già sottoposto al training, specifica ChannelName come "model" in InputDataConfig per la richiesta CreateTrainingJob. Imposta ContentType per il canale del modello su application/x-sagemaker-model. I parametri di input backbone, algorithm, crop_size e num_classes che definiscono l'architettura di rete devono essere coerentemente specificati negli iperparametri di input del nuovo modello e nel modello già sottoposto al training che carichi nel canale del modello. Per il file di modello preaddestrato, puoi utilizzare gli artefatti compressi (.tar.gz) degli output. SageMaker È possibile utilizzare solo i formati di immagine per i dati di input. Per ulteriori informazioni sul training incrementale e le istruzioni per utilizzarlo, consulta Usa la formazione incrementale in Amazon SageMaker.

Inferenze

Per eseguire una query su un modello già sottoposto al training distribuito su un endpoint, è necessario fornire un'immagine e un AcceptType che denoti il tipo di output richiesto. L'endpoint accetta le immagini JPEG con un tipo di contenuto image/jpeg. Se richiedi un AcceptType di image/png, l'algoritmo genera un file PNG con una maschera di segmentazione nello stesso formato delle etichette. Se richiedi un tipo di accettazione di application/x-recordio-protobuf, l'algoritmo restituisce le probabilità di classe codificate nel formato recordio-protobuf. Quest'ultimo formato genera un tensore 3D in cui la terza dimensione ha una dimensione pari al numero di classi. Questo componente indica la probabilità di ciascuna etichetta di classe per ciascun pixel.

Raccomandazione istanza EC2 per l'algoritmo di segmentazione semantica

L'algoritmo di segmentazione SageMaker semantica supporta solo istanze GPU per l'addestramento e consigliamo di utilizzare istanze GPU con più memoria per l'addestramento con batch di grandi dimensioni. L'algoritmo può essere addestrato utilizzando istanze P2, P3, G4dn o G5 in configurazioni a macchina singola.

Per le inferenze, è possibile utilizzare le istanze CPU (come C5 e M5) e le istanze GPU (come p3 e G4dn) o entrambi. Per informazioni sui tipi di istanza che forniscono diverse combinazioni di CPU, GPU, memoria e capacità di rete per l'inferenza, consulta Tipi di istanze Amazon SageMaker ML.