Пример: Непрерывный цикл рабочего процесса глубокого обучения

Модели глубокого обучения обычно имеют большой размер и требуют значительной вычислительной мощности. Интегрируя обучение моделей в ArcGIS API for Python, вы можете создавать модели глубокого обучения, которые компактны и подходят для мобильного развертывания.

В этом примере рабочего процесса блокнота модель Multi Task Road Extractor используется для извлечения дорожной сети по спутниковым снимкам.

Требования

Для выполнения этого рабочего процесса должны быть выполнены следующие требования:

  • Обучающий набор данных, состоящий из данных SpaceNet для центральных линий дорог в парижском регионе.
    Примечание:

    Если у вас нет доступа к обучающему набору данных, потребуется Raster Server для создания подходящих обучающих данных в нужном формате.

  • Глубокое обучение требует больших вычислительных ресурсов, поэтому рекомендуется использовать Advanced notebook runtime с поддержкой графического процессора.

Импортировать библиотеки Python

Импортируйте следующие библиотеки Python:

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

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

Загрузить данные в рабочую область

Загрузите набор данных в рабочую область вашего блокнота под Files в виде файла .zip, содержащего надписанные кусочки изображений в папке с именем 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]))

Подготовка ваших данных

Функция prepare_data() в ArcGIS API for Python подготавливает данные для рабочих процессов глубокого обучения. Функция считывает обучающие выборки и автоматизирует процесс подготовки данных, применяя различные преобразования и дополнения к обучающим данным. Эти дополнения позволяют обучать модели с ограниченными данными и предотвращают переобучение моделей.

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

Информацию о параметрах функции prepare_data() см. в справочнике API arcgis.learn.

Визуализация данных

После подготовки данных вы можете использовать функцию show_batch() для визуализации выборок из них.

data.show_batch(alpha=1)

Загрузить архитектуру модели

Среда Multi-task Road Extractor в arcgis.learn поддерживает две архитектуры, которые можно задать с помощью параметра mt1_model. Для этого параметра может быть установлена архитектура linknet или hourglass.

При необходимости на этом этапе можно задать дополнительные параметры в зависимости от модели:

  • gaussian_thresh - Устанавливает порог по Гауссу, который позволяет задать требуемую ширину дороги.
  • orient_bin_size - Задает размер бина для углов ориентации.
  • orient_theta - Задает ширину маски ориентации.

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

Вычислить скорость обучения

ArcGIS API for Python использует метод поиска скорости обучения fast.ai, чтобы найти оптимальную скорость обучения для обучения ваших моделей. Используйте метод lr_find(), чтобы найти оптимальную скорость обучения для обучения надежной модели. После того, как вы определили скорость обучения при первом запуске модели, вы можете передать ее как фиксированное значение для последующих запусков при повторном обучении модели.

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

Подбор модели

Для обучения вашей модели используется метод fit(). Для метода требуется ввод параметра эпохи. Эпоха определяет, сколько раз модель будет подвергаться воздействию всего обучающего набора данных. Каждая эпоха позволяет модели обучаться и настраивать свои веса на основе данных. В следующем примере модель запускается в течение трех эпох в целях тестирования.

Рекомендуется начать с 25 эпох, чтобы получить более точную модель для развертывания.

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

Визуализация результатов

Чтобы проверить результаты модели в блокноте, вы можете использовать метод show_results() для сравнения прогнозов вашей модели со случайными изображениями наземного контроля данных.

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

Сохранить модель

После того, как вы убедились в точности обученной модели, сохраните ее для будущего развертывания. По умолчанию модель будет сохранена в виде файла .dlpk в подпапке models внутри папки обучающих данных.

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

Развертывание модели

Теперь сохраненный файл .dlpk можно развернуть вместе с другими наборами данных и предоставить к ним доступ в вашей организации. Информацию о том, как использовать файл .dlpk, см. в разделе Пример: Логический вывод с использованием предварительно обученной модели.