Простой пример про Толоку

Неожиданная завязка:

Два с половиной месяца назад, прямо в разгар карантина, у меня родился сын:)
Естественно, я взял отпуск и разгрузил всю ту работу, где отпуска быть не может. Но, оказалось, ребёнок крайне спокойный – сразу нормализовал режим. Так что образовалось свободное время. Решил добить старые проекты. И начать новые.

Один из них уже закончен, сейчас я его шлифую. По сути некая вариация “радионяни”. Камера, которая смотрит на ребёнка, шлёт уведомления, немного взаимодействует.
Как доделаю – выложу полный обзор на Хабре (ссылка будет тут).
Статья про одну небольшую часть я уже выложил.
Эта статья про то как использовать Толоку даже в хобийных проектах.

Толока мне понадобилась для одной простой задачки – обучить распознавание “открыты ли глаза или закрыты”.
Почему я пошёл по такому пути – будет более подробный рассказ на Хабре. Сейчас про то, что это не страшно.

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

И, естественно, сразу родилась первая структура для разметки:

  • Глаз открыт
  • Глаз закрыт
  • Глаза нет

Потом, конечно, выяснилось что “Глаз закрыт” и “Глаза нет” сильно путаются. Со стороны итогового результата различать их было не нужно, так что совместил.

Идём на Толоку, выбираем “Создать проект” (не забывайте, что у Яндекса тоже есть инструкция, и она куда подробнее моей):

Дальше можно выбрать готовый шаблон “Категоризация изображений”:

Реально для задач Computer Vision шаблонов всего два:

  • Категоризация изображений
  • Сегментация изображений

Более сложных, к сожалению, нет. Надо писать структуру самому. В том же mecanical turk классов несколько больше:

Но для моей цели хватит, мне нужна именно классификация.

После того как вы выбираете проект – сразу переходите в его редактирование:

Главное, сделать хорошее описание. Но я был краток, получилось так:

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

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

  1. Значения кнопок должны быть прописаны в двух местах. Это же название должно использоваться в текстовом описании заданий
  2. Чтобы картинка правильно подсосалась с яндекс.диска, она должна быть подписана указанным образом

Теперь переходим к редактированию “Пула”. У Яндекса неплохое описание. При редактировании вы указываете:

  • Правила разметки
  • Цену размети
  • Правила проверки
  • Настройку перекрытия

Теперь вы можете добавить в пул задания. Задание – это по сути текстовик в котором указаны адреса файлов под разметку.
Так же вы можете задать тестовые задачи. Я сделал так:

Можно заложить “honey pot” – ловушки для недобросовестных разметчиков. Я это сделал, но потом понял что это было бессмысленно.
Обратите внимание на поле “result” – это то, что записано в ответе. А “Open”|”Closed”|”NotPresent” – результат который должен получиться.
Первый адрес – это положение изображения в интегрированный в проект папке ЯндексДиска.

Теперь можно проверить как выглядит задание. У меня получилось так:

Теперь запускаем. Разметка датасета из ~3000 изображений у меня заняла примерно 5 минут (~200 человек начали его выполнять). И стоило ~280 рублей. Как я понимаю, сделать можно было сильно дешевле.
Результат возвращается в том же формате в котором было подготовлено задание.

Скажу честно, Толоку мы используем редко в проде (раза 3-4 за последние 3 года). Так что каждый раз создать задание как вновь. На создание задания которое я описал выше потрачено было ~2 часа. Но это меньше, чем нарисовать свой разметчик и разметить 3к кадров.

Обычно мы подключаем свой разметчик. Скорее всего я буду делать видео про ней скоро. Но настроить его для такой простой задачи было бы дольше. Да и разметчики обошлись бы не в 280 рублей:)

Небольшое наглядное видео по этой статье:

З.Ю.

В последнее время свои статьи я публикую на очень разных платформах.
И, так получилось, что единое место куда я их свожу тут – https://vk.com/cvml_team (дублирую в https://t.me/CVML_team )
Тот проект в рамках которого всё это сбадяжил – буду на Хабре публиковать скорее всего. Так что ссылка тоже только там будет.

Так что советую подписаться!