Как менторы из индустрии помогают студентам решать реальные кейсы
В начале второго года обучения студенты ШАДа выбирают исследовательский проект. Студентам предлагают список тем от менторов, где они расставляют приоритеты — от 1 до 3. Обычно в основе проекта лежит реальная проблема из индустрии, которую студенту предстоит решать совместно с наставником.
Затем ментор смотрит на список откликнувшихся студентов, их резюме, образование, мотивацию, приоритеты, проводит собеседования и выбирает того, с кем будет работать. Студенту нужно выполнить работу в течение нескольких месяцев и успешно её защитить. Менторы фиксируют результаты исследований и в дальнейшем могут применять их в работе.
Валентин, почему ты выбрал именно эту тему? Какая перед тобой стояла задача?
Я выбрал проект по улучшению распознавания QR-кодов, потому что эта тема показалась мне наиболее интересной и самодостаточной. В это время я проходил курс по компьютерному зрению — и решил, что будет здорово применить полученные знания в реальном проекте.
Проект связан со складским роботом-инвентаризатором, задача которого — инвентаризировать товары в логистическом комплексе Маркета.
На каждой палете склада есть наклейка из термобумаги размером 10 × 10 см с QR-кодом. Задача робота — найти эту метку и раздекодить её. Но бывает, что роботу это не удаётся: чего-то не хватает со стороны алгоритмов, код подмят или находится не в том положении. Этикетки, которые робот не смог распознать, называются ноуридами. Задачей Валентина было повысить качество их распознавания.
Он применял разные подходы, но самым действенным оказался комбинаторный перебор различных способов препроцессинга классических алгоритмов компьютерного зрения — метод, когда c помощью препроцессинга докручивают распознавание кодов.
Валерий Ильин, ментор, руководитель группы разработки компьютерного зрения робототехники Маркета
У меня был датасет из нераспознанных QR-кодов, мы пробовали распознать из них как можно больше. Для этого нам нужно было преобразовать изображение QR-кода и после этого подать его на вход декодеру. Наш подход заключался в том, чтобы попробовать как можно больше разумных идей для препроцессинга.
Препроцессинг — это предварительная обработка, когда данные приводят к виду, необходимому для подачи на вход алгоритму. Например, изображения подгоняются под один размер или цветовую схему.
В итоге я разработал ряд подходов — как нейросетевых, так и основанных на классическом компьютерном зрении, — которые могут распознать 20% ноуридов.
Круто, а как проходила ваша работа с ментором?
Работа над проектом заняла два с половиной месяца. В среднем я тратил на него столько же времени, сколько и на другие курсы ШАДа. Мы созванивались с ментором раз в неделю, обсуждали прогресс и ставили задачи: я задавал вопросы, Валерий давал подсказки. Из презентаций, которые я готовил к встречам, мы собрали одну итоговую — с ней я защищал проект.
Из нас получилась такая маленькая команда с лидом. Отчётные еженедельные встречи напоминали синки с кратким статусом по проекту: что сделали, куда планируем двигаться дальше, есть ли вопросы, нужны ли ещё данные. Это похоже на то, как выстроена реальная работа у меня в команде робототехники, но с некоторыми нюансами, так как здесь не было жёсткой привязки к результату. Например, я не проводил код-ревью.
Валерий Ильин, ментор, руководитель группы разработки компьютерного зрения робототехники Маркета
Какие методы вы использовали в работе?
Препроцессинг. Всё началось с простого бейзлайна (отправной точки для сравнения и улучшения) в виде препроцессинга методами из библиотеки OpenCV — поворот, изменение размера изображения и его чёткости, бинаризация. Как и ожидалось, уже на этом этапе мы добились хорошего прироста распознанных QR-кодов.
Бинаризация — процесс, при котором каждый пиксель изображения становится чёрным либо белым.
Сегментация. После мы приступили к нейросетевым методам — и начали с сегментации. Идея находить QR-код на картинке, вырезать его и подавать декодеру проста настолько, что сегодня используется во многих декодерах по умолчанию. Чтобы её реализовать, нам пришлось собрать датасет на краудсорсинговой платформе Яндекса, самостоятельно написав инструкции и приведя примеры разметки. Это заняло несколько недель, с помощью этого датасета мы смогли обучить YOLOv8.
Пайплайн для этого и следующих нейросетевых подходов был такой: сначала применяем к изображению модель, после подвергаем его препроцессингу из бейзлайна. Такой подход тоже немного увеличил количество распознанных QR-кодов.
Super resolution. Для этого метода мы взяли простую древнюю модель Super resolution GAN. Для построения датасета использовали картинки, которые декодер смог распознать. Предполагалось, что их качество выше. Мы сделали их более шумными и обучали нейросеть лучше распознавать коды на полученных парах качественных и некачественных картинок.
Если говорить о практической ценности проекта — мы пока что не довели результат до прода, но увидели, какие подходы нужно рассматривать в первую очередь для улучшения распознавания изображений на примере QR-кодов, и обратили внимание на важность препроцессинга: как выделять полоски или квадратики.
Мы используем в работе стандартный декодер, под капотом которого есть препроцессинг, но не жёсткий. Он не привязан к домену, поэтому не всегда срабатывает. Эта проблема решается алгоритмически, если декодеру «скормить» изображение хорошего качества. Полученные знания мы можем применять для улучшения распознавания не только QR-кодов, но и штрихкодов — сейчас появилась такая необходимость.
Валерий Ильин, ментор, руководитель группы разработки компьютерного зрения робототехники Маркета
Также мне удалось провести с моделью ещё один эксперимент. Идея была в том, чтобы с её помощью ставить в соответствие картинке с QR-кодом матрицу из единиц и нулей фиксированного размера. Распознать полученную бинарную матрицу декодеру не составит никакого труда. Я успел попробовать ResNet-like-модели на искусственных данных, но встретился с некоторыми трудностями при построении реального датасета.
Ого, с какими трудностями? Расскажи поподробнее
Недетерминированность QR-кодов — именно это свойство не позволило мне построить датасет для обучения ResNet-like-модели. Предполагалось, что мы возьмём изображения, на которых получилось расшифровать код, и построим по этому коду бинарную матрицу, которую в дальнейшем будем использовать в качестве таргета для нашей модели. Однако генератор, получив в качестве входных данных информацию из расшифрованного кода, выдал другое изображение QR-кода.
Подобное поведение может возникать из-за разных функций подсчёта «хорошести» QR-кода при переборе различных mask pattern в генераторе. Это делается для того, чтобы найти самый подходящий код для декодинга.
Мне интересно было посмотреть на результаты гипотез, которые предлагал Валентин. Потому что в реальной работе не всегда есть возможность попробовать все методы. Когда ты ведёшь настоящий проект, ты не можешь сделать лишний шаг влево-вправо, нужно экономить ресурсы команды, учитывать риски, а здесь было большое поле для экспериментов.
Валерий Ильин, ментор, руководитель группы разработки компьютерного зрения робототехники Маркета
Какие преимущества работы с ментором ты выделишь?
Мотивация. Мне понравилось работать с наставником, потому что при работе в одиночку бывает сложно найти мотивацию, а встречи с ментором вдохновляли меня на работу в течение всего семестра. При этом задачи на неделю я ставил сам, двигался в своём темпе, делая в первую очередь то, что мне интересно.
Обмен опытом. Ментор помогал мне систематизировать и конкретизировать рабочий процесс, чтобы постепенно развивать проект, а не закопаться на весь семестр в реализации заведомо бесперспективной идеи.
Реальный продукт. Для меня было в новинку работать в такой близости к продукту. Ментор делился со мной реальными данными, наработками, рассуждениями своей команды — это помогло быстрее понять контекст и включиться в проект. После окончания ШАДа и магистратуры я планирую поступить в аспирантуру и продолжить заниматься исследованиями.
Главный плюс работы с наставником из индустрии — реальные данные. Часто люди, которые работают над ресёрчем, берут для анализа синтетические данные. Здесь у студента был настоящий датасет с реального робота-инвентаризатора и проблема, которую нужно решить.
Валерий Ильин, ментор, руководитель группы разработки компьютерного зрения робототехники Маркета