Всем привет! Меня зовут Никита Крестьянинов, я руководитель группы управления бизнес-процессами служб сервиса в команде Russtech (разработчики ведущего российского оператора рекламы вне дома Russ). Сегодня я хочу рассказать, как мы совместно со стажерами разработали ИИ-инструмент, способный отслеживать состояние работы цифровых рекламных конструкций.
Стажировка в Wildberries & Russ
Недавно RWB (объединенная компания Wildberries & Russ) организовывала стажировку для студентов старших курсов и магистрантов по девяти направлениям: разработка и IT, аналитика, ESG, менеджмент, юриспруденция, финансы, исследования, маркетинг и контент, а также редакция и коммуникации. Студенты ведущих вузов, включая МГУ, НИУ ВШЭ, МФТИ и ВАВТ и др., могли выбрать наиболее интересное для них направление, пройти конкурсный отбор и на два месяца погрузиться в реальную рабочую среду (о старте нового набора на программу можно узнать на нашем сайте RWB Образование и в телеграм-канале WB Level Up).
Наша команда пригласила к себе четырех стажеров для работы над новым проектом: созданием ML-модели для автоматизированного мониторинга качества изображений на цифровых экранах. К началу стажировки мы уже сформировали концепцию нового ИИ-помощника, поэтому сразу же приступили к работе над кейсом.
Распределение задач
В данном проекте я отвечал в том числе за организацию работы стажеров. Моя роль как общего куратора заключалась в координации всей команды, контроле сроков и проведении общих встреч.
Еще на старте вместе с командой мы разработали план создания ИИ-модели и разбили проект на пять этапов:
-
сбор данных (~2 недели);
-
разметка данных (~1 неделя);
-
проектирование архитектуры (~2 недели);
-
разработка и тестирование прототипа модели (~4 недели);
-
работа с аналитикой и метриками (~2 недели).
Когда к нам присоединились стажеры, мы провели серию собеседований, чтобы выявить сильные стороны ребят и распределить задачи, учитывая их знания, интересы и ожидания. По итогу Тимофея решили подключить к работе с моделью и данными, Маргариту — к разработке интерфейса для визуализации результатов, Анну — к бизнес-аналитике, а Валерию — к разметке данных и работе с базами.
Для более плавной адаптации каждому стажеру назначили ментора с учетом его направления (ML, Mark Up, Data Science). Они курировали ежедневную работу ребят и отвечали на все вопросы. Дополнительно были организованы вводные лекции по системной аналитике и работе с нашей системой DSM (Digital Screen Monitoring) для более глубокого погружения в проект.
Также мы договорились проводить короткие ежедневные общие совещания, чтобы все участники команды понимали, на каком этапе находится проект, текущие задачи и т. д. В дальнейшем мы убедились, что такой подход был весьма эффективным:
-
каждый участник понимал систему целиком, а не только свою часть;
-
мы могли менять приоритеты и быстро перераспределять силы на более важные задачи;
-
решения принимались с учетом всех аспектов — от данных до пользовательского опыта;
-
в коллективе удалось создать атмосферу взаимопомощи и общей ответственности.
В качестве результатов стажировки мы ожидали получить:
-
собранный и размеченный датасет для обучения нейросети (чтобы мы могли использовать в дальнейшем);
-
задокументированную аналитику;
-
созданную нейросетевую модель. Мы планировали ее в дальнейшем дообучить и превратить в полезный инструмент, способный отслеживать состояние работы цифровых конструкций и оповещать технические службы о необходимости проведения дополнительных работ.
Работа над проектом
1-й этап. Сбор и первичная обработка данных
Для обучения ML-модели в первую очередь требовалось собрать данные. Мы организовали временный доступ к цифровому экрану на технической территории, на который установили три камеры разных моделей с различными типами линз для симуляции реальных условий. Создавая искусственные неисправности, команда сделала более 1500 скриншотов. Стажеры управляли стендом, записывали данные, проводили первичный анализ и отбраковку некачественных фото.

2-й этап. Разметка и изучение предметной области
Следующим этапом стала подготовка датасета — трудоемкая и ответственная задача, для выполнения которой была выбрана платформа Label Studio. Стажеры тщательно изучили устройство цифровых экранов, типы матриц и причины возникновения различных технических дефектов, что позволило им проводить разметку уже не механически, а осознанно.
Однако тут мы столкнулись с серьезной проблемой: все снимки с камер имели искажение “рыбий глаз”. Кроме того, различное положение цифровых конструкций относительно сторон света, а также наклон и угол размещения камеры создавали дополнительную сложность для систематизации снимков.
Тогда у нас возникло предложение попробовать повышать качество исходного изображения и убирать искажения из-за fisheye-линз. В качестве инструмента для повышения качества мы взяли ИИ-модель Real-ESRGAN, а «нормализацию» рекламного щита производили с помощью библиотеки OpenCV. То есть теперь снимки предварительно обрабатывались при помощи классических инструментов компьютерного зрения PyTorch и разметки. Качество исходного скриншота повышалось, а само изображение «выпрямлялось». После чего на получившемся изображении размечался экран, чтобы можно было выделить нужную область и отбросить окружение, снизив вероятность ложных детекций.
3-й этап. Подготовка к обучению и выбор модели
Затем совместно со стажерами наша команда проанализировала несколько вариантов нейросетей (YOLOv8, TF EfficientNet B4, ResNet18, ResNet50, U-net). Было проведено тестовое обучение и валидация на небольших наборах данных. По итогам сравнения метрик скорости и точности решили остановиться на U-net.
4-й этап. Обучение и тестирование модели
Мы написали скрипты для аугментации данных и запустили процесс обучения на Google Colab. Стажеры активно мониторили процесс, отслеживая метрики (loss, precision, recall) в TensorBoard. Дальше началось тестирование на отдельной выборке.
На этом этапе тоже обнаружились сложности: низкая точность на краях кадра из-за дисторсии («рыбий глаз»), ложные срабатывания вокруг экрана и недостаточное обобщение модели на данные с камер, не участвовавших в обучении.
Трудности, с которыми мы столкнулись, оказались типичными для компьютерного зрения в реальных условиях. Искажения «рыбий глаз» возникали из-за использования широкоугольных объективов, ложные срабатывания — из-за сложного фона вокруг экранов, а проблема обобщения была связана с разницей в условиях съемки между нашим демостендом и реальными конструкциями. Эти вызовы заставили нас пересмотреть первоначальный подход и искать более надежные архитектурные решения.
Feel free, или Успехи команды
Выявленные в ходе тестирования проблемы поставили под сомнение эффективность выбранного подхода с единой ML-моделью, требовался фундаментальный пересмотр архитектуры решения. На очередном брейншторме, проходившем под девизом «Feel free», пришли к идее разделить этот этап на два и использовать две специализированные нейросети.
Первоначальная модель U-net пыталась одновременно решать две разные задачи: находить границы самого экрана на изображении с сильными искажениями и фоном, а также классифицировать проблему. Это было слишком сложно для одной архитектуры.
Стажеры предложили следующий пайплайн.
-
Сначала точно вырезать область экрана из изображения, чтобы избавиться от всех помех по краям (рамок, стен, дорог, машин и проч.) и устранить эффект «рыбьего глаза».
-
Затем подать это выровненное и очищенное изображение экрана в классификатор.
Мы решили попробовать использовать две модели. U-net — для семантической сегментации и точного выделения на фото маски экрана, т. е. области с границами экрана. TF EfficientNet B4 — для определения неисправности на основе подготовленного изображения.
Обучение U-net
Стажеры заново провели разметку данных, но на этот раз размечали уже контур самого экрана. Это было сделано быстро, так как инструмент (Label Studio) и процесс ребятам были уже хорошо знакомы. Они обучили U-net предсказывать маску экрана.
Для коррекции эффекта «рыбьего глаза» мы написали собственную библиотеку, т. к. в open source-проектах нужный функционал отсутствовал. Мы построили математическую модель явления и реализовали обратное отображение. Точность определения границ экрана достигла 90%. Проблема ложных срабатываний вокруг экрана была почти полностью решена, теперь модель классификатора меньше видела фон.

Обучение TF EfficientNet B4
На этом этапе был подготовлен новый датасет для классификации. Ребята использовали U-net: брали исходное фото, применяли к нему предсказанную маску и трансформацию, получая в результате идеально выровненное изображение экрана без лишних деталей.
Позже было предложено использовать transfer learning на предобученную на ImageNet модель TF EfficientNet B4, заменив и дообучив только последние слои. Это позволило добиться высокой точности даже на относительно небольшом нашем датасете. Метрика Accuracy для основной задачи превысила 92%.
Веб-интерфейс
В рамках стажировки также была создана веб-версия ML-модели BUNNY (название нашего ИИ-инструмента). Данный веб-интерфейс стал удобным и понятным способом взаимодействия с системой. Стажеры разработали механизм Drag and Drop, который позволил мгновенно отправлять скриншоты на проверку. После загрузки снимка модель автоматически анализировала изображение и показывала результат, выделяя при этом проблемную область на исходном снимке.

Результаты
Совместными усилиями у нас получилось создать внутренний инструмент для автоматического контроля работы цифровых экранов. Разработанная и протестированная двухэтапная ML-архитектура показала точность свыше 76% на тестовых данных.
Достигнутые результаты превзошли наши ожидания. Мы высоко оценили вклад стажеров и предложили всем ребятам позиции в компании, чтобы продолжить вместе развивать этот проект.
Стажировка в Wildberries & Russ еще раз подтвердила эффективность подхода “обучение через практику”. Мы на личном опыте убедились, что благодаря интересным задачам, современным инструментам и поддержке опытных наставников талантливые ребята могут достигнуть впечатляющих результатов даже в сжатые сроки. Неудивительно, что из 90 участников более 39% стажеров остались работать в компании после завершения программы, включая четырех ребят, которые работали над нашим проектом.
Спасибо за внимание!
Автор: n_krst


