Как искать дорожную разметку, в том числе если её нет

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

Чистый OpenCV

Если вы решите начать изучать поиск линии на дороге, первым ответом будет OpenCV. Это просто как с точки зрения разработки, так и дешево по вычислениям. Но это не то, что будет работать.

Примеры, как сделать собственный код для распознавания разметки при помощи базовых методов OpenCV, вы можете найти на Youtube. Кроме плюсов, у этого метода есть и существенный недостаток — работает только при идеальной разметке и при хороших условиях освещения.

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

Как искать дорожную разметку, в том числе если её нет

Нейросеть для поиска разметки

Второй вариант подразумевает использование нейросети, предназначенной для детекции объектов — чтобы искать разметку.

По этому пути пошли, например, китайская компания Baidu и некоторые российские разработчики беспилотных систем. Задачей нейросети является поиск белых прямоугольников. Если ничего выдумывать не хотите, можно вообще использовать YOLO.

Дороже по вычислениям, нежели чистый OpenCV, примерно тот же минус: не работает там, где белого прямоугольника, собственно, не видно, не работает там, где прямоугольник чем-то перекрыт. Но в отличие от чистого OpenCV, не работает с кривыми линиями.

В целом сами Baidu и проект Apollo пишут об этом прямо: «Apollo 5.0 does not support a high curvature road, roads without lane lines including local roads and intersections. The perception module is based on visual detection using a deep network with limited data».

А вот пример такой же реализации.

3D-карты

Третий вариант категоричнее и строится на базисе, что все линии нанесены на высокоточную 3D-карту (HD-map) и искать их в процессе движения не нужно.

Уэтого варианта нет минусов с точки зрения линий и полос, но есть большие вопросы к работе 3D-карт. Можно повесить на машину три лидара, можно семь, это дорого, не универсально (сбой локализации приводит к крашу) и требует подготовки (создание 3D-карты), что, еще раз, дорого. Этот метод использует большинство крупных компаний, которые занимаются беспилотниками и не имеют ощутимых границ в финансировании.

Компании, которые используют высокоточные 3D-карты ездят внутри построенного виртуального города. Они точно знают, где они находятся, какие здесь знаки, полосы, и все, ради чего им нужны сенсоры, — это локализоваться и наносить в свой «виртуальный мир» окружающие машины и людей.

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

Сложные нейросети

Четвертый вариант строится на том, чтобы использовать максимум нейросетей, сложных и простых, для разных подзадач внутри одной задачи, и мы (не только мы, к слову) движемся именно по этому пути. Это отразится на стоимости вычислений, но это все еще дешевле лидаров и 3D-карт.

Сейчас нашей основной задачей является сбор и разметка датасета со сложными кейсами. Чтобы улучшать обучение наших нейросетей. Может есть энтузиасты? А пока, особенно в связи с погодой за окном, мы решили расширять наш датасет с помощью симулятора. Мы воссоздаем российские реалии в виртуальной среде.

Уже сейчас мы имеем достаточные результаты поиска полос движения, чтобы заставить построить планер маршрут движения.

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

Есть кейс, в котором никто не думал, что система заработает, тем не менее она работает.

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

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

Наш Twitter, мой Twitter, следите за нашим процессом работы.

1919
12 комментариев

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

Да, нужно обучать, ну и также есть ряд нюансов со знанием расположения камеры, в данном случае мы это не учитывали совершенно. А это значительно уменьшит ошибки.

OpenCV ни на одном из кейсов не покажет практически ничего, кроме разве последнего видео в подборке.

1

Четвертый вариант строится на том, чтобы использовать максимум нейросетей, сложных и простых, для разных подзадач внутри одной задачи, и мы (не одни мы, к слову) движемся именно по этому путиНасколько я знаю это путь Теслы, Мобай и других кто не пользуется лидарами и точными 3Д картами. Разные сетки распознают разные объекты :   знаки,  светофоры, разметку. Потом передают эту инфу другим сеткам которые прокладывают путь, проверяют безопасность, предсказывают траектории. 
У вас похожая система? Если это не секретная информация, могли бы вы написать статью про это?

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

Как пишут на ютубах индийцы - Sir, please, share the code!!!

А вообще, молодцы. Какой объем уже разметили и планируете?

Пока небольшой объём, планируем увеличивать его в том числе за счёт симулятора.

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