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

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

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

Вот пример алгоритмической маркировки короткого видео с автомобилями:

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

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

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

Зачем нужна алгоритмическая маркировка?

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

  1. идем дальше и маркируем его сами. Мне требуется около шести секунд, чтобы нарисовать ограничительную рамку, а с ~3000 изображений мне потребуется около пяти часов, чтобы пометить все изображения вручную.
  2. отправить данные в другое место для маркировки. Ориентировочная стоимость аутсорсинга, вероятно, составит около 0,15 доллара за изображение, а общая стоимость — около 450 долларов. Дополнительно потребуется некоторое время, чтобы написать спецификацию и передать данные внешнему поставщику туда и обратно.

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

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

Популярные статьи об ИИ:

1. Напишите свой первый проект ИИ за 15 минут

2. Генерация голосового синтеза нейронной речи с помощью xVASynth

3. Топ-5 тенденций в области искусственного интеллекта (ИИ) на 2021 год

4. Почему вы используете Spotify неправильно

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

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

  1. Изучите набор данных,
  2. Написать и протестировать прототип
  3. Запустите программу из образца и просмотрите

Изучите набор данных

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

Мы также можем проверить сами изображения:

Давайте продолжим и запишем то, что мы заметили:

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

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

Следующий шаг — посмотреть, сможем ли мы синтезировать эти наблюдения в программу-прототип.

Написать прототип

Есть несколько выводов, которые мы можем сделать из наших наблюдений, и несколько обоснованных предположений, которые мы можем сделать при написании нашего прототипа:

Определенные

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

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

- Мы должны добавить больше ручных аннотаций к более «сложно выглядящим» продуктам питания.

Обоснованные предположения

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

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

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

Давайте синтезируем это вместе более строго в алгоритме прототипа метки. Наша стратегия аннотации будет следующей:

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

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

  • Запустите средство отслеживания объектов CSRT для изображений. Опять же, этот набор данных не является набором видеоданных, но только с одним объектом на изображение, который находится примерно в одном и том же месте в каждом кадре, алгоритм отслеживания объекта может служить достойным первым приближением меток.

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

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

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

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

Кажется, он неплохо справляется с получением ограничивающих рамок.

Запустите алгоритм «вне образца» и проверьте

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

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

Режимы отказа также интересны здесь, потому что мы получаем «первый взгляд» на то, где у нашей возможной нижестоящей модели могут возникнуть проблемы.

По этим «сбоям» я могу пройтись и подсчитать общее количество, которое мне нужно исправить рукой. Это всего 50 ручных исправлений во всем наборе данных. В целом, алгоритм меток требует менее 5% ручных меток, чтобы все заработало.

И это весь процесс. Мы сделали несколько относительно простых наблюдений за данными и преобразовали их в автоматическую маркировку 95% данных.

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

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

Команды машинного обучения и обработки данных любого размера используют приложения Encord для совместной работы, функции автоматизации и API-интерфейсы для создания моделей, аннотирования, управления и оценки своих наборов данных. Загляните к нам здесь.