Addestramento con l'impiego dell'algoritmo di classificazione delle immagini integrato

L'addestramento con algoritmi integrati in AI Platform Training ti consente di inviare il tuo set di dati e addestrare un modello senza scrivere codice di addestramento. Questa pagina spiega come funziona l'algoritmo integrato di classificazione delle immagini e come utilizzarlo.

Panoramica

L'algoritmo di classificazione delle immagini integrato utilizza i tuoi set di dati di addestramento e convalida per addestrare i modelli in modo continuo e poi restituisce il modello SaveModel più accurato generato durante il job di addestramento. Puoi anche utilizzare l'ottimizzazione degli iperparametri per ottenere la migliore accuratezza del modello. Il SaveModel esportato può essere utilizzato direttamente per la previsione, in locale o di cui è stato eseguito il deployment in AI Platform Prediction per il servizio di produzione.

Limitazioni

Gli algoritmi integrati nelle immagini supportano l'addestramento con CPU, GPU o TPU singole. Il saveModel risultante è compatibile con la pubblicazione su CPU e GPU.

Le seguenti funzionalità non sono supportate per l'addestramento con l'algoritmo di classificazione delle immagini integrato:

Tipi di macchine supportati

Sono supportati i seguenti livelli di scalabilità e tipi di macchine di AI Platform Training:

  • Livello di scalabilità BASIC
  • Livello di scalabilità BASIC_TPU
  • livello di scalabilità CUSTOM con uno dei tipi di macchine Compute Engine supportati da AI Platform Training.
  • livello di scalabilità CUSTOM con uno dei seguenti tipi di macchine legacy:
    • standard
    • large_model
    • complex_model_s
    • complex_model_m
    • complex_model_l
    • standard_gpu
    • standard_p100
    • standard_v100
    • large_model_v100
    • complex_model_m_gpu
    • complex_model_l_gpu
    • complex_model_m_p100
    • complex_model_m_v100
    • complex_model_l_v100
    • TPU_V2 (8 core)

Autorizza la tua Cloud TPU ad accedere al progetto

Formattare i dati di input per l'addestramento

L'algoritmo di classificazione delle immagini integrato richiede che i dati di input vengano formattati come tf.Examples, salvati nei file TFRecord. La struttura dei dati tf.Example e il formato file TFRecord sono entrambi progettati per una lettura efficiente dei dati con TensorFlow.

Il formato TFRecord è un formato semplice per la memorizzazione di una sequenza di record binari. In questo caso, tutti i record contengono rappresentazioni binarie di immagini. Ogni immagine, insieme alle relative etichette delle classi, è rappresentata come tf.Example. Puoi salvare molti tf.Example in un singolo file TFRecord. Puoi anche sharding di un set di dati di grandi dimensioni tra più file TFRecord.

Scopri di più su TFRecord e tf.Example.

Converti le tue immagini in TFRecord

TensorFlow fornisce uno script che puoi utilizzare per convertire le immagini dal formato JPEG al formato TFRecord.

Puoi utilizzare lo script se:

  • Puoi archiviare le immagini in Cloud Storage.
  • Esistono file CSV con i percorsi delle immagini in Cloud Storage e le etichette corrispondenti. Ad esempio:

    gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy
    gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
    
  • Questi file CSV vengono archiviati in Cloud Storage.

L'esempio seguente mostra come eseguire lo script:

  1. Scarica lo script:

    curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
    
  2. Imposta le variabili per l'ID progetto e il nome del bucket, se non lo hai già fatto:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
  3. Crea un elenco di tutte le possibili etichette per il tuo set di dati in un file temporaneo:

    cat << EOF > /tmp/labels.txt
    daisy
    dandelion
    roses
    sunflowers
    tulips
    EOF
    
  4. Esegui lo script utilizzando i dati relativi ai fiori dal bucket cloud-ml-data pubblico e dal tuo elenco di etichette:

    python -m jpeg_to_tf_record.py \
           --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \
           --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \
           --labels_file /tmp/labels.txt \
           --project_id $PROJECT_ID \
           --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
    

Controlla le autorizzazioni dei bucket Cloud Storage

Per archiviare i dati, utilizza un bucket Cloud Storage nello stesso progetto Google Cloud che stai utilizzando per eseguire i job di AI Platform Training. In caso contrario, concedi ad AI Platform Training l'accesso al bucket Cloud Storage in cui sono archiviati i tuoi dati.

Formato di input obbligatorio

Per eseguire l'addestramento con l'algoritmo di classificazione delle immagini integrato, i dati delle immagini devono essere strutturati come tf.Example che includono i seguenti campi:

  • image/encoded è la stringa dell'immagine non elaborata.

  • image/class/label è una singola etichetta di un numero intero per l'immagine corrispondente. Non sono supportate più etichette per istanza.

    L'insieme di etichette di numeri interi utilizzati per il set di dati deve essere una sequenza consecutiva che inizia da 1. Ad esempio, se il set di dati è composto da cinque classi, ogni etichetta deve essere un numero intero nell'intervallo [1, 5].

Ad esempio:

{
    'image/encoded': '<encoded image data>',
    'image/class/label': 2
}

Recupero del miglior SaveModel come output

Al completamento del job di addestramento, AI Platform Training scrive un SaveModel TensorFlow nel bucket Cloud Storage che hai specificato come jobDir al momento dell'invio del job. Il modello SaveModel è scritto in jobDir/model. Ad esempio, se invii il job a gs://your-bucket-name/your-job-dir, AI Platform Training scrive il savedModel in gs://your-bucket-name/your-job-dir/model.

Se hai abilitato l'ottimizzazione degli iperparametri, AI Platform Training restituisce il TensorFlow saveModel con la massima accuratezza raggiunta durante il processo di addestramento. Ad esempio, se hai inviato un job di addestramento con 2500 passaggi e la precisione è stata massima con 2000 passaggi, viene salvato un SaveModel di TensorFlow da quel punto specifico.

Ogni prova di AI Platform Training scrive il SaveModel di TensorFlow con la massima precisione nella propria directory all'interno del tuo bucket Cloud Storage. Ad esempio, gs://your-bucket-name/your-job-dir/model/trial_{trial_id}.

La firma di SaveModel di output è:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['image_bytes'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Placeholder:0
    inputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: key:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['classes'] tensor_info:
        dtype: DT_INT64
        shape: (-1)
        name: ArgMax:0
    outputs['key'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: Identity:0
    outputs['probabilities'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1000)
        name: softmax_tensor:0
  Method name is: tensorflow/serving/predict

Input:

  • image_bytes: i byte dell'immagine non elaborata (non decodificata). È uguale a image/encoded archiviato in tf.Example.
  • key: l'identificatore del valore stringa dell'input di previsione. Questo valore viene trasmesso all'output key. Nella previsione batch, questo consente di mappare l'output di previsione all'input.

Output:

  • classes: l'etichetta della classe prevista (numero intero), che è quella con la probabilità più alta.
  • key: il tasto di output.
  • probabilities: il valore probability (compreso tra 0 e 1) per ogni class (compreso tra 0 e num_classes).

Di seguito è riportato un esempio di input e output di previsione:

prediction_input: {
  'image_bytes': 'some_raw_image_bytes',
  'key': ['test_key'])
}

prediction_output: {
  'probabilities': [[0.1, 0.3, 0.6]],
  'classes': [2],
  'key': ['test_key'],
}

Configurazioni di esempio

Se invii un job utilizzando gcloud, devi creare un file config.yaml per il tipo di macchina e le specifiche di ottimizzazione degli iperparametri. Se utilizzi la console Google Cloud, non è necessario creare questo file. Scopri come inviare un job di addestramento.

Il seguente file config.yaml di esempio mostra come allocare le risorse TPU per il job di addestramento:

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
EOF

Quindi, utilizza il file config.yaml per inviare un job di addestramento.

Configurazione dell'ottimizzazione degli iperparametri

Per utilizzare l'ottimizzazione degli iperparametri, includi la configurazione di ottimizzazione degli iperparametri nello stesso file config.yaml della configurazione della macchina.

Puoi trovare brevi spiegazioni di ciascun iperparametro all'interno della console Google Cloud e una spiegazione più completa nel riferimento per l'algoritmo di classificazione delle immagini integrato.

Il file config.yaml di esempio seguente mostra come allocare le risorse TPU per il job di addestramento e include la configurazione dell'ottimizzazione degli iperparametri:

cat << EOF > config.yaml
trainingInput:
  # Use a cluster with many workers and a few parameter servers.
  scaleTier: CUSTOM
  masterType: n1-highmem-16
  masterConfig:
    imageUri: gcr.io/cloud-ml-algos/image_classification:latest
  workerType:  cloud_tpu
  workerConfig:
   imageUri: gcr.io/cloud-ml-algos/image_classification:latest
   tpuTfVersion: 1.14
   acceleratorConfig:
     type: TPU_V2
     count: 8
  workerCount: 1
  # The following are hyperparameter configs.
  hyperparameters:
   goal: MAXIMIZE
   hyperparameterMetricTag: top_1_accuracy
   maxTrials: 6
   maxParallelTrials: 3
   enableTrialEarlyStopping: True
   params:
   - parameterName: initial_learning_rate
     type: DOUBLE
     minValue: 0.001
     maxValue: 0.2
     scaleType: UNIT_LOG_SCALE
EOF

Invia un job di addestramento per la classificazione delle immagini

Questa sezione spiega come inviare un job di addestramento utilizzando l'algoritmo di classificazione delle immagini integrato.

Console

Seleziona l'algoritmo

  1. Vai alla pagina Job di addestramento di AI Platform nella console Google Cloud:

    Pagina dei job di AI Platform Training

  2. Fai clic sul pulsante Nuovo job di addestramento. Dalle opzioni visualizzate di seguito, fai clic su Addestramento con algoritmi integrati.

  3. Nella pagina Crea un nuovo job di addestramento, seleziona classificazione delle immagini e fai clic su Avanti.

Seleziona i dati di addestramento e convalida

  1. Nella casella a discesa in Dati di addestramento, specifica se stai utilizzando uno o più file:

    • Per un singolo file, lascia selezionata l'opzione "Use single file in a GCS bucket".
    • Per più file, seleziona "Utilizza più file archiviati in una sola directory Cloud Storage".
  2. Per Percorso directory, fai clic su Sfoglia. Nel riquadro a destra, fai clic sul nome del bucket in cui hai caricato i dati di addestramento e vai al file.

    Se devi selezionare più file, inserisci i caratteri jolly in Nome carattere jolly. Di seguito viene visualizzato il "Percorso GCS completo" per verificare che il percorso sia corretto.

  3. Nella casella a discesa sotto Dati di convalida, specifica se stai utilizzando uno o più file:

    • Per un singolo file, lascia selezionata l'opzione "Use single file in a GCS bucket".
    • Per più file, seleziona "Utilizza più file archiviati in una sola directory Cloud Storage".
  4. Per Percorso directory, fai clic su Sfoglia. Nel riquadro a destra, fai clic sul nome del bucket in cui hai caricato i dati di addestramento e vai al file.

    Se devi selezionare più file, inserisci i caratteri jolly in Nome carattere jolly. Di seguito viene visualizzato il "Percorso GCS completo" per verificare che il percorso sia corretto.

  5. In Directory di output, inserisci il percorso del bucket Cloud Storage in cui vuoi che AI Platform Training memorizzi gli output del job di addestramento. Puoi compilare direttamente il percorso del bucket Cloud Storage o fare clic sul pulsante Sfoglia per selezionarlo.

    Per mantenere tutto organizzato, crea una nuova directory all'interno del bucket Cloud Storage per questo job di addestramento. Puoi eseguire questa operazione nel riquadro Sfoglia.

    Tocca Avanti.

Imposta gli argomenti dell'algoritmo

Ogni argomento specifico dell'algoritmo visualizza un valore predefinito per i job di addestramento senza ottimizzazione degli iperparametri. Se abiliti l'ottimizzazione degli iperparametri su un argomento dell'algoritmo, devi specificare il valore minimo e massimo.

Per saperne di più su tutti gli argomenti degli algoritmi, segui i link nella console Google Cloud e fai riferimento al riferimento per la classificazione delle immagini integrata per ulteriori dettagli.

Invia il job

Nella scheda Impostazioni lavoro:

  1. Inserisci un ID job univoco.
  2. Inserisci una regione disponibile (ad es. "us-central1").
  3. Per selezionare i tipi di macchina, seleziona "PERSONALIZZATO" per il livello di scalabilità. Una sezione per mostrare le specifiche personalizzate del cluster.
    1. Seleziona un tipo di macchina disponibile per Tipo di master.
    2. Se vuoi utilizzare le TPU, imposta il Tipo di worker su cloud_tpu. Il conteggio worker è impostato su 1 per impostazione predefinita.

Fai clic su Fine per inviare il job di addestramento.

gcloud

  1. Imposta le variabili di ambiente per il job:

    PROJECT_ID="YOUR_PROJECT_ID"
    BUCKET_NAME="YOUR_BUCKET_NAME"
    
    # Specify the same region where your data is stored
    REGION="YOUR_REGION"
    
    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    
    # Set Cloud Storage paths to your training and validation data
    # Include a wildcard if you select multiple files.
    TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord"
    VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord"
    
    # Specify the Docker container for your built-in algorithm selection
    IMAGE_URI="gcr.io/cloud-ml-algos/image_classification:latest"
    
    # Variables for constructing descriptive names for JOB_ID and JOB_DIR
    DATASET_NAME="flowers"
    ALGORITHM="image_classification"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}"
    DATE="$(date '+%Y%m%d_%H%M%S')"
    
    # Specify an ID for this job
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Specify the directory where you want your training outputs to be stored
    JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
    
  2. Invia il job:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
    
  3. Una volta inviato correttamente il job, puoi visualizzare i log utilizzando i seguenti comandi gcloud:

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

Passaggi successivi