Addestrare un modello di riconoscimento delle azioni video

Questa pagina mostra come addestrare un modello di riconoscimento delle azioni AutoML da un video utilizzando la console Google Cloud o l'API Vertex AI.

Addestramento di un modello AutoML

Console Google Cloud

  1. Nella console Google Cloud, nella sezione Vertex AI, vai a alla pagina Set di dati.

    Vai alla pagina Set di dati

  2. Fai clic sul nome del set di dati che vuoi utilizzare per addestrare il modello per aprire la relativa pagina dei dettagli.

  3. Fai clic su Addestra nuovo modello.

  4. Inserisci il nome visualizzato per il nuovo modello.

  5. Se vuoi impostare manualmente la suddivisione dei dati di addestramento, espandi Opzioni avanzate e seleziona un'opzione di suddivisione dei dati. Scopri di più.

  6. Fai clic su Continua.

  7. Seleziona il metodo di addestramento del modello.

    • AutoML è una buona scelta per un'ampia gamma di casi d'uso.
    • Seq2seq+ è una buona scelta per la sperimentazione. L'algoritmo tende a convergere più rapidamente diAutoML perché la sua architettura è più semplice e utilizza uno spazio di ricerca più piccolo. I nostri esperimenti hanno dimostrato che Seq2Seq+ ha un buon rendimento con un budget di tempo ridotto e su set di dati di dimensioni inferiori a 1 GB.
    Fai clic su Continua.

  8. Fai clic su Inizia addestramento.

    L'addestramento del modello può richiedere molte ore, a seconda delle dimensioni e della complessità dei dati e del budget di addestramento, se ne hai specificato uno. Puoi chiudere questa scheda e tornarci in un secondo momento. Riceverai un'email quando il modello sarà completato addestramento.

    Alcuni minuti dopo l'inizio dell'addestramento, è possibile controllare stima ora nodo dalle informazioni sulle proprietà del modello. Se annulli la formazione, non ti verrà addebitato alcun costo per il prodotto attuale.

API

REST

Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

  • PROJECT: il tuo ID progetto.
  • LOCATION: regione in cui si trova il set di dati e in cui viene creato il modello. Ad esempio, us-central1.
  • TRAINING_PIPELINE_DISPLAY_NAME: obbligatorio. Un nome visualizzato per la pipeline di addestramento.
  • DATASET_ID: ID per il set di dati di addestramento.
  • TRAINING_FRACTION, TEST_FRACTION: L'oggetto fractionSplit è facoltativo e viene utilizzato per controllare la suddivisione dei dati. Per maggiori informazioni per informazioni su come controllare la suddivisione dati, consulta consulta Informazioni sulle suddivisioni di dati per i modelli AutoML. Ad esempio:
    • {"trainingFraction": "0.8","validationFraction": "0","testFraction": "0.2"}
  • MODEL_DISPLAY_NAME: nome visualizzato del modello addestrato.
  • MODEL_DESCRIPTION: una descrizione del modello.
  • MODEL_LABELS: qualsiasi insieme di coppie chiave-valore per organizzare i modelli. Ad esempio:
    • "env": "prod"
    • "tier": "backend"
  • EDGE_MODEL_TYPE:
    • MOBILE_VERSATILE_1: utilizzo generico
  • PROJECT_NUMBER: il numero di progetto generato automaticamente per il tuo progetto

Metodo HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/beta1/projects/PROJECT/locations/LOCATION/trainingPipelines

Corpo JSON della richiesta:

{
  "displayName": "TRAINING_PIPELINE_DISPLAY_NAME",
  "inputDataConfig": {
    "datasetId": "DATASET_ID",
    "fractionSplit": {
      "trainingFraction": "TRAINING_FRACTION",
      "validationFraction": "0",
      "testFraction": "TEST_FRACTION"
    }
  },
  "modelToUpload": {
    "displayName": "MODEL_DISPLAY_NAME",
    "description": "MODEL_DESCRIPTION",
    "labels": {
      "KEY": "VALUE"
    }
  },
  "trainingTaskDefinition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_object_tracking_1.0.0.yaml",
  "trainingTaskInputs": {
    "modelType": ["EDGE_MODEL_TYPE"],
  }
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json. ed esegui questo comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/beta1/projects/PROJECT/locations/LOCATION/trainingPipelines"

PowerShell

Salva il corpo della richiesta in un file denominato request.json. ed esegui questo comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/beta1/projects/PROJECT/locations/LOCATION/trainingPipelines" | Select-Object -Expand Content

La risposta contiene informazioni sulle specifiche e sulla TRAININGPIPELINE_ID.

Java

Prima di provare questo esempio, segui le istruzioni per la configurazione di Java nel Guida rapida di Vertex AI con librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java di Vertex AI.

Per eseguire l'autenticazione su Vertex AI, configura Credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.

import com.google.cloud.aiplatform.util.ValueConverter;
import com.google.cloud.aiplatform.v1.InputDataConfig;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.Model;
import com.google.cloud.aiplatform.v1.PipelineServiceClient;
import com.google.cloud.aiplatform.v1.PipelineServiceSettings;
import com.google.cloud.aiplatform.v1.TrainingPipeline;
import com.google.cloud.aiplatform.v1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs;
import com.google.cloud.aiplatform.v1.schema.trainingjob.definition.AutoMlVideoActionRecognitionInputs.ModelType;
import java.io.IOException;

public class CreateTrainingPipelineVideoActionRecognitionSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String displayName = "DISPLAY_NAME";
    String datasetId = "DATASET_ID";
    String modelDisplayName = "MODEL_DISPLAY_NAME";
    createTrainingPipelineVideoActionRecognitionSample(
        project, displayName, datasetId, modelDisplayName);
  }

  static void createTrainingPipelineVideoActionRecognitionSample(
      String project, String displayName, String datasetId, String modelDisplayName)
      throws IOException {
    PipelineServiceSettings settings =
        PipelineServiceSettings.newBuilder()
            .setEndpoint("us-central1-aiplatform.googleapis.com:443")
            .build();
    String location = "us-central1";

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (PipelineServiceClient client = PipelineServiceClient.create(settings)) {
      AutoMlVideoActionRecognitionInputs trainingTaskInputs =
          AutoMlVideoActionRecognitionInputs.newBuilder().setModelType(ModelType.CLOUD).build();

      InputDataConfig inputDataConfig =
          InputDataConfig.newBuilder().setDatasetId(datasetId).build();
      Model modelToUpload = Model.newBuilder().setDisplayName(modelDisplayName).build();
      TrainingPipeline trainingPipeline =
          TrainingPipeline.newBuilder()
              .setDisplayName(displayName)
              .setTrainingTaskDefinition(
                  "gs://google-cloud-aiplatform/schema/trainingjob/definition/"
                      + "automl_video_action_recognition_1.0.0.yaml")
              .setTrainingTaskInputs(ValueConverter.toValue(trainingTaskInputs))
              .setInputDataConfig(inputDataConfig)
              .setModelToUpload(modelToUpload)
              .build();
      LocationName parent = LocationName.of(project, location);
      TrainingPipeline response = client.createTrainingPipeline(parent, trainingPipeline);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }
}

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, vedi Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

from google.cloud import aiplatform
from google.cloud.aiplatform.gapic.schema import trainingjob


def create_training_pipeline_video_action_recognition_sample(
    project: str,
    display_name: str,
    dataset_id: str,
    model_display_name: str,
    model_type: str,
    location: str = "us-central1",
    api_endpoint: str = "us-central1-aiplatform.googleapis.com",
):
    # The AI Platform services require regional API endpoints.
    client_options = {"api_endpoint": api_endpoint}
    # Initialize client that will be used to create and send requests.
    # This client only needs to be created once, and can be reused for multiple requests.
    client = aiplatform.gapic.PipelineServiceClient(client_options=client_options)
    training_task_inputs = trainingjob.definition.AutoMlVideoActionRecognitionInputs(
        # modelType can be either 'CLOUD' or 'MOBILE_VERSATILE_1'
        model_type=model_type,
    ).to_value()

    training_pipeline = {
        "display_name": display_name,
        "training_task_definition": "gs://google-cloud-aiplatform/schema/trainingjob/definition/automl_video_action_recognition_1.0.0.yaml",
        "training_task_inputs": training_task_inputs,
        "input_data_config": {"dataset_id": dataset_id},
        "model_to_upload": {"display_name": model_display_name},
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_training_pipeline(
        parent=parent, training_pipeline=training_pipeline
    )
    print("response:", response)

Controlla la suddivisione dei dati utilizzando REST

Puoi controllare la modalità di suddivisione dei dati di addestramento tra i set di addestramento, convalida e test. Quando utilizzi l'API Vertex AI, utilizza Oggetto Split per determinare la suddivisione dei dati. L'oggetto Split può essere incluso nell'oggetto InputConfig come uno di diversi tipi di oggetti, ognuno dei quali offre un modo diverso per suddividere i dati di addestramento. Puoi selezionare un solo metodo.

  • FractionSplit:
    • TRAINING_FRACTION: la frazione dei dati di addestramento da per il set di addestramento.
    • VALIDATION_FRACTION: la frazione dei dati di addestramento da utilizzare per il set di convalida. Non utilizzato per i dati video.
    • TEST_FRACTION: la frazione dei dati di addestramento da utilizzare per il set di test.

    Se viene specificata una delle frazioni, devono essere specificate tutte. La somma delle frazioni deve essere pari a 1,0. La valori predefiniti per le frazioni variano a seconda del tipo di dati. Scopri di più.

    "fractionSplit": {
      "trainingFraction": TRAINING_FRACTION,
      "validationFraction": VALIDATION_FRACTION,
      "testFraction": TEST_FRACTION
    },
    
  • FilterSplit:
    • TRAINING_FILTER: vengono utilizzati i dati che corrispondono a questo filtro per il set di addestramento.
    • VALIDATION_FILTER: gli elementi di dati che corrispondono a questo filtro sono utilizzato per il set di convalida. Deve essere "-" per i dati video.
    • TEST_FILTER: gli elementi di dati che corrispondono a questo filtro vengono utilizzati per il set di test.

    Questi filtri possono essere utilizzati con l'etichetta ml_use o con qualsiasi etichetta applicata ai dati. Scopri di più sull'utilizzo l'etichetta ml-use e altre etichette per filtrare i dati.

    L'esempio seguente mostra come utilizzare l'oggetto filterSplit con l'etichetta ml_use, con il set di convalida incluso:

    "filterSplit": {
    "trainingFilter": "labels.aiplatform.googleapis.com/ml_use=training",
    "validationFilter": "labels.aiplatform.googleapis.com/ml_use=validation",
    "testFilter": "labels.aiplatform.googleapis.com/ml_use=test"
    }