Trasferisci l'apprendimento per i modelli di rilevamento degli oggetti TensorFlow in Amazon SageMaker

Amazon Sage Maker fornisce una suite di algoritmi incorporati, modelli pre-addestratie modelli di soluzioni predefiniti per aiutare i data scientist e i professionisti dell'apprendimento automatico (ML) a iniziare ad addestrare e distribuire rapidamente i modelli ML. È possibile utilizzare questi algoritmi e modelli sia per l'apprendimento supervisionato che non supervisionato. Possono elaborare vari tipi di dati di input, inclusi tabulari, immagini e testo.

Questo post è il secondo di una serie sui nuovi algoritmi integrati in SageMaker. Nel primo post, abbiamo mostrato come SageMaker fornisce un algoritmo integrato per la classificazione delle immagini. Oggi annunciamo che SageMaker fornisce un nuovo algoritmo integrato per il rilevamento degli oggetti utilizzando TensorFlow. Questo algoritmo di apprendimento supervisionato supporta l'apprendimento del trasferimento per molti modelli pre-addestrati disponibili in TensorFlow. Prende un'immagine come input e restituisce gli oggetti presenti nell'immagine insieme ai riquadri di delimitazione. È possibile ottimizzare questi modelli preaddestrati utilizzando l'apprendimento del trasferimento anche quando non è disponibile un numero elevato di immagini di addestramento. È disponibile tramite SageMaker algoritmi incorporati così come attraverso il Interfaccia utente di SageMaker JumpStart in Amazon Sage Maker Studio. Per ulteriori informazioni, fare riferimento a Tensorflow di rilevamento oggetti e il quaderno di esempio Introduzione a SageMaker Tensorflow – Rilevamento oggetti.

Il rilevamento degli oggetti con TensorFlow in SageMaker fornisce l'apprendimento del trasferimento su molti modelli pre-addestrati disponibili in TensorFlow Hub. In base al numero di etichette di classe nei dati di addestramento, una nuova testina di rilevamento oggetti inizializzata in modo casuale sostituisce la testina esistente del modello TensorFlow. È possibile ottimizzare l'intera rete, incluso il modello pre-addestrato, o solo lo strato superiore (testa di rilevamento oggetti) sui nuovi dati di addestramento. In questa modalità di trasferimento di apprendimento è possibile ottenere l'addestramento anche con un set di dati più piccolo.

Come utilizzare il nuovo algoritmo di rilevamento degli oggetti TensorFlow

Questa sezione descrive come utilizzare l'algoritmo di rilevamento degli oggetti TensorFlow con SDK Python di SageMaker. Per informazioni su come utilizzarlo dall'interfaccia utente di Studio, vedere SageMaker JumpStart.

L'algoritmo supporta l'apprendimento del trasferimento per i modelli pre-addestrati elencati in Modelli TensorFlow. Ogni modello è identificato da un unico model_id. Il codice seguente mostra come ottimizzare un modello FPN ResNet50 V1 identificato da model_id tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8 su un set di dati di addestramento personalizzato. Per ciascuno model_id, al fine di avviare un lavoro di formazione SageMaker tramite il Estimator dell'SDK Python di SageMaker, è necessario recuperare l'URI dell'immagine Docker, l'URI dello script di training e l'URI del modello pre-addestrato tramite le funzioni di utilità fornite in SageMaker. L'URI dello script di training contiene tutto il codice necessario per l'elaborazione dei dati, il caricamento del modello pre-addestrato, l'addestramento del modello e il salvataggio del modello addestrato per l'inferenza. L'URI del modello pre-addestrato contiene la definizione dell'architettura del modello pre-addestrato e i parametri del modello. Tieni presente che l'URI dell'immagine Docker e l'URI dello script di training sono gli stessi per tutti i modelli di rilevamento degli oggetti TensorFlow. L'URI del modello pre-addestrato è specifico per il modello specifico. I tarball del modello preaddestrato sono stati prescaricati da TensorFlow e salvati con la firma del modello appropriata in Servizio di archiviazione semplice Amazon (Amazon S3), in modo tale che il processo di addestramento venga eseguito in isolamento di rete. Vedere il codice seguente:

from sagemaker import image_uris, model_uris, script_urisfrom sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-od1-ssd-resnet50-v1-fpn-640x640-coco17-tpu-8", "*"
training_instance_type = "ml.p3.2xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)# 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 for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-od-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Con questi artefatti di addestramento specifici del modello, puoi costruire un oggetto di Estimator classe:

# Create SageMaker Estimator instance
tf_od_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,)

Successivamente, per trasferire l'apprendimento sul set di dati personalizzato, potrebbe essere necessario modificare i valori predefiniti degli iperparametri di addestramento, elencati in iperparametri. Puoi recuperare un dizionario Python di questi iperparametri con i loro valori predefiniti chiamando hyperparameters.retrieve_default, aggiornali secondo necessità, quindi passali alla classe Estimator. Si noti che i valori predefiniti di alcuni degli iperparametri sono diversi per i diversi modelli. Per i modelli di grandi dimensioni, la dimensione del lotto predefinita è più piccola e il train_only_top_layer l'iperparametro è impostato su True. L'iperparametro train_only_top_layer definisce quali parametri del modello cambiano durante il processo di messa a punto. Se train_only_top_layer is True, i parametri dei livelli di classificazione cambiano e il resto dei parametri rimane costante durante il processo di messa a punto. D'altra parte, se train_only_top_layer is False, tutti i parametri del modello vengono messi a punto. Vedere il codice seguente:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Forniamo il Set di dati PennFudanPed come set di dati predefinito per la messa a punto dei modelli. Il set di dati comprende immagini di pedoni. Il codice seguente fornisce il set di dati di addestramento predefinito ospitato nei bucket S3:

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/PennFudanPed_COCO_format/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Infine, per avviare il lavoro di formazione SageMaker per la messa a punto del modello, chiama .fit sull'oggetto della classe Estimator, passando la posizione S3 del set di dati di addestramento:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Per ulteriori informazioni su come utilizzare il nuovo algoritmo di rilevamento degli oggetti SageMaker TensorFlow per trasferire l'apprendimento su un set di dati personalizzato, distribuire il modello ottimizzato, eseguire l'inferenza sul modello distribuito e distribuire il modello pre-addestrato così com'è senza prima perfezionamento su un set di dati personalizzato, vedere il seguente notebook di esempio: Introduzione a SageMaker TensorFlow – Rilevamento oggetti.

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

Puoi mettere a punto ciascuno dei modelli pre-addestrati elencati in Modelli TensorFlow a un dato set di dati comprendente immagini appartenenti a un numero qualsiasi di classi. L'obiettivo è ridurre al minimo l'errore di previsione sui dati di input. Il modello restituito dall'ottimizzazione può essere ulteriormente distribuito per l'inferenza. Di seguito sono riportate le istruzioni su come formattare i dati di addestramento per l'immissione nel modello:

  • Ingresso – Una directory con immagini di sottodirectory e un file annotations.json.
  • Uscita – Ci sono due uscite. Il primo è un modello ottimizzato, che può essere distribuito per l'inferenza o ulteriormente addestrato utilizzando la formazione incrementale. Il secondo è un file che mappa gli indici delle classi sulle etichette delle classi; questo viene salvato insieme al modello.

La directory di input dovrebbe assomigliare al seguente esempio:

input_directory
      | -- images
            |--abc.png
            |--def.png
      |--annotations.json

I annotations.json il file dovrebbe contenere informazioni per bounding_boxes e le loro etichette di classe. Dovrebbe avere un dizionario con le chiavi "images" ed "annotations". Il valore per il "images" La chiave dovrebbe essere un elenco di voci, una per ciascuna immagine del modulo {"file_name": image_name, "height": height, "width": width, "id": image_id}. Il valore di "annotations" key dovrebbe essere un elenco di voci, una per ciascun riquadro di delimitazione del modulo {"image_id": image_id, "bbox": [xmin, ymin, xmax, ymax], "category_id": bbox_label}.

Inferenza con l'algoritmo di rilevamento degli oggetti TensorFlow

I modelli generati possono essere ospitati per l'inferenza e supportare i formati di immagine codificati .jpg, .jpeg e .png come application/x-image tipo di contenuto. L'immagine in ingresso viene ridimensionata automaticamente. L'output contiene le caselle, le classi previste e i punteggi per ciascuna previsione. Il modello di rilevamento degli oggetti TensorFlow elabora una singola immagine per richiesta e restituisce solo una riga nel JSON. Di seguito è riportato un esempio di risposta in JSON:

accept: application/json;verbose

{"normalized_boxes":[[xmin1, xmax1, ymin1, ymax1],....], "classes":[classidx1, class_idx2,...], "scores":[score_1, score_2,...], "labels": [label1, label2, ...], "tensorflow_model_output":}

If accept è impostato su application/json, il modello restituisce solo riquadri, classi e punteggi previsti. Per ulteriori dettagli su training e inferenza, vedere il notebook di esempio Introduzione a SageMaker TensorFlow – Rilevamento oggetti.

Usa gli algoritmi integrati di SageMaker tramite l'interfaccia utente di JumpStart

Puoi anche utilizzare il rilevamento degli oggetti SageMaker TensorFlow e qualsiasi altro algoritmo integrato con pochi clic tramite l'interfaccia utente JumpStart. JumpStart è una funzionalità di SageMaker che consente di addestrare e distribuire algoritmi integrati e modelli preaddestrati da vari framework ML e hub di modelli tramite un'interfaccia grafica. Consente inoltre di distribuire soluzioni ML complete che uniscono modelli ML e vari altri servizi AWS per risolvere un caso d'uso mirato.

Di seguito sono riportati due video che mostrano come è possibile replicare lo stesso processo di messa a punto e distribuzione che abbiamo appena eseguito con pochi clic tramite l'interfaccia utente di JumpStart.

Perfeziona il modello pre-addestrato

Ecco il processo per ottimizzare lo stesso modello di rilevamento degli oggetti preaddestrato.

Distribuire il modello ottimizzato

Al termine dell'addestramento del modello, è possibile distribuire direttamente il modello su un endpoint persistente in tempo reale con un clic.

Conclusione

In questo post abbiamo annunciato il lancio dell'algoritmo integrato di rilevamento oggetti SageMaker TensorFlow. Abbiamo fornito un codice di esempio su come trasferire l'apprendimento su un set di dati personalizzato utilizzando un modello preaddestrato di TensorFlow utilizzando questo algoritmo.

Per ulteriori informazioni, consultate documentazione e la quaderno di esempio.


Circa gli autori

Trasferisci l'apprendimento per i modelli di rilevamento degli oggetti TensorFlow in Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dott. Vivek Madan è uno scienziato applicato con il Team di 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 nel campo dell'apprendimento automatico e della progettazione di algoritmi e ha pubblicato articoli nelle conferenze EMNLP, ICLR, COLT, FOCS e SODA.

Trasferisci l'apprendimento per i modelli di rilevamento degli oggetti TensorFlow in Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.João Moura è un architetto specializzato in soluzioni AI/ML presso Amazon Web Services. Si concentra principalmente sui casi d'uso della NLP e aiuta i clienti a ottimizzare la formazione e l'implementazione del modello di deep learning. È anche un attivo sostenitore di soluzioni ML a basso codice e hardware specializzato in ML.

Trasferisci l'apprendimento per i modelli di rilevamento degli oggetti TensorFlow in Amazon SageMaker PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Dottor Ashish Khetan è un Senior Applied Scientist con Algoritmi integrati di Amazon SageMaker e aiuta a sviluppare algoritmi di apprendimento automatico. Ha conseguito il dottorato di ricerca presso l'Università dell'Illinois Urbana Champaign. È un ricercatore attivo nell'apprendimento automatico e nell'inferenza statistica e ha pubblicato molti articoli in conferenze NeurIPS, ICML, ICLR, JMLR, ACL ed EMNLP.

Timestamp:

Di più da Apprendimento automatico di AWS