Modelle verwalten

Sie erstellen ein benutzerdefiniertes Modell. Dazu trainieren Sie es mithilfe eines vorbereiteten Datasets. AutoML Video Intelligence verwendet die Elemente aus dem Dataset, um das Modell zu trainieren, zu testen und seine Leistung zu bewerten. Sie überprüfen die Ergebnisse, passen das Trainings-Dataset nach Bedarf an und trainieren ein neues Modell mithilfe des verbesserten Datasets.

Das Trainieren eines Modells kann mehrere Stunden dauern. Mit der AutoML API haben Sie die Möglichkeit, den Status des Trainings zu überprüfen.

AutoML Video Intelligence erstellt jedes Mal ein neues Modell, wenn Sie mit dem Training beginnen. Daher kann das Projekt zahlreiche Modelle enthalten. Sie können eine Liste der verfügbaren Modelle in Ihrem Projekt abrufen und nicht mehr benötigte Modelle löschen.

Ein benutzerdefiniertes Modell hat eine Lebensdauer von höchstens zwei Jahren. Nach diesem Zeitraum müssen Sie ein neues Modell erstellen und trainieren, um den Inhalt weiterhin klassifizieren zu können.

cURL verwenden

Legen Sie die folgende Umgebungsvariable fest, um das Ausführen der curl-Beispiele in diesem Thema zu vereinfachen. Ersetzen Sie project-id durch den Namen Ihres GCP-Projekts.

export PROJECT_ID="project-id"

Modelle trainieren

Wenn Sie ein Dataset mit einer soliden Anzahl von Trainingselementen mit Label haben, können Sie das benutzerdefinierte Modell erstellen und trainieren.

Web-UI

  1. Öffnen Sie die AutoML Video-UI und rufen Sie die Seite Datasets auf.

    Seite "Datasets" in der Google Cloud Console
  2. Wählen Sie das Dataset aus, das Sie zum Trainieren des benutzerdefinierten Modells verwenden möchten.

    Der Anzeigename des ausgewählten Datasets wird in der Titelleiste angezeigt. Die einzelnen Elemente im Dataset werden zusammen mit ihren Labels aufgelistet.

    Tab "Videos" mit zwei Videos
  3. Nachdem Sie die Datasets überprüft haben, klicken Sie unterhalb der Titelleiste auf den Tab Trainieren.

    Auf der Seite "Training" können Sie eine grundlegende Analyse des Datasets ausführen. Hier finden Sie auch Informationen darüber, ob das Dataset für das Training geeignet ist. Wenn AutoML Video Änderungen vorschlägt, können Sie auf die Seite Videos zurückkehren und Elemente oder Labels angeben.

  4. Wenn das Dataset fertig ist, klicken Sie auf Training starten, um ein neues Modell zu erstellen. Sie können auch auf Neues Modell trainieren klicken, wenn Sie ein zusätzliches Modell erstellen möchten.

Befehlszeile

  • Ersetzen Sie dataset-id durch die ID Ihres Datasets. Die ID ist das letzte Element des Dataset-Namens. Wenn der Name des Datasets beispielsweise projects/434039606874/locations/us-central1/datasets/3104518874390609379 lautet, ist die ID des Datasets 3104518874390609379.
curl -X POST \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models \
  -d '{
    "displayName": "test_model",
    "dataset_id": "dataset-id",
    "videoClassificationModelMetadata": {},
  }'

Der Dienst gibt in etwa folgende Antwort zurück:

{
  "name": "projects/434039606874/locations/us-central1/operations/1979469554520652445",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-04-27T01:28:41.338120Z",
    "updateTime": "2018-04-27T01:28:41.338120Z",
  }
}

Sie können den Status einer lang andauernden Aufgabe anhand der Vorgangs-ID aus der Antwort zu Beginn der Aufgabe überprüfen.

Der Status eines Vorgangs kann nur mithilfe der AutoML API überprüft werden.

Ersetzen Sie im folgenden Befehl operation-name durch den vollständigen Namen des Vorgangs. Der vollständige Name hat das Format projects/{project-id}/locations/us-central1/operations/{operation-id}.

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/operation-name

Die Ausgabe des Importvorgangs sieht in etwa so aus:

{
  "name": "projects/434039606874/locations/us-central1/operations/VCN2116326435840390257",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "progressPercentage": 100,
    "partialFailures": [
      {
        "code": 7,
        "message": "Duplicated files detected gs://my-project-lcm/training-data/astros.txt
        and gs://my-project-lcm/training-data/cubs.txt have the same content"
      },
    ],
    "createTime": "2018-04-27T01:39:59.821460Z",
    "updateTime": "2018-04-27T01:43:09.564770Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

Die Ausgabe des Vorgangs zum Erstellen eines Modells sieht in etwa so aus:

{
  "name": "projects/434039606874/locations/us-central1/operations/VCN2126599795587061786",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "progressPercentage": 100,
    "createTime": "2018-04-27T01:56:28.395640Z",
    "updateTime": "2018-04-27T02:04:12.336070Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.Model",
    "name": "projects/434039606874/locations/us-central1/models/VCN3745331181667467569",
    "createTime": "2018-04-27T02:00:22.329970Z",
    "videoClassificationModelMetadata": {
      "trainBudget": "1",
      "trainCost": "1",
      "stopReason": "BUDGET_REACHED"
    },
    "displayName": "a_98487760535e48319dd204e6394670"
  }
}

Java

/**
 * Demonstrates using the AutoML client to create a model.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name. (e.g., "us-central1")
 * @param datasetId the Id of the dataset to which model is created.
 * @param modelName the name of the model.
 * @throws IOException
 * @throws ExecutionException
 * @throws InterruptedException
 */
public static void createModel(
    String projectId, String computeRegion, String datasetId, String modelName)
    throws IOException, InterruptedException, ExecutionException {
  // Instantiates a client
  AutoMlClient client = AutoMlClient.create();

  // A resource that represents Google Cloud Platform location.
  LocationName projectLocation = LocationName.of(projectId, computeRegion);

  // Set model meta data
  VideoClassificationModelMetadata videoClassificationModelMetadata =
      VideoClassificationModelMetadata.newBuilder().build();

  // Set model name, dataset and metadata.
  Model myModel =
      Model.newBuilder()
          .setDisplayName(modelName)
          .setDatasetId(datasetId)
          .setVideoClassificationModelMetadata(videoClassificationModelMetadata)
          .build();

  // Create a model with the model metadata in the region.
  OperationFuture<Model, OperationMetadata> response =
      client.createModelAsync(projectLocation, myModel);

  System.out.println(
      String.format("Training operation name: %s", response.getInitialFuture().get().getName()));
  System.out.println("Training started...");
}

Node.js

const automl = require(`@google-cloud/automl`);
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to create a model.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const datasetId = '[DATASET_ID]' e.g., "VCN7209576908164431872";
// const modelName = '[MODEL_NAME]' e.g., "myModel";

// A resource that represents Google Cloud Platform location.
const projectLocation = client.locationPath(projectId, computeRegion);

// Set datasetId, model name and model metadata for the dataset.
const myModel = {
  displayName: modelName,
  datasetId: datasetId,
  videoClassificationModelMetadata: {},
};

// Create a model with the model metadata in the region.
client
  .createModel({parent: projectLocation, model: myModel})
  .then(responses => {
    const initialApiResponse = responses[1];
    console.log(`Training operation name: ${initialApiResponse.name}`);
    console.log(`Training started...`);
  })
  .catch(err => {
    console.error(err);
  });

Python

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# dataset_id = 'DATASET_ID_HERE'
# model_name = 'MODEL_NAME_HERE'

from google.cloud import automl_v1beta1 as automl

client = automl.AutoMlClient()

# A resource that represents Google Cloud Platform location.
project_location = client.location_path(project_id, compute_region)

# Set model name and model metadata for the image dataset.
my_model = {
    "display_name": model_name,
    "dataset_id": dataset_id,
    "video_classification_model_metadata": {}
}

# Create a model with the model metadata in the region.
response = client.create_model(project_location, my_model)

print("Training operation name: {}".format(response.operation.name))
print("Training started...")

Informationen zu einem Modell abrufen

Wenn das Training abgeschlossen ist, können Sie Informationen zu dem neu erstellten Modell abrufen.

Die Beispiele in diesem Abschnitt geben die grundlegenden Metadaten zu einem Modell zurück. Weitere Informationen zur Genauigkeit und Bereitschaft eines Modells finden Sie unter Modelle bewerten.

Web-UI

  1. Rufen Sie in der AutoML Video-UI die Seite Models (Modelle) auf.

    Seite "Modelle" mit einem Modell
  2. Klicken Sie auf den Namen des Modells, das Sie anzeigen möchten.

Befehlszeile

* Ersetzen Sie model-name durch den vollständigen Namen des Modells. Diesen finden Sie in der Antwort, die Sie beim Erstellen des Modells erhalten haben. Der vollständige Name hat folgendes Format: projects/{project-id}/locations/us-central1/models/{model-id}
curl -X GET \
  -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
  -H "Content-Type: application/json" \
  https://automl.googleapis.com/v1beta1/model-name

Die Ausgabe sollte in etwa so aussehen:

{
  "name": "projects/915378992997/locations/us-central1/models/VCN2004101834179870720",
  "displayName": "my_model_01",
  "datasetId": "VCN3940649673949184000",
  "createTime": "2018-10-19T17:18:45.320701Z",
  "updateTime": "2018-10-19T17:18:45.320701Z",
  "videoClassificationModelMetadata": {}
}

Java

/**
 * Demonstrates using the AutoML client to get model details.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name. (e.g., "us-central1")
 * @param modelId the Id of the model.
 * @throws IOException
 */
public static void getModel(String projectId, String computeRegion, String modelId)
    throws IOException {
  // Instantiates a client
  AutoMlClient client = AutoMlClient.create();

  // Get the full path of the model.
  ModelName modelFullId = ModelName.of(projectId, computeRegion, modelId);

  // Get complete detail of the model.
  Model model = client.getModel(modelFullId);

  // Display the model information.
  System.out.println(String.format("Model name: %s", model.getName()));
  System.out.println(
      String.format(
          "Model Id: %s", model.getName().split("/")[model.getName().split("/").length - 1]));
  System.out.println(String.format("Model display name: %s", model.getDisplayName()));
  System.out.println(String.format("Dataset Id: %s", model.getDatasetId()));
  System.out.println(
      String.format(
          "VideoClassificationModelMetadata: %s", model.getVideoClassificationModelMetadata()));
  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
  String createTime =
      dateFormat.format(new java.util.Date(model.getCreateTime().getSeconds() * 1000));
  System.out.println(String.format("Model create time: %s", createTime));
  String updateTime =
  		dateFormat.format(new java.util.Date(model.getUpdateTime().getSeconds() * 1000));
  System.out.println(String.format("Model update time: %s", updateTime));
  System.out.println(String.format("Model deployment state: %s", model.getDeploymentState()));
}

Node.js

const automl = require(`@google-cloud/automl`);
const util = require(`util`);
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to get model details.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const modelId = '[MODEL_ID]' e.g., "VCN7209576908164431872";

// Get the full path of the model.
const modelFullId = client.modelPath(projectId, computeRegion, modelId);

// Get complete detail of the model.
client
  .getModel({name: modelFullId})
  .then(responses => {
    const model = responses[0];

    // Display the model information.
    console.log(`Model name: ${model.name}`);
    console.log(`Model Id: ${model.name.split(`/`).pop(-1)}`);
    console.log(`Model display name: ${model.displayName}`);
    console.log(`Dataset Id: ${model.datasetId}`);

    if (model.modelMetadata === `videoClassificationModelMetadata`) {
      console.log(
        `Video Classification Model Metadata: ${util.inspect(
          model.videoClassificationModelMetadata,
          false,
          null
        )}`
      );
    }
    console.log(`Model deployment state: ${model.deploymentState}`);
  })
  .catch(err => {
    console.error(err);
  });

Python

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# model_id = 'MODEL_ID_HERE'

from google.cloud import automl_v1beta1 as automl

client = automl.AutoMlClient()

# Get the full path of the model.
model_full_id = client.model_path(project_id, compute_region, model_id)

# Get complete detail of the model.
model = client.get_model(model_full_id)

# Display the model information.
print("Model name: {}".format(model.name))
print("Model id: {}".format(model.name.split("/")[-1]))
print("Model display name: {}".format(model.display_name))
print("Model create time:")
print("\tseconds: {}".format(model.create_time.seconds))
print("\tnanos: {}".format(model.create_time.nanos))

Modelle auflisten

Ein Projekt kann zahlreiche Modelle enthalten. In diesem Abschnitt wird beschrieben, wie Sie eine Liste der verfügbaren Modelle für ein Projekt abrufen können.

Web-UI

Gehen Sie in der AutoML Video-UI zur Seite Models (Modelle), um die Modelle in Ihrem Projekt einzusehen.

Seite "Modelle" mit einem Modell in der Liste

Wenn Sie die Modelle für ein anderes Projekt anzeigen möchten, wählen Sie das Projekt in der Drop-down-Liste oben rechts in der Titelleiste aus.

Befehlszeile

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth application-default  \
print-access-token)" \
  -H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/models

Die Ausgabe sollte in etwa so aussehen:

{
  "model": [
    {
      "name": "projects/915378992997/locations/us-central1/models/VCN2004101834179870720",
      "displayName": "my_model_01",
      "datasetId": "VCN3940649673949184000",
      "createTime": "2018-10-19T17:18:45.320701Z",
      "updateTime": "2018-10-19T17:18:45.320701Z",
      "videoClassificationModelMetadata": {}
    }
  ]
}

Java

/**
 * Demonstrates using the AutoML client to list all models.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name. (e.g., "us-central1")
 * @param filter the filter expression.
 * @throws IOException
 */
public static void listModels(String projectId, String computeRegion, String filter)
    throws IOException {
  // Instantiates a client
  AutoMlClient client = AutoMlClient.create();

  // A resource that represents Google Cloud Platform location.
  LocationName projectLocation = LocationName.of(projectId, computeRegion);

  // Create list models request.
  ListModelsRequest listModelsRequest =
      ListModelsRequest.newBuilder()
          .setParent(projectLocation.toString())
          .setFilter(filter)
          .build();

  // List all the models available in the region by applying filter.
  System.out.println("List of models:");
  for (Model model : client.listModels(listModelsRequest).iterateAll()) {
    // Display the model information.
    System.out.println(String.format("\nModel name: %s", model.getName()));
    System.out.println(
        String.format(
            "Model Id: %s", model.getName().split("/")[model.getName().split("/").length - 1]));
    System.out.println(String.format("Model display name: %s", model.getDisplayName()));
    System.out.println(String.format("Dataset Id: %s", model.getDatasetId()));
    System.out.println(
        String.format(
            "VideoClassificationModelMetadata: %s", model.getVideoClassificationModelMetadata()));
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    String createTime =
        dateFormat.format(new java.util.Date(model.getCreateTime().getSeconds() * 1000));
    System.out.println(String.format("Model create time: %s", createTime));
    String updateTime =
  		  dateFormat.format(new java.util.Date(model.getUpdateTime().getSeconds() * 1000));
    System.out.println(String.format("Model update time: %s", updateTime));
    System.out.println(String.format("Model deployment state: %s", model.getDeploymentState()));
  }
}

Node.js

const automl = require(`@google-cloud/automl`);
const util = require(`util`);
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to list all models.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const filter_ = '[FILTER_EXPRESSIONS]'
// e.g., "videoClassificationModelMetadata:*";

// A resource that represents Google Cloud Platform location.
const projectLocation = client.locationPath(projectId, computeRegion);

// List all the models available in the region by applying filter.
client
  .listModels({parent: projectLocation, filter: filter})
  .then(responses => {
    const model = responses[0];

    // Display the model information.
    console.log(`List of models:`);
    for (let i = 0; i < model.length; i++) {
      console.log(`\nModel name: ${model[i].name}`);
      console.log(`Model Id: ${model[i].name.split(`/`).pop(-1)}`);
      console.log(`Model display name: ${model[i].displayName}`);
      console.log(`Dataset Id: ${model[i].datasetId}`);

      if (model[i].modelMetadata === `videoClassificationModelMetadata`) {
        console.log(
          `Video Classification model metadata: ${util.inspect(
            model[i].videoClassificationModelMetadata,
            false,
            null
          )}`
        );
      }
      console.log(`Model deployment state: ${model[i].deploymentState}`);
    }
  })
  .catch(err => {
    console.error(err);
  });

Python

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# filter_ = 'DATASET_ID_HERE'

from google.cloud import automl_v1beta1 as automl

client = automl.AutoMlClient()

# A resource that represents Google Cloud Platform location.
project_location = client.location_path(project_id, compute_region)

# List all the models available in the region by applying filter.
response = client.list_models(project_location, filter_)

print("List of models:")
for model in response:
    # Display the model information.
    print("Model name: {}".format(model.name))
    print("Model id: {}".format(model.name.split("/")[-1]))
    print("Model display name: {}".format(model.display_name))
    print("Model create time:")
    print("\tseconds: {}".format(model.create_time.seconds))
    print("\tnanos: {}".format(model.create_time.nanos))

Modell löschen

Im folgenden Beispiel wird ein Modell gelöscht.

Web-UI

  1. Rufen Sie in der AutoML Video-UI die Seite Models (Modelle) auf.

    Seite "Modelle" mit einem Modell
  2. Klicken Sie auf das Dreipunkt-Menü ganz rechts in der Zeile, die Sie löschen möchten, und wählen Sie Löschen aus.
  3. Klicken Sie im Bestätigungsdialogfeld auf Bestätigen.

Befehlszeile

  • Ersetzen Sie model-name durch den vollständigen Namen Ihres Modells aus der Antwort, die Sie beim Erstellen des Modells erhalten haben. Der vollständige Name hat folgendes Format: projects/{project-id}/locations/us-central1/models/{model-id}
curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth application-default  \
print-access-token)" \
  -H "Content-Type: application/json" \
https://automl.googleapis.com/v1beta1/model-name

Die Ausgabe sollte Folgendem ähneln. Anhand der Vorgangs-ID können Sie den Status des Löschvorgangs abrufen. Ein Beispiel finden Sie unter Modelle trainieren.

{
  "name": "projects/674030654376/locations/us-central1/operations/VCN2519201041560371200",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.automl.v1beta1.OperationMetadata",
    "createTime": "2018-10-25T01:50:41.551853Z",
    "updateTime": "2018-10-25T01:50:41.551853Z",
    "deleteDetails": {}
  }
}

Java

/**
 * Demonstrates using the AutoML client to delete a model.
 *
 * @param projectId the Id of the project.
 * @param computeRegion the Region name. (e.g., "us-central1")
 * @param modelId the Id of the model.
 * @throws IOException
 * @throws ExecutionException
 * @throws InterruptedException
 */
public static void deleteModel(String projectId, String computeRegion, String modelId)
    throws InterruptedException, ExecutionException, IOException {
  // Instantiates a client
  AutoMlClient client = AutoMlClient.create();

  // Get the full path of the model.
  ModelName modelFullId = ModelName.of(projectId, computeRegion, modelId);

  // Delete a model.
  Empty response = client.deleteModelAsync(modelFullId).get();

  System.out.println("Model deletion started...");
  System.out.println(String.format("Model deleted. %s", response));
}

Node.js

const automl = require(`@google-cloud/automl`);
const client = new automl.v1beta1.AutoMlClient();

/**
 * Demonstrates using the AutoML client to delete a model.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const modelId = '[MODEL_ID]' e.g., "VCN7209576908164431872";

// Get the full path of the model.
const modelFullId = client.modelPath(projectId, computeRegion, modelId);

// Delete a model.
client
  .deleteModel({name: modelFullId})
  .then(responses => {
    const operation = responses[0];
    return operation.promise();
  })
  .then(responses => {
    // The final result of the operation.
    const operationDetails = responses[2];

    // Get the Model delete details.
    console.log('Model delete details:');
    console.log(`\tOperation details:`);
    console.log(`\t\tName: ${operationDetails.name}`);
    console.log(`\tDone: ${operationDetails.done}`);
  })
  .catch(err => {
    console.error(err);
  });

Python

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# model_id = 'MODEL_ID_HERE'

from google.cloud import automl_v1beta1 as automl

client = automl.AutoMlClient()

# Get the full path of the model.
model_full_id = client.model_path(project_id, compute_region, model_id)

# Delete a model.
response = client.delete_model(model_full_id)

# synchronous check of operation status.
print("Model deleted. {}".format(response.result()))