Нейросеть для конюшен и табунов: как мы собирали датасет с лошадьми для обучения нейросети

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

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

Начало

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

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

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

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

Введение в биометрию лошадей

Для начала давайте поговорим о том, как работает биометрия в мире людей, а потом уже перейдем к нашим лошадкам.

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

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

Кстати, на нашем сайте есть демо с технологией биометрии - каждый может поиграться и понять как работают такие нейросети. Данные никуда не передаем, у себя долго не храним - это только демонстрация технологии. Работает так:

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

Сбор данных лошадей

До того как ворваться в мир биометрии для лошадей, мы решили провести небольшой ресерч, чтобы понять - а получится ли вообще найти 10 000 различных лошадей и на каждую по 10 фотографий? Исследование результатов поисковой выдачи ресурсов по типу YouTube, TikTok, ВКонтакте и т.д. - показало, что материала достаточно.

Давайте остановимся на требованиях, которые были заданы заказчиком:

  • Собрать цифровой табун из 10 000 уникальных лошадей, по 10 фотографий на каждую;
  • На каждом изображении должны быть видны 5 ключевых точек морды лошади;
  • Прямоугольник морды лошади должен быть не менее 224 пикселей в высоту, все что меньше - нам не подходит.

Закатав рукава, мы приступили к работе.

Неудачное решение

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

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

В процессе поиска команда невероятно сильно изощрялась, чтобы найти хотя бы что-то, к примеру:

  • профессии связанные с лошадьми;
  • прогулки с лошадьми;
  • фотосессии с лошадьми;
  • поиск по хештегам;
  • использовались различные языки для поиска;
  • конно-спортивные клубы;
  • частные конюшни и фермы;
  • аукционы;
  • поиск по геолокации разных стран.

Так прошло 2 месяца, за которые мы получили 30 000 изображений с 3 000 уникальными лошадьми (30% от целевого объема). В это время зловеще надвигались новогодние праздники, дедлайн уже изрядно поджимал, а заказчик хотел поскорее закрыть бухгалтерию за год.

С таким подходом мы получали в среднем ~500 подходящих изображений в день. Такой темп не позволял закрыть проект в оговоренные изначально сроки. Стало кристально ясно - пора что-то менять.

Нейросеть для конюшен и табунов: как мы собирали датасет с лошадьми для обучения нейросети

Идеальное решение

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

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

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

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

Нейросеть для конюшен и табунов: как мы собирали датасет с лошадьми для обучения нейросети

Оставалось лишь найти тематические Telegram-каналы, скачать из них медиаматериалы и скормить их боту для обработки.

Итоги

С новым подходом за 13 дней поиска мы получили 70 000 изображений и 7 000 новых уникальных лошадей, минимум по 10 фото на каждую. Для сравнения:

  • Старый метод обеспечивал скорость сбора ~500 изображений в день.
  • Новый метод обеспечивал скорость сбора ~5 384 изображения в день.

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

Какие выводы можно сделать на основе этого кейса:

  • В очередной раз убедились в том, что автоматизация рутинной деятельности при помощи ИИ - это отличная идея, которая помогает и нам самим в том числе;
  • Для того, чтобы найти решение, можно просто по-другому взглянуть на уже созданные технологии и переиспользовать их;
  • Не играйтесь с Галиной Петровной, не заставляйте ее нервничать, все еще избавляемся от порчи с корпоративным экстрасенсом. И не берите непростые проекты под конец года.
1313
4 комментария

Не совсем понял как подтверждалось, что это уникальная лошадь? Скачали фотку(и) с конюшни, потом скачали фотку в другом ракурсе с другого источника - здесь же при сборе считалось, что это две разные лошади, но на самом деле могла быть та же самая? Или тут какая-то погрешность закладывается, и считается что такое происходит редко?

1

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

Но как правило, мы брали видеоряд по лошади. Далее видеоряд нарезался на кадры, например:

1 кадр: лошадь отвернулась от объектива - не берем
2 кадр: лошадь повернулась наполовину в объектив - не берем
3 кадр: лошадь повернулась анфас, полуанфас к объективу - берем

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

Представить работу нейросети можно по гифке сразу после заголовка "Идеальное решение". Там лошадка в кадре сначала спиной появляется, потом в момент когда разворачивается мордой к оператору - идет захват в прямоугольник и ландмарки по ключевым точкам. На выходе с такого видео мы получали только кадры, где морда лошади видна на 100% - остальное улетало в мусор.

Надеюсь понятно объяснил)