Evaluasi model

Setelah melatih model, Deteksi Objek AutoML Vision menggunakan gambar dari set TEST untuk mengevaluasi kualitas dan akurasi model baru.

Deteksi Objek AutoML Vision menyediakan kumpulan metrik evaluasi gabungan (output proses evaluasi) yang menunjukkan performa model secara keseluruhan, serta metrik evaluasi untuk setiap label kategori yang menunjukkan performa model untuk label tersebut.

Ringkasan evaluasi

Input proses evaluasi

  • batas IoU : Intersection over Union, nilai yang digunakan dalam deteksi objek untuk mengukur tumpang-tindih antara kotak pembatas yang diprediksi dengan kotak pembatas yang sebenarnya untuk sebuah objek. Semakin dekat nilai kotak pembatas yang diprediksi dengan nilai kotak pembatas yang sebenarnya, semakin besar perpotongan dan semakin besar nilai IoU-nya.

  • Batas skor: Metrik output (di bawah) dihitung dengan asumsi bahwa model tidak pernah menampilkan prediksi dengan skor yang lebih rendah dari nilai ini.

Output proses evaluasi

  • AuPRC : Area di bawah kurva Presisi/Perolehan, juga disebut sebagai "presisi rata-rata". Umumnya antara 0,5 dan 1,0. Nilai yang lebih tinggi menunjukkan model yang lebih akurat.

  • Kurva batas keyakinan: menunjukkan bagaimana batas keyakinan yang berbeda akan memengaruhi tingkat presisi, perolehan, serta tingkat positif benar dan salah. Baca hubungan antara presisi dan perolehan.

  • Skor F1: Rata-rata harmonis dari presisi dan perolehan. F1 adalah metrik yang berguna jika Anda ingin menemukan keseimbangan antara presisi dan perolehan. F1 juga berguna ketika Anda memiliki distribusi kelas yang tidak merata dalam data pelatihan Anda.

Gunakan data ini untuk mengevaluasi kesiapan model Anda. Kebingungan yang tinggi, skor AUC yang rendah, atau skor presisi dan perolehan yang rendah dapat menunjukkan bahwa model Anda memerlukan data pelatihan tambahan atau memiliki label yang tidak konsisten. Skor AUC yang sangat tinggi serta presisi dan perolehan yang sempurna dapat menunjukkan bahwa data terlalu "mudah" dan mungkin tidak digeneralisasi dengan baik: AUC yang tinggi dapat mengindikasikan bahwa model tersebut dilatih pada data yang ideal sehingga tidak akan merepresentasikan inferensi di masa mendatang dengan baik.

Mengelola evaluasi model

Membuat daftar evaluasi model

Setelah melatih model, Anda dapat mencantumkan metrik evaluasi untuk model tersebut.

UI web

  1. Buka Deteksi Objek AutoML Vision UI lalu klik tab Model (dengan ikon bohlam) di menu navigasi sebelah kiri untuk menampilkan model yang tersedia.

    Untuk melihat model project yang berbeda, pilih project dari menu drop-down di kanan atas panel judul.

  2. Klik baris untuk model yang ingin dievaluasi.

  3. Jika perlu, klik tab Evaluasi tepat di bawah panel judul.

    Jika pelatihan untuk model telah selesai, Deteksi Objek AutoML Vision akan menampilkan metrik evaluasinya.

    Halaman evaluasi model

  4. Untuk melihat metrik untuk label tertentu, pilih nama label dari daftar label di bagian bawah halaman.

    Label khusus halaman evaluasi model

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: Project ID GCP Anda.
  • model-id: ID model Anda, dari respons saat membuat model. ID adalah elemen terakhir dari nama model Anda. Misalnya:
    • nama model: projects/project-id/locations/location-id/models/IOD4412217016962778756
    • id model: IOD4412217016962778756

Metode HTTP dan URL:

GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Jalankan perintah berikut:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
"https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations"

PowerShell

Jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations" | Select-Object -Expand Content

Anda akan menerima respons JSON yang mirip dengan contoh berikut. Kolom khusus deteksi objek utama dicetak tebal dan jumlah entri boundingBoxMetricsEntries yang bervariasi ditampilkan agar lebih jelas:

{
  "modelEvaluation": [
    {
      "name": "projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVAL_ID",
      "annotationSpecId": "6342510834593300480",
      "createTime": "2019-07-26T22:28:56.890727Z",
      "evaluatedExampleCount": 18,
      "imageObjectDetectionEvaluationMetrics": {
        "evaluatedBoundingBoxCount": 96,
        "boundingBoxMetricsEntries": [
          {
            "iouThreshold": 0.15,
            "meanAveragePrecision": 0.6317751,
            "confidenceMetricsEntries": [
              {
                "confidenceThreshold": 0.101631254,
                "recall": 0.84375,
                "precision": 0.2555205,
                "f1Score": 0.3922518
              },
              {
                "confidenceThreshold": 0.10180253,
                "recall": 0.8333333,
                "precision": 0.25316456,
                "f1Score": 0.3883495
              },
              ...
              {
                "confidenceThreshold": 0.8791167,
                "recall": 0.020833334,
                "precision": 1,
                "f1Score": 0.040816326
              },
              {
                "confidenceThreshold": 0.8804436,
                "recall": 0.010416667,
                "precision": 1,
                "f1Score": 0.020618558
              }
            ]
          },
          {
            "iouThreshold": 0.8,
            "meanAveragePrecision": 0.15461995,
            "confidenceMetricsEntries": [
              {
                "confidenceThreshold": 0.101631254,
                "recall": 0.22916667,
                "precision": 0.06940063,
                "f1Score": 0.10653753
              },
              ...
              {
                "confidenceThreshold": 0.8804436,
                "recall": 0.010416667,
                "precision": 1,
                "f1Score": 0.020618558
              }
            ]
          },
          {
            "iouThreshold": 0.4,
            "meanAveragePrecision": 0.56170964,
            "confidenceMetricsEntries": [
              {
                "confidenceThreshold": 0.101631254,
                "recall": 0.7604167,
                "precision": 0.23028392,
                "f1Score": 0.3535109
              },
              ...
              {
                "confidenceThreshold": 0.8804436,
                "recall": 0.010416667,
                "precision": 1,
                "f1Score": 0.020618558
              }
            ]
          },
          ...
        ],
        "boundingBoxMeanAveragePrecision": 0.4306387
      },
      "displayName": "Tomato"
    },
    {
      "name": "projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVAL_ID",
      "annotationSpecId": "1730824816165912576",
      "createTime": "2019-07-26T22:28:56.890727Z",
      "evaluatedExampleCount": 9,
      "imageObjectDetectionEvaluationMetrics": {
        "evaluatedBoundingBoxCount": 51,
        "boundingBoxMetricsEntries": [
          {
            ...
          }
        ],
        "boundingBoxMeanAveragePrecision": 0.29565892
      },
      "displayName": "Cheese"
    },
    {
      "name": "projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVAL_ID",
      "annotationSpecId": "7495432339200147456",
      "createTime": "2019-07-26T22:28:56.890727Z",
      "evaluatedExampleCount": 4,
      "imageObjectDetectionEvaluationMetrics": {
        "evaluatedBoundingBoxCount": 22,
        "boundingBoxMetricsEntries": [
          {
            "iouThreshold": 0.2,
            "meanAveragePrecision": 0.104004614,
            "confidenceMetricsEntries": [
              {
                "confidenceThreshold": 0.1008248,
                "recall": 0.36363637,
                "precision": 0.08888889,
                "f1Score": 0.14285715
              },
              ...
              {
                "confidenceThreshold": 0.47585258,
                "recall": 0.045454547,
                "precision": 1,
                "f1Score": 0.08695653
              }
            ]
          },
          ...
        ],
        "boundingBoxMeanAveragePrecision": 0.057070773
      },
      "displayName": "Seafood"
    }
  ]
}

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

import (
	"context"
	"fmt"
	"io"

	automl "cloud.google.com/go/automl/apiv1"
	"cloud.google.com/go/automl/apiv1/automlpb"
	"google.golang.org/api/iterator"
)

// listModelEvaluation lists existing model evaluations.
func listModelEvaluations(w io.Writer, projectID string, location string, modelID string) error {
	// projectID := "my-project-id"
	// location := "us-central1"
	// modelID := "TRL123456789..."

	ctx := context.Background()
	client, err := automl.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	req := &automlpb.ListModelEvaluationsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s/models/%s", projectID, location, modelID),
	}

	it := client.ListModelEvaluations(ctx, req)

	// Iterate over all results
	for {
		evaluation, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("ListModelEvaluations.Next: %w", err)
		}

		fmt.Fprintf(w, "Model evaluation name: %v\n", evaluation.GetName())
		fmt.Fprintf(w, "Model annotation spec id: %v\n", evaluation.GetAnnotationSpecId())
		fmt.Fprintf(w, "Create Time:\n")
		fmt.Fprintf(w, "\tseconds: %v\n", evaluation.GetCreateTime().GetSeconds())
		fmt.Fprintf(w, "\tnanos: %v\n", evaluation.GetCreateTime().GetNanos())
		fmt.Fprintf(w, "Evaluation example count: %v\n", evaluation.GetEvaluatedExampleCount())
		fmt.Fprintf(w, "Object detection model evaluation metrics: %v\n", evaluation.GetImageObjectDetectionEvaluationMetrics())
	}

	return nil
}

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.


import com.google.cloud.automl.v1.AutoMlClient;
import com.google.cloud.automl.v1.ListModelEvaluationsRequest;
import com.google.cloud.automl.v1.ModelEvaluation;
import com.google.cloud.automl.v1.ModelName;
import java.io.IOException;

class ListModelEvaluations {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String modelId = "YOUR_MODEL_ID";
    listModelEvaluations(projectId, modelId);
  }

  // List model evaluations
  static void listModelEvaluations(String projectId, String modelId) throws IOException {
    // 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 (AutoMlClient client = AutoMlClient.create()) {
      // Get the full path of the model.
      ModelName modelFullId = ModelName.of(projectId, "us-central1", modelId);
      ListModelEvaluationsRequest modelEvaluationsrequest =
          ListModelEvaluationsRequest.newBuilder().setParent(modelFullId.toString()).build();

      // List all the model evaluations in the model by applying filter.
      System.out.println("List of model evaluations:");
      for (ModelEvaluation modelEvaluation :
          client.listModelEvaluations(modelEvaluationsrequest).iterateAll()) {

        System.out.format("Model Evaluation Name: %s\n", modelEvaluation.getName());
        System.out.format("Model Annotation Spec Id: %s", modelEvaluation.getAnnotationSpecId());
        System.out.println("Create Time:");
        System.out.format("\tseconds: %s\n", modelEvaluation.getCreateTime().getSeconds());
        System.out.format("\tnanos: %s", modelEvaluation.getCreateTime().getNanos() / 1e9);
        System.out.format(
            "Evalution Example Count: %d\n", modelEvaluation.getEvaluatedExampleCount());
        System.out.format(
            "Object Detection Model Evaluation Metrics: %s\n",
            modelEvaluation.getImageObjectDetectionEvaluationMetrics());
      }
    }
  }
}

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'us-central1';
// const modelId = 'YOUR_MODEL_ID';

// Imports the Google Cloud AutoML library
const {AutoMlClient} = require('@google-cloud/automl').v1;

// Instantiates a client
const client = new AutoMlClient();

async function listModelEvaluations() {
  // Construct request
  const request = {
    parent: client.modelPath(projectId, location, modelId),
    filter: '',
  };

  const [response] = await client.listModelEvaluations(request);

  console.log('List of model evaluations:');
  for (const evaluation of response) {
    console.log(`Model evaluation name: ${evaluation.name}`);
    console.log(`Model annotation spec id: ${evaluation.annotationSpecId}`);
    console.log(`Model display name: ${evaluation.displayName}`);
    console.log('Model create time');
    console.log(`\tseconds ${evaluation.createTime.seconds}`);
    console.log(`\tnanos ${evaluation.createTime.nanos / 1e9}`);
    console.log(
      `Evaluation example count: ${evaluation.evaluatedExampleCount}`
    );
    console.log(
      `Object detection model evaluation metrics: ${evaluation.imageObjectDetectionEvaluationMetrics}`
    );
  }
}

listModelEvaluations();

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

from google.cloud import automl

# TODO(developer): Uncomment and set the following variables
# project_id = "YOUR_PROJECT_ID"
# model_id = "YOUR_MODEL_ID"

client = automl.AutoMlClient()
# Get the full path of the model.
model_full_id = client.model_path(project_id, "us-central1", model_id)

print("List of model evaluations:")
for evaluation in client.list_model_evaluations(parent=model_full_id, filter=""):
    print(f"Model evaluation name: {evaluation.name}")
    print(f"Model annotation spec id: {evaluation.annotation_spec_id}")
    print(f"Create Time: {evaluation.create_time}")
    print(f"Evaluation example count: {evaluation.evaluated_example_count}")
    print(
        "Object detection model evaluation metrics: {}\n\n".format(
            evaluation.image_object_detection_evaluation_metrics
        )
    )

Bahasa tambahan

C# : Ikuti Petunjuk penyiapan C# di halaman library klien, lalu kunjungi Dokumentasi referensi Deteksi Objek Vision AutoML untuk .NET.

PHP : Ikuti petunjuk penyiapan PHP di halaman library klien, lalu kunjungi dokumentasi referensi Deteksi Objek AutoML Vision untuk PHP.

Ruby : Ikuti petunjuk penyiapan Ruby di halaman library klien, lalu kunjungi dokumentasi referensi Deteksi Objek AutoML Vision untuk Ruby.

Mendapatkan evaluasi model

Anda juga dapat mendapatkan evaluasi model tertentu untuk label (displayName) menggunakan ID evaluasi.

UI Web

Dalam Deteksi Objek AutoML Vision UI, operasi yang setara tersedia dengan membuka halaman Model, lalu memilih model Anda. Setelah memilih model, buka tab Evaluasi, lalu pilih label untuk melihat evaluasi khusus label.

Label khusus halaman evaluasi model

REST

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: Project ID GCP Anda.
  • model-id: ID model Anda, dari respons saat membuat model. ID adalah elemen terakhir dari nama model Anda. Misalnya:
    • nama model: projects/project-id/locations/location-id/models/IOD4412217016962778756
    • id model: IOD4412217016962778756
  • model-evaluation-id: nilai ID evaluasi dari model. Anda dapat mendapatkan ID evaluasi model dari operasi evaluasi model list.

Metode HTTP dan URL:

GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Jalankan perintah berikut:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "x-goog-user-project: project-id" \
"https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID"

PowerShell

Jalankan perintah berikut:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID" | Select-Object -Expand Content

Anda akan menerima respons JSON yang mirip dengan contoh berikut. Kolom khusus deteksi objek utama dicetak tebal dan versi entri boundingBoxMetricsEntries yang disingkat ditampilkan agar lebih jelas:

{
  "name": "projects/PROJECT_ID/locations/us-
  central1/models/MODEL_ID/modelEvaluations/MODEL-EVALUATION-
  ID",
  "annotationSpecId": "6342510834593300480",
  "createTime": "2019-07-26T22:28:56.890727Z",
  "evaluatedExampleCount": 18,
  "imageObjectDetectionEvaluationMetrics": {
    "evaluatedBoundingBoxCount": 96,
    "boundingBoxMetricsEntries": [
      {
        "iouThreshold": 0.15,
        "meanAveragePrecision": 0.6317751,
        "confidenceMetricsEntries": [
          {
            "confidenceThreshold": 0.101631254,
            "recall": 0.84375,
            "precision": 0.2555205,
            "f1Score": 0.3922518
          },
          ...
          {
            "confidenceThreshold": 0.8804436,
            "recall": 0.010416667,
            "precision": 1,
            "f1Score": 0.020618558
          }
        ]
      },
      {
        "iouThreshold": 0.8,
        "meanAveragePrecision": 0.15461995,
        "confidenceMetricsEntries": [
          {
            "confidenceThreshold": 0.101631254,
            "recall": 0.22916667,
            "precision": 0.06940063,
            "f1Score": 0.10653753
          },
          ...
          {
            "confidenceThreshold": 0.8804436,
            "recall": 0.010416667,
            "precision": 1,
            "f1Score": 0.020618558
          }
        ]
      },
      {
        "iouThreshold": 0.4,
        "meanAveragePrecision": 0.56170964,
        "confidenceMetricsEntries": [
          {
            "confidenceThreshold": 0.101631254,
            "recall": 0.7604167,
            "precision": 0.23028392,
            "f1Score": 0.3535109
          },
          ...
          {
            "confidenceThreshold": 0.8804436,
            "recall": 0.010416667,
            "precision": 1,
            "f1Score": 0.020618558
          }
        ]
      },
      ...
    ],
    "boundingBoxMeanAveragePrecision": 0.4306387
  },
  "displayName": "Tomato"
}

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

import (
	"context"
	"fmt"
	"io"

	automl "cloud.google.com/go/automl/apiv1"
	"cloud.google.com/go/automl/apiv1/automlpb"
)

// getModelEvaluation gets a model evaluation.
func getModelEvaluation(w io.Writer, projectID string, location string, modelID string, modelEvaluationID string) error {
	// projectID := "my-project-id"
	// location := "us-central1"
	// modelID := "TRL123456789..."
	// modelEvaluationID := "123456789..."

	ctx := context.Background()
	client, err := automl.NewClient(ctx)
	if err != nil {
		return fmt.Errorf("NewClient: %w", err)
	}
	defer client.Close()

	req := &automlpb.GetModelEvaluationRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/models/%s/modelEvaluations/%s", projectID, location, modelID, modelEvaluationID),
	}

	evaluation, err := client.GetModelEvaluation(ctx, req)
	if err != nil {
		return fmt.Errorf("GetModelEvaluation: %w", err)
	}

	fmt.Fprintf(w, "Model evaluation name: %v\n", evaluation.GetName())
	fmt.Fprintf(w, "Model annotation spec id: %v\n", evaluation.GetAnnotationSpecId())
	fmt.Fprintf(w, "Create Time:\n")
	fmt.Fprintf(w, "\tseconds: %v\n", evaluation.GetCreateTime().GetSeconds())
	fmt.Fprintf(w, "\tnanos: %v\n", evaluation.GetCreateTime().GetNanos())
	fmt.Fprintf(w, "Evaluation example count: %v\n", evaluation.GetEvaluatedExampleCount())
	fmt.Fprintf(w, "Object detection model evaluation metrics: %v\n", evaluation.GetImageObjectDetectionEvaluationMetrics())

	return nil
}

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.


import com.google.cloud.automl.v1.AutoMlClient;
import com.google.cloud.automl.v1.ModelEvaluation;
import com.google.cloud.automl.v1.ModelEvaluationName;
import java.io.IOException;

class GetModelEvaluation {

  static void getModelEvaluation() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String modelId = "YOUR_MODEL_ID";
    String modelEvaluationId = "YOUR_MODEL_EVALUATION_ID";
    getModelEvaluation(projectId, modelId, modelEvaluationId);
  }

  // Get a model evaluation
  static void getModelEvaluation(String projectId, String modelId, String modelEvaluationId)
      throws IOException {
    // 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 (AutoMlClient client = AutoMlClient.create()) {
      // Get the full path of the model evaluation.
      ModelEvaluationName modelEvaluationFullId =
          ModelEvaluationName.of(projectId, "us-central1", modelId, modelEvaluationId);

      // Get complete detail of the model evaluation.
      ModelEvaluation modelEvaluation = client.getModelEvaluation(modelEvaluationFullId);

      System.out.format("Model Evaluation Name: %s\n", modelEvaluation.getName());
      System.out.format("Model Annotation Spec Id: %s", modelEvaluation.getAnnotationSpecId());
      System.out.println("Create Time:");
      System.out.format("\tseconds: %s\n", modelEvaluation.getCreateTime().getSeconds());
      System.out.format("\tnanos: %s", modelEvaluation.getCreateTime().getNanos() / 1e9);
      System.out.format(
          "Evalution Example Count: %d\n", modelEvaluation.getEvaluatedExampleCount());
      System.out.format(
          "Object Detection Model Evaluation Metrics: %s\n",
          modelEvaluation.getImageObjectDetectionEvaluationMetrics());
    }
  }
}

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const location = 'us-central1';
// const modelId = 'YOUR_MODEL_ID';
// const modelEvaluationId = 'YOUR_MODEL_EVALUATION_ID';

// Imports the Google Cloud AutoML library
const {AutoMlClient} = require('@google-cloud/automl').v1;

// Instantiates a client
const client = new AutoMlClient();

async function getModelEvaluation() {
  // Construct request
  const request = {
    name: client.modelEvaluationPath(
      projectId,
      location,
      modelId,
      modelEvaluationId
    ),
  };

  const [response] = await client.getModelEvaluation(request);

  console.log(`Model evaluation name: ${response.name}`);
  console.log(`Model annotation spec id: ${response.annotationSpecId}`);
  console.log(`Model display name: ${response.displayName}`);
  console.log('Model create time');
  console.log(`\tseconds ${response.createTime.seconds}`);
  console.log(`\tnanos ${response.createTime.nanos / 1e9}`);
  console.log(`Evaluation example count: ${response.evaluatedExampleCount}`);
  console.log(
    `Object detection model evaluation metrics: ${response.imageObjectDetectionEvaluationMetrics}`
  );
}

getModelEvaluation();

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan untuk bahasa ini di halaman Library Klien.

from google.cloud import automl

# TODO(developer): Uncomment and set the following variables
# project_id = "YOUR_PROJECT_ID"
# model_id = "YOUR_MODEL_ID"
# model_evaluation_id = "YOUR_MODEL_EVALUATION_ID"

client = automl.AutoMlClient()
# Get the full path of the model evaluation.
model_path = client.model_path(project_id, "us-central1", model_id)
model_evaluation_full_id = f"{model_path}/modelEvaluations/{model_evaluation_id}"

# Get complete detail of the model evaluation.
response = client.get_model_evaluation(name=model_evaluation_full_id)

print(f"Model evaluation name: {response.name}")
print(f"Model annotation spec id: {response.annotation_spec_id}")
print(f"Create Time: {response.create_time}")
print(f"Evaluation example count: {response.evaluated_example_count}")
print(
    "Object detection model evaluation metrics: {}".format(
        response.image_object_detection_evaluation_metrics
    )
)

Bahasa tambahan

C# : Ikuti Petunjuk penyiapan C# di halaman library klien, lalu kunjungi Dokumentasi referensi Deteksi Objek Vision AutoML untuk .NET.

PHP : Ikuti petunjuk penyiapan PHP di halaman library klien, lalu kunjungi dokumentasi referensi Deteksi Objek AutoML Vision untuk PHP.

Ruby : Ikuti petunjuk penyiapan Ruby di halaman library klien, lalu kunjungi dokumentasi referensi Deteksi Objek AutoML Vision untuk Ruby.

Positif Benar, Negatif Palsu, dan Positif Palsu (khusus UI)

Di antarmuka pengguna, Anda dapat mengamati contoh spesifik performa model yaitu instance positif benar (TP), negatif palsu (FN), dan positif palsu (FP) dari set TRAINING dan VALIDATION Anda.

UI web

Anda dapat mengakses tampilan TP, FN, dan FP di UI dengan memilih tab Evaluasi, lalu memilih label tertentu.

Dengan melihat tren dalam prediksi ini, Anda dapat mengubah set pelatihan untuk meningkatkan performa model.

Gambar positif benar adalah kotak validasi yang disediakan untuk model terlatih yang dianotasikan dengan benar oleh model:

positif benar ditampilkan

Gambar negatif palsu juga diberikan kepada model terlatih, tetapi model gagal untuk memberi anotasi pada instance objek dengan benar:

negatif palsu ditampilkan

Terakhir, gambar positif palsu adalah gambar yang diberikan kepada model terlatih yang memberi anotasi pada instance objek yang tidak diberi anotasi di area yang ditentukan:

positif palsu ditampilkan

Model ini memilih corner case yang menarik yang memberikan peluang untuk mempertajam definisi dan label Anda guna membantu model memahami interpretasi label Anda. Misalnya, definisi yang lebih ketat akan membantu model memahami apakah Anda menganggap paprika isi sebagai "salad" (atau tidak). Dengan label berulang, melatih, dan mengevaluasi loop, model Anda akan memunculkan ambiguitas lain dalam data Anda.

Anda juga dapat menyesuaikan batas skor pada tampilan ini di antarmuka pengguna, dan gambar TP, FN, dan FP yang ditampilkan akan mencerminkan perubahan batas:

positif benar dengan batas yang diperbarui

Menafsirkan metrik evaluasi

Model deteksi objek menghasilkan banyak kotak pembatas untuk gambar input; setiap kotak dilengkapi dengan 1) label dan 2) skor atau keyakinan. Metrik evaluasi akan membantu Anda menjawab beberapa pertanyaan performa utama tentang model Anda:

  • Apakah saya mendapatkan jumlah kotak yang tepat?
  • Apakah model tersebut cenderung memberikan skor yang lebih rendah pada kasus-kasus marginal?
  • Seberapa dekat kotak yang diprediksi cocok dengan kotak kebenaran nyata saya?

Perlu diperhatikan bahwa metrik ini, seperti metrik dalam klasifikasi multi-label, tidak akan menunjukkan kebingungan kelas selain skor yang lebih rendah secara umum.

Saat memeriksa output model per gambar, Anda memerlukan cara untuk memeriksa sepasang kotak (kotak kebenaran nyata dan kotak yang diprediksi), serta menentukan seberapa baik kecocokan antara keduanya. Anda harus mempertimbangkan hal-hal berikut:

  • Apakah kedua kotak memiliki label yang sama?
  • Seberapa baik kotak-kotak tersebut saling tumpang tindih?, dan
  • Seberapa yakin model dapat memprediksi kotak tersebut?

Untuk mengatasi persyaratan kedua, kami memperkenalkan pengukuran baru yang disebut intersection-over-union, atau IoU.

IoU dan Batas IoU

visual kotak intersection over union

Intersection over union menentukan seberapa erat kecocokan dua kotak. Nilai IoU berkisar dari 0 (tidak ada tumpang-tindih) hingga 1 (kotak-kotak identik) dan dihitung dengan membagi luas area yang sama di antara dua kotak dengan luas area yang tercakup dalam setidaknya salah satu kotak. Layanan AutoML memungkinkan Anda memeriksa performa model pada beberapa batas IoU.

Mengapa Anda perlu mengubah batas IoU?

Pertimbangkan kasus penggunaan untuk menghitung mobil di tempat parkir. Anda tidak perlu peduli apakah koordinat kotak sudah sangat akurat, cukup pastikan Anda memiliki jumlah kotak total yang tepat. Dalam kasus ini, batas IoU yang rendah sudah sesuai.

visual kotak batas rendah di sekitar mobil
Kredit gambar: Nacho, "Smart" (CC BY 2.0, kotak pembatas dan teks ditambahkan).

Sebagai alternatif, pertimbangkan untuk mencoba mengukur ukuran noda pada kain. Dalam hal ini, Anda memerlukan koordinat yang sangat tepat sehingga batas IoU yang jauh lebih tinggi sudah sesuai.

visual kotak batas tinggi di sekitar noda kain
Kredit gambar: Housing Works Thrift Shops, "Sofa Modern" (CC BY-SA 2.0, kotak pembatas dan teks ditambahkan).

Perhatikan bahwa Anda tidak perlu melatih ulang model jika Anda berubah pikiran terkait batas yang tepat untuk kasus penggunaan Anda; Anda sudah memiliki akses ke metrik evaluasi pada berbagai batas IoU.

Skor dan Batas Skor

Serupa dengan model klasifikasi, output model deteksi objek (sekarang dalam kotak) dilengkapi dengan skor. Selain itu, seperti klasifikasi gambar, terdapat batas skor yang dapat Anda tentukan setelah pelatihan untuk menentukan kecocokan yang "baik". Dengan mengubah batas skor, Anda dapat menyesuaikan rasio positif palsu dan positif benar sesuai kebutuhan model tertentu. Pengguna yang menginginkan perolehan yang sangat tinggi biasanya akan menggunakan batas skor yang lebih rendah dalam pemrosesan output model mereka.

Melakukan Iterasi pada model Anda

Jika tidak puas dengan tingkat kualitasnya, Anda dapat kembali ke langkah-langkah sebelumnya untuk meningkatkan kualitasnya:

  • Pertimbangkan untuk menambahkan lebih banyak gambar ke label kotak pembatas apa pun dengan kualitas rendah.
  • Anda mungkin perlu menambahkan berbagai jenis gambar (misalnya sudut yang lebih lebar, resolusi yang lebih tinggi atau lebih rendah, sudut pandang yang berbeda).
  • Pertimbangkan untuk menghapus label kotak pembatas jika Anda tidak memiliki cukup gambar pelatihan.
  • Algoritma pelatihan kami tidak menggunakan nama label Anda. Jika Anda memiliki satu label yang bertuliskan "door" dan label lainnya yang bertuliskan "door_with_knob", algoritma tidak dapat mengetahui nuansa selain gambar yang Anda berikan.
  • Tingkatkan data Anda dengan lebih banyak contoh positif dan negatif benar. Contoh yang sangat penting adalah contoh yang mendekati batas keputusan (misalnya kemungkinan akan menimbulkan kebingungan, tetapi masih diberi label dengan benar).
  • Tentukan pembagian TRAIN, TEST, VALIDATE Anda sendiri. Alat ini secara acak menetapkan gambar, tetapi gambar yang hampir sama dapat berakhir di TRAIN dan VALIDATE yang dapat menyebabkan overfitting dan kemudian performa yang buruk pada set TEST.

Setelah membuat perubahan, latih dan evaluasi model baru hingga mencapai tingkat kualitas yang cukup tinggi.