I modelli di apprendimento profondo di solito sono pesanti e richiedono una considerevole potenza di calcolo. Integrando l'addestramento di modelli con ArcGIS API for Python, è possibile creare dei modelli di apprendimento profondo che sono al tempo stesso di dimensioni ridotte e idonei per la distribuzione mobile.
In questo flusso di lavoro di esempio il modello dell'Estrattore di strade multi-attività è utilizzato per estrarre una rete stradale dalle immagini satellitari.
Requisiti
Per eseguire il flusso di lavoro devono essere soddisfatti i seguenti requisiti:
- Il dataset di addestramento, comprendeva dati SpaceNet per le linee di mezzeria nella regione di Parigi.
Nota:
Se non è possibile accedere al dataset di addestramento, è richiesto Raster Server per generare idonei dati di addestramento nel formato richiesto.
- L'apprendimento profondo richiede un'elevata potenza di calcolo, pertanto si consiglia di utilizzare un tempo di esecuzione Avanzato del notebook con supporto GPU.
Importazioni libreria di Python
Importare le seguenti librerie di Python:from arcgis.gis import GIS
gis = GIS("home")
import os, zipfile
from pathlib import Path
from arcgis.learn import prepare_data, MultiTaskRoadExtractor
Caricare i dati nel workspace
Caricare il dataset nel workspace degli appunti in Files come un file .zip contenente frammenti di immagini etichettate in una cartella denominata images.#Adding zipped file from workspace
filepath = training_data = gis1.content.get('itemID')
filepath = training_data.download(save_path='/arcgis/home/input', file_name=training_data.name)
filepath
assert os.path.exists(filepath) == 1
#Extract zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
zip_ref.extractall(Path(filepath).parent)
#Get the data path
output_path = Path(os.path.join(os.path.splitext(filepath)[0]))
Preparare i dati
La funzione prepare_data() in ArcGIS API for Python prepara i dati per i flussi di lavoro di apprendimento profondo. La funzione legge i campioni addestrati e automatizza il processo di preparazione dei dati applicando trasformazioni e aumenti vari ai dati di addestramento. Questi aumenti consentono l'addestramento dei modelli con dati limitati e ne evitano l'adattamento eccessivo.data = prepare_data(
path=output_path,
batch_size=4,
chip_size=512
)
data.classes
Per informazioni sui parametri della funzione prepare_data(). vedere l'API di riferimento arcgis.learn.
Visualizzare i dati
Dopo aver preparato i dati si può utilizzare la funzione show_batch() per visualizzarne dei campioni.data.show_batch(alpha=1)
Caricare l'architettura modello
Il framework dell'estrattore di strade multi-attività in arcgis.learn supporta due architetture che possono essere impostate utilizzando il parametro mt1_model. Il parametro può essere impostato nell'architettura linknet oppure hourglass.
In alternativa, in questa fase è possibile impostare parametri avanzati specifici per il modello:
- gaussian_thresh: imposta la soglia gaussiana che consente di configurare la larghezza richiesta per le strade.
- orient_bin_size: imposta la dimensione del bin per gli angoli di orientamento.
- orient_theta: imposta la larghezza della maschera di orientamento.
model = MultiTaskRoadExtractor(data, mtl_model="hourglass")Calcolare il tasso di apprendimento
ArcGIS API for Python utilizza lo strumento di ricerca del tasso di apprendimento di fast.ai per trovare il tasso di apprendimento ottimale per l'addestramento dei modelli. Utilizzare il metodo lr_find() per trovare un tasso di apprendimento ottimale per addestrare un modello robusto. Dopo aver stabilito il tasso di apprendimento con la prima esecuzione del modello, è possibile adottarlo come valore fisso per altre esecuzioni mentre si riaddestra il modello.lr = model.lr_find()
#lr = 0.0005754 #from the first run
Adattamento modello
Il metodo fit() è utilizzato per addestrare il modello. Il metodo richiede un input per il parametro periodo. Un periodo definisce il numero di volte in cui il modello sarà esposto al dataset di addestramento completo. Un periodo consente al modello di addestrare e regolare i suoi pesi in base ai dati. Nell'esempio seguente, a scopo di prova si esegue il modello per tre periodi.
Si consiglia di iniziare con 25 periodi per ottenere un modello più accurato per la distribuzione.
model.fit(3, lr=lr, early_stopping=True)Visualizzare i risultati
Per confermare i risultati del modello negli appunti è possibile utilizzare il metodo show_results() che consente di confrontare le previsioni del modello con immagini casuali di ground truth.
model.show_results(rows=4, thresh=0.2)Salva il modello
Salvare il modello per futura distribuzione dopo averne confermato la precisione. Per impostazione predefinita il modello verrà salvato come un file .dlpk nella sottocartella di modelli nella cartella dei dati di addestramento.
model.save('/arcgis/home/road_model_for_spacenet_data')Distribuire il modello
Il file .dlpk a questo punto può essere distribuito con altri dataset e condiviso all'interno dell'organizzazione. Per informazioni su come consumare un file .dlpk, vedere Esempio: Inferenza utilizzando un modello preaddestrato.