Maschera di addestramento RCNN su Cloud TPU (TF 2.x)

Panoramica

Questo tutorial illustra come eseguire il modello Mask RCNN utilizzando Cloud TPU con il set di dati COCO.

Maschera RCNN è una profonda rete neurale progettata per affrontare il rilevamento di oggetti e la segmentazione delle immagini, una delle sfide più complesse relative alla visione artificiale.

Il modello Maschera RCNN genera riquadri di delimitazione e maschere di segmentazione per ogni istanza di un oggetto nell'immagine. Il modello si basa su Feature Pyramid Network (FPN) e su una rete backbone ResNet50.

Questo tutorial utilizza Tensorflow Keras APIs per addestrare il modello. L'API Kras è un'API TensorFlow ad alto livello che può essere utilizzata per creare ed eseguire un modello di machine learning su Cloud TPU. L'API semplifica il processo di sviluppo del modello nascondendo la maggior parte dell'implementazione di basso livello, che semplifica il passaggio tra TPU e altre piattaforme come GPU o CPU.

Le istruzioni riportate di seguito presuppongono che tu abbia già familiarità con l'addestramento di un modello in Cloud TPU. Se non hai mai utilizzato Cloud TPU, puoi consultare la guida rapida per un'introduzione di base.

Obiettivi

  • Prepara il set di dati COCO
  • Crea un bucket Cloud Storage per contenere l'output del set di dati e il modello
  • Configura le risorse TPU per l'addestramento e la valutazione
  • Esegui addestramento e valutazione su una singola Cloud TPU o un pod di Cloud TPU

Costi

Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

Prima di iniziare

Prima di iniziare questo tutorial, verifica che il tuo progetto Google Cloud sia configurato correttamente.

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  4. Nella pagina del selettore dei progetti in Google Cloud Console, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  6. Questa procedura dettagliata utilizza componenti fatturabili di Google Cloud. Consulta la pagina Prezzi di Cloud TPU per una stima dei costi. Assicurati di pulire le risorse che crei quando hai finito di utilizzarle per evitare addebiti inutili.

Prepara il set di dati COCO

Questo tutorial utilizza il set di dati COCO. Il set di dati deve essere in formato TFRecord su un bucket Cloud Storage da utilizzare per l'addestramento.

Se hai già preparato il set di dati COCO su un bucket Cloud Storage che si trova nella zona che utilizzerai per addestrare il modello, puoi andare direttamente all'addestramento dei singoli dispositivi. In caso contrario, segui i passaggi riportati di seguito per preparare il set di dati.

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. In Cloud Shell, configura gcloud con l'ID progetto.

    export PROJECT_ID=project-id
    gcloud config set project ${PROJECT_ID}
    
  3. In Cloud Shell, crea un bucket Cloud Storage utilizzando il seguente comando:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    
  4. Avvia un'istanza VM di Compute Engine.

    Questa istanza VM verrà utilizzata solo per scaricare e preelaborare il set di dati COCO. Compila il campo instance-name con un nome a tua scelta.

    $ gcloud compute tpus execution-groups create \
     --vm-only \
     --name=instance-name \
     --zone=europe-west4-a \
     --disk-size=300 \
     --machine-type=n1-standard-16 \
     --tf-version=2.8.0
    

    Descrizioni flag comando

    vm-only
    Crea solo una VM. Per impostazione predefinita, il comando gcloud compute tpus execution-groups crea una VM e una Cloud TPU.
    name
    Il nome della Cloud TPU da creare.
    zone
    La zona in cui prevedi di creare Cloud TPU.
    disk-size
    Le dimensioni del disco rigido in GB della VM creata dal comando gcloud compute tpus execution-groups.
    machine-type
    Il tipo di macchina della VM di Compute Engine da creare.
    tf-version
    La versione di Tensorflow gcloud compute tpus execution-groups viene installata sulla VM.
  5. Se non hai eseguito automaticamente l'accesso all'istanza Compute Engine, esegui l'accesso eseguendo questo comando ssh. Dopo aver eseguito l'accesso alla VM, il prompt di shell cambia da username@projectname a username@vm-name:

      $ gcloud compute ssh instance-name --zone=europe-west4-a
      

  6. Configura due variabili, una per il bucket di archiviazione che hai creato in precedenza e una per la directory che contiene i dati di addestramento (DATA_DIR) nel bucket di archiviazione.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
  7. Installa i pacchetti necessari per pre-elaborare i dati.

    (vm)$ sudo apt-get install -y python3-tk && \
      pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow && \
      pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
    
  8. Esegui lo script download_and_preprocess_coco.sh per convertire il set di dati COCO in un set di TFRecord (*.tfrecord) previsto.

    (vm)$ git clone https://github.com/tensorflow/tpu.git
    (vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
    

    Vengono installate le librerie richieste ed eseguito lo script di pre-elaborazione. Nella directory dei dati locali viene restituito un numero di file *.tfrecord. Lo script COCO per il download e la conversione richiede circa un'ora.

  9. Copia i dati nel tuo bucket Cloud Storage

    Dopo aver convertito i dati in TFRecord, copiali dallo spazio di archiviazione locale nel tuo bucket Cloud Storage utilizzando il comando gsutil. Devi anche copiare i file delle annotazioni. Questi file consentono di convalidare le prestazioni del modello.

    (vm)$ gsutil -m cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
    (vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
    
  10. Pulisci le risorse VM

    Dopo aver convertito il set di dati COCO in TFRecords e copiato nel DATA_DIR nel tuo bucket Cloud Storage, puoi eliminare l'istanza di Compute Engine.

    Disconnetti dall'istanza Compute Engine:

    (vm)$ exit
    

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  11. Elimina la tua istanza di Compute Engine.

      $ gcloud compute instances delete instance-name
        --zone=europe-west4-a
      

Addestramento dispositivo Cloud TPU singolo

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile di ambiente per l'ID del tuo progetto.

    export PROJECT_ID=project-id
  3. Configura l'interfaccia a riga di comando di Google Cloud per utilizzare il progetto in cui vuoi creare la Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    La prima volta che esegui questo comando in una nuova VM di Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize in fondo alla pagina per consentire a gcloud di effettuare chiamate API GCP con le tue credenziali.

  4. Crea un account di servizio per il progetto Cloud TPU.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    Il comando restituisce un account di servizio Cloud TPU con il formato seguente:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Esporta variabili di configurazione TPU

    Esporta l'ID progetto, il nome che vuoi utilizzare per le risorse TPU e la zona in cui imparerai ad addestrare il modello e ad archiviare tutti i dati relativi all'addestramento.

    $ export TPU_NAME=mask-rcnn-tutorial
    $ export ZONE=europe-west4-a

  6. Avvia una VM di Compute Engine e Cloud TPU utilizzando il comando gcloud. Il comando da utilizzare varia a seconda che tu stia utilizzando VM TPU o nodi TPU. Per ulteriori informazioni sulle due architetture VM, consulta la pagina relativa all'architettura di sistema.

    VM TPU

    $ gcloud alpha compute tpus tpu-vm create mask-rcnn-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-8 \
    --version=tpu-vm-tf-2.8.0
    

    Descrizioni flag comando

    zone
    La zona in cui prevedi di creare Cloud TPU.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    version
    La versione del software Cloud TPU.

    Nodo TPU

    $ gcloud compute tpus execution-groups create  \
     --zone=europe-west4-a \
     --name=mask-rcnn-tutorial \
     --accelerator-type=v3-8 \
     --machine-type=n1-standard-8 \
     --disk-size=300 \
     --tf-version=2.8.0
    

    Descrizioni flag comando

    zone
    La zona in cui prevedi di creare Cloud TPU.
    name
    Il nome della TPU. Se non è specificato, viene utilizzato il nome utente per impostazione predefinita.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    machine-type
    Il tipo di macchina della VM di Compute Engine da creare.
    disk-size
    Le dimensioni del volume root della VM di Compute Engine (in GB).
    tf-version
    La versione di Tensorflow gcloud viene installata sulla VM.

    Per maggiori informazioni sul comando gcloud, consulta la sezione Riferimento gcloud.

  7. Se non hai eseguito automaticamente l'accesso all'istanza Compute Engine, esegui l'accesso eseguendo questo comando ssh. Dopo aver eseguito l'accesso alla VM, il prompt di shell cambia da username@projectname a username@vm-name:

    VM TPU

    gcloud alpha compute tpus tpu-vm ssh mask-rcnn-tutorial --zone=europe-west4-a
    

    Nodo TPU

    gcloud compute ssh mask-rcnn-tutorial --zone=europe-west4-a
    
  8. Installa i requisiti di TensorFlow.

    Il comando che utilizzi dipende dall'uso o meno delle VM TPU o dei nodi TPU.

    VM TPU

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt 

    Nodo TPU

    (vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
    
  9. Imposta la variabile del nome Cloud TPU.

    VM TPU

    (vm)$ export TPU_NAME=local
    

    Nodo TPU

    (vm)$ export TPU_NAME=mask-rcnn-tutorial
    
  10. Configura le seguenti variabili di ambiente, sostituendo bucket-name con il nome del bucket Cloud Storage che archivia il set di dati COCO:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
  11. Aggiungi le variabili di ambiente per le directory di dati e modelli.

    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn
    
  12. Aggiungi altre variabili di ambiente obbligatorie:

    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    
  13. Imposta la variabile di ambiente PYTHONPATH:

    VM TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    

    Nodo TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  14. Passa alla directory in cui è memorizzato il modello:

    VM TPU

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection
    

    Nodo TPU

    (vm)$ cd /usr/share/models/official/legacy/detection
    

Lo script seguente esegue un addestramento di esempio che viene addestrato per soli 10 passaggi e richiede circa 10 minuti per essere completato su una TPU v3-8. Per addestrare la convergenza sono necessari circa 22.500 passi e circa 6 ore su una TPU v3-8.

  1. Esegui il comando seguente per addestrare il modello Mask-RCNN:

    (vm)$ python3 main.py \
       --strategy_type=tpu \
       --tpu=${TPU_NAME} \
       --model_dir=${MODEL_DIR} \
       --mode=train \
       --model=mask_rcnn \
       --params_override="{train: { total_steps: 10, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000} }"
    

    Descrizioni flag comando

    strategy_type
    La strategia di distribuzione.
    tpu
    Il nome della tua TPU.
    model_dir
    Specifica la directory in cui vengono archiviati i punti di controllo e i riepiloghi durante l'addestramento del modello. Se la cartella non è presente, il programma ne crea una. Quando utilizzi una Cloud TPU, model_dir deve essere un percorso Cloud Storage (`gs://...`). Puoi riutilizzare una cartella esistente per caricare i dati del punto di controllo corrente e archiviare i punti di controllo aggiuntivi purché i punti di controllo precedenti siano stati creati utilizzando la stessa dimensione e la stessa versione di TensorFlow.

    Al termine dell'addestramento, viene visualizzato un messaggio simile al seguente:

    Train Step: 10/10  / loss = {'total_loss': 2.6386399269104004,
    'loss': 2.6386399269104004, 'fast_rcnn_class_loss': 0.5143030881881714,
    'fast_rcnn_box_loss': 0.005997246131300926, 'mask_loss': 0.7189582586288452,
    'model_loss': 1.898547887802124, 'l2_regularization_loss': 0.7400921583175659,
    'rpn_score_loss': 0.6035243272781372, 'rpn_box_loss': 0.055764954537153244,
    'learning_rate': 0.008165999} / training metric = {'total_loss': 2.6386399269104004,
    'loss': 2.6386399269104004, 'fast_rcnn_class_loss': 0.5143030881881714,
    'fast_rcnn_box_loss': 0.005997246131300926, 'mask_loss': 0.7189582586288452,
    'model_loss': 1.898547887802124, 'l2_regularization_loss': 0.7400921583175659,
    'rpn_score_loss': 0.6035243272781372, 'rpn_box_loss': 0.055764954537153244,
    'learning_rate': 0.008165999}
    
  2. Esegui la valutazione. Questa operazione richiederà circa 15 minuti su una TPU v3-8:

    (vm)$ python3 main.py \
       --strategy_type=tpu \
       --tpu=${TPU_NAME} \
       --model_dir=${MODEL_DIR} \
       --checkpoint_path=${MODEL_DIR} \
       --mode=eval_once \
       --model=mask_rcnn \
       --params_override="{eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}, eval_samples: 5000 } }"
    

    Descrizioni flag comando

    strategy_type
    La strategia di distribuzione.
    tpu
    Il nome della tua TPU.
    model_dir
    Specifica la directory in cui vengono archiviati i punti di controllo e i riepiloghi durante l'addestramento del modello. Se la cartella non è presente, il programma ne crea una. Quando utilizzi una Cloud TPU, model_dir deve essere un percorso Cloud Storage (`gs://...`). Puoi riutilizzare una cartella esistente per caricare i dati del punto di controllo corrente e archiviare i punti di controllo aggiuntivi purché i punti di controllo precedenti siano stati creati utilizzando la stessa dimensione e la stessa versione di TensorFlow.

    Al termine della valutazione, viene visualizzato un messaggio simile al seguente:

    DONE (t=5.41s).
    Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
    Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
    Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
    Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
    Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
    Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.000
    Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.000
    

    Hai completato la formazione e la valutazione di un singolo dispositivo. Per eliminare le attuali risorse TPU destinate a un singolo dispositivo, procedi nel seguente modo.

  3. Disconnetti dall'istanza Compute Engine:

    (vm)$ exit
    

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  4. Elimina la risorsa TPU.

    VM TPU

    $ gcloud alpha compute tpus tpu-vm delete mask-rcnn-tutorial \
    --zone=europe-west4-a
    

    Descrizioni flag comando

    zone
    La zona in cui si trovava la tua Cloud TPU.

    Nodo TPU

    $ gcloud compute tpus execution-groups delete mask-rcnn-tutorial \
    --tpu-only \
    --zone=europe-west4-a
    

    Descrizioni flag comando

    tpu-only
    Elimina solo Cloud TPU. La VM rimane disponibile.
    zone
    La zona che contiene la TPU da eliminare.

A questo punto, puoi concludere questo tutorial e ripulire oppure continuare ed esplorare il modello sui pod di Cloud TPU.

Scalabilità del modello con i pod Cloud TPU

L'addestramento del tuo modello su pod {product_name_short}} potrebbe richiedere alcune modifiche allo script di addestramento. Per informazioni, consulta la pagina relativa all'addestramento sui pod di TPU.

Addestramento pod TPU

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. Crea una variabile per l'ID del tuo progetto.

    export PROJECT_ID=project-id
    
  3. Configura l'interfaccia a riga di comando di Google Cloud per utilizzare il progetto in cui vuoi creare Cloud TPU.

    gcloud config set project ${PROJECT_ID}
    

    La prima volta che esegui questo comando in una nuova VM di Cloud Shell, viene visualizzata una pagina Authorize Cloud Shell. Fai clic su Authorize in fondo alla pagina per consentire a gcloud di effettuare chiamate API GCP con le tue credenziali.

  4. Crea un account di servizio per il progetto Cloud TPU.

    Gli account di servizio consentono al servizio Cloud TPU di accedere ad altri servizi di Google Cloud Platform.

    gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
    

    Il comando restituisce un account di servizio Cloud TPU con il formato seguente:

    service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
    

  5. Se in precedenza hai preparato il set di dati COCO e lo hai spostato nel tuo bucket di archiviazione, puoi utilizzarlo di nuovo per l'addestramento del pod. Se non hai ancora preparato il set di dati COCO, preparalo ora e torna qui per configurare la formazione.

  6. Avvia un pod Cloud TPU

    Questo tutorial specifica un pod v3-32. Per altre opzioni pod, consulta la pagina dei tipi di TPU disponibili.

    L'addestramento di esempio dura solo 20 passaggi e il completamento su un nodo TPU v3-32 richiede circa 10 minuti. Per l'addestramento alla convergenza,sono necessari circa 11.250 passi e circa 2 ore su un pod TPU v3-32.

    VM TPU

    $ gcloud alpha compute tpus tpu-vm create mask-rcnn-tutorial \
    --zone=europe-west4-a \
    --accelerator-type=v3-32 \
    --version=tpu-vm-tf-2.8.0-pod
    

    Descrizioni flag comando

    zone
    La zona in cui prevedi di creare Cloud TPU.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    version
    La versione del software Cloud TPU.

    Nodo TPU

    (vm)$ gcloud compute tpus execution-groups create \
    --zone=europe-west4-a \
    --name=mask-rcnn-tutorial \
    --accelerator-type=v3-32  \
    --tf-version=2.8.0
    

    Descrizioni flag comando

    zone
    La zona in cui prevedi di creare Cloud TPU.
    tpu-only
    Crea solo Cloud TPU. Per impostazione predefinita, il comando gcloud compute tpus execution-groups crea sia una VM sia una Cloud TPU.
    accelerator-type
    Il tipo di Cloud TPU da creare.
    tf-version
    La versione di Tensorflow gcloud viene installata sulla VM.
  7. Se non hai eseguito automaticamente l'accesso all'istanza Compute Engine, esegui l'accesso eseguendo questo comando ssh. Dopo aver eseguito l'accesso alla VM, il prompt di shell cambia da username@projectname a username@vm-name:

    VM TPU

    gcloud alpha compute tpus tpu-vm ssh mask-rcnn-tutorial --zone=europe-west4-a
    

    Nodo TPU

    gcloud compute ssh mask-rcnn-tutorial --zone=europe-west4-a
    
  8. Installa i requisiti di TensorFlow.

    Il comando che utilizzi dipende dall'uso o meno delle VM TPU o dei nodi TPU.

    VM TPU

    (vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt 

    Nodo TPU

    (vm)$ pip3 install --user -r /usr/share/models/official/requirements.txt
    
  9. Lo script di addestramento richiede un pacchetto aggiuntivo. Installala ora:

    (vm)$ pip3 install --user tensorflow-model-optimization>=0.1.3
    
  10. Imposta la variabile del nome Cloud TPU.

    (vm)$ export TPU_NAME=mask-rcnn-tutorial
    
  11. Configura le seguenti variabili di ambiente, sostituendo bucket-name con il nome del tuo bucket Cloud Storage:

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
  12. Aggiungi altre variabili di ambiente obbligatorie:

    (vm)$ export RESNET_CHECKPOINT=gs://cloud-tpu-checkpoints/retinanet/resnet50-checkpoint-2018-02-07
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
    (vm)$ export TRAIN_FILE_PATTERN=${DATA_DIR}/train-*
    (vm)$ export EVAL_FILE_PATTERN=${DATA_DIR}/val-*
    (vm)$ export VAL_JSON_FILE=${DATA_DIR}/instances_val2017.json
    (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/mask-rcnn-pod
    
  13. Imposta la variabile di ambiente PYTHONPATH:

    VM TPU

    (vm)$ export PYTHONPATH="/usr/share/tpu/models:${PYTHONPATH}"
    (vm)$ export TPU_LOAD_LIBRARY=0
    

    Nodo TPU

    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/models"
    
  14. Passa alla directory in cui è memorizzato il modello:

    VM TPU

    (vm)$ cd /usr/share/tpu/models/official/legacy/detection

    Nodo TPU

    (vm)$ cd /usr/share/models/official/legacy/detection
  15. Addestra il modello:

    Con questa procedura, il modello viene addestrato sul set di dati COCO per i passaggi di addestramento 5625. Questo addestramento dura circa un'ora su una Cloud TPU v3-32. Vedrai l'output del checkpoint circa ogni 5 minuti.

    VM TPU

    (vm)$ python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode=train \
    --model=mask_rcnn \
    --params_override="{architecture: {use_bfloat16: true}, eval: {batch_size: 40, eval_file_pattern: ${EVAL_FILE_PATTERN}, val_json_file: ${VAL_JSON_FILE}}, postprocess: {pre_nms_num_boxes: 1000}, predict: {batch_size: 40}, train: {batch_size: 256, checkpoint: {path: ${RESNET_PRETRAIN_DIR}, prefix: resnet50/}, iterations_per_loop: 500, total_steps: 5625, train_file_pattern: ${TRAIN_FILE_PATTERN}, } }" 

    Descrizioni flag comando

    tpu
    Il nome della tua TPU.
    model_dir
    Specifica la directory in cui vengono archiviati i checkpoint e i riepiloghi durante l'addestramento del modello. Se la cartella risulta mancante, il programma ne crea una. Quando utilizzi una Cloud TPU, model_dir deve essere un percorso Cloud Storage (gs://...). Puoi riutilizzare una cartella esistente per caricare i dati del posto di controllo corrente e archiviare punti di controllo aggiuntivi purché i punti di controllo precedenti siano stati creati utilizzando Cloud TPU della stessa dimensione e versione di TensorFlow.
    params_override
    Una stringa JSON che sostituisce i parametri di script predefiniti. Per ulteriori informazioni sui parametri dello script, consulta ~/models/official/legacy/detection/main.py.

    Nodo TPU

    (vm)$ python3 main.py \
    --strategy_type=tpu \
    --tpu=${TPU_NAME} \
    --model_dir=${MODEL_DIR} \
    --mode=train \
    --model=mask_rcnn \
    --params_override="{train: { batch_size: 128, iterations_per_loop: 500, total_steps: 20, learning_rate: {'learning_rate_levels': [0.008, 0.0008], 'learning_rate_steps': [10000, 13000] }, checkpoint: { path: ${RESNET_CHECKPOINT}, prefix: resnet50/ }, train_file_pattern: ${TRAIN_FILE_PATTERN} }, eval: { val_json_file: ${VAL_JSON_FILE}, eval_file_pattern: ${EVAL_FILE_PATTERN}} }"

    Descrizioni flag comando

    tpu
    Il nome della tua TPU.
    model_dir
    Specifica la directory in cui vengono archiviati i checkpoint e i riepiloghi durante l'addestramento del modello. Se la cartella risulta mancante, il programma ne crea una. Quando utilizzi una Cloud TPU, model_dir deve essere un percorso Cloud Storage (gs://...). Puoi riutilizzare una cartella esistente per caricare i dati del posto di controllo corrente e archiviare punti di controllo aggiuntivi purché i punti di controllo precedenti siano stati creati utilizzando Cloud TPU della stessa dimensione e versione di TensorFlow.
    params_override
    Una stringa JSON che sostituisce i parametri di script predefiniti. Per ulteriori informazioni sui parametri dello script, consulta ~/models/official/legacy/detection/main.py.

Al termine dell'addestramento, viene visualizzato un messaggio simile al seguente:

 Train Step: 20/20  / loss = {'total_loss': 2.176832675933838,
 'loss': 2.176832675933838, 'fast_rcnn_class_loss': 0.2733360528945923,
 'fast_rcnn_box_loss': 0.030380848795175552, 'mask_loss': 0.6929039359092712,
 'model_loss': 1.4366037845611572, 'l2_regularization_loss': 0.7402286529541016,
 'rpn_score_loss': 0.3818075954914093, 'rpn_box_loss': 0.05817537382245064,
 'learning_rate': 0.009632} / training metric = {'total_loss': 2.176832675933838,
 'loss': 2.176832675933838, 'fast_rcnn_class_loss': 0.2733360528945923,
 'fast_rcnn_box_loss': 0.030380848795175552, 'mask_loss': 0.6929039359092712,
 'model_loss': 1.4366037845611572, 'l2_regularization_loss': 0.7402286529541016,
 'rpn_score_loss': 0.3818075954914093, 'rpn_box_loss': 0.05817537382245064,
 'learning_rate': 0.009632}
 

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

  1. Disconnettiti dall'istanza di Compute Engine, se non l'hai ancora fatto:

    (vm)$ exit
    

    Il tuo prompt dovrebbe ora essere username@projectname, a indicare che ti trovi in Cloud Shell.

  2. Elimina le risorse Cloud TPU e Compute Engine. Il comando da utilizzare per eliminare le risorse dipende dalla presenza o meno di VM TPU o nodi TPU. Per ulteriori informazioni, consulta la sezione Architettura di sistema.

    VM TPU

    $ gcloud alpha compute tpus tpu-vm delete mask-rcnn-tutorial \
    --zone=europe-west4-a
    

    Nodo TPU

    $ gcloud compute tpus execution-groups delete mask-rcnn-tutorial \
    --zone=europe-west4-a
    
  3. Verifica che le risorse siano state eliminate eseguendo gcloud compute tpus execution-groups list. L'eliminazione può richiedere qualche minuto. L'output del seguente comando non deve includere alcuna risorsa TPU creata in questo tutorial:

    $ gcloud compute tpus execution-groups list --zone=europe-west4-a
    
  4. Esegui gsutil come mostrato, sostituendo bucket-name con il nome del bucket Cloud Storage creato per questo tutorial:

    $ gsutil rm -r gs://bucket-name
    

Passaggi successivi

I tutorial di TensorFlow Cloud TPU in genere addestrano il modello utilizzando un set di dati di esempio. I risultati di questo corso di formazione non sono utilizzabili per inferenza. Per utilizzare un modello di inferenza, puoi addestrare i dati su un set di dati disponibile pubblicamente o sul tuo set di dati. In genere, i modelli TensorFlow addestrati su Cloud TPU richiedono che i set di dati siano in formato TFRecord.

Puoi utilizzare l'esempio di strumento di conversione del set di dati per convertire un set di dati di classificazione delle immagini in formato TFRecord. Se non utilizzi un modello di classificazione delle immagini, dovrai convertire personalmente il set di dati in formato TFRecord. Per ulteriori informazioni, vedi TFRecord e tf.Example.

Ottimizzazione degli iperparametri

Per migliorare le prestazioni del modello con il tuo set di dati, puoi regolare gli iperparametri di questo modello. Puoi trovare informazioni sugli iperparametri in comune in tutti i modelli supportati da TPU su GitHub. Puoi trovare informazioni sugli iperparametri specifici del modello nel codice sorgente di ciascun modello. Per ulteriori informazioni sull'ottimizzazione degli iperparametri, consulta Panoramica dell'ottimizzazione degli iperparametri, Utilizzo del servizio di ottimizzazione degli iperparametri e Perfezionamento degli iperparametri.

Inferenza

Dopo aver addestrato il modello, puoi utilizzarlo per inferenza (chiamato anche previsione). AI Platform è una soluzione basata su cloud per lo sviluppo, l'addestramento e il deployment di modelli di machine learning. Una volta eseguito il deployment di un modello, puoi utilizzare il servizio AI Platform Prediction.