Después de entrenar un modelo, la detección de objetos de AutoML Vision usa imágenes del conjunto TEST para evaluar la calidad y precisión del modelo nuevo.
La detección de objetos de AutoML Vision proporciona un conjunto agregado de métricas de evaluación (resultados del proceso de evaluación) que indican el rendimiento general del modelo, así como las métricas de evaluación para cada etiqueta de categoría, que indican el rendimiento del modelo en esa etiqueta.
Descripción general de la evaluación
Entradas del proceso de evaluación
Umbral de IoU: Intersección sobre la unión, es un valor que se usa en la detección de objetos a fin de medir la superposición de un cuadro de límite previsto y uno real para un objeto. Mientras más cerca estén los valores del cuadro de límite previsto y los valores del cuadro real, mayores serán la intersección y el valor de IoU.
Umbral de puntuación: Las métricas de salida (que se encuentran a continuación) se calculan con la suposición de que el modelo nunca muestra predicciones con una puntuación inferior a este valor.
Resultado del proceso de evaluación
AuPRC : Área bajo la curva de Precisión/Recuperación, también conocida como "precisión promedio". Por lo general, se encuentra entre 0.5 y 1.0. Valores más altos indican modelos más exactos.
Curvas de umbral de confianza: Muestran cómo los diferentes umbrales de confianza podrían afectar las tasas de precisión, recuperación y de verdaderos y falsos positivos. Obtén información sobre la relación entre precisión y recuperación.
Puntuación F1: La media armónica de precisión y recuperación. F1 es una métrica útil si deseas encontrar un equilibrio entre la precisión y la recuperación. También es conveniente cuando tienes una distribución de clases desigual en los datos de entrenamiento.
Usa estos datos para evaluar la preparación de tu modelo. La confusión alta, la puntuación baja de AUC o las puntuaciones bajas de precisión y recuperación pueden indicar que tu modelo necesita datos de entrenamiento adicionales o que tiene etiquetas incoherentes. Una puntuación de AUC muy alta y una precisión y recuperación perfectas pueden indicar que los datos son demasiado “fáciles” y pueden no generalizarse bien. Un AUC alto puede indicar que el modelo se entrenó en datos idealizados que no representan de forma correcta futuras inferencias.
Administra evaluaciones de modelos
Enumera evaluaciones de modelos
Una vez que hayas entrenado un modelo, puedes enumerar sus métricas de evaluación.
IU web
Abre la IU de la detección de objetos de Cloud AutoML Vision y haz clic en la pestaña Modelos (el ícono de la bombilla) en la barra de navegación izquierda para ver los modelos disponibles.
Para ver los de un proyecto diferente, selecciónalo de la lista desplegable en la parte superior derecha de la barra de título.
Haz clic en la fila del modelo que deseas evaluar.
Si es necesario, haz clic en la pestaña Evaluar justo debajo de la barra de título.
Si se completó el entrenamiento del modelo, la detección de objetos de Cloud AutoML Vision mostrará sus métricas de evaluación.
Para ver las métricas de una etiqueta específica, selecciona el nombre de la etiqueta de la lista que aparece en la parte inferior de la página.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto de GCP.
- model-id: Es el ID del modelo, que se muestra en la respuesta que recibiste cuando lo creaste. El ID es el último elemento del nombre del modelo.
Por ejemplo:
- Nombre del modelo:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- ID del modelo:
IOD4412217016962778756
- Nombre del modelo:
Método HTTP y URL:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el siguiente comando:
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
Ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la siguiente. Los campos específicos de detección de objetos clave están en negrita, y se muestran las siguientes cantidades variables de entradas boundingBoxMetricsEntries
para brindar una vista más clara:
{ "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
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Idiomas adicionales
C#: sigue las instrucciones de configuración de C# en la página Bibliotecas cliente y, luego, visita la documentación de referencia de la detección de objetos de AutoML Vision para .NET.
PHP: sigue las instrucciones de configuración de PHP en la página Bibliotecas cliente y, luego, visita la documentación de referencia de detección de objetos de AutoML Vision para PHP.
Ruby: sigue las instrucciones de configuración de Ruby en la página Bibliotecas cliente y, luego, visita la documentación de referencia de detección de objetos de AutoML Vision para Ruby.
Obtener evaluaciones de modelos
También puedes obtener una evaluación de modelo específica para una etiqueta (displayName
) mediante un ID de evaluación.
IU web
En la IU de la detección de objetos de AutoML Vision, puedes realizar la misma operación si ingresas en la página Modelos y, luego, seleccionas tu modelo. Después de seleccionar el modelo, ve a la pestaña Evaluate (Evaluar) y selecciona la etiqueta para ver las evaluaciones específicas de esa etiqueta.
REST
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto de GCP.
- model-id: Es el ID del modelo, que se muestra en la respuesta que recibiste cuando lo creaste. El ID es el último elemento del nombre del modelo.
Por ejemplo:
- Nombre del modelo:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- ID del modelo:
IOD4412217016962778756
- Nombre del modelo:
- model-evaluation-id: Es el valor de ID de la evaluación del modelo. Puedes obtener los ID de evaluación de modelos a partir de la operación
list
de evaluación de modelos.
Método HTTP y URL:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID
Para enviar tu solicitud, elige una de estas opciones:
curl
Ejecuta el siguiente comando:
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
Ejecuta el siguiente comando:
$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
Deberías recibir una respuesta JSON similar a la siguiente. Los campos específicos de detección de objetos clave están en negrita, y se muestra una versión abreviada de las entradas boundingBoxMetricsEntries
para brindar una vista más clara:
{ "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
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Java
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Node.js
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Python
Antes de probar esta muestra, sigue las instrucciones de configuración para este lenguaje en la página Bibliotecas cliente.
Idiomas adicionales
C#: sigue las instrucciones de configuración de C# en la página Bibliotecas cliente y, luego, visita la documentación de referencia de la detección de objetos de AutoML Vision para .NET.
PHP: sigue las instrucciones de configuración de PHP en la página Bibliotecas cliente y, luego, visita la documentación de referencia de detección de objetos de AutoML Vision para PHP.
Ruby: sigue las instrucciones de configuración de Ruby en la página Bibliotecas cliente y, luego, visita la documentación de referencia de detección de objetos de AutoML Vision para Ruby.
Verdaderos positivos, falsos negativos y falsos positivos (solo IU)
En la interfaz de usuario, se pueden observar ejemplos específicos del rendimiento del modelo, es decir, instancias de verdadero positivo (VP), falso negativo (FN), y falso positivo (FP) de tus conjuntos TRAINING y VALIDATION.
IU web
Puedes acceder a la vista de VP, FN y FP en la IU. Para ello, selecciona la pestaña Evaluar y, luego, selecciona cualquier etiqueta específica.
Mediante la visualización de tendencias en estas predicciones, puedes modificar el conjunto de entrenamiento para mejorar el rendimiento del modelo.
Las imágenes con verdaderos positivos son cuadros de validación que se proporcionan al modelo entrenado y que el modelo anotó de forma correcta:
Las imágenes con falsos negativos se proporcionan de manera similar al modelo entrenado, pero este no pudo anotar de forma correcta una instancia de un objeto:
Por último, las imágenes con falsos positivos son aquellas que se proporcionan al modelo entrenado que anotó instancias de un objeto que no se anotaron en el área especificada:
El modelo selecciona casos excepcionales interesantes, lo que presenta una oportunidad para definir mejor las etiquetas y definiciones a fin de ayudar al modelo a entender las interpretaciones de las etiquetas. Por ejemplo, una definición más estricta ayudaría a que el modelo entienda si consideras que un pimiento relleno es una “ensalada” (o no). Con etiquetas repetidas, entrenamiento y bucles de evaluación, el modelo mostrará otras ambigüedades similares en tus datos.
También puedes ajustar el umbral de puntuación en esta vista en la interfaz de usuario, y las imágenes con VP, FN y FP que se muestran reflejarán el cambio de umbral:
Interpreta las métricas de evaluación
Los modelos de detección de objetos muestran muchos cuadros de límite para una imagen de entrada. Cada cuadro contiene una etiqueta y una puntuación o confianza. Las métricas de evaluación te ayudarán a responder varias preguntas clave sobre el rendimiento del modelo:
- ¿Recibo la cantidad correcta de cuadros?
- ¿El modelo tiende a dar puntuaciones más bajas a los casos marginales?
- ¿En qué medida coinciden los cuadros previstos con los cuadros de verdad fundamental?
Ten en cuenta que estas métricas, al igual que las de clasificación con varias etiquetas, no señalarán ninguna confusión de clase más que las de puntuaciones genéricamente más bajas.
Cuando analizas el resultado del modelo por imagen, necesitas una forma de examinar un par de cuadros (el cuadro de verdad fundamental y el previsto) y determinar el grado de coincidencia entre ellos. Debes tener en cuenta los siguientes puntos:
- ¿Ambos cuadros tienen la misma etiqueta?
- ¿Qué tan bien se superponen los cuadros?
- ¿Con qué seguridad el modelo predijo el cuadro?
Para abordar el segundo requisito, presentamos una medición nueva llamada intersección sobre la unión o IoU.
IoU y el umbral de IoU
La intersección sobre la unión determina el grado de coincidencia entre dos cuadros. El valor de IoU varía entre 0 (sin superposición) y 1 (los cuadros son idénticos) y se calcula mediante la división del área en común entre los dos cuadros por el área incluida en al menos uno de los cuadros. El servicio de AutoML te permite examinar el rendimiento de tu modelo en varios umbrales de IoU.
¿Por qué deberías cambiar el umbral de IoU?
Considera el caso práctico de contar autos en un estacionamiento. No importa si las coordenadas del cuadro son muy precisas, solo te interesa tener el número total de cuadros correcto. En este caso, un umbral de IoU bajo es adecuado.
También puedes intentar medir el tamaño de una mancha sobre una tela. En este caso, necesitas coordenadas muy precisas y, por lo tanto, es apropiado un umbral de IoU mucho más alto.
Ten en cuenta que no necesitas volver a entrenar el modelo si cambias de parecer en cuanto al umbral correcto para tu caso práctico. Ya tienes acceso a las métricas de evaluación en varios umbrales de IoU.
Puntuación y umbral de puntuación
Al igual que en los modelos de clasificación, los resultados de modelos de detección de objetos (ahora cuadros) incluyen puntuaciones. También, como en la clasificación de imágenes, existe un umbral de puntuación que puedes especificar después del entrenamiento para determinar qué es (o no es) una coincidencia “adecuada”. Cambiar el umbral de puntuación te permite ajustar las tasas de falsos positivos y verdaderos positivos según las necesidades de tu modelo específico. Un usuario que desea una recuperación muy alta suele usar un umbral de puntuación más bajo en el procesamiento del resultado del modelo.
Realiza iteraciones en tu modelo
Si no estás satisfecho con los niveles de calidad, puedes volver a realizar los pasos anteriores para mejorarla:
- Considera agregar más imágenes a cualquier etiqueta de cuadro de límite con baja calidad.
- Es posible que tengas que agregar diferentes tipos de imágenes (p. ej., un ángulo más amplio, una mayor o menor resolución, diferentes puntos de vista).
- Puedes quitar por completo las etiquetas del cuadro de límite si no tienes suficientes imágenes de entrenamiento.
- Nuestros algoritmos de entrenamiento no usan los nombres de tus etiquetas. Si tienes una etiqueta que dice “door” (puerta) y otra que dice “door_with_knob” (puerta con picaporte), el algoritmo no puede notar la diferencia más allá de las imágenes que le proporcionaste.
- Mejora los datos con más ejemplos de verdaderos positivos y negativos. Los ejemplos más importantes son los que están cerca del límite de decisión (es decir, los que pueden producir confusión, pero tienen la etiqueta correcta).
- Especifica tu propia división de TRAIN, TEST y VALIDATE. La herramienta asigna imágenes de forma aleatoria, pero las que están casi duplicadas pueden terminar en TRAIN y VALIDATE, lo que puede llevar a un sobreajuste y un rendimiento deficiente en el conjunto TEST.
Una vez que hayas hecho los cambios, entrena y evalúa un modelo nuevo hasta que alcances un nivel de calidad satisfactorio.