Меня зовут Миша Лиз, я специалист по анализу данных в 2ГИС.
Вместе с командой ML мы используем машинное обучение в продуктовых задачах — от построения оптимального маршрута для пользователя до распознавания дорожных знаков и типов дорожного покрытия по видео.
В основном я работаю над задачами, связанными с компьютерным зрением.
Осенью мы приняли участие в конкурсе в рамках ИИ-путешествие , который организовали ребята из Сбербанка.
Команды соревновались в решении задач ML разных сервисов — Ситимобил, Сбер AR/VR, Нейролаб, Работа.
ру.
Были проблемы и у нас.
Расскажу о финальном задании и его результатах.
Конкурс
AI Journey — серия мероприятий, посвященных науке о данных.Они призваны объединить разработчиков и специалистов по машинному обучению по всему миру.
В конкурсе соревновались дети, которые учатся в школах и интересуются машинным обучением.
Они смогли попробовать свои силы в 10 задачах в разных областях — обработка естественного языка (NLP), компьютерное зрение (CV), обучение с подкреплением (RL), а также классическое машинное обучение.
Как прошли соревнования
Есть два этапа – отборочный и финальный.В ходе отборочного тура мы могли решить сразу несколько задач и выяснить, какая из них нам больше всего понравилась (на этом этапе наша задача оказалась одной из самых популярных).
По итогам отборочного этапа мы выбрали шесть команд с лучшими решениями.
При оценке решений учитывалось как качество алгоритма, так и продуктового решения.
В финале было фиксированное количество участников, и команда могла участвовать только в одном задании.
Этот этап длился 5 дней — за это время участники решали задачу с нуля.
В финал вышли команды из России, Вьетнама и стран СНГ.
Помимо ML-решения командам нужно было разработать сервис, в который они бы обернули это решение — например, сайт или телеграм-бот. Участвующие службы создавали задачи, предоставляли данные, обсуждали проблемы с командами и оценивали решения.
Задача
ML-часть нашей задачи с заключительного этапа — научиться распознавать направления движения по полосам на дорожных знаках 5.15.1 и 5.15.2. Это реальная проблема, которую мы решаем в 2ГИС, чтобы сделать наш граф дорог более точным.
Эти знаки могут иметь одну или несколько полос движения.
Максимальное количество полос на знаке – пять.
Для удобства изложения введем обозначения: разные полосы на знаке будем разделять запятыми.
А разные стрелки на одной полоске разделены плюсом.
Например, для знака 5.15.1 на изображении выше метка будет «Прямо+Влево, Прямо, Вправо».
Целевая метрика задачи — точность:
Что в этом такого сложного?
Да, задача выглядит простой.Но только на первый взгляд. Есть несколько проблем, с которыми вы столкнетесь, если копнете глубже.
Классовый дисбаланс
Знаки были собраны с реальных дорог.А на дорогах направления по полосам движения распределены неравномерно.
Есть частые направления, например «Прямо», а есть редкие, например «Направо с последующим поворотом налево».
Вы хотите правильно распознавать все направления, поэтому этот дисбаланс необходимо учитывать при обучении модели.
Комбинации стрелок
Всего в данных было 7 стрелок (на самом деле их больше, некоторые мы убрали из конкурса).
Каждая полоса на знаке может содержать одну или несколько стрелок.
Поэтому у нас не 7 вариантов ответа на каждую полосу, а гораздо больше.
Плюс некоторые стрелы несовместимы друг с другом, поэтому задача требует нетривиальных расчетов.
Комбинации полос
В конкурсе максимальное количество полос на знаке было 5 – в жизни редко увидишь больше.То есть на знаке может быть от 1 до 5 полос движения.
А с учетом того, что каждая полоса имеет множество вариаций стрелок, существует множество различных комбинаций полос движения со стрелками.
Примеры необычных комбинаций стрелок:
Нечасто увидишь на дорогах, что с одной полосы можно ехать прямо, налево и направо.
Условия съемки
Кадры были получены с разных видеорегистраторов в разное время суток и в разное время года.Таким образом, изображения могут иметь:
- разное качество,
- разные ракурсы,
- разное освещение,
- вмешательство.
Архитектурные решения участников
В среднем за пять дней каждая команда представила 23 решения финальной задачи.Далее я расскажу вам об архитектурных идеях, которые команды опробовали в финале конкурса.
Классическое резюме + классификация
Идея Используя классические алгоритмы CV, найдите стрелки, а затем распознайте их с помощью классификационной сетки.
Стоит отметить, что для распознавания стрелок можно использовать как обычную классификацию, так и мультиметку (на схеме ниже).
В этой задаче лучше использовать мультиметку, чтобы сделать сеть более устойчивой к распознаванию комбинаций стрелок.
плюсы
- Устойчивость к новым комбинациям стрелок на полосах движения.
Например, если сеть изучила стрелки «Прямо» и «Вправо», она выдаст правильный прогноз для их комбинации — «Прямо + Вправо».
- Настройка алгоритмов CV. Классические алгоритмы компьютерного зрения непросто настроить и это может занять много времени.
А у участников этого было мало.
- Несоответствие качества изображения.
И в этой задаче это одна из главных трудностей.
Обнаружение + классификация
Идея Чтобы обнаружить стрелки, используйте нейронную сеть вместо классических алгоритмов CV. Это могут быть архитектуры как для сегментации, так и для обнаружения.
плюсы
- То же, что и для архитектуры «Классическая CV + классификация».
.
- Качество обнаружения.
- Дополнительный макет обучающих данных.
Но мы не запрещали дополнительную аннотацию обучающих данных.
Стоит помнить, что времени у участников было мало, и важно было правильно распределить свои ресурсы, чтобы все успеть.
- Медленный вывод. Как правило, модели обнаружения являются объемными, поэтому время прогнозирования может быть медленным.
Только многоуровневая классификация
Идея Мы знаем, что полосок у нас максимум 5, каждая из которых может иметь разные варианты из 7 стрелок.Затем вы можете закодировать эти 5 полос с 7 возможными стрелками в матрицу 5x7, а затем растянуть эту матрицу в один вектор, который модель обучит. Задача сводится к многомерной классификации.
плюсы
- Быстрый вывод. Классификационные сети в глубоком обучении являются самыми быстрыми, поэтому время прогнозирования быстрое.
- Устойчивость к новым комбинациям стрелок на полосах движения.
Например, если сеть изучила стрелки «Прямо» и «Вправо», то она выдаст правильный прогноз для их комбинации «Прямо + Вправо».
- Неустойчивость к новым комбинациям полос движения.
С оговорками можно сказать, что мы привязаны к комбинациям полос движения.
Есть риск, что если, например, сеть научилась хорошо распознавать знак «Прямо, Направо», то она не сможет так же хорошо распознавать «Прямо, Направо».
Многоглавая классификация
Идея Для каждой полосы на знаке сделайте отдельную классификационную головку, которая будет использоваться для распознавания стрелок на этой полосе.
В результате получается 5 целей, каждая с 7 выходами.
Преимущества и недостатки
- То же, что и идея «Только классификация по нескольким меткам».
Советы и рекомендации от участников
Помимо необычных архитектур, команды предложили и интересные способы работы с данными.Вот различные трюки, которые помогли им подняться на вершину таблицы лидеров.
Расширение набора данных за счет дополнений, меняющих метки классов.
Некоторые дополнения, такие как горизонтальное вращение, меняют метку изображения.
Но вместо того, чтобы отказываться от них, вы можете определить, какие стрелки куда идут во время аугментаций, меняющих метки.
Таким образом мы боремся с дисбалансом в зеркальных классах.
Увеличение времени тестирования (TTA)
При прогнозировании тестовой выборки вы также можете дополнить изображение.Тогда вы получите несколько похожих изображений с одной и той же меткой.
Затем мы усредняем вероятности предсказания для каждого варианта изображения и получаем окончательную вероятность.
Генерация синтетических данных
Чтобы сгладить классовый дисбаланс, одна команда использовала синтетические данные.Обычно синтетические данные отличаются от реальных данных.
Если учиться только на них, то модель будет предсказывать реальные данные хуже, чем ожидалось (по сравнению с синтетическим тестом или проверкой), поскольку предметная область смещена.
Однако синтетика хорошо подходит для предварительной подготовки моделей.
Также стоит отметить, что эти данные были сгенерированы не отдельной сетью (например, генеративной), а вручную.
То есть сама задача генерации такой синтетики требует опыта не только в ML, но и в разработке.
Склейка нескольких персонажей
Чтобы увеличить количество комбинаций направлений в обучающих данных, участники сшивали два или более изображений в одно.
С помощью этого трюка можно получить новых многополосных персонажей и повысить устойчивость к комбинациям, которых не было в тренировочных данных.
Улучшите качество изображения
Одной из основных проблем при решении является качество изображений.Поэтому одна команда решила увеличить его, прежде чем распознавать направления движения с помощью предварительно обученного автоэнкодера.
Команда утверждает, что это повысило качество их модели примерно на 1%.
Сама задача в классической постановке называется «проблемой сверхразрешения».
Остался за кадром
Многие шаги, необходимые для решения проблемы ОД, кажутся самоочевидными.Мы не акцентировали на них внимание в статье, но отметим, что участники их выполнили.
Это перебор( поиск по сетке ) по модельным архитектурам, различным оптимизаторам, скорости обучения, планировщикам ( планировщик ), пороговые значения и другие параметры обучения.
За кадром остался и ансамбль сеток, которым также пользовались участники.
В целом видеокарты работали, вентиляторы крутились, параметры перепутались.
Как нам решить эту проблему?
У нас было гораздо больше времени на эксперименты с разными архитектурами, чем у ребят. Мы опробовали модели классификации (без многоголовочной классификации) с обнаружением полос движения и без него.Кроме того, мы экспериментировали с моделями оптического распознавания символов (OCR).
Мы сделали свой выбор, основываясь на соотношении качество/скорость вывода — и в итоге остановились на модели OCR. Идея Стрелки полос движения можно считать символами.
Затем мы используем специальный Модель оптического распознавания символов , задача которого — распознавать символы.
В конечном итоге мы используем архитектуру, показанную на диаграмме ниже.
Архитектура сети OCR, источник: https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c плюсы
- Устойчивость к новым комбинациям полос движения.
Это значит, например, что комбинация «Прямо, Направо» должна распознаваться так же, как и комбинация «Прямо, Направо», даже если второй не было в тренировочных данных.
- Средняя скорость вывода.
- Качество.
- Неустойчивость к новым комбинациям стрелок на полосах движения.
Следовательно, если комбинаций стрелок мало (хотя стрелок из этих комбинаций может быть достаточно), то эти комбинации могут быть плохо предсказаны.
Эту проблему можно решить синтетикой и добавлением недостающих данных из боя.
Финал конкурса и статьи
Поздравляем команду FTL из Минска, которая выиграла AI Journey! Ребята использовали в своем решении модель классификации нескольких головок и все описанные выше трюки с данными (кроме улучшения качества изображения).
Спасибо всем, кто принял участие в конкурсе.
Было интересно пообщаться с каждой командой и посмотреть на задачу с новых сторон.
Ребята показали очень высокий уровень подготовки.
Менее чем за неделю они не только создали качественные ML-решения, но и создали для них сервис с публичным API, подготовили и презентовали свое продуктовое решение.
Я и моя команда не ожидали такого от детей, которые еще даже не закончили школу! Это очень круто.
Желаю им продолжать развиваться и развивать сферу машинного обучения.
Ребята, если вы читаете Хабр, передаем привет! Теги: #Машинное обучение #искусственный интеллект #конкурсы #машинное обучение #Обработка изображений #искусственный интеллект #путешествие ИИ #путешествие ИИ #компьютерное зрение #2ГИС #нейронные сети
-
Создайте Свой Собственный Компьютер
19 Oct, 24 -
Почему Я Выбираю Офис
19 Oct, 24 -
Новые Сеансы Gopro Hero 4
19 Oct, 24