Dopo aver addestrato un modello, AutoML Vision Rilevamento di oggetti utilizza le immagini del set TEST per valutare la qualità e l'accuratezza del nuovo modello.
AutoML Vision Object Detection fornisce un insieme aggregato di metriche di valutazione (output del processo di valutazione) che indicano le prestazioni complessive del modello, nonché metriche di valutazione per ogni etichetta di categoria, indicando le prestazioni del modello per quell'etichetta.
Panoramica della valutazione
Input del processo di valutazione
Soglia IoU : Intersection over Union, un valore utilizzato nel rilevamento degli oggetti per misurare la sovrapposizione di un riquadro di delimitazione previsto rispetto a quello effettivo per un oggetto. Più i valori del riquadro di delimitazione previsti sono vicini ai valori effettivi del riquadro di delimitazione, maggiore è l'intersezione e maggiore è il valore IoU.
Soglia di punteggio: le metriche di output (di seguito) vengono calcolate presupponendo che il modello non restituisca mai previsioni con un punteggio inferiore a questo valore.
Output del processo di valutazione
AuPRC : area sotto la curva di precisione/richiamo, chiamata anche "precisione media". Di solito tra 0,5 e 1,0. Valori più alti indicano modelli più accurati.
Curve di soglia di confidenza: mostrano in che modo soglie di confidenza diverse incidono sui tassi di precisione, richiamo, veri e falsi positivi. Scopri il rapporto tra precisione e richiamo.
Punteggio F1: la media armonica di precisione e richiamo. F1 è una metrica utile per trovare un equilibrio tra precisione e richiamo. F1 è utile anche quando hai una distribuzione non uniforme delle classi nei dati di addestramento.
Usa questi dati per valutare l'idoneità del modello. Una confusione elevata, punteggi AUC bassi o punteggi di precisione e richiamo bassi possono indicare che il modello ha bisogno di dati di addestramento aggiuntivi o contiene etichette incoerenti. Un punteggio AUC molto elevato e una precisione e un richiamo perfetti possono indicare che i dati sono troppo "facili" e potrebbero non essere generalizzati: un'AUC elevata può indicare che il modello è stato addestrato su dati idealizzati che non rappresenterebbero bene le inferenze future.
Gestione delle valutazioni dei modelli
Elenco valutazioni modello
Una volta addestrato un modello, puoi elencare le relative metriche di valutazione.
UI web
Apri l'interfaccia utente per il rilevamento di oggetti AutoML Vision e fai clic sulla scheda Modelli (con l'icona a forma di lampadina) nella barra di navigazione a sinistra per visualizzare i modelli disponibili.
Per visualizzare i modelli di un progetto diverso, seleziona il progetto dall'elenco a discesa in alto a destra della barra del titolo.
Fai clic sulla riga relativa al modello da valutare.
Se necessario, fai clic sulla scheda Valuta appena sotto la barra del titolo.
Una volta completato l'addestramento del modello, AutoML Vision Rilevamento di oggetti mostra le metriche di valutazione.
Per visualizzare le metriche per un'etichetta specifica, seleziona il nome dell'etichetta dall'elenco di etichette nella parte inferiore della pagina.
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID del tuo progetto Google Cloud.
- model-id: l'ID del modello, dalla
risposta al momento della creazione del modello. L'ID è l'ultimo elemento del nome del modello.
Ad esempio:
- nome modello:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- ID modello:
IOD4412217016962778756
- nome modello:
Metodo HTTP e URL:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Esegui questo 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
Esegui questo 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
Dovresti ricevere una risposta JSON simile all'esempio riportato di seguito. I campi specifici per il rilevamento degli oggetti chiave sono in grassetto e vengono mostrate quantità variabili di voci boundingBoxMetricsEntries
per maggiore chiarezza:
{ "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
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Linguaggi aggiuntivi
C#: segui le istruzioni di configurazione di C# nella pagina delle librerie client e poi visita la documentazione di riferimento sul rilevamento di oggetti AutoML Vision per .NET.
PHP: segui le istruzioni per la configurazione di PHP nella pagina delle librerie client e poi consulta la documentazione di riferimento sul rilevamento di oggetti AutoML Vision per PHP.
Ruby: segui le istruzioni di configurazione di Ruby nella pagina delle librerie client e poi visita la documentazione di riferimento di AutoML Vision per il rilevamento di oggetti per Ruby.
Recupero valutazioni modello
Puoi anche ottenere una valutazione specifica del modello per un'etichetta (displayName
) utilizzando un ID valutazione.
UI web
Nella UI per il rilevamento di oggetti di AutoML Vision è disponibile un'operazione equivalente accedendo alla pagina Modelli e selezionando il tuo modello. Dopo aver selezionato il modello, vai alla scheda Valuta e seleziona l'etichetta per visualizzare valutazioni specifiche per l'etichetta.
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID del tuo progetto Google Cloud.
- model-id: l'ID del modello, dalla
risposta al momento della creazione del modello. L'ID è l'ultimo elemento del nome del modello.
Ad esempio:
- nome modello:
projects/project-id/locations/location-id/models/IOD4412217016962778756
- ID modello:
IOD4412217016962778756
- nome modello:
- model-evaluation-id: il valore ID della valutazione del modello. Puoi ottenere gli ID valutazione del modello dall'operazione di valutazione del modello
list
.
Metodo HTTP e URL:
GET https://automl.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/models/MODEL_ID/modelEvaluations/MODEL_EVALUATION_ID
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Esegui questo 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
Esegui questo 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
Dovresti ricevere una risposta JSON simile all'esempio riportato di seguito. I campi specifici per il rilevamento degli oggetti chiave sono in grassetto e viene mostrata una versione abbreviata delle voci boundingBoxMetricsEntries
per maggiore chiarezza:
{ "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
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Node.js
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Python
Prima di provare questo esempio, segui le istruzioni di configurazione per la lingua in questione nella pagina Librerie client.
Linguaggi aggiuntivi
C#: segui le istruzioni di configurazione di C# nella pagina delle librerie client e poi visita la documentazione di riferimento sul rilevamento di oggetti AutoML Vision per .NET.
PHP: segui le istruzioni per la configurazione di PHP nella pagina delle librerie client e poi consulta la documentazione di riferimento sul rilevamento di oggetti AutoML Vision per PHP.
Ruby: segui le istruzioni di configurazione di Ruby nella pagina delle librerie client e poi visita la documentazione di riferimento di AutoML Vision per il rilevamento di oggetti per Ruby.
Veri positivi, falsi negativi e falsi positivi (solo UI)
Nell'interfaccia utente puoi osservare esempi specifici di prestazioni del modello, ovvero istanze di veri positivi (TP), falsi negativi (FN) e falsi positivi (FP) dai tuoi set di addestramento e convalida.
UI web
Puoi accedere alla visualizzazione TP, FN e FP nell'interfaccia utente selezionando la scheda Valuta e poi qualsiasi etichetta specifica.
Visualizzando le tendenze in queste previsioni, puoi modificare il set di addestramento per migliorare le prestazioni del modello.
Le immagini veri positivi sono caselle di convalida fornite al modello addestrato che il modello ha annotato correttamente:
Le immagini falsi negativi sono fornite in modo simile al modello addestrato, ma il modello non è riuscito ad annotare correttamente un'istanza di un oggetto:
Infine, le immagini falsi positivi sono quelle fornite al modello addestrato che annotavano le istanze di un oggetto non annotate nell'area specificata:
Il modello sta selezionando richieste d'angolo interessanti, il che presenta l'opportunità di perfezionare le definizioni e le etichette per aiutare il modello a comprendere le tue interpretazioni delle etichette. Ad esempio, una definizione più rigorosa aiuterebbe il modello a capire se consideriamo un peperone ripieno un'"insalata" (o meno). Con loop di etichetta, addestramento e valutazione ripetuti, il modello mostrerà altre ambiguità di questo tipo nei dati.
Puoi anche regolare la soglia del punteggio in questa visualizzazione nell'interfaccia utente; le immagini TP, FN e FP visualizzate rifletteranno la modifica della soglia:
Interpretazione delle metriche di valutazione
I modelli di rilevamento degli oggetti eseguono l'output di molti riquadri di delimitazione per un'immagine di input; ognuno dei quali include 1) un'etichetta e 2) un punteggio o una confidenza. Le metriche di valutazione ti aiuteranno a rispondere a diverse domande chiave sulle prestazioni del tuo modello:
- Il numero di scatole è quello giusto?
- Il modello tende a dare punteggi più bassi ai casi marginali?
- Quanto si avvicinano le caselle previste con quelle dei dati di fatto?
Tieni presente che queste metriche, proprio come quelle nella classificazione con più etichette, non indicano la confusione delle classi oltre ai punteggi generalmente più bassi.
Quando esamini l'output del modello per immagine, devi trovare un modo per esaminare una coppia di scatole (ovvero la casella basata su dati di fatto e la casella prevista) e determinare l'efficacia di una corrispondenza. Devi considerare, ad esempio:
- Entrambe le scatole hanno la stessa etichetta?
- Quanto si sovrappongono i riquadri?
- Con quale affidabilità il modello ha previsto la scatola?
Per soddisfare il secondo requisito, introduciamo una nuova misurazione denominata intersection-over-union o IoU.
IoU e soglia IoU
L'intersezione sull'unione determina il grado di corrispondenza tra due scatole. Il valore IoU va da 0 (senza sovrapposizione) a 1 (le scatole sono identiche) e viene calcolato dividendo l'area in comune tra i due scatole per l'area inclusa in almeno uno dei riquadri. Il servizio AutoML ti consente di esaminare le prestazioni del modello con diverse soglie IoU.
Perché potrebbe essere utile modificare la soglia di IoU?
Considera il caso d'uso di contare le auto in un parcheggio. Non è importante che le coordinate dei riquadri siano molto precise, è sufficiente che tu abbia il numero totale corretto di riquadri. In questo caso, è appropriata una soglia di IoU bassa.
![immagine di scatole con le soglie basse intorno alle auto](https://cloud.google.com/static/vision/automl/object-detection/docs/images/cars_with_boxes.png?authuser=2&hl=it)
In alternativa, valuta la possibilità di misurare le dimensioni di una macchia di tessuto. In questo caso sono necessarie coordinate molto precise, pertanto una soglia di IoU molto più elevata è appropriata.
![immagine della scatola con una soglia alta intorno a macchie di tessuto](https://cloud.google.com/static/vision/automl/object-detection/docs/images/fabric_stain_with_boxes.png?authuser=2&hl=it)
Tieni presente che non è necessario addestrare nuovamente il modello se cambi idea sulla soglia giusta per il tuo caso d'uso; hai già accesso alle metriche di valutazione a diverse soglie di IoU.
Punteggio e soglia di punteggio
Analogamente ai modelli di classificazione, gli output dei modelli per il rilevamento degli oggetti (ora scatole) hanno un punteggio. Come per la classificazione delle immagini, esiste una soglia di punteggio che puoi specificare dopo l'addestramento per determinare se una corrispondenza è buona o meno. La modifica della soglia del punteggio consente di ottimizzare i tassi di falsi positivi e veri positivi in base alle esigenze specifiche del tuo modello. Un utente che punta a un richiamo molto alto in genere utilizza una soglia di punteggio inferiore nell'elaborazione dell'output del modello.
Esegui l'iterazione sul modello
Se i livelli qualitativi non sono soddisfacenti, puoi tornare ai passaggi precedenti per migliorare la qualità:
- Valuta la possibilità di aggiungere altre immagini alle etichette riquadro di delimitazione di bassa qualità.
- Potresti dover aggiungere diversi tipi di immagini (ad es. un angolo più ampio, una risoluzione superiore o inferiore, diversi punti di vista).
- Valuta la possibilità di rimuovere completamente le etichette del riquadro di delimitazione se non disponi di un numero sufficiente di immagini di addestramento.
- I nostri algoritmi di addestramento non utilizzano i nomi delle tue etichette. Se hai un'etichetta con la dicitura "door" e un'altra con la dicitura "door_with_knob", l'algoritmo non ha modo di comprendere le sfumature diverse dalle immagini che gli fornisci.
- Arricchisci i tuoi dati con un maggior numero di esempi di veri positivi e negativi. Gli esempi particolarmente importanti sono quelli vicini al confine decisionale (ovvero che possono generare confusione, ma che sono comunque etichettati correttamente).
- Specifica la tua suddivisione TRAIN, TEST e VALIDATE. Lo strumento assegna le immagini in modo casuale, ma dei duplicati potrebbero terminare in TRAIN e VALIDATE, il che potrebbe portare a un overfitting e a prestazioni scarse per il set di TEST.
Dopo aver apportato le modifiche, addestra e valuta un nuovo modello fino a raggiungere un livello qualitativo sufficientemente elevato.