Инструкция: создать и загрузить разметку изображений в новый инструмент Apple для обучения нейросетей Create ML Статьи редакции

Перевод материала разработчика IBM Watson Николаса Бурдакоса.

Перевод подготовлен командой онлайн-школы английского языка Skyeng.

На WWDC 2019 анонсировали выход новой версии Create ML — инструмента, который позволяет создавать собственные модели машинного обучения. Для этого достаточно перетащить в программу папку с данными для обучения, и Create ML сделает всё сам.

Как подготовить данные для работы

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

Помимо самих изображений, для работы понадобится файл JSON, в котором будут храниться координаты объектов. У разметки должен быть следующий формат:

[ { "image": "image1.jpg", "annotations": [ { "label": "carrots", "coordinates": { "x": 120 "y": 164 "width": 230 "height": 119 } }, { "label": "orange", "coordinates": { "x": 230 "y": 321 "width": 50 "height": 50 } } ] }, ]

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

Как сгенерировать подобный файл? (Понятное дело, никому не хочется делать это вручную.) В инструкциях Apple говорится:

Для создания разметки вы можете воспользоваться программами, загруженными из интернета.

Какой же программой воспользоваться? Cloud Annotations!

Я создал программу Cloud Annotations специально для таких случаев. Она выделяет области изображений и создаёт разметку в формате Apple, которая сохраняется в файле JSON.

Создаём хранилище изображений

Чтобы использовать Cloud Annotations, необходимо создать облачное хранилище изображений — так наши данные для обучения нейросети будут храниться в одном месте и не потеряются.

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

В IBM Cloud можно бесплатно получить 25 ГБ пространства — его я и буду использовать:

  • Чтобы создать хранилище, нужно зарегистрироваться на платформе IBM Cloud и войти в аккаунт.
  • В панели управления IBM Cloud можно создавать и настраивать хранилища.
  • Чтобы создать его, нужно нажать на «Создать хранилище» (Create resource).
  • Далее — опция «Хранилище объектов» (Object storage).
  • Здесь можно выбрать тарифный план, в следующем окне необходимо подтвердить свой выбор.

Идентификационные данные

Хранилище создано. Теперь нужно сделать так, чтобы в него могли поступать данные из-за пределов платформы IBM Cloud. Для этого нужно получить идентификационные данные хранилища.

Для этого во вкладке «Идентификационные данные сервиса» (Service credentials) нужно нажать кнопку «Новые идентификационные данные» (New credential).

Все поля заполнять необязательно. Главное убедиться, что идентификационным данным назначена функция записи (Role: Writer), и указать следующие параметры встроенной конфигурации:

{"HMAC": true}

После этого нужно нажать на выпадающее меню «Идентификационные данные» (View credentials) и записать следующие параметры: apikey, access_key_id, secret_access_key и resource_instance_id.

{ "apikey": "...", "cos_hmac_keys": { "access_key_id": "...", "secret_access_key": "..." }, "endpoints": "...", "iam_apikey_description": "...", "iam_apikey_name": "...", "iam_role_crn": "...", "iam_serviceid_crn": "...", "resource_instance_id": "..." }

Cloud Annotations

Чтобы использовать программу, необходимо перейти на сайт Cloud Annotations Tool и указать идентификационные данные хранилища.

Файлы и разметка будут храниться в «ведре», которое нужно создать, нажав на кнопку «Создать ведро» (Create bucket).

Когда название и «ведро» созданы, программа попросит выбрать тип разметки. Необходимо выбрать вариант «Локализация» (Localization) — это позволит выделять области изображений.

Советы по данным для обучения нейросети

Обучаемая модель предназначена для работы с фотографиями реальных объектов. Она не сможет работать с рентгеновскими изображениями, рисунками, отсканированными документами, чеками и так далее.

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

Хорошо, если у разработчика будут изображения с разных ракурсов, разного разрешения и с разным фоном.

Наша модель не сможет распознавать изображения, которые не может распознать человек. То есть если человек не может за одну–две секунды распознать объекты на изображении, модель тоже, скорее всего, этого сделать не сможет.

Рекомендую использовать не менее 50 изображений для каждого типа объектов, но чем больше их будет (100 или 1000), тем лучше результат.

Модель, которую мы будем обучать, приводит все изображения к формату 300 x 300 px. Это стоит учитывать при работе с изображениями, у которых ширина значительно превышает высоту, или наоборот.

Разметка данных

Чтобы разметить изображения:

  • загрузите в программу видео или набор изображений;
  • определите нужные типы объектов;
  • начните размечать изображения — выделять объекты.

Получаем разметку

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

Устанавливаем CLI

Чтобы получить файл с разметкой, нужно установить Cloud Annotation CLI:

npm install -g cloud-annotations

Обратите внимание: у вас должен быть установлен Node версии 10.13.0 или выше. Для переключения между разными версиями Node для разных проектов используйте nvm (для macOS или Linux) или nvm-windows.

Загружаем разметку

Для загрузки разметки используйте команду:

cacli export --create-ml

После окончания загрузки у вас появится папка exported_buckets, в которой будет находиться содержимое «ведра». Нужно перетащить эту папку в Create ML, теперь можно начать работать.

0
1 комментарий
Il Russ

Дельно.Спасибо большое

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда