Introduzione all'algoritmo integrato di rilevamento degli oggetti immagine

Con gli algoritmi integrati in AI Platform Training, puoi inviare i dati di addestramento, selezionare un algoritmo e lasciare che AI Platform Training gestisca la preelaborazione e l'addestramento per te, senza scrivere codice per un'applicazione di addestramento. Gli algoritmi immagine integrati consentono di eseguire l'addestramento sulle TPU con una configurazione minima. Il SavedModel di TensorFlow risultante è compatibile per la pubblicazione su CPU e GPU.

Panoramica

In questo tutorial, addestrerai un modello di rilevamento di oggetti immagine senza scrivere qualsiasi codice. Invii il set di dati COCO a AI Platform Training per l'addestramento e poi il deployment AI Platform Training per ottenere previsioni. Il modello risultante classifica oggetti comuni all'interno di immagini di scene complesse di tutti i giorni.

Prima di iniziare

Per completare questo tutorial dalla riga di comando, utilizza Cloud Shell o qualsiasi in cui è installata Google Cloud CLI.

Completa i seguenti passaggi per configurare un account Google Cloud, abilitare le API richieste e installare e attivare Google Cloud CLI:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the AI Platform Training & Prediction and Compute Engine APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init

Autorizza la tua Cloud TPU ad accedere al tuo progetto

Segui questi passaggi per autorizzare il nome dell'account di servizio Cloud TPU associati al tuo progetto Google Cloud:

  1. Ottieni il nome del tuo account di servizio Cloud TPU chiamando projects.getConfig Esempio:

    PROJECT_ID=PROJECT_ID
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
    
  2. Salva il valore dei campi serviceAccountProject e tpuServiceAccount restituiti dall'API.

  3. Inizializza l'account di servizio Cloud TPU:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
      -H "Content-Type: application/json" -d '{}'  \
      https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
    

Ora aggiungi l'account di servizio Cloud TPU come membro del progetto con il ruolo Agente di servizio Cloud ML. Completa i seguenti passaggi nella console Google Cloud o utilizzando il comando gcloud:

Console

  1. Accedi alla console Google Cloud e scegli il progetto in cui utilizzi la TPU.
  2. Scegli IAM e amministrazione > IAM.
  3. Fai clic sul pulsante Aggiungi per aggiungere un membro al progetto.
  4. Inserisci l'account di servizio TPU nella casella di testo Membri.
  5. Fai clic sull'elenco a discesa Ruoli.
  6. Abilita il ruolo Agente di servizio Cloud ML (Agenti di servizio > Agente di servizio Cloud ML).

gcloud

  1. Imposta le variabili di ambiente contenenti l'ID progetto e Account di servizio Cloud TPU:

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. Concedi il ruolo ml.serviceAgent al servizio Cloud TPU :

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
    

Per ulteriori dettagli sull'assegnazione dei ruoli agli account di servizio, consulta la documentazione IAM.

Configurazione

Abbiamo modificato il set di dati COCO per utilizzarlo in questo tutorial e in un bucket Cloud Storage pubblico gs://cloud-samples-data/ai-platform/built-in/image/coco/.

Console

Selezionare l'algoritmo

  1. Vai alla pagina dei job di AI Platform Training nella Console Google Cloud:

    Pagina Lavori di AI Platform Training

  2. Fai clic sul pulsante Nuovo job di addestramento. Tra le opzioni che Fai clic su Addestramento con algoritmi integrati sotto. La Viene visualizzata la pagina Crea un nuovo job di addestramento.

  3. La creazione del job di addestramento è suddivisa in quattro passaggi. Il primo è Algoritmo di addestramento. Seleziona Rilevamento di oggetti immagine e fai clic su Avanti.

Dati di addestramento

  1. Nella sezione Dati di addestramento, seleziona i dati di addestramento per il set di dati di esempio, ospitato nel nostro bucket pubblico Cloud Storage:

    1. Seleziona Utilizza più file archiviati in un unico Cloud Storage Google Cloud.

    2. In Percorso della directory, inserisci: "cloud-samples-data/ai-platform/built-in/image/coco/"

    3. Per Nome carattere jolly, inserisci "treno*". a selezionare tutti i file di addestramento nella directory.

    4. Di seguito viene visualizzato il Percorso GCS completo: &quot;gs://cloud-samples-data/ai-platform/built-in/image/coco/train*&quot;

  2. Nella sezione Dati di convalida, seleziona i dati di convalida per il set di dati di esempio, ospitato nel nostro bucket Cloud Storage pubblico:

    1. Seleziona Usa più file archiviati in una directory di Cloud Storage.

    2. In Percorso della directory, inserisci: "cloud-samples-data/ai-platform/built-in/image/coco/"

    3. Per Nome carattere jolly, inserisci "val*". per selezionare tutti i file di convalida nella directory.

    4. Di seguito viene visualizzato il Percorso GCS completo: &quot;gs://cloud-samples-data/ai-platform/built-in/image/coco/val*&quot;

  3. Specifica la directory di output nella tua Cloud Storage in cui vuoi che AI Platform Training archivi i tuoi dati il modello, i checkpoint e altri output del job di addestramento. Puoi inserire il percorso esatto nel bucket o utilizzare il pulsante Sfoglia per selezionarlo.

gcloud

Configura le variabili di ambiente per l'ID progetto, per Cloud Storage il percorso dei dati di addestramento in Cloud Storage e l'algoritmo selezione.

Gli algoritmi integrati di AI Platform Training si trovano in container Docker ospitati in Container Registry.

PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"

Invia un job di addestramento

Per inviare un job, devi specificare alcuni argomenti di addestramento di base e alcuni argomenti di base relativi all'algoritmo di rilevamento di oggetti immagine.

Argomenti generali per il job di addestramento:

Argomenti del job di addestramento
Argomento Descrizione
job-id ID univoco per il job di addestramento. Puoi utilizzarlo per trovare i log lo stato del job di addestramento dopo l'invio.
job-dir Percorso Cloud Storage in cui AI Platform Training salva i file di addestramento dopo aver completato con successo un job di addestramento.
scale-tier Specifica i tipi di macchina per l'addestramento. Usa BASIC per selezionare la configurazione di una sola macchina.
master-image-uri URI di Container Registry utilizzato per specificare il container Docker in cui eseguire per il job di addestramento. Utilizza il container per l'architettura algoritmo di rilevamento di oggetti immagine definito in precedenza come IMAGE_URI.
region Specifica la regione disponibile in cui eseguire il job di addestramento. Per questo tutorial, puoi usare la regione us-central1.

Argomenti specifici dell'algoritmo di rilevamento di oggetti immagine integrato:

Argomenti degli algoritmi
Argomento Descrizione
training_data_path Percorso di un pattern di percorso TFRecord utilizzato per l'addestramento.
validation_data_path Percorso a un pattern di percorso TFRecord utilizzato per la convalida.
pretrained_checkpoint_path Il percorso dei checkpoint preaddestrati. Potresti utilizzare alcuni checkpoint pubblicati.
num_classes Il numero di corsi nei dati di addestramento/convalida.
max_steps Il numero di passaggi che verrà eseguito dal job di addestramento.
train_batch_size Il numero di immagini da utilizzare per ogni passaggio di addestramento.
num_eval_images Il numero totale di immagini utilizzate per la valutazione.
Se è 0, tutte le immagini in validation_data_path saranno usati per la valutazione.
learning_rate_decay_type Il metodo con cui il tasso di apprendimento diminuisce durante l'addestramento.
warmup_learning_rate Il tasso di apprendimento all'inizio della fase di riscaldamento.
warmup_steps Il numero di passi da eseguire durante la fase di riscaldamento o la durata della fase di riscaldamento in passaggi. Il job di addestramento utilizza warmup_learning_rate durante la fase di warm-up. Al termine della fase di riscaldamento, il job di addestramento utilizza initial_learning_rate.
initial_learning_rate Il tasso di apprendimento iniziale dopo il completamento della fase di preparazione.
stepwise_learning_rate_steps I passaggi per diminuire/modificare i tassi di apprendimento per il tasso di apprendimento graduale tipo di decadimento.
Ad esempio, 100.200 significa che il tasso di apprendimento cambierà (rispetto a stepwise_learning_rate_levels) al passaggio 100 e il passaggio 200. Tieni presente che verrà rispettato solo quando learning_rate_decay_type è impostato su graduale.
stepwise_learning_rate_levels Il valore del tasso di apprendimento di ogni passaggio per il tipo di decadimento graduale del tasso di apprendimento. Tieni presente che verrà rispettato solo quando learning_rate_decay_type è impostato su graduale.
image_size Le dimensioni dell'immagine (larghezza e altezza) utilizzate per l'addestramento.
optimizer_type L'ottimizzatore utilizzato per l'addestramento. Deve essere uno dei seguenti:
{momentum, adam, adadelta, adagrad, rmsprop}
optimizer_arguments Gli argomenti per l'ottimizzazione. È un elenco separato da virgole di &quot;name=value&quot; in coppia. Deve essere compatibile con optimizer_type. Esempi:
  • Per l'ottimizzatore Momentum, accetta momentum=0.9. Consulta tf.train.MomentumOptimizer per ulteriori dettagli.
  • Per l'ottimizzatore Adam, può essere beta1=0.9,beta2=0.999. Consulta tf.train.AdamOptimizer per ulteriori dettagli.
  • Per lo strumento di ottimizzazione RMSProp, decay=0.9,momentum=0.1,epsilon=1e-10. Per ulteriori dettagli, consulta RMSPropOptimizer.
fpn_type Il tipo di rete FPN (Feature Pyramid Network) multilivello. Deve essere uno di {fpn, nasfpn}.
resnet_depth La profondità della struttura portante ResNet. Deve essere uno di {18,34,50,101,152,200}.
max_num_bboxes_in_training Il numero massimo di riquadri di delimitazione proposti da utilizzare per l'addestramento.
max_num_bboxes_in_prediction Il numero massimo di caselle delimitanti proposte da utilizzare negli output della previsione.
bbox_aspect_ratios La scala delle dimensioni delle ancore di base che rappresentano le proporzioni aggiunte su ogni livello. Il numero indica il rapporto tra larghezza e altezza. Ad esempio, "1.0,2.0,0.5" aggiunge tre ancore su ogni livello della scala.
nms_iou_threshold La soglia per decidere se i riquadri di delimitazione si sovrappongono rispetto a IOU per l'eliminazione non massima.
nms_score_threshold La soglia per decidere quando rimuovere i riquadri di delimitazione in base al punteggio.
focal_loss_alpha Valore alfa della perdita focale (parametro di bilanciamento).
focal_loss_gamma Valore gamma della perdita focale (parametro di messa a fuoco).
aug_scale_min La scala minima applicata durante l'aumento dell'immagine. Il suo valore è tra [0, 1.0].
aug_scale_max La scala massima applicata durante l'aumento delle immagini. Il suo valore deve essere compreso tra [1.0, inf].
aug_rand_hflip Valore booleano. Se impostato su True, questa impostazione aumenta l'addestramento con capovolgimento orizzontale.

Per un elenco dettagliato di tutti gli altri flag dell'algoritmo di rilevamento di oggetti immagine, fai riferimento alle Riferimento per il rilevamento di oggetti immagine integrati.

Console

Argomenti degli algoritmi

Nella prima parte della scheda Argomenti dell'algoritmo, inserisci i seguenti valori:

  • Numero di corsi: 91
  • Passaggi massimi: 15.000
  • Dimensione del batch di addestramento: 64
  • Numero di immagini di valutazione: 5000

Nella sezione Modello della scheda Argomenti dell'algoritmo:

  1. In Percorso di checkpoint preaddestrato, compila gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/.

  2. Lascia invariate le impostazioni predefinite di tutti gli altri campi e fai clic su Avanti.

Impostazioni del job

Nella scheda Impostazioni job:

  1. Inserisci un ID job univoco (ad esempio "object_detection_example").
  2. Inserisci un'regione disponibile (ad es. "us-central1").
  3. Per selezionare i tipi di macchina, seleziona "PERSONALIZZATO" per il livello di scalabilità. Una sezione per fornire la specifica del cluster personalizzato vengono visualizzati i video.
    1. Per Tipo principale, seleziona complex_model_m.
    2. Per Tipo di worker, seleziona cloud_tpu. Il lavoratore conteggio il valore predefinito è 1.

Fai clic su Fine per inviare il job di addestramento.

gcloud

  1. Configura tutti gli argomenti per il job di addestramento e l'algoritmo, prima di utilizzare gcloud per inviare il job:

    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. Invia il job:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --job-dir=$JOB_DIR \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --train_batch_size=64 \
      --num_eval_images=500 \
      --train_steps_per_eval=2000 \
      --max_steps=15000 \
      --num_classes=90 \
      --warmup_steps=500 \
      --initial_learning_rate=0.08 \
      --fpn_type="nasfpn" \
      --aug_scale_min=0.8 \
      --aug_scale_max=1.2

  3. Dopo che il job è stato inviato correttamente, puoi visualizzare i log utilizzando i seguenti comandi gcloud:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Informazioni sulla directory dei job

Dopo aver completato con successo un job di addestramento, AI Platform Training crea un modello addestrato nel bucket Cloud Storage, insieme artefatti. All'interno di JOB_DIR puoi trovare la seguente struttura di directory:

  • model/ (un TensorFlow SavedModel Google Cloud che contiene anche un file deployment_config.yaml)
    • saved_model.pb
    • deployment_config.yaml
  • eval/
    • event.out.tfevents.[timestamp].cmle-training-[timestamp]
    • events.out.tfevents...
  • variables/
    • variables.data-00000-of-00001
    • variables.index

La directory del job contiene anche vari file di checkpoint del modello.

Verifica che la struttura della directory in JOB_DIR corrisponda a:

gcloud storage ls $JOB_DIR/* --all-versions

esegui il deployment del modello addestrato

AI Platform Training organizza i modelli addestrati utilizzando le risorse model e version. Un modello AI Platform Training è un container più versioni del tuo modello di machine learning.

Per eseguire il deployment di un modello, crea una risorsa del modello in AI Platform Training, una versione di quel modello, poi utilizza il modello e la versione per richiedere per le previsioni.

Per ulteriori informazioni su come eseguire il deployment dei modelli in AI Platform Training, consulta come eseguire il deployment di un modello TensorFlow.

Console

  1. Nella pagina Job, puoi trovare un elenco di tutti i tuoi job di addestramento. Fai clic sul nome del job di addestramento appena inviato ("object_detection" o il nome del job utilizzato).

  2. Nella pagina Dettagli job, puoi visualizzare l'avanzamento generale del job o fare clic su Visualizza log per una visualizzazione più dettagliata dell'avanzamento.

  3. Una volta completato il job, verrà visualizzato il pulsante Esegui il deployment del modello in alto. Fai clic su Esegui il deployment del modello.

  4. Seleziona Esegui il deployment come nuovo modello e inserisci un nome per il modello, ad esempio &quot;algorithms_object_detection_model&quot;. Quindi, fai clic su Conferma.

  5. Nella pagina Crea versione, inserisci un nome per la versione, ad esempio "v1", e lascia invariate le impostazioni predefinite di tutti gli altri campi. Clic Salva.

gcloud

Il processo di addestramento con l'algoritmo integrato di rilevamento degli oggetti immagine produce un deployment_config.yaml, che semplifica il deployment del modello su AI Platform Training per le previsioni.

  1. Copia il file nella tua directory locale e visualizzane il contenuto:

    gcloud storage cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    Il file deployment_config.yaml dovrebbe essere simile al seguenti:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/coco_object_detection/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: coco_object_detection_20190227060114
    runtimeVersion: '1.14'
    
  2. Crea il modello e la versione in AI Platform Training:

    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    La creazione della versione richiede alcuni minuti.

Ricevi previsioni online

Quando richiedi le previsioni, devi assicurarti che i dati di input siano formattati in JSON.

  1. Scarica i file degli artefatti di addestramento:

    gcloud storage cp $JOB_DIR/artifacts/* .
    
  2. Prepara l'input di previsione per un'immagine.

    Per inviare una richiesta di previsione online utilizzando Google Cloud CLI, come in Ad esempio, scrivi ogni istanza in una riga di un file JSON delimitato da nuova riga.

    Esegui questi comandi nel terminale per creare input per un singolo che puoi inviare ad AI Platform Prediction:

    Il seguente script Python codifica una singola immagine utilizzando base64, la formatta per la previsione, aggiunge una chiave di istanza e scrive il risultato un file denominato prediction_instances.json:

    import json
    import base64
    import tensorflow as tf
    
    IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/coco_sample.jpeg'
    
    with tf.gfile.Open(IMAGE_URI, 'rb') as image_file:
      encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    image_bytes = {'b64': str(encoded_string)}
    instances = {'image_bytes': image_bytes, 'key': '1'}
    with open("prediction_instances.json","w") as f:
      f.write(json.dumps(instances))
    
  3. Invia la richiesta di previsione:

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

Per ogni oggetto rilevato all'interno dell'immagine, l'output della previsione include classi, punteggi e posizioni dei riquadri di delimitazione.

Informazioni sui dati

Il set di dati Common Objects in Context (COCO) di Microsoft è un set di dati su larga scala per il rilevamento, la segmentazione e le didascalie degli oggetti.

Passaggi successivi