Esegui la segmentazione delle immagini con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Esegui la segmentazione delle immagini con Amazon SageMaker JumpStart

Nel mese di dicembre 2020, AWS ha annunciato la disponibilità generale di JumpStart di Amazon SageMaker, una capacità di Amazon Sage Maker che ti aiuta a iniziare rapidamente e facilmente con l'apprendimento automatico (ML). JumpStart offre la messa a punto e l'implementazione con un clic di un'ampia varietà di modelli pre-addestrati per le attività di machine learning più comuni, nonché una selezione di soluzioni end-to-end che risolvono problemi aziendali comuni. Queste funzionalità eliminano il lavoro gravoso da ogni fase del processo di machine learning, semplificando lo sviluppo di modelli di alta qualità e riducendo i tempi di implementazione.

Questo post è il terzo di una serie sull'utilizzo di JumpStart per attività di machine learning specifiche. Nel primo post, abbiamo mostrato come eseguire casi d'uso di classificazione delle immagini su JumpStart. Nel secondo post, abbiamo mostrato come eseguire casi d'uso di classificazione del testo su JumpStart. In questo post, forniamo una procedura dettagliata su come mettere a punto e distribuire un modello di segmentazione dell'immagine, utilizzando modelli addestrati da MXNet. Esploriamo due modi per ottenere lo stesso risultato: tramite l'interfaccia grafica di JumpStart attiva Amazon Sage Maker Studio, e a livello di codice API JumpStart.

Se vuoi passare direttamente al codice API JumpStart che spieghiamo in questo post, puoi fare riferimento ai seguenti notebook di esempio Jupyter:

Panoramica di JumpStart

JumpStart ti aiuta a iniziare con i modelli ML per una varietà di attività senza scrivere una singola riga di codice. Al momento della scrittura, JumpStart ti consente di fare quanto segue:

  • Distribuisci modelli pre-addestrati per attività di machine learning comuni – JumpStart ti consente di affrontare le comuni attività di ML senza alcuno sforzo di sviluppo, fornendo una facile distribuzione di modelli pre-addestrati su set di dati di grandi dimensioni pubblicamente disponibili. La comunità di ricerca sul ML ha compiuto grandi sforzi per rendere pubblicamente disponibile per l'uso la maggior parte dei modelli sviluppati di recente. JumpStart ospita una raccolta di oltre 300 modelli, che coprono le 15 attività di ML più popolari come il rilevamento di oggetti, la classificazione del testo e la generazione di testo, facilitandone l'utilizzo da parte dei principianti. Questi modelli sono tratti da hub di modelli popolari come TensorFlow, PyTorch, Hugging Face e MXNet.
  • Perfeziona i modelli pre-addestrati – JumpStart ti consente di mettere a punto modelli pre-addestrati senza la necessità di scrivere il tuo algoritmo di addestramento. In ML, viene chiamata la capacità di trasferire le conoscenze apprese in un dominio in un altro dominio trasferire l'apprendimento. Puoi utilizzare il transfer learning per produrre modelli accurati sui tuoi set di dati più piccoli, con costi di addestramento molto inferiori rispetto a quelli coinvolti nell'addestramento del modello originale. JumpStart include anche algoritmi di allenamento popolari basati su LightGBM, CatBoost, XGBoost e Scikit-learn, che puoi addestrare da zero per la regressione tabulare e la classificazione.
  • Usa soluzioni predefinite – JumpStart fornisce una serie di 17 soluzioni per casi d'uso comuni di ML, come la previsione della domanda e le applicazioni industriali e finanziarie, che puoi implementare con pochi clic. Le soluzioni sono applicazioni ML end-to-end che mettono insieme vari servizi AWS per risolvere un particolare caso d'uso aziendale. Usano AWS CloudFormazione modelli e architetture di riferimento per un'implementazione rapida, il che significa che sono completamente personalizzabili.
  • Fare riferimento agli esempi di notebook per gli algoritmi SageMaker – SageMaker fornisce una suite di algoritmi integrati per aiutare i data scientist e i professionisti del machine learning a iniziare con la formazione e la distribuzione rapida dei modelli di machine learning. JumpStart fornisce notebook di esempio che è possibile utilizzare per utilizzare rapidamente questi algoritmi.
  • Rivedi video e blog di formazione – JumpStart fornisce anche numerosi post di blog e video che ti insegnano come utilizzare diverse funzionalità all'interno di SageMaker.

JumpStart accetta impostazioni VPC personalizzate e Servizio di gestione delle chiavi AWS chiavi di crittografia (AWS KMS), così puoi utilizzare i modelli e le soluzioni disponibili in modo sicuro all'interno del tuo ambiente aziendale. Puoi passare le tue impostazioni di sicurezza a JumpStart all'interno di Studio o tramite SageMaker Python SDK.

Segmentazione semantica

La segmentazione semantica delinea ogni classe di oggetti che appaiono in un'immagine di input. Contrassegna (classifica) ogni pixel dell'immagine di input con un'etichetta di classe da un insieme predefinito di classi. Più oggetti della stessa classe vengono mappati sulla stessa maschera.

Il modello disponibile per la messa a punto costruisce una "testa" di rete completamente convoluzionale (FCN) sulla rete di base. La fase di regolazione fine perfeziona l'FCNHHead mantenendo i parametri del resto del modello congelati e restituisce il modello ottimizzato. L'obiettivo è ridurre al minimo la perdita di entropia incrociata softmax per pixel per addestrare l'FCN. Il modello restituito dall'ottimizzazione può essere ulteriormente distribuito per l'inferenza.

La directory di input dovrebbe avere l'aspetto del codice seguente se i dati di addestramento contengono due immagini. I nomi dei file .png possono essere qualsiasi cosa.

input_directory
    |--images
        |--abc.png
        |--def.png
    |--masks
        |--abc.png
        |--def.png
    class_label_to_prediction_index.json

I file mask dovrebbero avere informazioni sull'etichetta di classe per ogni pixel.

Segmentazione delle istanze

La segmentazione dell'istanza rileva e delinea ogni oggetto di interesse distinto che appare in un'immagine. Contrassegna ogni pixel con un'etichetta di istanza. Mentre la segmentazione semantica assegna lo stesso tag ai pixel di più oggetti della stessa classe, la segmentazione dell'istanza etichetta ulteriormente i pixel corrispondenti a ciascuna occorrenza di un oggetto sull'immagine con un tag separato.

Attualmente, JumpStart offre modelli di sola inferenza per la segmentazione dell'istanza e non supporta l'ottimizzazione.

Le immagini seguenti illustrano la differenza tra l'inferenza nella segmentazione semantica e la segmentazione dell'istanza. L'immagine originale ha due persone nell'immagine. La segmentazione semantica tratta più persone nell'immagine come un'unica entità: Person. Tuttavia, la segmentazione dell'istanza identifica le singole persone all'interno del Person categoria.

Panoramica della soluzione

Le sezioni seguenti forniscono una demo dettagliata per eseguire la segmentazione semantica con JumpStart, sia tramite l'interfaccia utente di Studio che tramite le API JumpStart.

Eseguiamo i seguenti passaggi:

  1. Accedi a JumpStart tramite l'interfaccia utente di Studio:
    1. Eseguire l'inferenza sul modello pre-addestrato.
    2. Perfeziona il modello pre-addestrato.
  2. Usa JumpStart a livello di codice con SageMaker Python SDK:
    1. Eseguire l'inferenza sul modello pre-addestrato.
    2. Perfeziona il modello pre-addestrato.

Discutiamo anche di funzionalità avanzate aggiuntive di JumpStart.

Accedi a JumpStart tramite l'interfaccia utente di Studio

In questa sezione viene illustrato come addestrare e distribuire modelli JumpStart tramite l'interfaccia utente di Studio.

Eseguire l'inferenza sul modello pre-addestrato

Il video seguente mostra come trovare un modello di segmentazione semantica pre-addestrato su JumpStart e distribuirlo. La pagina del modello contiene informazioni preziose sul modello, su come utilizzarlo, sul formato dei dati previsto e alcuni dettagli di messa a punto. Puoi distribuire qualsiasi modello pre-addestrato disponibile in JumpStart. Per deduzione, scegliamo il tipo di istanza ml.g4dn.xlarge. Fornisce l'accelerazione GPU necessaria per una bassa latenza di inferenza, ma a un prezzo inferiore. Dopo aver configurato l'istanza di hosting SageMaker, scegli Schierare. Potrebbero essere necessari 5-10 minuti prima che l'endpoint persistente sia attivo e funzionante.

Dopo alcuni minuti, l'endpoint è operativo e pronto a rispondere alle richieste di inferenza.

Allo stesso modo, puoi distribuire un modello di segmentazione dell'istanza pre-addestrato seguendo gli stessi passaggi nel video precedente durante la ricerca della segmentazione dell'istanza anziché della segmentazione semantica nella barra di ricerca JumpStart.

Perfeziona il modello pre-addestrato

Il video seguente mostra come trovare e ottimizzare un modello di segmentazione semantica in JumpStart. Nel video, perfezioniamo il modello utilizzando il Set di dati PennFudanPed, fornito per impostazione predefinita in JumpStart, che puoi scaricare in Licenza Apache 2.0.

La messa a punto del proprio set di dati implica la corretta formattazione dei dati (come spiegato nella pagina del modello), il caricamento su Servizio di archiviazione semplice Amazon (Amazon S3) e specificandone la posizione nella configurazione dell'origine dati. Utilizziamo gli stessi valori di iperparametro impostati per impostazione predefinita (numero di epoche, velocità di apprendimento e dimensione del batch). Utilizziamo anche un ml.p3.2xlarge supportato da GPU come istanza di formazione SageMaker.

Puoi monitorare il tuo lavoro di formazione in esecuzione direttamente sulla console di Studio e ricevere una notifica al suo completamento. Al termine dell'addestramento, è possibile distribuire il modello ottimizzato dalla stessa pagina che contiene i dettagli del lavoro di addestramento. Il flusso di lavoro di distribuzione è lo stesso della distribuzione di un modello pre-addestrato.

Usa JumpStart a livello di codice con SageMaker SDK

Nelle sezioni precedenti, abbiamo mostrato come utilizzare l'interfaccia utente JumpStart per distribuire un modello pre-addestrato e perfezionarlo in modo interattivo, in pochi clic. Tuttavia, puoi anche utilizzare i modelli di JumpStart e la semplice regolazione fine a livello di codice utilizzando le API integrate nell'SDK SageMaker. Esaminiamo ora un rapido esempio di come è possibile replicare il processo precedente. Tutti i passaggi di questa demo sono disponibili nei taccuini allegati Introduzione a JumpStart – Segmentazione dell'istanza ed Introduzione a JumpStart – Segmentazione semantica.

Eseguire l'inferenza sul modello pre-addestrato

In questa sezione, scegliamo un modello pre-addestrato appropriato in JumpStart, distribuiamo questo modello a un endpoint SageMaker ed eseguiamo l'inferenza sull'endpoint distribuito.

SageMaker è una piattaforma basata su container Docker. JumpStart utilizza il framework disponibile specifico Contenitori di deep learning di SageMaker (DLC). Recuperiamo eventuali pacchetti aggiuntivi, nonché script per gestire l'addestramento e l'inferenza per l'attività selezionata. Infine, gli artefatti del modello pre-addestrati vengono recuperati separatamente model_uris, che fornisce flessibilità alla piattaforma. È possibile utilizzare un numero qualsiasi di modelli pre-addestrati per la stessa attività con un unico script di addestramento o inferenza. Vedere il codice seguente:

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # automatically inferred from model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")

base_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")

Ad esempio la segmentazione, possiamo impostare model_id a mxnet-semseg-fcn-resnet50-ade. L'is nell'identificatore corrisponde alla segmentazione dell'istanza.

Successivamente, inseriamo le risorse in a Modello SageMaker istanza e distribuire un endpoint:

# Create the SageMaker model instance
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # entry point file in source_dir and present in deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

# deploy the Model. Note that we need to pass Predictor class when we deploy model through Model class,
# for being able to run inference through the sagemaker API.
base_model_predictor = model.deploy(
    initial_instance_count=1,
    instance_type=inference_instance_type,
    predictor_cls=Predictor,
    endpoint_name=endpoint_name,
)

Dopo pochi minuti, il nostro modello viene distribuito e possiamo ottenere previsioni da esso in tempo reale!

Il seguente frammento di codice offre un'idea dell'aspetto della segmentazione semantica. Viene visualizzata la maschera prevista per ogni pixel. Per ottenere inferenze da un modello distribuito, è necessario fornire un'immagine di input in formato binario. La risposta dell'endpoint è un'etichetta prevista per ogni pixel nell'immagine. Noi usiamo il query_endpoint ed parse_response funzioni di supporto, che sono definite in quaderno di accompagnamento:

query_response = query(base_model_predictor, pedestrian_img)
predictions, labels, image_labels = parse_response(query_response)
print("Objects present in the picture:", image_labels)

Perfeziona il modello pre-addestrato

Per mettere a punto un modello selezionato, è necessario ottenere l'URI di quel modello, nonché quello dello script di addestramento e l'immagine del contenitore utilizzata per l'addestramento. Per fortuna, questi tre input dipendono esclusivamente dal nome del modello, dalla versione (per un elenco dei modelli disponibili, vedere JumpStart disponibile tabella dei modelli)e il tipo di istanza su cui vuoi allenarti. Ciò è dimostrato nel seguente frammento di codice:

from sagemaker import image_uris, model_uris, script_uris

model_id, model_version = "mxnet-semseg-fcn-resnet50-ade", "*"
training_instance_type = "ml.p3.2xlarge"
train_image_uri = image_uris.retrieve(
    region=None,
    framework=None,
    model_id=model_id,
    model_version=model_version,
    image_scope="training",
    instance_type=training_instance_type,)# Retrieve the training script

train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball to further fine-tune

train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

Recuperiamo il model_id corrispondente allo stesso modello utilizzato in precedenza. Ora puoi perfezionare questo modello JumpStart sul tuo set di dati personalizzato utilizzando SageMaker SDK. Utilizziamo un set di dati ospitato pubblicamente su Amazon S3, opportunamente focalizzato sulla segmentazione semantica. Il set di dati dovrebbe essere strutturato per la messa a punto come spiegato nella sezione precedente. Vedere il codice di esempio seguente:

# URI of your training dataset
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_SemSeg/"
training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning")# Create SageMaker Estimator instance
semseg_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)# Launch a SageMaker Training job by passing s3 path of the training data
semseg_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Otteniamo gli stessi iperparametri predefiniti per il nostro modello selezionato di quelli che abbiamo visto nella sezione precedente, utilizzando sagemaker.hyperparameters.retrieve_default(). Quindi istanziamo uno stimatore SageMaker e chiamiamo il .fit metodo per iniziare a mettere a punto il nostro modello, passandogli l'URI Amazon S3 per i nostri dati di addestramento. Il entry_point lo script fornito è denominato transfer_learning.py (lo stesso per altre attività e modelli) e il canale dei dati di input a cui è passato .fit deve essere nominato training.

Mentre l'algoritmo si allena, puoi monitorarne l'avanzamento sia nel notebook SageMaker in cui stai eseguendo il codice stesso, sia su Amazon Cloud Watch. Al termine dell'addestramento, gli artefatti del modello ottimizzati vengono caricati nella posizione di output di Amazon S3 specificata nella configurazione dell'addestramento. È ora possibile distribuire il modello nello stesso modo del modello pre-addestrato.

Funzioni avanzate

Oltre alla messa a punto e all'implementazione di modelli pre-addestrati, JumpStart offre molte funzionalità avanzate.

Il primo è messa a punto automatica del modello. Ciò ti consente di ottimizzare automaticamente i tuoi modelli ML per trovare i valori degli iperparametri con la massima precisione all'interno dell'intervallo fornito tramite l'API SageMaker.

La seconda è allenamento incrementale. Ciò ti consente di addestrare un modello che hai già messo a punto utilizzando un set di dati espanso che contiene un modello sottostante non considerato nelle precedenti esecuzioni di fine tuning, che ha comportato scarse prestazioni del modello. L'addestramento incrementale consente di risparmiare tempo e risorse perché non è necessario riqualificare il modello da zero.

Conclusione

In questo post, abbiamo mostrato come mettere a punto e distribuire un modello di segmentazione semantica pre-addestrato e come adattarlo, ad esempio, la segmentazione utilizzando JumpStart. Puoi farlo senza dover scrivere codice. Prova la soluzione da solo e inviaci i tuoi commenti.

Per ulteriori informazioni su JumpStart e su come utilizzare modelli pre-addestrati open source per una varietà di altre attività ML, consulta quanto segue Video di AWS re:Invent 2020.


Informazioni sugli autori

Esegui la segmentazione delle immagini con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dott. Vivek Madan è uno scienziato applicato con il team Amazon SageMaker JumpStart. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois a Urbana-Champaign ed è stato ricercatore post-dottorato presso la Georgia Tech. È un ricercatore attivo nell'apprendimento automatico e nella progettazione di algoritmi e ha pubblicato articoli in conferenze EMNLP, ICLR, COLT, FOCS e SODA.

Esegui la segmentazione delle immagini con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Santosh Kulkarni è un Enterprise Solutions Architect presso Amazon Web Services che lavora con clienti sportivi in ​​Australia. È appassionato di creazione di applicazioni distribuite su larga scala per risolvere problemi aziendali utilizzando le sue conoscenze in AI/ML, big data e sviluppo software.

Esegui la segmentazione delle immagini con Amazon SageMaker JumpStart PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Leonardo Bachega è uno scienziato senior e manager nel team Amazon SageMaker JumpStart. È appassionato di creazione di servizi di intelligenza artificiale per la visione artificiale.

Timestamp:

Di più da Apprendimento automatico di AWS