Eseguire il training di un piccolo modello di rilevamento oggetti con AutoML (anteprima) (v1)

SI APPLICA A: Python SDK azureml v1

Importante

Alcuni comandi dell'interfaccia della riga di comando (CLI) di Azure in questo articolo usano l'estensione azure-cli-ml, o v1, per Azure Machine Learning. L'assistenza per l'estensione v1 terminerà il 30 settembre 2025. Sarà possibile installare e usare l'estensione v1 fino a tale data.

Consigliamo di passare all'estensione ml, o v2, prima del 30 settembre 2025. Per ulteriori informazioni sull'estensione v2, consultare Estensione dell'interfaccia della riga di comando (CLI) di Azure Machine Learning e Python SDK v2.

Importante

Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza un contratto di servizio. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Questo articolo illustra come eseguire il training di un modello di rilevamento oggetti per rilevare oggetti di piccole dimensioni in immagini ad alta risoluzione con ML automatizzato in Azure Machine Learning.

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

Per risolvere questo problema, Machine Learning automatizzato supporta l'affiancamento come parte delle funzionalità di visione artificiale in anteprima pubblica. La funzionalità di affiancamento in Machine Learning automatizzato si basa sui concetti in La potenza di affiancamento per il rilevamento di oggetti piccoli.

Con l’affiancamento, ogni immagine viene divisa in una griglia di riquadri. I riquadri adiacenti si sovrappongono tra loro nelle dimensioni della larghezza e dell’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 piccoli oggetti tramite l’affiancamento è supportato per tutti i modelli supportati da Machine Learning automatizzato per le immagini per l’attività di rilevamento oggetti.

Abilitare l’affiancamento durante il training

Per abilitare l'affiancamento, è possibile impostare il parametro tile_grid_size su un valore come (3, 2); 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 (3, 2), 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 cadono sul bordo del riquadro siano inclusi completamente in uno dei riquadri. Questa sovrapposizione può essere controllata tramite il parametro tile_overlap_ratio, che per impostazione predefinita è 25%.

Quando è abilitato l'affiancamento, viene eseguito il pass-through nel modello dell'intera immagine e dei riquadri generati. Queste immagini e riquadri vengono ridimensionati in base ai parametri min_size e max_size prima dell’inserimento nel modello. Il tempo di calcolo aumenta proporzionalmente a causa dell'elaborazione di questi dati aggiuntivi.

Ad esempio, quando il parametro tile_grid_size è (3, 2), il tempo di calcolo sarà circa sette volte superiore rispetto a un tempo di calcolo senza affiancamento.

È possibile specificare il valore per tile_grid_size nello spazio degli iperparametri come stringa.

parameter_space = {
    'model_name': choice('fasterrcnn_resnet50_fpn'),
    'tile_grid_size': choice('(3, 2)'),
    ...
}

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

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

parameter_space = {
    'model_name': choice('fasterrcnn_resnet50_fpn'),
    'tile_grid_size': choice('(2, 1)', '(3, 2)', '(5, 3)'),
    ...
}

Affiancamento durante l'inferenza

Quando viene distribuito un modello sottoposto a training con affiancamento, durante l'inferenza avviene anche l’affiancamento. Machine Learning automatizzato usa il valore tile_grid_size dal training per la generazione dei riquadri durante l'inferenza. L'intera immagine e i riquadri corrispondenti vengono passati tramite il modello e le proposte di oggetto da essi vengono unite per restituire l’output delle stime finali, come nell'immagine seguente.

Diagramma che mostra le proposte di oggetti provenienti da immagini e riquadri uniti per formare le stime finali.

Nota

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

Il rilevamento dei duplicati viene effettuato eseguendo NMS sulle proposte dei riquadri e dell'immagine. Quando più proposte si sovrappongono, viene selezionata quella con il punteggio più alto e le altre vengono eliminate come duplicati. Due proposte vengono considerate sovrapposte quando l'intersezione sull’unione (IOU) tra di esse è maggiore del parametro tile_predictions_nms_thresh.

È anche possibile abilitare l'affiancamento solo durante l'inferenza senza abilitarlo nel training. A tale scopo, impostare il parametro tile_grid_size solo durante l'inferenza e non per il training.

In questo modo si possono migliorare le prestazioni per alcuni set di dati e non si incorre nel costo aggiuntivo derivante dall’affiancamento in fase di training.

Iperparametri di affiancamento

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

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

Tupla di due interi passati come stringa, ad esempio '(3, 2)'

Nota: l'impostazione di questo parametro aumenta il tempo di calcolo proporzionalmente, 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 a uno dei riquadri, aumentare il valore di questo parametro in modo che gli oggetti si adattino completamente a uno dei riquadri.

Deve essere float in [0, 1).
0.25
tile_predictions_nms_thresh La soglia di intersezione sull’unione da usare per la soppressione non massimale (nms) nell'unione di stime da riquadri e immagini. Disponibile durante la convalida e l'inferenza. Modificare questo parametro se nelle stime finali esistono più caselle rilevate per ogni oggetto.

Deve essere float in [0, 1].
0.25

Notebook di esempio

Per alcuni esempi di codice dettagliati per la configurazione e il training di un modello di rilevamento oggetti, vedere il notebook di esempio di rilevamento oggetti.

Nota

Tutte le immagini contenute in questo articolo sono rese disponibili in base alla sezione relativa all'uso consentito dell’accordo di licenza MIT. Copyright © 2020 Roboflow, Inc.

Passaggi successivi