Exemplo: Fluxo de trabalho de deep learning de ponta a ponta

Os modelos de deep learning geralmente são grandes e exigem poder computacional significativo. Ao integrar o treinamento de modelos com ArcGIS API for Python, você pode criar modelos de deep learning que sejam compactos e adequados para implantação móvel.

Neste exemplo de fluxo de trabalho do notebook, o modelo Multi-task Road Extractor é usado para extrair uma rede rodoviária de imagens de satélite.

Requisitos

Para executar este fluxo de trabalho, você deve atender aos seguintes requisitos:

  • O conjunto de dados de treinamento, composto por dados do SpaceNet para eixos rodoviários na região de Paris.
    Anotação:

    Se você não conseguir acessar o conjunto de dados de treinamento, o Servidor Raster será necessário para gerar dados de treinamento adequados no formato necessário.

  • Deep learning exige alto poder computacional, e recomenda-se o uso de um ambiente de execução de notebook avançado com suporte a GPU.

Importações de bibliotecas Python

Importe as seguintes bibliotecas Python:

from arcgis.gis import GIS
gis = GIS("home")

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

Transferir dados para sua área de trabalho

Transfira o conjunto de dados na sua área de trabalho do notebook em Files como um arquivo .zip contendo chips de imagens rotulados em uma pasta chamada 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 seus dados

A função prepare_data() no ArcGIS API for Python prepara dados para fluxos de trabalho de deep learning. A função lê amostras de treinamento e automatiza o processo de preparação de dados aplicando várias transformações e aumentos aos dados de treinamento. Esses aumentos permitem que os modelos sejam treinados com dados limitados e evitam o sobreajuste dos modelos.

data = prepare_data(
    path=output_path,
    batch_size=4,
    chip_size=512
)
data.classes

Para obter informações sobre os parâmetros da função prepare_data(), consulte Referência da API arcgis.learn.

Visualize seus dados

Depois de preparar seus dados, você pode usar a função show_batch() para visualizar amostras deles.

data.show_batch(alpha=1)

Carregar a arquitetura do modelo

A estrutura Multi-task Road Extractor no arcgis.learn suporta duas arquiteturas que podem ser definidas usando o parâmetro mt1_model. O parâmetro pode ser definido como arquitetura linknet ou hourglass..

Parâmetros avançados específicos do modelo podem ser definidos opcionalmente nesta fase:

  • gaussian_thresh— Define o limite Gaussiano, que permite definir a largura de estrada necessária.
  • orient_bin_size— Define o tamanho do compartimento para ângulos de orientação.
  • orient_theta— Define a largura da máscara de orientação.

model = MultiTaskRoadExtractor(data, mtl_model="hourglass")

Calcular a taxa de aprendizagem

O ArcGIS API for Python usa o localizador de taxa de aprendizado do fast.ai para encontrar uma taxa de aprendizado ideal para treinar seus modelos. Use o método lr_find() para encontrar uma taxa de aprendizado ideal para treinar um modelo robusto. Depois de determinar a taxa de aprendizado na primeira execução do seu modelo, você pode passá-la como um valor fixo para execuções posteriores enquanto retreina o modelo.

lr = model.lr_find()
#lr =  0.0005754 #from the first run

Ajuste de modelo

O método fit() é usado para treinar seu modelo. O método requer uma entrada para o parâmetro epoch. Uma época define o número de vezes que o modelo será exposto a todo o conjunto de dados de treinamento. Cada época permite que o modelo aprenda e ajuste seus pesos com base nos dados. No exemplo a seguir, o modelo é executado por três épocas para fins de teste.

É recomendável que você comece com 25 épocas para obter um modelo mais preciso para implantação.

model.fit(3, lr=lr, early_stopping=True)

Visualize os resultados

Para validar os resultados do seu modelo no seu notebook, você pode usar o método show_results() para comparar as previsões do seu modelo com imagens aleatórias da verdade básica.

model.show_results(rows=4, thresh=0.2)

Salvar o modelo

Depois de confirmar a precisão do seu modelo treinado, salve-o para implantação futura. Por padrão, o modelo será salvo como um arquivo .dlpk na subpasta de modelos dentro da pasta de dados de treinamento.

model.save('/arcgis/home/road_model_for_spacenet_data')

Implantar o modelo

Seu arquivo salvo .dlpk agora pode ser implantado com outros conjuntos de dados e compartilhado dentro de sua organização. Para obter informações sobre como consumir um arquivo .dlpk, consulte Exemplo: Inferência usando um modelo pré-treinado.