Rilevamento degli oggetti - MXNet - Amazon SageMaker AI

Rilevamento degli oggetti - MXNet

L’algoritmo Rilevamento degli oggetti - MXNet di Amazon SageMaker AI rileva e classifica gli oggetti nelle immagini utilizzando un’unica rete neurale profonda. È un algoritmo di apprendimento supervisionato che accetta le immagini come input e identifica tutte le istanze degli oggetti all'interno della scena dell'immagine. L'oggetto è classificato in una delle classi in una raccolta specificata con un punteggio di attendibilità che appartiene alla classe. La posizione e la scala nell'immagine sono indicate da un riquadro di delimitazione rettangolare. Utilizza il framework Single Shot Multibox Detector (SSD) e supporta due reti di base: VGG e ResNet. La rete può essere addestrata da zero o con modelli già addestrati sul set di dati ImageNet.

Interfaccia di input/output per l'algoritmo di rilevamento oggetti

L’algoritmo di rilevamento degli oggetti di SageMaker AI supporta entrambi i tipi di contenuto RecordIO (application/x-recordio) e immagine (image/png, image/jpeg e application/x-image) per l’addestramento in modalità file e supporta RecordIO (application/x-recordio) per l’addestramento in modalità pipe. Tuttavia puoi anche addestrare in modalità Pipe utilizzando il file immagine (image/png, image/jpeg e application/x-image), senza creare file RecordIO usando il formato di manifest aumentato. Il formato di input raccomandato per gli algoritmi di rilevamento degli oggetti di Amazon SageMaker AI è Apache MXNet RecordIO. Tuttavia, puoi anche utilizzare immagini non elaborate in formato. jpg o. png. L'algoritmo supporta solo application/x-image per inferenza.

Nota

Allo scopo di mantenere una migliore interoperabilità con i framework di deep learning esistenti, questo differisce dai formati di dati protobuf comunemente utilizzati da altri algoritmi Amazon SageMaker AI.

Vedi Notebook di esempio di rilevamento oggetti per altri dettagli sui formati dei dati.

Addestramento con il formato RecordIO

Se utilizzi il formato RecordIO per l’addestramento, specifica i canali di addestramento e di convalida come valori per il parametro InputDataConfig della richiesta CreateTrainingJob. Specifica un file RecordIO (.rec) nel canale di addestramento e un file RecordIO nel canale di convalida. Imposta il tipo di contenuto per entrambi i canali su application/x-recordio. Un esempio di come generare un file RecordIO è disponibile nel notebook di esempio sul rilevamento oggetti. Puoi anche utilizzare gli strumenti di GluonCV di MXNet per generare file RecordIO per set di dati comuni come PASCAL Visual Object Classes e Common Objects in Context (COCO).

Addestramento con il formato immagine

Se utilizzi il formato immagine per l’addestramento, specifica i canali train, validation, train_annotation e validation_annotation come valori per il parametro InputDataConfig della richiesta CreateTrainingJob. Specifica i singoli file di dati dell'immagine (.jpg o .png) per i canali di addestramento e convalida. Per i dati di annotazione, puoi utilizzare il formato JSON. Specifica i corrispondenti file .json nei canali train_annotation e validation_annotation. Imposta il tipo di contenuto per tutti e quattro i canali su image/png o image/jpeg in base al tipo di immagine. Puoi inoltre utilizzare il tipo di contenuto application/x-image nel caso in cui il set di dati contiene immagini .jpg e .png. Di seguito è riportato un esempio di file .json.

{ "file": "your_image_directory/sample_image1.jpg", "image_size": [ { "width": 500, "height": 400, "depth": 3 } ], "annotations": [ { "class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128 }, { "class_id": 0, "left": 161, "top": 250, "width": 79, "height": 143 }, { "class_id": 1, "left": 101, "top": 185, "width": 42, "height": 130 } ], "categories": [ { "class_id": 0, "name": "dog" }, { "class_id": 1, "name": "cat" } ] }

Ogni immagine ha bisogno di un file .json per l'annotazione e il file .json deve avere lo stesso nome dell'immagine corrispondente. Il nome del file .json precedente deve essere "sample_image1.json". Ci sono quattro proprietà nel file .json dell'annotazione. La proprietà "file" specifica il percorso relativo del file immagine. Ad esempio, se le immagini di addestramento e i corrispondenti file .json sono memorizzati in s3://il_tuo_bucket/train/sample_image e s3://il_tuo_bucket/train_annotation, specificare il percorso per i canali train e train_annotation come s3://il_tuo_bucket/train e s3://il_tuo_bucket/train_annotation, rispettivamente.

Nel file .json, il percorso relativo per un'immagine denominata sample_image1.jpg deve essere sample_image/sample_image1.jpg. La proprietà "image_size" specifica le dimensioni complessive dell'immagine. Al momento l’algoritmo di rilevamento degli oggetti SageMaker AI supporta solo le immagini a 3 canali. La proprietà "annotations" specifica le categorie e i riquadri di delimitazione per gli oggetti all'interno dell'immagine. Ogni oggetto è annotato da un indice "class_id" e dalle quattro coordinate dei riquadri di delimitazione ("left", "top", "width", "height"). I valori "left" (coordinata x) e "top" (coordinata y) rappresentano l'angolo superiore sinistro del riquadro di delimitazione. I valori "width" (coordinata x) e "height" (coordinata y) rappresentano le dimensioni del riquadro di delimitazione. L'origine (0, 0) è l'angolo superiore sinistro dell'intera immagine. Se hai più oggetti all'interno di un'immagine, tutte le annotazioni devono essere incluse in un singolo file .json. La proprietà "categories" memorizza la mappatura tra l'indice della classe e il nome della classe. Gli indici della classe devono essere numerati successivamente e la numerazione deve iniziare da 0. La proprietà "categories" è facoltativa per il file .json dell'annotazione

Addestramento con il formato di immagine manifest aumentato

Il formato di manifest aumentato ti consente di addestrare in modalità Pipe usando i file di immagine senza dover creare file RecordIO. È necessario specificare i canali di addestramento e di convalida come valori per il parametro InputDataConfig della richiesta CreateTrainingJob. Quando si usa questo formato, è necessario generare un file manifest S3 che contenga l'elenco delle immagini e delle annotazioni corrispondenti. Il formato del file manifest deve essere in JSON Lines dove ogni riga rappresenta un esempio. Le immagini sono specificate utilizzando il tag 'source-ref' che punta al percorso S3 dell'immagine. Le annotazioni sono fornite nel valore del parametro "AttributeNames" come specificato nella richiesta CreateTrainingJob. Può anche contenere metadati aggiuntivi nel tag metadata, ma questi vengono ignorati dall'algoritmo. In questo esempio, i valori "AttributeNames sono inclusi nell'elenco ["source-ref", "bounding-box"]:

{"source-ref": "s3://your_bucket/image1.jpg", "bounding-box":{"image_size":[{ "width": 500, "height": 400, "depth":3}], "annotations":[{"class_id": 0, "left": 111, "top": 134, "width": 61, "height": 128}, {"class_id": 5, "left": 161, "top": 250, "width": 80, "height": 50}]}, "bounding-box-metadata":{"class-map":{"0": "dog", "5": "horse"}, "type": "groundtruth/object-detection"}} {"source-ref": "s3://your_bucket/image2.jpg", "bounding-box":{"image_size":[{ "width": 400, "height": 300, "depth":3}], "annotations":[{"class_id": 1, "left": 100, "top": 120, "width": 43, "height": 78}]}, "bounding-box-metadata":{"class-map":{"1": "cat"}, "type": "groundtruth/object-detection"}}

L'ordine degli "AttributeNames" nei file di input è importante nell’addestramento dell'algoritmo di rilevamento oggetti. Accetta dati reindirizzati in un ordine specifico, con image per primo, seguito da annotations. Pertanto, gli "AttributeNames" in questo esempio vengono forniti con "source-ref" per primo, seguito da "bounding-box". Quando utilizzi il rilevamento oggetti con il manifest aumentato, il valore del parametro RecordWrapperType deve essere impostato come "RecordIO".

Per ulteriori informazioni sui file manifest aumentati, consulta File di manifesto aumentati nei job di addestramento.

Addestramento incrementale

Puoi anche avviare l’addestramento di un nuovo modello con gli artefatti di un modello che hai addestrato in precedenza con SageMaker AI. L'addestramento incrementale consente di risparmiare tempo quando vuoi sottoporre ad addestramento un nuovo modello con dati uguali o simili. È possibile eseguire l’inizializzazione dei modelli di rilevamento degli oggetti di SageMaker AI con un altro modello di rilevamento degli oggetti integrato addestrato in SageMaker AI.

Per usare un modello già addestrato nella richiesta CreateTrainingJob, specifica ChannelName come modello nel parametro InputDataConfig. Imposta ContentType per il canale del modello su application/x-sagemaker-model. Gli iperparametri di input del nuovo modello e del modello già addestrato che carichi nel canale del modello devono avere le stesse impostazioni per i parametri di input base_network e num_classes. Questi parametri definiscono l'architettura della rete. Per il file del modello preaddestrato, utilizza gli artefatti del modello compressi (in formato .tar.gz) creati da SageMaker AI. Puoi utilizzare i formati di immagine o RecordIO per i dati di input.

Per ulteriori informazioni sull’addestramento incrementale e le istruzioni per utilizzarlo, consulta Utilizzo dell’addestramento in Amazon SageMaker AI.

Raccomandazione istanza EC2 per l'algoritmo di rilevamento oggetti

L'algoritmo di rilevamento oggetti supporta le famiglie di istanze GPU P2, P3, G4dn e G5. Ti consigliamo di utilizzare le istanze GPU con più memoria per l’addestramento con batch di grandi dimensioni. Puoi eseguire l'algoritmo di rilevamento oggetti su impostazioni a più GPU e macchine di addestramento distribuito.

È possibile utilizzare sia le istanze di CPU (come C5 e M5) che di GPU (come P3 e G4dn) per inferenza.

Notebook di esempio di rilevamento oggetti

Per un notebook di esempio che mostra come utilizzare l’algoritmo Rilevamento degli oggetti di SageMaker AI per addestrare e ospitare un modello sul

set di dati Caltech Birds (CUB 200 2011) utilizzando l’algoritmo Single Shot Multibox Detector, consulta Rilevamento di oggetti di Amazon SageMaker AI per le specie di uccelli. Per istruzioni su come creare e accedere alle istanze del notebook Jupyter che puoi utilizzare per eseguire l’esempio in SageMaker AI, consulta Istanze del notebook Amazon SageMaker. Dopo aver creato e aperto un’istanza del notebook, scegli la scheda Esempi di SageMaker AI per visualizzare un elenco di tutti gli esempi di SageMaker AI. Il notebook di esempio per il rilevamento oggetti che utilizza l'algoritmo di rilevamento oggetti si trova nella sezione Introduzione agli algoritmi Amazon. Per aprire un notebook, fai clic sulla relativa scheda Use (Utilizza) e seleziona Create copy (Crea copia).

Per ulteriori informazioni sull’algoritmo Rilevamento degli oggetti di Amazon SageMaker AI, consulta i seguenti post del blog: