Przykład: Kompleksowa procedura wykonywania zadań Deep Learning

Modele Deep Learning są zazwyczaj duże i wymagają znacznej mocy obliczeniowej. Integrując trening modeli z interfejsem ArcGIS API for Python, można tworzyć kompaktowe modele Deep Learning, które nadają się do wdrażania na urządzeniach przenośnych.

W procedurze wykonywania zadań tego przykładowego notatnika użyto modelu Multi-task Road Extractor do wyodrębnienia sieci dróg z zobrazowań satelitarnych.

Wymagania

Aby wykonać tę procedurę wykonywania zadań, musisz spełnić następujące wymagania:

  • Musisz mieć treningowy zestaw danych, składający się z danych SpaceNet dotyczących linii środkowych dróg w regionie paryskim.
    Notatka:

    Jeśli nie masz dostępu do treningowego zestawu danych, odpowiednie dane treningowe w wymaganym formacie można wygenerować na serwerze Raster Server.

  • Deep Learning wymaga dużych mocy obliczeniowych, dlatego zaleca się użycie zaawansowanego środowiska wykonawczego notatników wspieranego przez wydajny procesor graficzny.

Importowanie bibliotek języka Python

Zaimportuj następujące biblioteki języka Python:

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

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

Przesyłanie danych do przestrzeni roboczej

Prześlij zestaw danych do przestrzeni roboczej notatników (w obszarze Files) w formie pliku .zip zawierającego oznakowane elementy obrazów w folderze o nazwie 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]))

Przygotowanie danych

Funkcja prepare_data() interfejsu ArcGIS API for Python przygotowuje dane dla procedur wykonywania zadań Deep Learning. Funkcja ta odczytuje próbki treningowe i automatyzuje proces przygotowywania danych poprzez zastosowanie różnych przekształceń i rozszerzeń do danych treningowych. Te rozszerzenia pozwalają na trenowanie modeli z ograniczonymi danymi i zapobiegają nadmiernemu dopasowaniu modeli.

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

Aby uzyskać informacje na temat parametrów funkcji prepare_data(), zapoznaj się ze skorowidzem interfejsu API arcgis.learn.

Wizualizowanie danych

Po przygotowaniu danych możesz użyć funkcji show_batch() do wizualizacji próbek.

data.show_batch(alpha=1)

Wczytywanie architektury modelu

Struktura modelu Multi-task Road Extractor w arcgis.learn obsługuje dwie architektury, które można skonfigurować za pomocą parametru mt1_model. Jego wartość można ustawić na architekturę linknet lub hourglass.

Na tym etapie można opcjonalnie skonfigurować zaawansowane parametry dotyczące modelu:

  • gaussian_thresh– ustawia próg Gaussa, który umożliwia określenie wymaganej szerokości drogi.
  • orient_bin_size– ustawia wielkość kosza dla kątów orientacji.
  • orient_theta– ustawia szerokość maski orientacji.

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

Obliczanie współczynnika uczenia się

ArcGIS API for Python wykorzystuje wyszukiwarkę tempa uczenia się fast.ai, aby znaleźć optymalną szybkość uczenia się podczas trenowania modeli. Użyj metody lr_find(), aby znaleźć optymalne tempo uczenia się w celu wytrenowania solidnego modelu. Po określeniu tempa uczenia się przy pierwszym uruchomieniu modelu, możesz przekazać tę wartość jako stałą do kolejnych uruchomień podczas ponownego trenowania modelu.

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

Dopasowanie modelu

Do trenowania modelu używana jest metoda fit(). Metoda ta wymaga wprowadzenia parametru epoki. Epoka definiuje, ile razy w modelu zostanie przetworzony cały treningowy zestaw danych. Każda epoka pozwala modelowi uczyć się i dostosowywać wagi w oparciu o dane. W poniższym przykładzie model jest uruchamiany dla trzech epok w celach testowych.

Zaleca się rozpoczęcie od 25 epok, aby uzyskać dokładniejszy model do wdrożenia.

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

Wizualizacja wyników

Aby zweryfikować wyniki modelu w notatniku, możesz użyć metody show_results() do porównania prognoz modelu z losowymi wiarygodnymi obrazami.

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

Zapisanie modelu

Po potwierdzeniu dokładności wytrenowanego modelu, zapisz go do przyszłego wdrożenia. Domyślnie model zostanie zapisany jako plik .dlpk w podfolderze models folderu danych treningowych.

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

Wdrażanie modelu

Zapisany plik .dlpk może teraz zostać wdrożony wraz z innymi zestawami danych i udostępniony w Twojej instytucji. Informacje na temat wykorzystania pliku .dlpk podano w sekcji Przykład: wnioskowanie przy użyciu wstępnie wytrenowanego modelu.