Los modelos de aprendizaje profundo suelen ser grandes y requieren una potencia informática significativa. Al integrar el entrenamiento de modelos con ArcGIS API for Python, puede crear unos modelos de aprendizaje profundo que sean compactos y adecuados para la implementación móvil.
En este ejemplo de flujo de trabajo de notebook, se utiliza el modelo Multi-task Road Extractor para extraer una red de carreteras a partir de imágenes de satélite.
Requisitos
Para llevar a cabo este flujo de trabajo, debe cumplir los siguientes requisitos:
- Descargue el dataset de entrenamiento, compuesto por datos de SpaceNet para las líneas centrales de las carreteras de la región de París.
Nota:
Si no puede acceder al dataset de entrenamiento, necesitará Raster Server para generar datos de entrenamiento adecuados en el formato requerido.
- Para ejecutar este flujo de trabajo, el límite máximo de memoria del entorno de notebook debe establecerse en 15 GB. El límite de memoria en los entornos de notebook Standard y Advanced está establecido en 4 GB y 6 GB respectivamente de forma predeterminada. Para cambiar este límite, inicie sesión en ArcGIS Enterprise Manager y haga clic en Capacidades > Configuración (Servicios de Notebook) > Tiempos de ejecución.
Nota:
El límite de memoria necesario para este flujo de trabajo depende del tamaño de los datos de entrenamiento.
Importación de bibliotecas de Python
Importe las siguientes bibliotecas de Python:from arcgis.gis import GIS
gis = GIS("home")
import os, zipfile
from pathlib import Path
from arcgis.learn import prepare_data, MultiTaskRoadExtractor
Cargar datos en el espacio de trabajo
Cargue el dataset en el espacio de trabajo del notebook en Files como un archivo .zip que contenga imágenes etiquetadas en una carpeta llamada 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]))
Preparar los datos
La función prepare_data() de ArcGIS API for Python prepara los datos para los flujos de trabajo de aprendizaje profundo. Esta función lee muestras de entrenamiento y automatiza el proceso de preparación de datos aplicando diversas transformaciones y aumentos a los datos de entrenamiento. Estos aumentos permiten entrenar los modelos con datos limitados y evitan el sobreajuste de los modelos.data = prepare_data(
path=output_path,
batch_size=4,
chip_size=512
)
data.classes
Para obtener información sobre los parámetros de la función prepare_data(), consulte la referencia de API de arcgis.learn.
Visualizar los datos
Una vez que haya preparado los datos, puede utilizar la función show_batch() para visualizar muestras de ellos.data.show_batch(alpha=1)
Cargar la arquitectura del modelo
El marco Multi-task Road Extractor en arcgis.learn admite dos arquitecturas que se pueden configurar mediante el parámetro mt1_model. El parámetro se puede establecer en la arquitectura linknet o hourglass.
En esta fase se pueden configurar opcionalmente parámetros avanzados específicos del modelo:
- gaussian_thresh: establece el umbral gaussiano, lo que le permite establecer el ancho de carretera requerido.
- orient_bin_size: establece el tamaño del contenedor para los ángulos de orientación.
- orient_theta: establece el ancho de la máscara de orientación.
model = MultiTaskRoadExtractor(data, mtl_model="hourglass")
Calcular la tasa de aprendizaje
ArcGIS API for Python utiliza el buscador de tasas de aprendizaje de fast.ai para encontrar la tasa de aprendizaje óptima para entrenar los modelos. Utilice el método lr_find() para encontrar una tasa de aprendizaje óptima para entrenar un modelo sólido. Después de determinar la tasa de aprendizaje con la primera ejecución del modelo, puede aprobarla como un valor fijo para ejecuciones posteriores mientras vuelve a entrenar el modelo.lr = model.lr_find()
#lr = 0.0005754 #from the first run
Ajuste de modelos
Para entrenar el modelo se utiliza el método fit(). Este método requiere una entrada para el parámetro epoch. Un epoch define la cantidad de veces que el modelo estará expuesto a todo el dataset de entrenamiento. Cada epoch permite que el modelo aprenda y ajuste sus ponderaciones en función de los datos. En el ejemplo siguiente, el modelo se ejecuta en tres epochs con fines de prueba.
Se recomienda empezar con 25 epochs para obtener un modelo más preciso para la implementación.
model.fit(3, lr=lr, early_stopping=True)
Visualizar los resultados
Para validar los resultados del modelo en el notebook, puede utilizar el método show_results() para comparar las predicciones del modelo con imágenes de realidad del terreno aleatorias.
model.show_results(rows=4, thresh=0.2)
Guardar el modelo
Cuando haya confirmado la precisión del modelo entrenado, guárdelo para una implementación futura. De forma predeterminada, el modelo se guardará como un archivo .dlpk en la subcarpeta de modelos dentro de la carpeta de datos de entrenamiento.
model.save('/arcgis/home/road_model_for_spacenet_data')
Implementar el modelo
Ahora, el archivo .dlpk guardado puede implementarse con otros datasets y compartirse dentro de su organización. Para obtener más información sobre cómo consumir un archivo .dlpk, consulte Ejemplo: Inferencia utilizando un modelo preentrenado.