В магистратуре ИТМО мы стараемся погружать студентов в работу реальных компаний ― через решение актуальных для бизнеса задач. Чаще всего это можно сделать на хакатонах, стажировках и с помощью организации корпоративных магистерских программ. Число таких проектов в университете с годами становится больше. Один из примеров ― совместный образовательный интенсив команды магистратуры ИТМО «Проектирование и разработка систем искусственного интеллекта» и IT-компании Nexign. Его участники разработали сервис для автоматической разметки рекламы на фото, который позволяет мобильному оператору упростить и ускорить работу с партнерскими торговыми точками. Под катом ― о деталях решения.
Зачем распознавать рекламу на фото
По всей стране у мобильных операторов сотни тысяч партнерских торговых точек, распространяющих SIM-карты. Причем это могут быть магазины совершенно разного формата: купить SIM-карту можно в продуктовом или хозмаге недалеко от дома, в мастерских по ремонту и других торговых точках, для которых распространение услуг оператора ― просто сопутствующее предложение. Один из аспектов партнерства ― размещение в торговой точке рекламы услуг конкретного мобильного оператора: постеров, стикеров, муляжей SIM-карт и всего, что способствует продвижению бренда и услуг.
Торговые точки не монобрендовые, то есть они размещают свою рекламу и подключают сервисы разных мобильных операторов. Иными словами, в пределах каждой конкретной точки компания конкурирует с другими за внимание пользователя. Поэтому у мобильных операторов есть отдельные специалисты, которые курируют такие торговые объекты и постоянно следят, какую рекламу размещают там конкуренты. Так оператор анализирует эффективность собственных рекламных кампаний и показатели каждой конкретной точки. Кроме того, на точках бывают разные частные ситуации. Например, владельцам просто не нравятся рекламные материалы, и они их убирают. Такое тоже важно вовремя отследить.
Мониторинг проходит регулярно: менеджеры приходят на объект и смотрят, в каком состоянии находятся уже размещенные материалы. И, если необходимо, передают владельцу новые.
Менеджеры фиксируют состояние разных зон торговой точки на фото (количество фото зависит от типа точки) и заполняют специальные опросники. Изображения и таблицы-описания с объектов отправляются в единое хранилище. На основе собранных со всех точек фотографий и текстовых данных строится более высокоуровневая аналитика.
В ходе обработки данных каждый кадр размечается, при этом отслеживаются определенные признаки ― наличие в принципе рекламных материалов, приоритет, паритет или диспаритет рекламной продукции на фоне конкурентов. В итоге торговая точка по определенной матрице расчета получает баллы, на основе которых отдел продаж оператора принимает решения: необходимо эту точку продвигать дополнительно, предоставить ей еще материалы и так далее.
Что тут можно улучшить и как это сделать
Обычно рекламу на фото всегда оценивали вручную. Такая работа занимает много времени: в среднем на обработку очередного пакета фото от партнеров уходит около двух недель. То есть только через 14 дней после съемки отдел продаж предпринимал какие-то действия ― отправлял свои решения коллегам в региональные филиалы, которые работают с конкретными точками.
Как упростить и ускорить работу людей, обрабатывающих собранные материалы? Например, разработать сервис, в который загружались бы заполненные менеджером опросники и его фотографии. А дальше по определенным правилам конкретной торговой точке автоматически бы выставлялись баллы.
Для решения подобных задач отлично подходят модели машинного обучения. Но кроме непосредственно разметки сервис должен поддерживать просмотр фотографий, показывать итоги анализа и допускать возможность ручной корректировки оценки, если система выдала ошибочный результат. С учетом того, что рекламные материалы обновляются раз в квартал, сервис должен уметь дообучаться.
Разработка сервиса
Решение, которое автоматизирует анализ фото с торговых точек, разработала команда Глеба Ботыгина и Ольги Бражниковой (студенты ЛЭТИ, а сейчас ― инженеры-стажеры в Nexign). Пользователю достаточно загрузить заполненный Excel-файл с информацией по зонам торговой точки и ссылками на фотографии, а сервис накладывает на фото разметку, проставляет баллы и сохраняет все эти результаты в БД мобильного оператора.
У сервиса есть web UI, реализованный на React, через который можно оценить, корректно ли наложена разметка. Бэкенд инструмента построен на фреймворке FastAPI ― он состоит из нескольких микросервисов вокруг БД PostgreSQL. При этом для хранения файлов используется хранилище S3. Разработка строилась на базе собственных продуктов Nexign: СУБД Nord и API Gateway. ML-ная часть велась на Python.
Студенты применили модель для обучения YOLOv8 (ссылка на документацию), поскольку она хорошо справляется с наложением пиксельных масок произвольной формы на различные объекты на снимках. Для обучения модели использовались уже размеченные фото из торговых точек ― в общей сложности это обучение заняло пару часов.
В сервис заложен механизм корректировки работы. Разметку, предложенную моделью, пользователь видит в интерфейсе. Он может поставить лайк, если все корректно, или экспортировать фото во внешнюю систему для ручной разметки, если допущена ошибка. Эти переразмеченные фото, а также PDF, содержащий матрицу новых рекламно-информационных материалов используются для дообучения модели.
Кстати, для этой задачи команда подключила MLflow ― так легко отслеживать и сравнивать метрики новых версий модели. Используя MLflow, можно мониторить различные метрики модели во время ее дообучения.
Основные метрики оценки версий:
Precision (Точность): показывает, какая доля распознанных моделью объектов определенного класса действительно принадлежит этому классу.
Recall (Полнота): отражает, какую часть всех существующих объектов определенного класса модель смогла успешно распознать.
Mean Average Precision (Средняя точность): более сложная метрика, учитывающая площадь пересечения реальных объектов с предсказаниями модели, что дает более точную оценку ее производительности.
Каждой метрике присваивается определенный вес, после чего вычисляется взвешенное среднее — итоговый счет модели. На его основе можно сравнить новую дообученную модель с предыдущей версией и сделать вывод о том, произошло ли улучшение. Если новая модель показывает худшие результаты, используется старая версия до следующего дообучения.
YOLO — быстрая и удобная в использовании модель для задач сегментации, простая в настройке и внедрении. Она особенно хорошо справляется с распознаванием мелких объектов. Это было критически важно для этого кейса, поскольку большинство рекламных материалов имеют небольшие размеры. Одно из преимуществ YOLO ― встроенная аугментация данных, которая позволяет обогатить исходный датасет из 2500 изображений новыми вариантами — обрезанными, повернутыми, с измененной перспективой. Это способствует лучшему обучению модели в распознавании сложных и некачественных фотографий.
Одной из проблем для мобильного оператора были дубликаты фотографий в отчетах. Торговые представители часто прикрепляли одинаковые фото к разным зонам торговой точки, искажая реальную картину состояния. Эту проблему удалось решить путем автоматического распознавания дубликатов с их последующим исключением из оценки. Все фотографии пропускаются через сверточную нейронную сеть (CNN), которая кодирует каждое изображение в вектор. У похожих фотографий векторы схожи, что позволяет определить дубликаты. В оценке учитывается только одно из дублирующихся изображений, что повышает точность.
Для сравнения векторов используется расстояние Йенсена-Шеннона, которое показало наилучший результат. Это мера отличий между вероятностными распределениями, подходящая для сравнения векторов, полученных из CNN, так как их можно интерпретировать как распределения признаков. Расстояние Йенсена-Шеннона основано на расстоянии Кульбака — Лейблера, но симметрично, что важно для корректного сравнения.
Для подготовки данных использовался сервис Supervisely, где на фотографиях были выделены пиксельные маски рекламных материалов. Датасет сохранен в формате YOLO, где каждому изображению соответствует файл с координатами масок всех объектов на нем. Затем была проведена дополнительная предобработка данных, включая удаление артефактов разметки — масок с площадью меньше пороговой, возникших из-за ошибок разметки. Это улучшило качество предсказаний модели. Обработанный датасет был разделен на тренировочную и валидационную выборки. Тренировочная выборка использовалась для обучения модели, а валидационная — для проверки качества и оценки метрик.
Сейчас модель наносит разметку верно примерно в 80% случаев. Но решение уже помогло сильно сэкономить время. В общей сложности по результатам каждой проверки мобильному оператору поступает около 100 тыс. фотографий с торговых точек. Если раньше на их обработку уходило около двух недель, то теперь инструмент, запущенный локально на ноутбуке, справляется примерно за сутки. При переносе на сервер экономия времени может оказаться еще более внушительной.
Основные метрики:
Precision: 0.88
Recall: 0.71
F1-score: 0.79
mAP-50: 0.78
mAP-95: 0.6
IoU: 0.75
Разработанный сервис не влияет на другие бизнес-кейсы, поэтому его тестирование прошло в ускоренном формате. Сейчас команда разрабатывает дополнительный функционал, после чего сервис будет внедрен в прод мобильного оператора. Также у компании есть схожие кейсы, где инструмент может применяться после определенной доработки.
Что объединило студентов и реальные задачи из бизнеса
Сервис был разработан в рамках образовательного интенсива Learning Lab, который проводился в ИТМО совместно с Nexign. Компания и команда магистратуры ИТМО «Проектирование и разработка систем искусственного интеллекта» попробовали новый формат взаимодействия и организовали мероприятие, в рамках которого студенты не просто решают задачи за отведенное время, а получают новые знания и сразу же применяют их для автоматизации одного из аспектов бизнеса.
Образовательный интенсив проводился на базе ИТМО, но чтобы участвовать, не обязательно было учиться в университете. Организаторы не ограничивали вуз, факультет или курс ― нужны были только навыки программирования и погруженность в тему машинного обучения. Еще один важный момент: необходимо было приехать на очную часть мероприятия в Санкт-Петербург. Регистрироваться можно готовой командой из двух человек или индивидуально.
Формат предполагал не только классическую работу над задачей, но и образовательную часть. Поэтому в общей сложности образовательный интенсив продлился шесть дней ― с понедельника по субботу.
В понедельник в ИТМО команды получили вводные по задаче и познакомились непосредственно с заказчиком. В этот же день провели небольшой мозговой штурм по задаче.
Во вторник уже в офисе Nexign началась техническая часть ― лекции от ИТМО и коллег из Nexign про технологии и архитектуру. На этом этапе команды уже могли поговорить с менторами и получить некоторые первоначальные данные для разработки. В роли менторов выступали как преподаватели ИТМО, так и коллеги из Nexign.
В среду проходили дополнительные лекции и первый промежуточный чек-поинт, когда команды показывали предварительные результаты.
Четверг был посвящен лекциям про искусственный интеллект и консультациям с менторами.
В пятницу прошел еще один промежуточный чек-поинт.
В субботу команды представляли финальные версии своих решений экспертной комиссии, которая выбирала победителя.
В общий сложности на мероприятие было подано 48 заявок. А решений в итоге представили 13. Их оценивали 8 экспертов из индустрии. Постановка задачи приветствовала творческий подход ― участников никак не ограничивали в архитектуре. Но после 7 лекций от экспертов и 39 часов консультаций с командой все представленные проекты оказались похожи по идеологии. Сервис, получивший первое место, выделялся степенью проработки ― наличием UI и работающим прототипом с достаточно хорошими показателями.
По итогам Ольга Бражникова и Глеб Ботыгин, победившие в интенсиве, получили право поступить без экзаменов в магистратуру «Проектирование и разработка систем искусственного интеллекта» ИТМО и предложение о двухмесячной стажировке в Nexign. Сейчас они успешно прошли стажировку и продолжают работать в компании над другим проектом.
В целом опыт сотрудничества в рамках Learning Lab признали успешным все участники. Студенты смогли решить не абстрактную задачу из учебника, а реальный бизнес-кейс, да еще и приобщиться к корпоративным процессам, сопутствующим внедрению решения в прод. Сейчас они продолжают сотрудничество с компанией. А коллеги из Nexign увидели, что студенты, несмотря на отсутствие опыта в коммерческой разработке, смогли достаточно быстро адаптироваться к условиям стажировки и принести пользу бизнесу.
Следующий Learning Lab запланирован на февраль 2025 года. Следите за обновлениями на сайте, уже в декабре там появится анонс будущего интенсива.