Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Идентификация мангровых лесов с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — часть 2

Мангровые леса являются важной частью здоровой экосистемы, и деятельность человека является одной из основных причин их постепенного исчезновения с береговых линий по всему миру. Использование модели машинного обучения (ML) для идентификации мангровых зарослей на спутниковом снимке дает исследователям эффективный способ отслеживать размер лесов с течением времени. В Часть 1 этой серии мы показали, как собирать спутниковые данные в автоматическом режиме и анализировать их в Студия Amazon SageMaker с интерактивной визуализацией. В этом посте мы покажем, как использовать Amazon SageMaker Автопилот для автоматизации процесса создания пользовательского классификатора мангровых зарослей.

Обучите модель с помощью автопилота

Автопилот обеспечивает сбалансированный способ построения нескольких моделей и выбора лучшей из них. Создавая несколько комбинаций различных методов предварительной обработки данных и моделей машинного обучения с минимальными усилиями, Autopilot предоставляет специалисту по обработке и анализу данных полный контроль над этими компонентами.

Вы можете использовать Autopilot с помощью одного из AWS SDK (подробности доступны в Справочное руководство по API для автопилота) или через Студию. Мы используем автопилот в нашем решении Studio, следуя шагам, описанным в этом разделе:

  1. На странице Studio Launcher выберите значок «плюс» для Новый эксперимент с автопилотом.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  2. Что касается Подключите ваши данные, наведите на Найдите ведро S3и введите имя корзины, в которой вы сохранили обучающие и тестовые наборы данных.
  3. Что касается Имя файла набора данных, введите имя файла данных тренировки, который вы создали в Подготовьте обучающие данные в разделе Часть 1.
  4. Что касается Расположение выходных данных (сегмент S3), введите то же имя сегмента, которое вы использовали на шаге 2.
  5. Что касается Имя каталога набора данных, введите имя папки под сегментом, в котором вы хотите, чтобы Autopilot сохранял артефакты.
  6. Что касается Является ли ваш ввод S3 файлом манифеста?, выберите от.
  7. Что касается цель, выберите этикетка.
  8. Что касается Автоматическое развертывание, выберите от.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  9. Под Дополнительные параметры, Для Тип задачи машинного обучения, выберите Бинарная классификация.
  10. Что касается Объективная метрика, выберите ППК.
  11. Что касается Выберите способ проведения эксперимента, выберите Нет, запустите пилотную версию, чтобы создать записную книжку с определениями-кандидатами..
  12. Выберите Создать эксперимент.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
    Дополнительные сведения о создании эксперимента см. Создание эксперимента Amazon SageMaker Autopilot.Выполнение этого шага может занять около 15 минут.
  13. По завершении выберите Открытый блокнот для генерации кандидатов, который открывает новую записную книжку в режиме только для чтения.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  14. Выберите Импорт блокнота сделать блокнот редактируемым.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  15. Для изображения выберите Наука данных.
  16. Что касается ядро, выберите Python 3.
  17. Выберите Выберите.
    Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Эта автоматически созданная записная книжка содержит подробные пояснения и обеспечивает полный контроль над фактической задачей построения модели. Индивидуальная версия ноутбук, где классификатор обучается с использованием диапазонов спутников Landsat с 2013 года, доступен в репозитории кода в разделе notebooks/mangrove-2013.ipynb.

Структура построения модели состоит из двух частей: преобразование признаков как часть этапа обработки данных и оптимизация гиперпараметров (HPO) как часть этапа выбора модели. Все необходимые артефакты для этих задач были созданы в ходе эксперимента «Автопилот» и сохранены в Простой сервис хранения Amazon (Амазон С3). Первая ячейка записной книжки загружает эти артефакты из Amazon S3 в локальную Создатель мудреца Амазонки файловую систему для проверки и любых необходимых изменений. Есть две папки: generated_module и sagemaker_automl, где хранятся все модули и скрипты Python, необходимые для работы блокнота. Различные этапы преобразования признаков, такие как вменение, масштабирование и PCA, сохраняются как generated_modules/candidate_data_processors/dpp*.py.

Автопилот создает три разные модели на основе алгоритмов XGBoost, линейного обучения и многоуровневого персептрона (MLP). Конвейер-кандидат состоит из одного из вариантов преобразования функций, известного как data_transformer, и алгоритм. Конвейер — это словарь Python, который можно определить следующим образом:

candidate1 = { "data_transformer": { "name": "dpp5", "training_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, "volume_size_in_gb": 50 }, "transform_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, }, "transforms_label": True, "transformed_data_format": "application/x-recordio-protobuf", "sparse_encoding": True }, "algorithm": { "name": "xgboost", "training_resource_config": { "instance_type": "ml.m5.4xlarge", "instance_count": 1, }, }
}

В этом примере конвейер преобразует обучающие данные в соответствии со сценарием в generated_modules/candidate_data_processors/dpp5.py и строит модель XGBoost. Именно здесь Autopilot предоставляет полный контроль специалисту по данным, который может выбрать автоматически сгенерированные этапы преобразования признаков и выбора модели или создать свою собственную комбинацию.

Теперь вы можете добавить конвейер в пул для автопилота, чтобы запустить эксперимент следующим образом:

from sagemaker_automl import AutoMLInteractiveRunner, AutoMLLocalCandidate automl_interactive_runner = AutoMLInteractiveRunner(AUTOML_LOCAL_RUN_CONFIG)
automl_interactive_runner.select_candidate(candidate1)

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

automl_interactive_runner.display_candidates()

Имя кандидата Алгоритм Преобразователь характеристик
dpp0-xgboost xgboost dpp0.py
dpp1-xgboost xgboost dpp1.py
dpp2-линейный ученик линейный ученик dpp2.py
dpp3-xgboost xgboost dpp3.py
dpp4-xgboost xgboost dpp4.py
dpp5-xgboost xgboost dpp5.py
dpp6-mlp MLP dpp6.py

Полный эксперимент с автопилотом состоит из двух частей. Во-первых, вам нужно запустить задания преобразования данных:

automl_interactive_runner.fit_data_transformers(parallel_jobs=7)

Этот шаг должен завершиться примерно через 30 минут для всех кандидатов, если вы больше не будете вносить изменения в dpp*.py файлы.

Следующим шагом является создание наилучшего набора моделей путем настройки гиперпараметров для соответствующих алгоритмов. Гиперпараметры обычно делятся на две части: статические и настраиваемые. Статические гиперпараметры остаются неизменными на протяжении всего эксперимента для всех кандидатов, использующих один и тот же алгоритм. Эти гиперпараметры передаются в эксперимент в виде словаря. Если вы решите выбрать лучшую модель XGBoost, максимизировав AUC из трех раундов пятикратной схемы перекрестной проверки, словарь будет выглядеть следующим образом:

{ 'objective': 'binary:logistic', 'eval_metric': 'auc', '_kfold': 5, '_num_cv_round': 3,
} 

Для настраиваемых гиперпараметров вам нужно передать другой словарь с диапазонами и типом масштабирования:

{ 'num_round': IntegerParameter(64, 1024, scaling_type='Logarithmic'), 'max_depth': IntegerParameter(2, 8, scaling_type='Logarithmic'), 'eta': ContinuousParameter(1e-3, 1.0, scaling_type='Logarithmic'),
... }

Полный набор гиперпараметров доступен в mangrove-2013.ipynb ноутбук.

Чтобы создать эксперимент, в котором все семь кандидатов могут быть протестированы параллельно, создайте многоалгоритмический тюнер HPO:

multi_algo_tuning_parameters = automl_interactive_runner.prepare_multi_algo_parameters( objective_metrics=ALGORITHM_OBJECTIVE_METRICS, static_hyperparameters=STATIC_HYPERPARAMETERS, hyperparameters_search_ranges=ALGORITHM_TUNABLE_HYPERPARAMETER_RANGES)

Целевые метрики определяются независимо для каждого алгоритма:

ALGORITHM_OBJECTIVE_METRICS = { 'xgboost': 'validation:auc', 'linear-learner': 'validation:roc_auc_score', 'mlp': 'validation:roc_auc',
}

Пробовать все возможные значения гиперпараметров для всех экспериментов расточительно; вы можете принять байесовскую стратегию для создания тюнера HPO:

multi_algo_tuning_inputs = automl_interactive_runner.prepare_multi_algo_inputs()
ase_tuning_job_name = "{}-tuning".format(AUTOML_LOCAL_RUN_CONFIG.local_automl_job_name) tuner = HyperparameterTuner.create( base_tuning_job_name=base_tuning_job_name, strategy='Bayesian', objective_type='Maximize', max_parallel_jobs=10, max_jobs=50, **multi_algo_tuning_parameters,
)

По умолчанию Autopilot выбирает в тюнере 250 заданий, чтобы выбрать лучшую модель. Для этого варианта использования достаточно установить max_jobs=50 для экономии времени и ресурсов без каких-либо существенных потерь с точки зрения выбора наилучшего набора гиперпараметров. Наконец, отправьте задание HPO следующим образом:

tuner.fit(inputs=multi_algo_tuning_inputs, include_cls_metadata=None)

Процесс занимает около 80 минут на экземплярах ml.m5.4xlarge. Вы можете отслеживать ход выполнения на консоли SageMaker, выбрав Задания по настройке гиперпараметров под Обучение в навигационной панели.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Вы можете визуализировать множество полезной информации, включая производительность каждого кандидата, выбрав название выполняемой работы.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Наконец, сравните производительность модели лучших кандидатов следующим образом:

from sagemaker.analytics import HyperparameterTuningJobAnalytics SAGEMAKER_SESSION = AUTOML_LOCAL_RUN_CONFIG.sagemaker_session
SAGEMAKER_ROLE = AUTOML_LOCAL_RUN_CONFIG.role tuner_analytics = HyperparameterTuningJobAnalytics( tuner.latest_tuning_job.name, sagemaker_session=SAGEMAKER_SESSION) df_tuning_job_analytics = tuner_analytics.dataframe() df_tuning_job_analytics.sort_values( by=['FinalObjectiveValue'], inplace=True, ascending=False if tuner.objective_type == "Maximize" else True) # select the columns to display and rename
select_columns = ["TrainingJobDefinitionName", "FinalObjectiveValue", "TrainingElapsedTimeSeconds"]
rename_columns = { "TrainingJobDefinitionName": "candidate", "FinalObjectiveValue": "AUC", "TrainingElapsedTimeSeconds": "run_time" } # Show top 5 model performances
df_tuning_job_analytics.rename(columns=rename_columns)[rename_columns.values()].set_index("candidate").head(5)

кандидат ППК время выполнения (с)
dpp6-mlp 0.96008 2711.0
dpp4-xgboost 0.95236 385.0
dpp3-xgboost 0.95095 202.0
dpp4-xgboost 0.95069 458.0
dpp3-xgboost 0.95015 361.0

Самая производительная модель, основанная на MLP, хотя и немного лучше, чем модели XGBoost с различными вариантами шагов обработки данных, также требует намного больше времени для обучения. Вы можете найти важные подробности об обучении модели MLP, включая комбинацию используемых гиперпараметров, следующим образом:

df_tuning_job_analytics.loc[df_tuning_job_analytics.TrainingJobName==best_training_job].T.dropna() 

Название вакансии обучения mangrove-2-notebook–211021-2016-012-500271c8
Статус обученияJobStatus Заполненная
Финалцеливевалуе 0.96008
Время начала обучения 2021-10-21 20:22:55+00:00
ОбучениеEndTime 2021-10-21 21:08:06+00:00
ОбучениеElapsedTimeSeconds 2711
ОбучениеJobDefinitionName dpp6-mlp
dropout_prob 0.415778
embedding_size_factor 0.849226
слоев 256
Learning_rate 0.00013862
mini_batch_size 317
тип сети упреждение
вес_распад 1.29323e-12

Создайте конвейер вывода

Чтобы создать вывод на основе новых данных, вы должны построить конвейер вывода в SageMaker, чтобы разместить наилучшую модель, которую можно вызвать позже для создания вывода. Для конвейерной модели SageMaker в качестве компонентов требуются три контейнера: преобразование данных, алгоритм и обратное преобразование меток (если числовые прогнозы необходимо сопоставить с нечисловыми метками). Для краткости в следующем фрагменте показана только часть необходимого кода; полный код доступен в mangrove-2013.ipynb ноутбук:

from sagemaker.estimator import Estimator
from sagemaker import PipelineModel
from sagemaker_automl import select_inference_output …
# Final pipeline model model_containers = [best_data_transformer_model, best_algo_model]
if best_candidate.transforms_label: model_containers.append(best_candidate.get_data_transformer_model( transform_mode="inverse-label-transform", role=SAGEMAKER_ROLE, sagemaker_session=SAGEMAKER_SESSION)) # select the output type
model_containers = select_inference_output("BinaryClassification", model_containers, output_keys=['predicted_label'])

После создания контейнеров модели вы можете построить и развернуть конвейер следующим образом:

from sagemaker import PipelineModel pipeline_model = PipelineModel( name=f"mangrove-automl-2013", role=SAGEMAKER_ROLE, models=model_containers, vpc_config=AUTOML_LOCAL_RUN_CONFIG.vpc_config) pipeline_model.deploy(initial_instance_count=1, instance_type='ml.m5.2xlarge', endpoint_name=pipeline_model.name, wait=True)

Развертывание конечной точки занимает около 10 минут.

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

После развертывания конечной точки вы можете вызвать ее с полезной нагрузкой функций B1–B7, чтобы классифицировать каждый пиксель изображения как мангровый (1) или другой (0):

import boto3
sm_runtime = boto3.client('runtime.sagemaker') pred_labels = []
with open(local_download, 'r') as f: for i, row in enumerate(f): payload = row.rstrip('n') x = sm_runtime.invoke_endpoint(EndpointName=inf_endpt, ContentType="text/csv", Body=payload) pred_labels.append(int(x['Body'].read().decode().strip()))

Полная информация о постобработке прогнозов модели для оценки и построения графиков доступна в notebooks/model_performance.ipynb.

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

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

Сначала мы создаем файл манифеста в Amazon S3, который указывает на расположение обучающих и тестовых данных из предыдущих этапов обработки данных:

import boto3
data_bucket = <Name of the S3 bucket that has the training data>
prefix = "LANDSAT_LC08_C01_T1_SR/Year2013"
manifest = "[{{"prefix": "s3://{}/{}/"}},n"train.csv",n"test.csv"n]".format(data_bucket, prefix)
s3_client = boto3.client('s3')
s3_client.put_object(Body=manifest, Bucket=data_bucket, Key=f"{prefix}/data.manifest")

Теперь мы можем создать задание пакетного преобразования. Поскольку наш входной поезд и набор тестовых данных имеют label как последний столбец, нам нужно отбросить его во время вывода. Для этого проходим InputFilter в DataProcessing аргумент. Код "$[:-2]" указывает на удаление последнего столбца. Затем прогнозируемый результат объединяется с исходными данными для дальнейшего анализа.

В следующем коде мы создаем аргументы для задания пакетного преобразования, а затем передаем create_transform_job функция:

from time import gmtime, strftime batch_job_name = "Batch-Transform-" + strftime("%Y-%m-%d-%H-%M-%S", gmtime())
output_location = "s3://{}/{}/batch_output/{}".format(data_bucket, prefix, batch_job_name)
input_location = "s3://{}/{}/data.manifest".format(data_bucket, prefix) request = { "TransformJobName": batch_job_name, "ModelName": pipeline_model.name, "TransformOutput": { "S3OutputPath": output_location, "Accept": "text/csv", "AssembleWith": "Line", }, "TransformInput": { "DataSource": {"S3DataSource": {"S3DataType": "ManifestFile", "S3Uri": input_location}}, "ContentType": "text/csv", "SplitType": "Line", "CompressionType": "None", }, "TransformResources": {"InstanceType": "ml.m4.xlarge", "InstanceCount": 1}, "DataProcessing": {"InputFilter": "$[:-2]", "JoinSource": "Input"}
} sagemaker = boto3.client("sagemaker")
sagemaker.create_transform_job(**request)
print("Created Transform job with name: ", batch_job_name)

Вы можете отслеживать статус задания на консоли SageMaker.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Визуализация производительности модели

Теперь вы можете визуализировать производительность лучшей модели в тестовом наборе данных, состоящем из регионов Индии, Мьянмы, Кубы и Вьетнама, в виде матрицы путаницы. Модель имеет высокое значение полноты для пикселей, представляющих мангровые заросли, но точность составляет всего около 75%. Точность не мангровых или других пикселей составляет 99% с отзывом 85%. Вы можете настроить отсечку вероятности прогнозов модели, чтобы скорректировать соответствующие значения в зависимости от конкретного варианта использования.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Стоит отметить, что результаты являются значительным улучшением по сравнению со встроенной моделью smileCart.

Визуализируйте предсказания модели

Наконец, полезно наблюдать за производительностью модели в определенных регионах на карте. На следующем изображении область мангровых зарослей на границе Индии и Бангладеш выделена красным цветом. Точки, выбранные из фрагмента изображения Landsat, принадлежащего тестовому набору данных, накладываются на область, где каждая точка представляет собой пиксель, который модель определяет как представляющий мангровые заросли. Синие точки правильно классифицируются моделью, тогда как черные точки представляют ошибки модели.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

На следующем изображении показаны только те точки, которые по прогнозам модели не представляют мангровые заросли, с той же цветовой схемой, что и в предыдущем примере. Серый контур — это часть участка Landsat, на которой нет мангровых зарослей. Как видно из изображения, модель не ошибается при классификации точек на воде, но сталкивается с проблемой при различении пикселей, представляющих мангровые заросли, от пикселей, представляющих обычную листву.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

На следующем изображении показана производительность модели в районе мангровых зарослей Мьянмы.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

На следующем изображении модель лучше справляется с идентификацией мангровых пикселей.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Убирать

Конечная точка вывода SageMaker продолжает нести расходы, если ее оставить в рабочем состоянии. Когда закончите, удалите конечную точку следующим образом:

sagemaker.delete_endpoint(EndpointName=pipeline_model.name)

Заключение

Эта серия постов предоставила специалистам по данным комплексную основу для решения задач ГИС. Часть 1 показал процесс ETL и удобный способ визуального взаимодействия с данными. Во второй части показано, как использовать Autopilot для автоматизации создания пользовательского классификатора мангровых зарослей.

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


Об авторах

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай. Андрей Иванович является поступающим на степень магистра компьютерных наук в Университете Торонто и недавним выпускником программы инженерных наук в Университете Торонто по специальности «Машинный интеллект» со второстепенной специальностью «Робототехника/мехатроника». Интересуется компьютерным зрением, глубоким обучением и робототехникой. Он выполнил работу, представленную в этом посте, во время летней стажировки в Amazon.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Дэвид Донг является специалистом по данным в Amazon Web Services.

Идентифицируйте мангровые леса с помощью спутниковых изображений с помощью Amazon SageMaker Studio и Amazon SageMaker Autopilot — Part 2 PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Аркаджиоти Мишра является специалистом по данным в Amazon LastMile Transportation. Он увлечен применением методов компьютерного зрения для решения проблем, которые помогают земле. Он любит работать с некоммерческими организациями и является одним из основателей ekipi.org.

Отметка времени:

Больше от Машинное обучение AWS