Algoritmo di segmentazione semantica
L’algoritmo di segmentazione semantica di SageMaker AI fornisce un approccio a livello di pixel in modo granulare per lo 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 raffronto, Classificazione delle immagini - MXNet di SageMaker AI è 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 semantica di SageMaker AI è costruito utilizzando il framework MXNet Gluon e il Kit di strumenti Gluon CV
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.
Puoi anche scegliere il backbone per gli algoritmi FCN, PSP e DeepLabV3: ResNet50 o ResNet101
Per implementare il modello già addestrato per l’inferenza, utilizza il servizio di hosting di SageMaker AI. 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.
Argomenti
Notebook di esempio di segmentazione semantica
Per un notebook Jupyter di esempio che utilizza l’algoritmo di segmentazione semantica di SageMaker AI per addestrare un modello e implementarlo per eseguire inferenze, consulta l’esempio di segmentazione semantica
Per visualizzare un elenco di tutti gli esempi di SageMaker AI, crea e apri un’istanza del notebook e scegli la scheda Esempi di SageMaker AI. 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
La segmentazione semantica di SageMaker AI si aspetta che il set di dati di addestramento del cliente sia in Amazon Simple Storage Service (Amazon S3)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 l’addestramento
I dati di addestramento 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 specifichi questi file JSON, SageMaker AI fornisce la mappa di etichette predefinita.
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 addestramento 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 l’addestramento. 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 LibraryP.
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 tale scopo, l’algoritmo di segmentazione semantica di SageMaker AI fornisce un’opzione di ridimensionamento per ridurre verticalmente i valori a quelli delle etichette effettive. 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 l’addestramento:
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).
Addestramento con il formato di manifest aumentato
Il formato di manifest aumentato ti consente di eseguire l’addestramento 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 LinesCreateTrainingJob. 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 File di manifesto aumentati nei job di addestramento.
Addestramento incrementale
Puoi anche eseguire l’addestramento di un nuovo modello con un modello che hai già precedentemente sottoposto ad addestramento utilizzando SageMaker AI. L’addestramento incrementale consente di risparmiare tempo quando vuoi addestrare un nuovo modello con dati uguali o simili. Attualmente, l’addestramento incrementale è supportato solo per i modelli sottoposti ad addestramento con la segmentazione semantica di SageMaker AI integrata.
Per utilizzare il tuo modello già addestrato, 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à addestrato che carichi nel canale del modello. Per il file del modello preaddestrato puoi utilizzare gli artefatti compressi (.tar.gz) degli output di SageMaker AI. È possibile utilizzare solo i formati di immagine per i dati di input. Per ulteriori informazioni sull’addestramento incrementale e le istruzioni per utilizzarlo, consulta Utilizzo dell’addestramento in Amazon SageMaker AI.
Inferenze
Per eseguire una query su un modello già addestrato 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 semantica di SageMaker AI supporta solo le istanze di GPU per l’addestramento; consigliamo di utilizzare istanze di 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 istanze che forniscono diverse combinazioni di CPU, GPU, memoria e capacità di rete per l’inferenza, consulta Amazon SageMaker AI ML Instance Types