Привет! Меня зовут Роман Куцев, дата-сайентист компании Neatsy, Inc.. Моя команда и я разрабатываем приложение, которое поможет вам выбрать обувь онлайн и заказать обувь нужного размера.

Чтобы воплотить эту идею в жизнь, нам пришлось обучить нейронную сеть. Для обучения этой сети нам нужно было собрать и разметить 50 тысяч фотографий стоп разного размера. Я собираюсь рассказать вам о нашем опыте и о том, почему краудсорсинг - отличный инструмент для сбора данных.

Обратитесь за помощью к 200 знакомым, соберите 3000 фото и дважды попадите в черный список

Перед нами стояла задача: собрать набор данных из 50 тысяч фотографий, чтобы обучить алгоритм автоматически строить 3D-модель стопы, а затем определять ее размер даже в условиях плохого освещения и на цветных плитках. Мы создали требования к съемкам с набором различных условий:

1. Освещение: искусственное, дневное, слабое;

2. Фон: паркет, линолеум, пушистый ковролин, цветная плитка - все было достаточно хорошо;

3. Цвета кожи: от светлой до темной кожи;

4. Угол стопы: под разными углами: вид сверху, вид снизу, угол сбоку.

Раньше мне приходилось искать разных людей для разметки данных: до работы в Neatsy я работал в Prisma, где мне приходилось собирать данные для обучения нейронных сетей. В Prisma нам повезло, потому что наш разработчик Вячеслав Тарасов преподавал в Воронежском государственном университете, и у него было много студентов, которые могли помочь. Я не знаю, как он их мотивировал, может быть, более высокими оценками или чем-то еще, но в конце концов они отправили все необходимые фотографии и видео, и мы успешно собрали данные.

У команды Neatsy не было доступа к студентам. Поэтому мы пошли по другому пути. Мы выкладывали истории в Instagram, звонили и писали всем нашим друзьям, знакомым и родственникам, беззастенчиво отвлекали их от работы и просили их фотографии их ног. Мы действовали как религиозный культ сетевого маркетинга. Двое наших знакомых даже занесли нас в черный список.

Поймите, что это не так просто

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

Во-вторых, этот метод отнимал слишком много времени и сил. Мы должны были связаться с каждым человеком и объяснить им процесс. Затем нам пришлось дождаться данных, загрузить их и дважды проверить. В среднем мы тратили около 20 минут на человека. На сбор 200 видео у нас ушло около 8 рабочих дней. Но нам нужно было больше, чем это.

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

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

Встать на правильный путь

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

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

Гибкое масштабирование. Нам нравится, что Толока работает как торговая площадка: если задача поставлена ​​- они ее выполняют, если нет - они работают над другими задачами и ничего от нас не ждут. Это намного удобнее, чем нанимать персонал маркеров, которым не хватит загруженности: рано или поздно срочные задачи могут закончиться.

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

Стоимость разметки. Забегая вперед, я должен сказать, что мы получили огромное количество фотографий за пять дней, потратив на это менее 100 долларов.

А теперь перейдем к делу. Позвольте мне рассказать вам, как мы собирали данные и каковы были результаты.

Правильно настройте конвейер

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

1. V ideo collection

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

  • длительность видео - 20–60 секунд (нам нужно около 30 секунд видео с одного толокера, чтобы получить по 30–50 разных кадров с каждого);
  • видео должно содержать ступни без носков и обуви, с закатанными до икр штанами;
  • комната не должна быть слишком темной;
  • видео необходимо снимать под разными углами: мы попросили изменить высоту и угол наклона камеры.

Инструкции выглядели так:

Мы собрали 2472 видео за 2 дня и 17 часов. Чтобы ролики были максимально разнообразными, мы установили ограничение на количество заданий. Один толокер мог прислать нам только одно видео.

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

2. Видео- и фото-проверка

На этом этапе вторая группа должна была определить, соответствует ли контент, отправленный первой группой толокеров, поставленной задаче. Но сначала исполнители прошли обучение, и доступ был предоставлен только тем, кто хорошо выполнил задания. Это работало так: мы просили проверить 30 роликов (все ответы были заранее известны) и подсчитывали количество правильных ответов от исполнителей. Если точность была больше 85%, мы их одобряли для основной задачи. Вот как выглядела инструкция на этом этапе:

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

Мы приняли 1507 из 2472 видео. За каждое принятое видео мы платили 0,025 доллара и еще 7,41 доллара за просмотр всех видео. Итого на этом этапе проекта мы потратили 45 долларов. На мой взгляд, довольно аккуратно.

3. Раскадровка видео

Следующим шагом будет разбиение видео на кадры. Мы сделали это автоматически, без использования толокеров. Я использовал программу FFmpeg, которая очень быстро обрабатывает изображения и видео. Был использован каждый десятый кадр, поэтому из 1507 видео мы собрали 156 576 кадров, получив в три раза больше изображений, чем планировалось.

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

4. Проверка кадров - заключительный этап в Толоке

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

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

5. Бонус: дополнительный сбор контента на Amazon Mechanical Turk

В то время в Толоке работали в основном жители России и стран СНГ, поэтому нам попадались фотографии ступней с достаточно светлой кожей. Мы хотели, чтобы нейронная сеть могла работать и с более темной кожей. Сейчас этой проблемы больше нет - в Толоке сейчас работают исполнители из Индии и Африки. Но тогда нам приходилось собирать другие оттенки через платформу Amazon Mechanical Turk. Мы создали одну задачу, в которой просили людей записать видео со своими ногами, загрузить его на файловый хостинг и прислать нам ссылку. Задание было отложено: проверкой руководил наш стажер. Если сравнивать цены, то стоимость одного видео с Амазона была выше, чем у Толоки - 0,1 доллара. Что касается качества, то то же самое и при работе с Толокой: некоторые исполнители присылали нам плохо сделанные ролики, но мы их отклоняли и не платили за эти задания.

Оглянитесь назад и сделайте выводы

Вот наши результаты:

  • собрано: 156 576 кадров;
  • на практике: 50 994 изображения;
  • затраченное время: 5 дней;
  • потраченные деньги: 75 долларов США.

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

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