- BrainTools - https://www.braintools.ru -

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 1

Всем привет, меня зовут Всеволод Орлов, я руководитель службы восприятия [1] в направлении Автономного Транспорта Яндекса. Я и моя служба занимается описанием окружающего наш автомобиль мира. Сегодня я хочу рассказать про то, как мы учились определять степень загрязнения лидара — лазерного сенсора, установленного на нашем автономном транспорте. Тема, актуальная всегда, но особенно в российских погодных реалиях осени, зимы и весны. Расскажу, почему даже малейшее загрязнение лидара — проблема, почему эту проблему не так просто решить и какие есть подходы к этому решению, а в конце поделюсь нашими результатами. 


Лидар: что это и зачем он нужен

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

Цилиндрический лидар на крыле автономного автомобиля

Цилиндрический лидар на крыле автономного автомобиля
Нецилиндрический лидар на крыше

Нецилиндрический лидар на крыше

В статье мы разберём работу цилиндрического лидара. Внутри него — набор лазеров и фотодиодов. Они вращаются примерно 10 раз в секунду, производя облако данных, как на картинке ниже. 

Лидарное облако

Лидарное облако

Лидар — очень важный сенсор в конструкции автономного транспорта по двум причинам: 

  • У него очень высокое разрешение сканирования по углу. Производимые лидаром облака данных могут содержать в себе десятки, а то и сотни тысяч точек. Вблизи объекты видно очень подробно, и это даёт детализированное трёхмерное представление мира вокруг автомобиля — формы и позиции всех окружающих объектов.

  • Точки из лидарного облака содержат точную оценку расстояния от лидара до окружающих объектов. Вы можете увидеть на картинке выше, что у каждого объекта в облаке есть точная до нескольких сантиметров позиция в мире относительно автомобиля. Это позволяет точнее детектировать их и, в свою очередь, упрощает задачу планирования движения.

Почему лидару важно оставаться чистым

Для нас лидар — основной сенсор с двумя главными областями применения: восприятие и локализация. Восприятие — это всё, что связано с описанием состояния внешнего мира, например распознавание движущихся объектов и препятствий. Локализация — про то, что мы хотим, чтобы наш автомобиль принимал данные с лидарного облака и с сантиметровой точностью мог расположить себя в пространстве по предзаписанной карте. И для этого нам нужен чистый лидар.

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

Примеры загрязнений лидара

Примеры загрязнений лидара

Система очистки — комплекс оборудования и программного обеспечения — обнаруживает загрязнение сенсора и быстро его очищает. Основной элемент системы — форсунки, которые под давлением бьют по сенсору воздухом или специальной жидкостью. 

При этом загрязнения серьёзно ухудшают качество его работы.

Как загрязнение лидара мешает ему видеть мир: левая половина лидара чистая, а правая — грязная

Как загрязнение лидара мешает ему видеть мир: левая половина лидара чистая, а правая — грязная

На примере выше показана картинка с фронтальной камеры и проекции лидарных точек, которые раскрашены по расстоянию. Красная — близко, зелёная — далеко. Справа, в загрязнённой части лидара, видно только ближайшую дорогу, а дальняя (20–30 м) — пропадает. Не видны деревья и стена, но самая большая проблема — стало хуже покрытие машин лидарными точками. Два чёрных автомобиля, которые здесь видны, покрыты точками менее чем наполовину. Качество решения задачи детекции на таких данных будет деградировать.

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

Почему сложно распознать загрязнения лидара

Когда пачкается камера, мы можем увидеть это на картинке и детектировать с помощью разметки данных. А сам лидар зачастую не может посмотреть на загрязнение. Разберёмся, почему так.

Пример типичного загрязнения камеры — капля воды

Пример типичного загрязнения камеры — капля воды

Чтобы сформировать облако из точек, лидар отправляет сигнал одним из своих лучей в определённом направлении. Затем приёмный фотодиод в течение какого‑то времени преобразует вернувшийся свет в электрический импульс. Задав некоторое пороговое значение, мы отличаем полезный сигнал от шумов.

Модельный пример отраженного сигнала

Модельный пример отраженного сигнала

На картинке выше — модельная сцена с условием, что лидар находится где‑то в небе. Луч от лидара является расходящимся. По мере удаления от устройства он увеличивается от долей миллиметра до десятков сантиметров, поэтому вполне возможна ситуация, когда мы частью луча попадаем в какой‑то объект, например в линию электропередач. Другая часть луча летит дальше и также какой‑то своей частью попадает в дерево. Весь оставшийся луч доходит до земли. И все эти отражения мы фиксируем в приёмном канале как отдельные пики.

Лидар «посмотрит» на нулевой пик или на первый (в зависимости от настроек), найдёт другой пик и разницу по времени между ними. Умножив эту разницу на скорость света и разделив пополам, вычислит расстояние до объекта.

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 9

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

Отличие возвращённого сигнала при его отправке в небо и загрязнённом лидаре

Отличие возвращённого сигнала при его отправке в небо и загрязнённом лидаре

И в первом, и во втором случае будет похожая амплитуда, но во втором сценарии форма нулевого пика будет другой: это зависит от загрязнения. При этом лидар не найдёт ещё один пик и не вернёт никакой информации об окружающем пространстве.

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

Первый подход: эвристический

На текущее поколение автономного транспорта мы ставим лидар собственной разработки. И вот к нам пришли инженеры и сказали, что научились записывать ту самую интенсивность отражения от стекла. Мы подумали, что это решит все проблемы. Съездили на тестовую площадку, забросали лидар грязью, которую нашли в округе. И действительно: интенсивность отражения отлично реагировала на загрязнение. Можно было подобрать порог и сказать, что всё выше него — грязная область на лидаре. 

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

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

На видео ниже — картина интенсивности отражения от поверхности лидара. На ней видно происходящее вокруг автомобиля: стационарные жёлтые точки (капли) и вытянутые полоски (падающий снег)

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 11

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

Второй подход: сбор данных для ML-методов

Итак, мы решили собирать разметку — но как? Мы не можем просто показать лидарное облако асессорам и сказать: «Найди в нём место, где точки должны быть, но их нет». Здесь нужно понимание границ объектов, сцены. Мы пробовали отдавать в разметку проекцию лидарных точек на изображение и просить найти объект, который плохо покрыт точками. 

С этим заданием мы сделали три или четыре итерации и столкнулись с проблемами.

Первая проблема — слепая зона, которую асессоры радостно отмечали как грязь. Но по факту лидар просто и не должен там видеть. Например, на картинке ниже область рядом со столбом справа пустая не потому, что нет лидарных точек, а потому что эта область для лидара закрыта столбом (слепая зона от столба).

Проблема: слепая зона лидара, вызванная расхождением в позиции съёмки камеры и лидара.

Проблема: слепая зона лидара, вызванная расхождением в позиции съёмки камеры и лидара.

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

Проблема: стёкла

Проблема: стёкла

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

Проблема: быстро движущиеся объекты

Проблема: быстро движущиеся объекты

Четвёртая проблема — деревья и иные полупрозрачные объекты. Асессору сложно понять, где заканчивается один объект и начинается другой.

Проблема: деревья. Лидар чистый, но фрагменты кроны и более дальние деревья не покрыты лидарными точками

Проблема: деревья. Лидар чистый, но фрагменты кроны и более дальние деревья не покрыты лидарными точками

Пятая проблема — большой угол падения. Если посмотреть на отражение от асфальта, то можно заметить, что на некотором расстоянии от лидара отражённых от дороги точек становится сильно меньше. На самом деле проблема в том, что чем больше угол между нормалью к дороге и лучом лидара, тем меньше отражается сигнала в обратном направлении.

Проблема: большой угол падения

Проблема: большой угол падения

Казалось бы, асессоры могли бы запомнить, где дорога ещё должна отражать, а где уже нет, но наши дороги неидеальные, и любые изменения поверхности (дорога пошла вверх или вниз) делают разметку сложной. 

Проблема: большой угол падения — видно, что с какого-то момента мы перестаём видеть дорогу и отбойник (лидар при этом чистый)

Проблема: большой угол падения — видно, что с какого‑то момента мы перестаём видеть дорогу и отбойник (лидар при этом чистый)

Основная проблема: асессоры отмечают близкую область без точек в ситуации, когда лидар на самом деле чистый. Из‑за этого модели учатся называть чистый лидар грязным, и это ухудшает работу. Большая несогласованность в ответах увеличивает требуемое перекрытие для получения качественной разметки и опять же ухудшает качество обучения [2]

Мы начали искать другой вариант разметки данных. И нашли!

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

Плотная лидарная карта местности

Плотная лидарная карта местности
То же место на панораме

То же место на панораме

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

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 20
И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 21
И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 22

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

Сравнение подходов 

Конечно же, в итоге мы сравнили подходы. 

И в дождь, и в снег: как мы детектируем загрязнения на лидарах автономного транспорта - 23

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

Что касается алгоритма оценки, мы не строили чего‑то слишком сложного. Мы разбили поверхность лидара на виртуальные секторы и автоматически сгенерировали для каждого из них разметку на классы «чисто — грязно». Для решения обучили модель CatBoost на задачу классификации чистоты каждого сектора. Помимо этого, обучили U‑Net на задачу сегментации чистоты поверхности лидара. U‑Net хорошо сегментировал капли, но оказалось, что это нужно не так часто: у нас не настолько гранулярная система очистки, чтобы она могла убрать какую‑то конкретную каплю. В итоге мы остановились на задаче классификации чистоты сектора целиком, и сейчас на всех машинах и грузовиках у нас без особых нареканий работает алгоритм определения чистоты лидара на основе CatBoost. 


Сейчас начинается новый сезон слякоти, дождей, снегопадов и грязи, летящей из‑под колёс, а тема очистки лидара становится крайне актуальной. Нас ждут новые вводные и тесты системы, обязательно поделимся своим опытом [3]. Stay tuned! 

Автор: vorloff87

Источник [4]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/20750

URLs in this post:

[1] восприятия: http://www.braintools.ru/article/7534

[2] обучения: http://www.braintools.ru/article/5125

[3] опытом: http://www.braintools.ru/article/6952

[4] Источник: https://habr.com/ru/companies/yandex/articles/956532/?utm_campaign=956532&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100