// Copyright 2019 Google LLC. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // syntax = "proto3"; package google.cloud.datalabeling.v1beta1; import "google/api/annotations.proto"; import "google/api/resource.proto"; import "google/cloud/datalabeling/v1beta1/annotation.proto"; import "google/cloud/datalabeling/v1beta1/annotation_spec_set.proto"; import "google/protobuf/timestamp.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/datalabeling/v1beta1;datalabeling"; option java_multiple_files = true; option java_package = "com.google.cloud.datalabeling.v1beta1"; // Describes an evaluation between a machine learning model's predictions and // ground truth labels. Created when an [EvaluationJob][google.cloud.datalabeling.v1beta1.EvaluationJob] runs successfully. message Evaluation { option (google.api.resource) = { type: "datalabeling.googleapis.com/Evaluation" pattern: "projects/{project}/datasets/{dataset}/evaluations/{evaluation}" }; // Output only. Resource name of an evaluation. The name has the following // format: // // "projects/{project_id}/datasets/{dataset_id}/evaluations/{evaluation_id}' string name = 1; // Output only. Options used in the evaluation job that created this // evaluation. EvaluationConfig config = 2; // Output only. Timestamp for when the evaluation job that created this // evaluation ran. google.protobuf.Timestamp evaluation_job_run_time = 3; // Output only. Timestamp for when this evaluation was created. google.protobuf.Timestamp create_time = 4; // Output only. Metrics comparing predictions to ground truth labels. EvaluationMetrics evaluation_metrics = 5; // Output only. Type of task that the model version being evaluated performs, // as defined in the // // [evaluationJobConfig.inputConfig.annotationType][google.cloud.datalabeling.v1beta1.EvaluationJobConfig.input_config] // field of the evaluation job that created this evaluation. AnnotationType annotation_type = 6; // Output only. The number of items in the ground truth dataset that were used // for this evaluation. Only populated when the evaulation is for certain // AnnotationTypes. int64 evaluated_item_count = 7; } // Configuration details used for calculating evaluation metrics and creating an // [Evaluation][google.cloud.datalabeling.v1beta1.Evaluation]. message EvaluationConfig { // Vertical specific options for general metrics. oneof vertical_option { // Only specify this field if the related model performs image object // detection (`IMAGE_BOUNDING_BOX_ANNOTATION`). Describes how to evaluate // bounding boxes. BoundingBoxEvaluationOptions bounding_box_evaluation_options = 1; } } // Options regarding evaluation between bounding boxes. message BoundingBoxEvaluationOptions { // Minimum // [intersection-over-union // // (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) // required for 2 bounding boxes to be considered a match. This must be a // number between 0 and 1. float iou_threshold = 1; } message EvaluationMetrics { // Common metrics covering most general cases. oneof metrics { ClassificationMetrics classification_metrics = 1; ObjectDetectionMetrics object_detection_metrics = 2; } } // Metrics calculated for a classification model. message ClassificationMetrics { // Precision-recall curve based on ground truth labels, predicted labels, and // scores for the predicted labels. PrCurve pr_curve = 1; // Confusion matrix of predicted labels vs. ground truth labels. ConfusionMatrix confusion_matrix = 2; } // Metrics calculated for an image object detection (bounding box) model. message ObjectDetectionMetrics { // Precision-recall curve. PrCurve pr_curve = 1; } message PrCurve { message ConfidenceMetricsEntry { // Threshold used for this entry. // // For classification tasks, this is a classification threshold: a // predicted label is categorized as positive or negative (in the context of // this point on the PR curve) based on whether the label's score meets this // threshold. // // For image object detection (bounding box) tasks, this is the // [intersection-over-union // // (IOU)](/vision/automl/object-detection/docs/evaluate#intersection-over-union) // threshold for the context of this point on the PR curve. float confidence_threshold = 1; // Recall value. float recall = 2; // Precision value. float precision = 3; // Harmonic mean of recall and precision. float f1_score = 4; // Recall value for entries with label that has highest score. float recall_at1 = 5; // Precision value for entries with label that has highest score. float precision_at1 = 6; // The harmonic mean of [recall_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at1] and [precision_at1][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at1]. float f1_score_at1 = 7; // Recall value for entries with label that has highest 5 scores. float recall_at5 = 8; // Precision value for entries with label that has highest 5 scores. float precision_at5 = 9; // The harmonic mean of [recall_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.recall_at5] and [precision_at5][google.cloud.datalabeling.v1beta1.PrCurve.ConfidenceMetricsEntry.precision_at5]. float f1_score_at5 = 10; } // The annotation spec of the label for which the precision-recall curve // calculated. If this field is empty, that means the precision-recall curve // is an aggregate curve for all labels. AnnotationSpec annotation_spec = 1; // Area under the precision-recall curve. Not to be confused with area under // a receiver operating characteristic (ROC) curve. float area_under_curve = 2; // Entries that make up the precision-recall graph. Each entry is a "point" on // the graph drawn for a different `confidence_threshold`. repeated ConfidenceMetricsEntry confidence_metrics_entries = 3; // Mean average prcision of this curve. float mean_average_precision = 4; } // Confusion matrix of the model running the classification. Only applicable // when the metrics entry aggregates multiple labels. Not applicable when the // entry is for a single label. message ConfusionMatrix { message ConfusionMatrixEntry { // The annotation spec of a predicted label. AnnotationSpec annotation_spec = 1; // Number of items predicted to have this label. (The ground truth label for // these items is the `Row.annotationSpec` of this entry's parent.) int32 item_count = 2; } // A row in the confusion matrix. Each entry in this row has the same // ground truth label. message Row { // The annotation spec of the ground truth label for this row. AnnotationSpec annotation_spec = 1; // A list of the confusion matrix entries. One entry for each possible // predicted label. repeated ConfusionMatrixEntry entries = 2; } repeated Row row = 1; }