L'addestramento con algoritmi integrati su AI Platform Training ti consente di inviare il set di dati e addestra un modello senza scrivere codice di addestramento. Questa pagina spiega come funziona l'algoritmo integrato di rilevamento degli oggetti immagine e come utilizzarlo.
Panoramica
L'algoritmo integrato di rilevamento degli oggetti immagine utilizza i set di dati di addestramento e convalida per addestrare i modelli continuamente, quindi genera il SavedModel più accurato generati durante il corso del job di addestramento. Puoi anche usare un iperparametro dell'ottimizzazione per ottenere la migliore accuratezza del modello. È possibile usare il modulo SavedModel esportato direttamente per la previsione, in locale o con deployment in AI Platform Prediction per un servizio di produzione.
Limitazioni
Gli algoritmi integrati nelle immagini supportano l'addestramento con CPU, GPU o TPU singole. La SavedModel risultante è compatibile con la pubblicazione su CPU e GPU.
Le seguenti funzionalità non sono supportate per l'addestramento con la algoritmo di rilevamento di oggetti immagine:
- Addestramento distribuito. A esegui 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. A sfruttare appieno l'addestramento con più GPU su una macchina, per creare un'applicazione di addestramento. Trova ulteriori informazioni sui tipi di macchina.
Tipi di macchine supportati
I seguenti livelli di scalabilità di AI Platform Training e :
- Livello di scalabilità
BASIC
- Livello di scalabilità
BASIC_TPU
- Livello di scalabilità
CUSTOM
con uno qualsiasi dei tipi di macchine di Compute Engine supportata da AI Platform Training. - Livello di scalabilità
CUSTOM
con una delle seguenti macchine legacy tipi: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 tuo progetto
Segui questi passaggi per autorizzare il nome dell'account di servizio Cloud TPU associati al tuo progetto Google Cloud:
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
Salva il valore dei campi
serviceAccountProject
etpuServiceAccount
restituiti 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 Amministratore > 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.
- Abilita 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 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
al servizio Cloud TPU :gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Per ulteriori dettagli sulla concessione dei ruoli agli account di servizio, consulta le documentazione IAM.
Formatta i dati di input per l'addestramento
L'algoritmo di rilevamento degli oggetti immagine integrato richiede la formattazione dei dati di input
come tf.Examples
, salvato nei file TFRecord. La struttura dei dati tf.Example
e
Entrambi i formati file TFRecord sono 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. Ciascuna
dell'immagine, insieme alle etichette della classe, è rappresentata come tf.Example
. Puoi
salvare molti tf.Example
in un unico file TFRecord. Puoi anche eseguire lo sharding
tra 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 previsioni, segui le Guida di TensorFlow Model Garden preparare gli input per il rilevamento degli oggetti.
Controlla le autorizzazioni del bucket Cloud Storage
Per archiviare i dati, utilizza un bucket Cloud Storage nello stesso Google Cloud progetto che stai utilizzando per eseguire job di AI Platform Training. Altrimenti, concedere ad AI Platform Training l'accesso al bucket Cloud Storage in cui sono archiviati i tuoi dati.
Formato di input richiesto
Per eseguire l'addestramento con l'algoritmo di rilevamento degli oggetti immagine integrato, i dati immagine 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 di numeri interi per l'attributo corrispondente immagine (un'etichetta per scatola).L'insieme di etichette di numeri interi utilizzate per il set di dati deve essere una sequenza consecutiva a partire da
1
. Ad esempio, se il set di dati ha cinque classi, l'etichetta deve essere un numero intero compreso nell'intervallo[1, 5]
.image/object/bbox/xmin
è un elenco di coordinate x a sinistra normalizzate per il immagine corrispondente (una coordinata per riquadro). Ogni coordinata deve essere intervallo[0, 1]
.image/object/bbox/xmax
è un elenco di coordinate x normalizzate per il immagine corrispondente (una coordinata per riquadro). Ogni coordinata deve essere intervallo[0, 1]
.image/object/bbox/ymin
è un elenco di coordinate Y normalizzate per il immagine corrispondente (una coordinata per riquadro). Ogni coordinata deve essere intervallo[0, 1]
.image/object/bbox/ymax
è un elenco di coordinate Y in basso normalizzate per il immagine corrispondente (una coordinata per riquadro). Ogni coordinata deve essere intervallo[0, 1]
.
L'esempio seguente mostra la struttura di un tf.Example
per un'immagine
contenente due riquadri di delimitazione. Il primo riquadro ha l'etichetta 1
, in alto a sinistra
angolo si trova nelle coordinate normalizzate (0.1, 0.4)
e l'angolo in basso a destra
angolo si trova alle coordinate normalizzate (0.5, 0.8)
. La seconda casella contiene
etichetta 2
, il suo angolo in alto a sinistra si trova nelle coordinate normalizzate (0.3, 0.5)
,
e il suo angolo in basso a destra si trova nelle 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]
}
Il formato tf.Example
segue lo stesso utilizzato in
Script di rilevamento degli oggetti TFRecord.
Ottenere il miglior SavedModel come output
Al termine del job di addestramento, AI Platform Training scrive un SavedModel di TensorFlow in
il bucket Cloud Storage specificato come jobDir
al momento dell'invio
il job. Il SavedModel è scritto in jobDir/model
. Ad esempio, se
invia il job a gs://your-bucket-name/your-job-dir
, dopodiché 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 TensorFlow SavedModel con la massima precisione raggiunta durante il processo di addestramento. Per Ad esempio, se hai inviato un job di addestramento con 2500 passaggi di addestramento la precisione è stata massima: 2000 passi, viene salvato quel particolare punto.
Ogni prova di AI Platform Training scrive il SavedModel di TensorFlow con il
la precisione della directory all'interno del bucket Cloud Storage. Per
un 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
: byte dell'immagine non elaborati (non decodificati). Equivale aimage/encoded
archiviati in tf.Example.key
: l'identificatore del valore della stringa dell'input della previsione. Questo valore è trasmesso all'outputkey
. Nella previsione 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 riquadri di delimitazione del rilevamento.detection_classes
: un elenco di etichette di classe (numero intero) previste per ogni 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
nella console Google Cloud, non devi creare questo file. Impara
come inviare un job di formazione.
Il file config.yaml
di esempio seguente mostra come allocare le risorse TPU
per il tuo 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
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 tua configurazione di ottimizzazione degli iperparametri
nello stesso file config.yaml
della configurazione della macchina.
Puoi trovare brevi spiegazioni di ogni iperparametro all'interno console Google Cloud e una spiegazione più completa nel riferimento per l'algoritmo di rilevamento di oggetti immagine 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-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 di rilevamento degli oggetti immagine.
Console
Seleziona l'algoritmo
Vai alla pagina dei job di addestramento su AI Platform 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 immagine e fai clic su Avanti.
Seleziona i dati di addestramento e convalida
Nella casella a discesa in Dati di addestramento, specifica se utilizzi uno o più file:
- Per un singolo file, lascia "Utilizza singolo file in un bucket GCS" selezionato.
- Per più file, seleziona "Utilizza più file archiviati in uno nella directory 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 carattere jolly. Il "Percorso GCS completo" viene visualizzato sotto per verificare che il percorso sia corretto.
Nella casella a discesa in Dati di convalida, specifica se utilizzi uno o più file:
- Per un singolo file, lascia "Utilizza singolo file in un bucket GCS" selezionato.
- Per più file, seleziona "Utilizza più file archiviati in uno nella directory 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 carattere jolly. Il "Percorso GCS completo" viene visualizzato sotto per 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 un lavoro di addestramento lungo. Puoi compilare direttamente il percorso del bucket Cloud Storage, o fai clic sul pulsante Sfoglia per selezionarla.
Per tenere tutto in ordine, crea una nuova directory all'interno Bucket Cloud Storage per questo job di addestramento. Puoi farlo all'interno Riquadro Sfoglia.
Fai clic su Avanti.
Impostare gli argomenti dell'algoritmo
Ogni argomento specifico dell'algoritmo mostra un valore predefinito per l'addestramento di job senza ottimizzazione degli iperparametri. Se abiliti l'ottimizzazione degli iperparametri su un argomento dell'algoritmo, devi specificare il valore minimo e massimo valore.
Per scoprire di più su tutti gli argomenti dell'algoritmo, segui i link in alla console Google Cloud e consulta le Riferimento per il rilevamento di oggetti immagine integrati per ulteriori dettagli.
Invia il job
Nella scheda Impostazioni job:
- Inserisci un ID job univoco.
- Inserisci un'regione disponibile (ad es. "us-central1").
- 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.
- Seleziona un tipo di macchina disponibile per Tipo principale.
- Se vuoi utilizzare le TPU, imposta il Tipo di worker su cloud_tpu. Il conteggio dei worker è impostato in modo predefinito su 1.
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 l'articolo Riferimento per il rilevamento di oggetti immagine integrati per conoscere tutti i diversi parametri.