Чжуанфан И, доктор философии, объясняет, как быстро обучить и развернуть MXNet на веб-сервисах Amazon.

19 января 2018 г. из Блог Development Seed

На прошлой неделе мы выпустили Label Maker, инструмент, который быстро подготавливает данные обучения спутниковым изображениям для рабочих процессов машинного обучения. Мы создали Label Maker, чтобы упростить процесс обучения машинному обучению на основе классификации изображений, обнаружения объектов и семантической сегментации с помощью Tensor Flow или MXNet. Это так же просто, как pip install label-maker, и позволит вам получить готовые обучающие данные с помощью четырех простых команд.

Сегодня мы покажем вам, как создать классификатор зданий для обнаружения зданий во Вьетнаме. В этом примере Label Maker извлечет данные из Mapbox Satellite и OpenStreetMap и подготовит обучающие данные, готовые к использованию с MXNet в Amazon SageMaker. Amazon SageMaker - это новый сервис от Amazon Web Services (AWS), который позволяет пользователям довольно просто разрабатывать, обучать, развертывать и масштабировать подходы к машинному обучению.

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

Начиная

Для этого упражнения вам понадобятся:

  1. Установлены Label Maker и типпеканое.
  2. Аккаунт Mapbox и их токен доступа к спутниковым снимкам.
  3. Аккаунт экземпляра SageMaker через вашу учетную запись AWS. В этом случае мы собираемся использовать ml.p2.xlarge компьютер с графическим процессором, и вам нужно будет протестировать и запустить экземпляр в течение примерно пяти часов, что будет стоить менее 10 долларов (1,26 доллара в час в us-east-1). Не забудьте остановить и удалить экземпляр после завершения обучения, иначе это будет дорого стоить.

Создатель этикеток принимает файл JSON, который определяет вашу область интересов, источники данных и способы их использования. Мы немного изменим файл JSON из другого пошагового руководства, чтобы создать этот vietnam.json файл:

{
  "country": "vietnam",
  "bounding_box": [105.42, 20.75, 106.41, 21.53],
  "zoom": 17,
  "classes": [
    { "name": "Buildings", "filter": ["has", "building"] }
  ],
  "imagery": "http://a.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.jpg?access_token=ACCESS_TOKEN",
  "background_ratio": 1,
  "ml_type": "classification"
}
  • country и bounding_box: изменено, чтобы указать место во Вьетнаме, откуда загружаются данные.
  • zoom: Здания во Вьетнаме бывают самых разных размеров, поэтому увеличение 17 (разрешение примерно 1,2 м) позволит нам определить здания на плитке. Мы нашли Ханой, Вьетнам имеет очень хорошие изображения через Mapbox. Если вы заинтересованы в обучении модели в другой области, вы можете проверить, есть ли в этой области изображения с нужным вам уровнем масштабирования, на сайте geojson.io. Чем выше уровень масштабирования, тем выше разрешение изображения.
    Если вы не знаете, как настроить конфигурацию classes, imagery, background_ratio и ml_type, вам будет полезно это пошаговое руководство.

Генерация обучающих данных

Следуйте командам CLI из README. Мы будем использовать отдельную папку под названием vietnam_building, чтобы обеспечить хорошее управление нашим проектом.

label-maker download --dest vietnam_building --config vietnam.json
label-maker labels --dest vietnam_building --config vietnam.json

Эти команды будут загружать и повторно отправлять плитки QA OpenStreetMap и создавать наши данные меток как labels.npz. Этот процесс также создаст другой файл classifcation.geojson; вы можете осмотреть его, чтобы увидеть географическое распределение надписей на зданиях. Используя QGIS для стилизации файла, вы можете создать изображение, подобное тому, что показано ниже, где плитки фиолетового цвета представляют собой надписи на зданиях.

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

label-maker preview -n 10 --dest vietnam_building --config vietnam.json

Если вы используете один и тот же vietnam.json файл конфигурации, вы можете ожидать увидеть три плитки ниже в своей папке vietnam_building/examples.

Когда будете готовы, используйте следующие команды, чтобы загрузить все 2290 фрагментов изображений. Следующие команды создадут папку tiles со всеми загруженными изображениями и файлом data.npz. Если вы хотите загружать меньше плиток, вы можете настроить ограничивающую рамку выше в файле JSON. Ограничивающая рамка имеет вид [xmin, ymin, xmax, ymax]; выбрав ограничительную рамку меньшего размера в файле конфигурации JSON, он будет охватывать меньшую географическую область.

label-maker images --dest vietnam_building --config vietnam.json
label-maker package --dest vietnam_building --config vietnam.json

Получение настройки SageMaker

SageMaker считывает данные обучения непосредственно из AWS S3. Вам нужно будет поместить data.npz в ведро S3. Чтобы перенести файлы с локального компьютера на S3, вы можете использовать Инструмент командной строки AWS, Cyberduck или FileZilla.

Войдите в свою учетную запись AWS и перейдите на домашнюю страницу SageMaker. Мы запустили наш пример экземпляра Amazon SageMaker в us-east-1 и рекомендуем использовать данные S3, расположенные в том же регионе. Теперь создайте экземпляр записной книжки!

Щелкните Create notebook Instance. У вас будет на выбор три варианта экземпляра: ml.t2.medium, ml.m4.xlarge и ml.p2.xlarge. Мы рекомендуем вам использовать машину p2 (машина с графическим процессором) для обучения этой классификации изображений.

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

Обучите модель с MXNet

Обучение классификатора зданий в стиле LeNet с помощью MXNet Estimator:

  • Скопируйте и загрузите SageMaker_mx-lenet.ipynb notebook в свой экземпляр Notebook. У нас есть MXNet в стиле LeNet, настроенная для этой задачи, и вам нужно будет выполнить только первую ячейку mx_lenet_sagemaker.py с помощью Shift-Enter.
  • Вторая ячейка записной книжки вызывает первый сценарий как точку входа для запуска SageMaker MXNet Estimator.
from sagemaker.mxnet import MXNet
from sagemaker import get_execution_role
mxnet_estimator = MXNet("mx_lenet_sagemaker.py",
                        role=get_execution_role(),
                        train_instance_type="ml.p2.xlarge",
                        train_instance_count=1)
mxnet_estimator.fit("s3://") ## give your s3 bucket URL here.

Подробные аргументы приведенных выше кодов Python составляют оценщик MXNet:

  • Настроенный LeNet в стиле MXNet mx_lenet_sagemaker.py.
  • Ваш SageMaker role можно получить за get_execution_role.
  • Используемый train_instance_type, мы рекомендуем экземпляр GPU ml.p2.xlarge здесь.
  • train_instance_count равно 1, что означает, что мы собираемся обучить этот LeNet только на одной машине. Вы также можете обучить модель на нескольких машинах с помощью SageMaker.
  • Передайте данные обучения в mxnet_estimator.fit() из корзины S3. После успешного запуска SageMaker вы увидите журнал, как на изображении ниже.
  • Используя mxnet_estimator.deploy(), вы можете использовать сервер модели SageMaker MXNet для размещения вашей обученной модели.
  • Теперь вы готовы читать или загружать тестовые плитки из корзины S3 с помощью Boto3, как мы показываем в блокноте IPython. После этого вы сможете сделать прогноз на основе вашей обученной модели.

Размышления о модели

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

  • В последние годы Ханой очень быстро развивался, и сообщество OpenStreetMap еще не занялось картированием новых жилых и коммерческих зданий. Это приведет к тому, что некоторые метки классов здания будут неточными. Если вы хотите помочь повысить точность маркировки, начните картографирование на OpenStreetMap.
  • Обучение классификатора изображений с нуля, как в примере, который мы здесь используем, может легко привести к переобучению модели. Мы добавляем несколько методов, чтобы избежать этого (например, удаление слоя), но это может повлиять на общую точность. В других ситуациях мы рекомендуем сначала попробовать переносное обучение поверх обученных весов моделей, например из ImageNet.
  • В этом примере мы используем LeNet, простую сеть с небольшим объемом памяти. Мы добавили слой droupout и дополнительный сверточный слой поверх оригинального LeNet, чтобы уравновесить переоснащение и недооборудование. Тем не менее, этой архитектуре может быть сложно изучить сложный контент со спутниковых снимков. Мы думаем, что модель в стиле LeNet является хорошей базовой моделью, но нам не терпится увидеть, какие сети вы строите поверх этого случая.

Для обучения модели классификации производственных изображений мы рекомендуем начать обучение модели с более точными метками OpenStreetMap и выполнить перенос обучения поверх уже обученной модели.

Размышления о SageMaker

Я впервые использовал SageMaker. Классификация обучающих изображений с помощью SageMaker была довольно простой. Команда Amazon SageMaker создала несколько простых кейсов. Вы также можете проверить их репозиторий SDK GitHub и Пример Apache MXNet. Поскольку это новая платформа, которая находится в стадии разработки, в SageMaker есть только машины t2, m4 и p2, чтобы пользователи могли запускать экземпляры Notebook. P2 - единственная машина с графическим процессором, и для любого случая машинного обучения компьютерного зрения она может оказаться дорогостоящей. Для тех, кто хорошо знаком с созданием экземпляров машинного обучения в облаке, некоторые части процесса отнимают у SageMaker больше времени, чем если бы вы сами настраивали их на AMI глубокого обучения AWS. По мере развития SageMaker я ожидаю, что он предоставит больше возможностей и сэкономит время / деньги.

Сообщите нам, как вы используете Label Maker или SageMaker - мы будем рады услышать ваши истории с данными.

ТЕМЫ: ОТКРЫТЫЕ ДАННЫЕ МАШИННОЕ ОБУЧЕНИЕ СПУТНИКОВЫЕ ИЗОБРАЖЕНИЯ