Eseguire il training di un modello di rilevamento oggetti di piccole dimensioni con AutoML

SI APPLICA A: Python SDK azure-ai-ml v2 (corrente)

In questo articolo si apprenderà come eseguire il training di un modello di rilevamento oggetti per rilevare oggetti di piccole dimensioni in immagini ad alta risoluzione con Machine Learning automatizzato in Azure Machine Learning.

In genere, i modelli di visione artificiale per il rilevamento degli oggetti funzionano bene per i set di dati con oggetti relativamente grandi. Tuttavia, a causa di vincoli di memoria e calcolo, questi modelli tendono a eseguire quando è in attività per rilevare piccoli oggetti nelle immagini ad alta risoluzione. Poiché le immagini ad alta risoluzione sono in genere grandi, vengono ridimensionate prima dell'input nel modello, che limita la capacità di rilevare oggetti più piccoli rispetto alle dimensioni iniziali dell'immagine.

Per aiutare a risolvere questo problema, MACHINE automatizzato supporta l'associazione come parte delle funzionalità di visione artificiale. La funzionalità di tiling in Machine Learning automatizzata si basa sui concetti di Power of Tiling for Small Object Detection.

Quando si tilla, ogni immagine è divisa in una griglia di riquadri. I riquadri adiacenti si sovrappongono tra loro in dimensioni di larghezza e altezza. I riquadri vengono ritagliati dall'originale, come illustrato nell'immagine seguente.

Diagramma che mostra un'immagine divisa in una griglia di riquadri sovrapposti.

Prerequisiti

Modelli supportati

Il rilevamento di oggetti di piccole dimensioni tramite il tiling è supportato per tutti i modelli supportati da Machine Learning automatizzato per le immagini per l'attività di rilevamento degli oggetti.

Abilitare la tiling durante il training

Per abilitare la tiling, è possibile impostare il tile_grid_size parametro su un valore simile a '3x2'; dove 3 è il numero di riquadri lungo la dimensione di larghezza e 2 è il numero di riquadri lungo la dimensione altezza. Quando questo parametro è impostato su '3x2', ogni immagine viene suddivisa in una griglia di 3 x 2 riquadri. Ogni riquadro si sovrappone ai riquadri adiacenti, in modo che tutti gli oggetti che rientrano sul bordo del riquadro siano inclusi completamente in uno dei riquadri. Questa sovrapposizione può essere controllata dal tile_overlap_ratio parametro, che viene predefinito al 25%.

Quando l'associazione è abilitata, l'intera immagine e i riquadri generati vengono passati attraverso il modello. Queste immagini e riquadri vengono ridimensionati in base ai min_size parametri e max_size prima di inserire nel modello. Il tempo di calcolo aumenta proporzionalmente a causa dell'elaborazione di questi dati aggiuntivi.

Ad esempio, quando il parametro è '3x2', il tile_grid_size tempo di calcolo sarebbe circa sette volte superiore a quello senza tiling.

È possibile specificare il valore per tile_grid_size nei parametri di training come stringa.

SI APPLICA A:Estensione dell'interfaccia della riga di comando di Azure v2 (corrente)

training_parameters:
  tile_grid_size: '3x2'

Il valore per tile_grid_size il parametro dipende dalle dimensioni e dalle dimensioni dell'immagine degli oggetti all'interno dell'immagine. Ad esempio, il numero maggiore di riquadri sarebbe utile quando sono presenti oggetti più piccoli nelle immagini.

Per scegliere il valore ottimale per questo parametro per il set di dati, è possibile usare la ricerca di iperparametri. A tale scopo, è possibile specificare una scelta di valori per questo parametro nello spazio dell'iperparametro.

SI APPLICA A:Estensione dell'interfaccia della riga di comando di Azure v2 (corrente)

search_space:
  - model_name:
      type: choice
      values: ['fasterrcnn_resnet50_fpn']
    tile_grid_size:
      type: choice
      values: ['2x1', '3x2', '5x3']

Tiling durante l'inferenza

Quando viene distribuito un modello sottoposto a training con tiling, l'associazione si verifica anche durante l'inferenza. Machine Learning automatizzato usa il valore dal training per generare i riquadri durante l'inferenza tile_grid_size . L'intera immagine e i riquadri corrispondenti vengono passati attraverso il modello e le proposte dell'oggetto vengono unite alle stime finali di output, come nell'immagine seguente.

Diagramma che mostra le proposte dell'oggetto dall'immagine e dai riquadri uniti per formare le stime finali.

Nota

È possibile che lo stesso oggetto venga rilevato da più riquadri, il rilevamento della duplicazione viene eseguito per rimuovere tali duplicati.

Il rilevamento duplicato viene eseguito eseguendo NMS nelle proposte dai riquadri e dall'immagine. Quando più proposte si sovrappongono, quella con il punteggio più alto viene selezionata e altre vengono rimosse come duplicati. Due proposte vengono considerate sovrapposte quando l'intersezione su unione (iou) tra di essi è maggiore del tile_predictions_nms_thresh parametro.

È anche possibile abilitare la tiling solo durante l'inferenza senza abilitarla nel training. A tale scopo, impostare il parametro solo durante l'inferenza, non per il tile_grid_size training.

In questo modo, può migliorare le prestazioni per alcuni set di dati e non comporta il costo aggiuntivo fornito con la tiling in fase di training.

Tiling iperparameters

Di seguito sono riportati i parametri che è possibile usare per controllare la funzionalità di tiling.

Nome parametro Descrizione Predefinito
tile_grid_size Dimensioni della griglia da usare per l'associazione di ogni immagine. Disponibile per l'uso durante il training, la convalida e l'inferenza.

Deve essere passato come stringa in '3x2' formato.

Nota: l'impostazione di questo parametro aumenta il tempo di calcolo in modo proporzionale, poiché tutti i riquadri e le immagini vengono elaborati dal modello.
nessun valore predefinito
tile_overlap_ratio Controlla il rapporto di sovrapposizione tra riquadri adiacenti in ogni dimensione. Quando gli oggetti che rientrano sul limite del riquadro sono troppo grandi per adattarsi completamente in uno dei riquadri, aumentare il valore di questo parametro in modo che gli oggetti si adattano completamente a uno dei riquadri.

Deve essere un float in [0, 1).
0,25
tile_predictions_nms_thresh L'intersezione sulla soglia di unione da usare per eseguire l'eliminazione non massima (nms) durante l'unione delle stime dai riquadri e dall'immagine. Disponibile durante la convalida e l'inferenza. Modificare questo parametro se sono presenti più caselle rilevate per oggetto nelle stime finali.

Deve essere float in [0, 1].
0,25

Notebook di esempio

Vedere il notebook di esempio di rilevamento degli oggetti per esempi di codice dettagliati di configurazione e training di un modello di rilevamento oggetti.

Nota

Tutte le immagini di questo articolo sono rese disponibili in conformità alla sezione di utilizzo consentita del contratto di licenza MIT. Copyright © 2020 Roboflow, Inc.

Passaggi successivi