训练模型后,AutoML Vision Object Detection 会使用测试集中的图片来评估新模型的质量和准确率。
AutoML Vision Object Detection 提供了一组总体评估指标(评估过程输出)以及针对每个类别标签的评估指标;前者指示模型的整体表现,后者指示模型针对该标签的表现。
评估概览
评估过程输入
IoU 阈值:交并比 (Intersection over Union) 的缩写,这是一个在对象检测中使用的值,用于衡量对象的预测边界框与实际边界框的重叠度。预测边界框值与实际边界框值越接近,交叉区域和 IoU 值越大。
分数阈值:在计算(下列)输出指标时,假设模型永远不会返回分数低于此值的预测。
评估过程输出
AuPRC:精确率/召回率曲线下的面积,亦称为“平均精确率”。通常介于 0.5 和 1.0 之间。数值越高,表示模型越准确。
置信度阈值曲线:显示不同的置信度阈值如何影响精确率、召回率、真正例率和假正例率。请了解精确率和召回率的关系。
F1 得分:精确率和召回率的调和平均数。如果您希望在精确率和召回率之间取得平衡,F1 指标会非常有用。如果您的训练数据中存在不均匀的类别分布,F1 也会非常有用。
您可利用该数据来评估您的模型的就绪情况。如果混淆率高、AUC 得分低,或者精确率和召回率得分低,这可能表明您的模型需要额外的训练数据或者存在不一致的标签。如果 AUC 得分非常高,并且精确率和召回率也很完美,这可能表明数据过于简单,模型可能无法有效泛化:AUC 高可能表明模型训练基于不能很好代表未来推断的理想化数据。
管理模型评估结果
列出模型评估结果
训练模型后,可列出该模型的评估指标。
网页界面
打开 AutoML Vision Object Detection 界面,然后点击左侧导航栏中的模型标签页(带有灯泡图标)以显示可用的模型。
如需查看其他项目的模型,请从标题栏右上角的下拉列表中选择该项目。
点击待评估模型所在的行。
如果需要,请点击标题栏正下方的评估标签。
如果模型训练完毕,AutoML Vision Object Detection 会显示其评估指标。
如需查看特定标签的指标,请从页面下部的标签列表中选择标签名称。
REST
在使用任何请求数据之前,请先进行以下替换:
- project-id:您的 GCP 项目 ID。
- model-id:您的模型的 ID(从创建模型时返回的响应中获取)。此 ID 是模型名称的最后一个元素。
例如:
- 模型名称:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- 模型 ID:
IOD4412217016962778756
- 模型名称:
HTTP 方法和网址:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations
如需发送请求,请选择以下方式之一:
curl
执行以下命令:
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
执行以下命令:
$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
您应该会收到类似以下示例的 JSON 响应。关键对象检测的专属字段以粗体显示,并且为清楚起见,显示不同数量的 boundingBoxMetricsEntries
条目:
{ "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
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Java
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Node.js
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Python
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
其他语言
C#: 请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 AutoML Vision Object Detection 参考文档。
PHP: 请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 AutoML Vision Object Detection 参考文档。
Ruby 版: 请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 AutoML Vision Object Detection 参考文档。
获取模型评估
您还可以使用评估 ID 获取针对标签 (displayName
) 的特定模型评估。
网页界面
在 AutoML Vision Object Detection 界面中,转到模型页面,然后选择模型即可执行等效操作。选择模型后,转到评估标签页,然后选择该标签以查看特定于标签的评估结果。
REST
在使用任何请求数据之前,请先进行以下替换:
- project-id:您的 GCP 项目 ID。
- model-id:您的模型的 ID(从创建模型时返回的响应中获取)。此 ID 是模型名称的最后一个元素。
例如:
- 模型名称:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- 模型 ID:
IOD4412217016962778756
- 模型名称:
- model-evaluation-id:模型评估的 ID 值。您可以从
list
模型评估操作中获取模型评估 ID。
HTTP 方法和网址:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID
如需发送请求,请选择以下方式之一:
curl
执行以下命令:
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
执行以下命令:
$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
您应该会收到类似以下示例的 JSON 响应。关键对象检测的专属字段以粗体显示,并且为清楚起见,显示 boundingBoxMetricsEntries
条目的缩短版本:
{ "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
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Java
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Node.js
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
Python
在试用此示例之前,请按照客户端库页面中与此编程语言对应的设置说明执行操作。
其他语言
C#: 请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 AutoML Vision Object Detection 参考文档。
PHP: 请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 AutoML Vision Object Detection 参考文档。
Ruby 版: 请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 AutoML Vision Object Detection 参考文档。
真正例、假负例和假正例(仅限界面)
在界面中,您可以观察模型性能的具体示例,即来自训练集和验证集的真正例 (TP)、假负例 (FN) 和假正例 (FP) 实例。
网页界面
您可在界面中选择评估标签页,然后选择任何特定标签,以访问 TP、FN 和 FP 视图。
通过查看这些预测中的趋势,您可以修改训练集来提高模型的性能。
真正例图片是提供给经过训练的模型的验证框,且模型已正确注释这些图片:
假负例图片同样提供给经过训练的模型,但模型未能正确注释对象实例:
最后,假正例图片是提供给经过训练的模型,但模型注释的对象实例不在指定的区域:
模型选择了一些有意思的极端情况,这使您有机会优化自己的定义和标签,帮助模型理解您的标签解释。例如,更严格的定义有助于模型了解您是否将填馅甜椒视为“沙拉”。 借助重复的标签、训练和评估循环,您的模型将找出您数据中的其他此类不够明确的场景。
您也可以在界面的此视图中调整得分阈值,而显示的 TP、FN 和 FP 图片将反映阈值的更改:
解读评估指标
对象检测模型会针对一个输入图片输出多个边界框,每个框包含一个标签和一个得分或置信度。评估指标有助于您回答有关模型的一些关键性能问题:
- 我是否得到正确数量的边界框?
- 对于边缘情况,模型是否倾向于给出较低的分数?
- 预测框与标准答案框的匹配程度如何?
请注意,与多标签分类中的指标一样,除了给出通常较低的分数之外,这些指标不会指出任何类别混淆。
检查每张图片的模型输出时,您需要一种方法来检查一对框(标准答案框和预测框),并确定它们的匹配程度。您必须考虑以下因素:
- 两个框是否具有相同的标签?
- 框的重叠程度如何?
- 模型对框的预测置信度如何?
为满足第二个要求,我们引入了名为交并比或 IoU 的新衡量指标。
IoU 和 IoU 阈值
交并比决定了两个框之间的匹配度。IoU 的取值范围是 0(不重叠)到 1(框相同),计算方法是两个框之间的共同面积除以至少其中一个框所包含的面积。通过 AutoML 服务,您可以基于多个 IoU 阈值检查模型的性能。
为什么需要更改 IoU 阈值?
请考虑一个计算停车场汽车数量的用例。框坐标是否非常准确并不重要,您只需要关心框总数是否正确。在这种情况下,适合使用较低的 IoU 阈值。
或者,尝试测量织物污迹的大小。 在这种情况下,您需要非常精确的坐标,因此应使用高得多的 IoU 阈值。
请注意,如果您对适合自己用例的阈值有新的看法,无需重新训练模型;您已经拥有各种 IoU 阈值的评估指标的访问权限。
分数和分数阈值
与分类模型类似,对象检测模型输出(现为框)包含分数。与图片分类一样,在训练后,您可以指定一个分数阈值作为判断“良好”匹配的标准。通过更改分数阈值,您可以调整假正例和真正例比例以满足特定模型需求。 需要极高召回率的用户通常会在模型输出处理中应用较低的分数阈值。
迭代模型
如果您对质量水平不满意,则可以重新执行前述步骤以提高质量:
- 考虑向低质量的边界框标签添加更多图片。
- 您可能需要添加不同类型的图片(例如更宽的角度、更高或更低的分辨率、不同的视角)。
- 如果您没有足够的训练图片,请考虑删除所有边界框标签。
- 我们的训练算法不会使用您的标签名称。如果您有一个名为“door”的标签和一个名为“door_with_knob”的标签,那么除了您提供的图片外,算法无法确定它们之间的细微差别。
- 用更多的真正例和真负例示例来扩充您的数据。 接近决策边界(即可能产生混淆,但仍获得正确标记)的示例尤为重要。
- 指定您自己的训练、测试和验证集划分比例。该工具会随机分配图片,但高度相似的图片有可能会分别归入训练集和验证集,这可能导致过拟合,进而造成测试集性能不佳。
一旦进行了更改,请训练并评估新模型,直到达到足够高的质量水平为止。