I modelli di apprendimento profondo di solito sono pesanti e richiedono una considerevole potenza di calcolo. Integrando l'addestramento di modelli di TensorFlow Lite conArcGIS API for Python, è possibile creare dei modelli di apprendimento profondo che sono al tempo stesso di dimensioni ridotte e idonei per la distribuzione.
In questo esempio di flusso di lavoro di appunti, il framework TensorFlow Lite è utilizzato per addestrare un modello di apprendimento profondo per applicazioni mobili. Il flusso di lavoro verrà addestrato per classificare le specie vegetali e creare dei file corrispondenti da distribuire per l'inferenza diretta.
Requisiti
Per eseguire il flusso di lavoro devono essere soddisfatti i seguenti requisiti:
- Il dataset di addestramento, composto da una serie di immagini di specie vegetali etichettate.
Nota:
Le dimensioni del dataset sono circa 440MB, tuttavia, nel seguente esempio ne saranno utilizzati solo 200MB. Se non è possibile accedere al dataset di addestramento, è necessario Raster Server per generare idonei dati di addestramento nel formato richiesto.
- Per eseguire questo flusso di lavoro, il limite massimo di memoria dell'ambiente di appunti deve essere impostato a 15GB. Il limite di memoria negli ambienti di appunti standard e avanzati è impostato di default, rispettivamente a 4GB e a 6GB. Per modificare il limite, effettuare l'accesso al Gestore di ArcGIS Notebook Server con ruolo amministrativo e fare clic su Impostazioni > Runtime.
Nota:
Il limite di memoria necessario per il flusso di lavoro dipende dalle dimensioni dei dati di addestramento.
- L'apprendimento profondo utilizza un elevato numero di calcoli e si consiglia di utilizzare una GPU potente per elaborare grandi dataset.
Importazioni libreria di Python
Importare le seguenti librerie di Python:#To enable TensorFlow as backend
%env ARCGIS_ENABLE_TF_BACKEND=1
import os
from pathlib import Path
from arcgis.gis import GIS
from arcgis.learn import prepare_data, FeatureClassifier
gis = GIS("home")
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
#Use export_training_data() to get the training data
filepath = "/arcgis/home/train_200MB_a_tensorflow-lite_model_for_identifying_plant_species.zip"
#Extract zip
import zipfile
with zipfile.ZipFile(filepath, "r") as zip_ref:
zip_ref.extractall(Path(filepath).parent)
#Get the data path
data_path = Path(os.path.join(os.path.splitext(filepath)[0]))
#Filter non-RGB images
from glob import glob
from PIL import Image
for image_filepath in glob(os.path.join(data_path, "images", "**","*.jpg")):
if Image.open(image_filepath).mode != "RGB":
os.remove(image_filepath)
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=data_path,
dataset_type="Imagenet",
batch_size=64,
chip_size=224
)
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(rows=2)
Caricare l'architettura modello
Il modello Feature Classifier in arcgis.learn stabilirà la classe di ciascuna feature. Feature Classifier richiede i seguenti parametri:
- backbone: una stringa facoltativa. Il modello di rete neurale convoluzionale backbone utilizzato per l'estrazione di feature, che per impostazione predefinita è resnet34. Le backbone supportate includono la famiglia ResNet e modelli Timm specificati (supporto sperimentale) di backbone().
- backend: una stringa facoltativa.
Controlla il framework backend da utilizzare per il modello che per impostazione predefinita è "pytorch".
model = FeatureClassifier(data, backbone="MobileNetV2", backend="tensorflow")
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.000691831 #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)
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("Plant-identification-25-tflite", framework="tflite")
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 utilizzare un file .dlpk, vedere Conteggio auto in immagini aeree utilizzando l'apprendimento profondo.