L'addestramento con gli algoritmi integrati in AI Platform Training ti consente di inviare il tuo set di dati e addestrare un modello senza scrivere alcun codice di addestramento. Questa pagina spiega come funziona l'algoritmo di rilevamento di oggetti immagine integrato e come utilizzarlo.
Panoramica
L'algoritmo di rilevamento di oggetti immagine integrato utilizza i set di dati di addestramento e convalida per addestrare i modelli in modo continuo e poi genera l'output del SavedModel più accurato generato durante il job di addestramento. Puoi anche utilizzare l'ottimizzazione degli iperparametri per ottenere la massima accuratezza del modello. Il SavedModel esportato può essere utilizzato direttamente per la previsione, localmente o di cui è stato eseguito il deployment in AI Platform Prediction per il servizio di produzione.
Limitazioni
Gli algoritmi integrati di Image supportano l'addestramento con singole CPU, GPU o TPU. Il SavedModel risultante è compatibile con la pubblicazione su CPU e GPU.
Le seguenti funzionalità non sono supportate per l'addestramento con l'algoritmo di rilevamento di oggetti immagine integrato:
- Addestramento distribuito. Per eseguire un job di addestramento distribuito TensorFlow su AI Platform Training, devi creare un'applicazione di addestramento.
- Addestramento multi-GPU. Gli algoritmi integrati utilizzano una sola GPU alla volta. Per sfruttare al meglio l'addestramento con più GPU su una macchina, devi creare un'applicazione di addestramento. Trova ulteriori informazioni sui tipi di macchine.
Tipi di macchine supportati
I seguenti livelli di scalabilità e tipi di macchine di AI Platform Training sono supportati:
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 Cloud TPU ad accedere al tuo progetto
Segui questi passaggi per autorizzare il nome dell'account di servizio Cloud TPU associato al tuo progetto Google Cloud:
Ottieni il nome dell'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
Salva il valore del campo
serviceAccountProject
etpuServiceAccount
restituito dall'API.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
- Accedi alla console Google Cloud e scegli il progetto in cui utilizzi la TPU.
- Scegli IAM e amministrazione > IAM.
- Fai clic sul pulsante Aggiungi per aggiungere un membro al progetto.
- Inserisci l'account di servizio TPU nella casella di testo Membri.
- Fai clic sull'elenco a discesa Ruoli.
- Attiva il ruolo Agente di servizio Cloud ML (Agenti di servizio > Agente di servizio Cloud ML).
gcloud
Imposta le variabili di ambiente contenenti l'ID progetto e l'account di servizio Cloud TPU:
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Concedi il ruolo
ml.serviceAgent
all'account di 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 di IAM.
Formatta i dati di input per l'addestramento
L'algoritmo di rilevamento di oggetti immagine integrato richiede che i dati di input siano formattati come tf.Examples
e salvati in file TFRecord. La struttura di dati tf.Example
e il formato del file TFRecord sono entrambi progettati per una lettura efficiente dei dati con TensorFlow.
Il formato TFRecord è un formato semplice per archiviare una sequenza di record binari.
In questo caso, tutti i record contengono rappresentazioni binarie delle immagini. Ogni
immagine, insieme alle relative etichette di classe, è rappresentata come tf.Example
. Puoi
salvare molti tf.Example
in un unico file TFRecord. Puoi anche suddividere un set di dati di grandi dimensioni in più file TFRecord.
Scopri di più su TFRecord e tf.Example
.
Converti le immagini in TFRecord
Per convertire le immagini nel formato richiesto per ottenere le previsioni, segui la guida di TensorFlow Model Garden per la preparazione degli input per il rilevamento di oggetti.
Controllare le autorizzazioni dei bucket Cloud Storage
Per archiviare i dati, utilizza un bucket Cloud Storage nello stesso progetto Google Cloud che utilizzi per eseguire i job di AI Platform Training. In caso contrario, concedi l'accesso ad AI Platform Training al bucket Cloud Storage in cui sono archiviati i tuoi dati.
Formato di input obbligatorio
Per l'addestramento con l'algoritmo di rilevamento di oggetti immagine integrato, i dati delle immagini devono essere strutturati come tf.Example
che includono i seguenti campi:
image/encoded
è l'immagine non elaborata codificata come stringa.image/object/class/label
è un elenco di etichette con numeri interi per l'immagine corrispondente (un'etichetta per casella).L'insieme di etichette intere utilizzato per il set di dati deve essere una sequenza consecutiva che inizia da
1
. Ad esempio, se il set di dati contiene cinque classi, ogni etichetta deve essere un numero intero nell'intervallo[1, 5]
.image/object/bbox/xmin
è un elenco di coordinate x sinistra normalizzate per l'immagine corrispondente (una coordinata per casella). Ogni coordinata deve trovarsi nell'intervallo[0, 1]
.image/object/bbox/xmax
è un elenco di coordinate x destre normalizzate per l'immagine corrispondente (una coordinata per casella). Ogni coordinata deve trovarsi nell'intervallo[0, 1]
.image/object/bbox/ymin
è un elenco di coordinate Y superiori normalizzate per l'immagine corrispondente (una coordinata per casella). Ogni coordinata deve trovarsi nell'intervallo[0, 1]
.image/object/bbox/ymax
è un elenco di coordinate y inferiori normalizzate per l'immagine corrispondente (una coordinata per casella). Ogni coordinata deve trovarsi nell'intervallo[0, 1]
.
L'esempio seguente mostra la struttura di un tf.Example
per un'immagine contenente due riquadri di delimitazione. La prima casella ha l'etichetta 1
, il suo angolo in alto a sinistra è alle coordinate normalizzate (0.1, 0.4)
e il suo angolo in basso a destra è alle coordinate normalizzate (0.5, 0.8)
. La seconda casella ha l'etichetta 2
, il suo angolo in alto a sinistra si trova alle coordinate normalizzate (0.3, 0.5)
e il suo angolo in basso a destra si trova alle coordinate normalizzate (0.4, 0.7)
.
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
Questo formato tf.Example
segue lo stesso utilizzato nello
script di rilevamento oggetti TFRecord.
Ottenere il miglior SavedModel come output
Al termine del job di addestramento, AI Platform Training scrive un modello SavedModel di TensorFlow nel
bucket Cloud Storage specificato come jobDir
quando hai inviato il job. Il file SavedModel viene scritto in jobDir/model
. Ad esempio, se invii il job a gs://your-bucket-name/your-job-dir
, AI Platform Training scrive il modello SavedModel in gs://your-bucket-name/your-job-dir/model
.
Se hai attivato l'ottimizzazione degli iperparametri, AI Platform Training restituisce il modello salvato di TensorFlow con la massima accuratezza raggiunta durante il processo di addestramento. Ad esempio, se hai inviato un job di addestramento con 2500 passaggi di addestramento e la precisione è stata massima a 2000 passaggi, ottieni un SavedModel di TensorFlow salvato da quel determinato punto.
Ogni prova di AI Platform Training scrive il modello TensorFlow SavedModel con la massima precisione nella propria directory all'interno del bucket Cloud Storage. Ad
esempio,
gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
La firma del SavedModel di output è:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
Input:
encoded_image
: i byte dell'immagine non elaborata (non decodificata). È lo stesso valore diimage/encoded
memorizzato in tf.Example.key
: l'identificatore del valore di stringa dell'input di previsione. Questo valore viene trasmesso all'outputkey
. Nelle previsioni batch, questo aiuta a mappare l'output della previsione all'input.
Output:
num_detections
: il numero di riquadri di delimitazione rilevati.detection_boxes
: un elenco di coordinate relative (valore in [0,1
]) ([ymin, xmin, ymax, xmax
]) dei rettangoli delimitanti di rilevamento.detection_classes
: un elenco di etichette di classi (interi) previste per ogni riquadro di rilevamento indetection_boxes
.detection_scores
: un elenco discores
per ogni casella di rilevamento indetection_boxes
.key
: la chiave di output.
Di seguito è riportato un esempio di output di previsione:
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
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 devi 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:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Successivamente, utilizza il file config.yaml
per inviare un job di addestramento.
Configurazione dell'ottimizzazione degli iperparametri
Per utilizzare l'ottimizzazione degli iperparametri, includi la relativa configurazione nello stesso file config.yaml
della configurazione della macchina.
Puoi trovare brevi spiegazioni di ciascun iperparametro nella console Google Cloud e una spiegazione più completa nel riferimento per l'algoritmo di rilevamento di oggetti immagine integrato.
Il seguente file config.yaml
di esempio mostra come allocare le risorse TPU per il tuo 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-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
Invia un job di addestramento per il rilevamento di oggetti immagine
Questa sezione spiega come inviare un job di addestramento utilizzando l'algoritmo di rilevamento di oggetti immagine integrato.
Console
Seleziona l'algoritmo
Vai alla pagina Job di addestramento della piattaforma AI nella console Google Cloud:
Fai clic sul pulsante Nuovo job di addestramento. Dalle opzioni visualizzate di seguito, fai clic su Addestramento con algoritmi integrati.
Nella pagina Crea un nuovo job di addestramento, seleziona Rilevamento di oggetti nelle immagini e fai clic su Avanti.
Seleziona i dati di addestramento e convalida
Nel menu a discesa in Dati di addestramento, specifica se utilizzi un singolo file o più file:
- Per un singolo file, lascia selezionata l'opzione "Utilizza un unico file in un bucket GCS".
- Per più file, seleziona "Usa più file archiviati in una directory di Cloud Storage".
In 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 selezioni più file, inserisci i caratteri jolly in Nome jolly. Di seguito viene visualizzato il "Percorso GCS completo" per aiutarti a verificare che il percorso sia corretto.
Nella casella a discesa in Dati di convalida, specifica se utilizzi un singolo file o più file:
- Per un singolo file, lascia selezionata l'opzione "Utilizza un unico file in un bucket GCS".
- Per più file, seleziona "Usa più file archiviati in una directory di Cloud Storage".
In 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 selezioni più file, inserisci i caratteri jolly in Nome jolly. Di seguito viene visualizzato il "Percorso GCS completo" per aiutarti a verificare che il percorso sia corretto.
In Directory di output, inserisci il percorso del bucket Cloud Storage in cui vuoi che AI Platform Training archivi gli output del job di addestramento. Puoi inserire direttamente il percorso del bucket Cloud Storage o fare clic sul pulsante Sfoglia per selezionarlo.
Per mantenere tutto in ordine, crea una nuova directory all'interno del bucket Cloud Storage per questo job di addestramento. Puoi farlo nel riquadro Sfoglia.
Fai clic su Avanti.
Imposta gli argomenti dell'algoritmo
Ogni argomento specifico dell'algoritmo mostra un valore predefinito per i job di addestramento senza ottimizzazione degli iperparametri. Se attivi l'ottimizzazione degli iperparametri su un argomento dell'algoritmo, devi specificarne il valore minimo e massimo.
Per saperne di più su tutti gli argomenti dell'algoritmo, segui i link nella console Google Cloud e consulta il riferimento per il rilevamento di oggetti immagine integrato per ulteriori dettagli.
Invia il job
Nella scheda Impostazioni job:
- Inserisci un ID job univoco.
- Inserisci una regione disponibile (ad esempio "us-central1").
- Per selezionare i tipi di macchine, seleziona "PERSONALIZZATO" per il livello di scalabilità.
Viene visualizzata una sezione per fornire la specifica del cluster personalizzato.
- Seleziona un tipo di macchina disponibile per Tipo master.
- Se vuoi utilizzare le TPU, imposta Tipo di worker su cloud_tpu. Il conteggio dei worker è impostato su 1 per impostazione predefinita.
Fai clic su Fine per inviare il job di addestramento.
gcloud
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_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" 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}"
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=22500 \ --num_classes=90 \ --warmup_steps=500 \ --initial_learning_rate=0.08 \ --fpn_type="nasfpn" \ --aug_scale_min=0.8 \ --aug_scale_max=1.2
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
Passaggi successivi
- Scopri come utilizzare il tuo set di dati con lo script di rilevamento degli oggetti TFRecord.
- Consulta il riferimento al rilevamento di oggetti nelle immagini integrato per scoprire tutti i diversi parametri.