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:
- 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.
- El aprendizaje profundo es intensivo desde el punto de vista computacional, por lo que se recomienda utilizar un entorno de ejecución de notebooks avanzado con compatibilidad con GPU.
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 su espacio de trabajo
Cargue el dataset en el espacio de trabajo de su 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 sus 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 sus 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 de su 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 su 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 de su modelo en su notebook, puede utilizar el método show_results() para comparar las predicciones de su 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 de su 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, su 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.