Как Tesla обучает автопилот

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


Расшифровка 2-й части Tesla Autonomy Investor Day. Цикл обучения автопилота, инфраструктура сбора данных, автоматическая разметка данных, подражание водителям-людям, определение расстояния по видео, sensor-supervision и многое другое.


Андрей: Я занимаюсь обучением нейронных сетей примерно десять лет, и вот уже 5-6 лет для промышленного применения. В том числе в таких известных учреждениях как Стэнфорд, Open AI и Google. Это множество нейронных сетей не только для обработки изображений, но и естественного языка. Я проектировал архитектуры, которые объединяют эти две модальности для своей докторской диссертации.

В Стэнфорде я вел курс по деконволюционным нейросетям. Я был основным преподавателем и разработал всю учебную программу к нему. Вначале у меня было около 150 студентов, в течение следующих двух или трех лет число студентов выросло до 700. Это очень популярный курс, один из самых больших и успешных курсов в Стэнфорде прямо сейчас.

Илон: Андрей действительно один из лучших специалистов по машинному зрению в мире. Возможно, лучший.

Андрей: Спасибо. Привет всем. Пит рассказал вам о чипе, который мы разработали специально для нейросетей в автомобиле. Моя команда отвечает за обучение этих нейросетей. Это включает в себя сбор данных, обучение, и частично, развертывание.

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



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

Как работают нейронные сети


(Тут мало нового, можно пропустить и перейти к следующему заголовку)

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

Илон: Матрица, если хотите. Реально матрица.



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

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

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

Мы можем взять нейронную сеть и показать ей изображения, например нашу игуану, и сеть сделает прогноз (prediction), что она видит. Сначала нейронные сети инициализируются совершенно случайно, все веса связей между нейронами — случайные числа. Поэтому прогноз сети тоже будет случайным. Может оказаться, что сеть думает что это, вероятно, лодка. Во время тренировки мы знаем и отмечаем, что на изображении игуана. Мы попросту говорим, что хотели бы, чтобы вероятность игуаны для этого изображения увеличилась, а вероятность всего остального уменьшилась. Затем используется математический процесс, называемый методом обратного распространения ошибки. Стохастический градиентный спуск, который позволяет нам распространять сигнал по связям и обновлять их веса. Обновим вес каждого из этих соединений совсем немного, и как только обновление будет завершено, вероятность игуаны для этого изображения немного возрастет, а вероятность других ответов снизится.

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

Теперь кое-что контр-интуитивное о работе нейросетей. Им нужно действительно много примеров. Это не просто уместить в голове, но они реально начинают с нуля, они ничего не знают. Вот пример — милая собачка, и вы, вероятно, не знаете ее породы. Это японский спаниель. Мы с вами смотрим на эту картинку и мы видим японского спаниеля. Мы можем сказать: «ОК я понял, теперь я знаю, как выглядит японский спаниель». Если я покажу вам еще несколько изображений других собак, вы сможете найти среди них других японских спаниелей. Вам понадобился всего один пример, но компьютеры так не могут. Им нужна куча данных о японских спаниелях, тысячи примеров, в разных позах, разных условиях освещения, на разном фоне и т.д. Вам нужно показать компьютеру, как выглядит японский спаниель с разных точек зрения. И ему действительно нужны все эти данные, противном случае компьютер не сможет выучить нужный шаблон.

Разметка изображений для автопилота


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



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

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



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



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

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



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

Большие и разнообразные наборы данных помогают сетям работать очень хорошо. Это не наше открытие. Эксперименты и исследования Google, Facebook, Baidu, Deepmind от Alphabet. Все показывают схожие результаты — нейронные сети действительно любят данные, любят количество и разнообразие. Добавляете больше данных и точность нейронных сетей растет.

Вам придется разработать автопилот, чтобы симулировать поведение машин в симуляции


Ряд специалистов отмечают, что мы могли бы использовать симуляцию, чтобы заполучить необходимые данные в нужном масштабе. В Tesla мы не раз задавались этим вопросом. У нас есть собственный симулятор. Мы широко используем симуляцию, для разработки и оценки программного обеспечения. Мы использовали её и для обучения довольно успешно. Но в итоге, когда дело доходит до обучающих данных для нейронных сетей, ничто не заменит реальных данных. Симуляции имеют проблемы с моделированием внешнего вида, физики и поведения участников.



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



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

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

Илон: Симуляция — это, как если бы вы сами себе придумывали домашнее задание. Если вы знаете что будете симулировать, Окей, что вы конечно разберетесь с этим. Но как сказал Андрей — ты не знаешь, чего ты не знаешь. Мир очень странный, в нем миллионы особых случаев. Если кто-то создаст симуляцию вождения, которая будет точно воспроизводить реальность, это само по себе станет монументальным достижением человечества. Но никто не может этого сделать. Просто нет способа.

Флот — ключевой источник данных для обучения




Андрей: Чтобы нейронные сети работали хорошо, вам нужен большой, разнообразный и реальный набор данных. И если он у вас есть, вы сможете обучить свою нейронную сесть и она будет работать очень хорошо. Так почему Tesla такая особенная в этом отношении? Ответ конечно же — флот (fleet, автопарк Tesla). Мы можем собирать данные со всех автомобилей Tesla и использовать их для обучения.

Давайте рассмотрим конкретный пример улучшения работы детектора объектов. Это даст вам представление о том, как мы обучаем нейронные сети, как мы их применяем, и как они становятся лучше с течением времени.

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



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



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



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

Я довольно много говорю о получении данных с автомобилей Tesla. И я хочу сразу сказать, что мы разрабатывали эту систему с самого начала с учетом конфиденциальности. Все данные, которые мы используем для обучения, анонимизированы.

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



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

Неуверенность нейросети запускает сбор данных


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



Например, плохо распознается разметка в туннелях. Мы замечаем, что в туннелях есть проблема. Соответствующие изображения попадают в наши юнит-тесты, чтобы проблема не могла повториться позднее. Теперь, чтобы исправить проблему, нам нужно много обучающих примеров. Мы просим флот отправить нам больше изображений туннелей, правильно их размечаем, добавляем в обучающую выборку и переобучаем сеть, а затем загружаем в автомобили. Этот цикл повторяется снова и снова. Мы называем этот итеративный процесс data engine (машина данных? движок данных?). Включаем сеть в теневом режиме (shadow mode), обнаруживаем неточности, запрашиваем больше данных, включаем их в обучающую выборку. Мы делаем это для всех видов предсказаний наших нейронных сетей.

Автоматическая разметка данных


Я много говорил о ручной разметке изображений. Это затратный процесс, и по времени и финансово. Он может стоить слишком дорого. Я хочу рассказать о том, как здесь можно использовать флот. Мы не хотим упираться в бутылочное горлышко ручной разметки. Мы хотим просто передавать данные и размечать их автоматически. И для этого есть несколько механизмов.

Как пример, один из наших недавних проектов — обнаружение перестроений. Вы едете по шоссе, кто-то едет слева или справа, и он перестраивается в вашу полосу.



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

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

Проверка в теневом режиме


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



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

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

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

Илон: По сути, все водители постоянно тренируют сеть. Не важно включен или выключен автопилот. Сеть обучается. Каждая миля, пройденная за машиной с оборудованием HW2.0 или выше, обучает сеть.

Пока вы ведете машину, на самом деле вы размечаете данные





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

Это называют имитационным обучением (imitation learning). Мы берем траектории движения людей из реального мира и пытаемся подражать им. И мы снова можем применить наш итеративный подход.

Вот пример предсказания пути в непростой дорожной обстановке. На видео мы накладываем прогноз сети. Зеленым выделен путь, по которому двигалась бы сеть.



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

Андрей: На самом деле, под капотом происходит больше всего, и

Илон: Вообще то, это немного пугает (Андрей смеется).

Андрей: Конечно я пропускаю много деталей. Возможно, вы не захотите использовать для разметки всех водителей подряд, вы хотите подражать лучшим. И мы используем ряд способов, для подготовки этих данных. Интересно, что этот прогноз на самом деле является трехмерным. Это путь в трехмерном пространстве, который мы отображаем в 2D. Но у сети есть информация об уклоне, и это очень важно для вождения.

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

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

Восприятие глубины по видео




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

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

Ясно, что человеческая нейронная сеть извлекает расстояние и воспринимает мир трехмерным исключительно с помощью зрения. Она использует ряд приемов. Я кратко расскажу о некоторых из них. Например у нас два глаза, поэтому вы получаете два изображения мира впереди вас. Ваш мозг объединяет эту информацию, чтобы получить оценку расстояний, это делается с помощью триангуляции точек на двух изображениях. У многих животных глаза расположены по бокам и их поле зрения слабо пересекается. Эти животные используют движение (structure from motion). Они двигают головой, чтобы получить множество изображений мира из разных точек и также могут применять триангуляцию.



Даже с одним закрытым глазом и будучи совершенно неподвижным, вы сохраняете некоторое ощущение восприятия расстояния. Если вы закроете один глаз, вам не станет казаться, что я стал на два метра ближе или на сто метров дальше. Это потому что есть много сильных монокулярных приемов, которые также применяет ваш мозг. Например распространенная оптическая иллюзия, с двумя одинаковыми полосами на фоне рельс. Ваш мозг оценивает сцену и ожидает, что одна из них будет больше другой из-за исчезающих вдали линий рельс. Ваш мозг делает много подобного автоматически, и искусственные нейронные сети тоже так могут.

Я приведу три примера как можно добиться восприятия глубины по видео. Один классический подход и два на основе нейронных сетей.



Мы можем взять видео клип в несколько секунд и воссоздать окружение в 3D, используя триангуляцию и методы стереозрения. Мы применяем аналогичные методы в автомобиле. Главное, что в сигнале действительно есть нужная информация, вопрос только в том чтобы ее извлечь.

Разметка расстояния с помощью радара


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

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



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

Self-supervision


Последний механизм, о котором я расскажу очень кратко, немного более технический. Есть лишь несколько статей, в основном в последний год или два, об этом подходе. Он называется Self-supervision.



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

Мощное визуальное распознавание — обязательное условие для автопилота


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



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

Эта девушка увлеченная телефоном, она собирается ступить на проезжую часть? Ответы на подобные вопросы могут быть найдены только с помощью зрения и они необходимы для автопилота 4-5 уровня. И именно это мы разрабатываем в Tesla. Мы делаем это через крупномасштабное обучение нейронной сети, наш data engine и помощь флота.

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

Прогресс пропорционален частоте столкновений со сложными ситуациями в реальном мире




Если бы я хотел был уместить все сказанное на одном слайде, он выглядел бы так. Нам нужны системы 4-5 уровня, которые смогут обрабатывать все возможные ситуации в 99,9999% случаев. Погоня за последними девятками, будет сложной и очень сложной. Для этого потребуется очень мощная система машинного зрения.

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

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

Вопросы и ответы



Вопрос: сколько данных вы собираете в среднем с каждого автомобиля?

Андрей: Дело не только в количестве данных, дело в разнообразии. В какой-то момент у вас уже достаточно изображений движения вперед по шоссе, сеть их понимает, больше не нужно. Поэтому стратегически мы сфокусированы на получении нужных данных. И наша инфраструктура, с довольно сложным анализом, позволяет нам получать те данные, которые нужны прямо сейчас. Это не про огромные объемы данных, это про очень хорошо отобранные данные.

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

Андрей: Я говорил о data engine как об обучении нейронных сетей. Но мы делаем то же самое на уровне программного обеспечения. Все параметры, которые влияют на выбор, например, когда перестраиваться, насколько агрессивно. Мы также изменяем их в теневом режиме, и наблюдаем, насколько хорошо они работают и настраиваем эвристику. На самом деле проектирование подобных эвристик для общего случая, это трудноразрешимая задача. Я думаю, нам придется использовать обучение с помощью флота для принятия подобных решений. Когда люди перестраиваются в другую полосу? В каких сценариях? Когда они чувствуют, что смена полосы небезопасна? Давайте просто посмотрим на большой объем данных и обучим классификатор (machine learning classifier) различать, когда перестроение безопасно. Эти классификаторы смогут написать намного лучший код, чем люди, потому что они опираются на огромное количество данных о поведении водителей.

Илон: Вероятно, у нас будет режим «трафик в Лос-Анджелесе». Где-то после режима «Безумный Макс». Даа, Безумному Максу пришлось бы не сладко в Лос-Анджелесе.

Андрей Придется идти на компромисс. Вы не хотите создавать небезопасные ситуации, но хотите доехать домой. И танцы которые люди исполняют при этом, это очень сложно запрограммировать. Я думаю, что правильный пусть — машинное обучение. Где мы просто смотрим на множество способов, которыми люди делают это и пытаемся имитировать их.

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

Вопрос: Не случится ли так, на одной из тех девяток после запятой, что лидар окажется полезен? Второй вопрос, если лидары действительно бесполезны, что произойдет с теми, кто строит свои решения на них?

Илон: Они все избавятся от лидаров, это мой прогноз, можете записать. Я должен отметить, я не ненавижу лидар так сильно, как может показаться. SpaceX Dragon использует лидар для перемещения к МКС и стыковки. SpaceX разработала свой собственный лидар с нуля для этого. Я лично возглавлял этот проект, потому что в этом сценарии лидар имеет смысл. А в машинах это чертовски глупо. Это дорого и не нужно. И, как сказал Андрей, как только вы справитесь с видео, лидар станет бесполезен. У вас будет дорогое оборудование, которое бесполезно для автомобиля.

У нас есть радар направленный вперед. Он недорогой и полезен, особенно в условиях плохой видимости. Туман, пыль или снег, радар может видеть сквозь них. Если уж вы собираетесь использовать активную генерацию фотонов, не используйте длину волны видимого света. Потому что, обладая пассивной оптикой, вы уже позаботились обо всем в видимом спектре. Теперь лучше используйте длину волны, с хорошими проникающими свойствами, например радар. Лидар это просто активная генерация фотонов в видимом спектре. Хотите активно генерировать фотоны, делайте это вне видимого спектра. Используя 3.8 мм против 400-700 нм вы получите возможность видеть в плохих погодных условиях. Поэтому у нас есть радар. А также двенадцать ультразвуковых датчиков для ближнего окружения. Радар наиболее полезен в направлении движения, потому что именно прямо вы движетесь очень быстро.

Мы поднимали вопрос сенсоров много раз. Достаточно ли их? Есть ли у нас есть все что нужно? Нужно добавить что-то еще? Хммм. Достаточно.

Вопрос: Похоже, что автомобили производят какие-то вычисления, чтобы определить, какая информацию вам отправить. Это делается в режиме реального времени или на основе сохраненной информации?

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

Илон: У нас есть четыреста двадцать пять тысяч автомобилей с HW2.0+. Это означает, что в них есть восемь камер, радар, ультразвуковые датчики и по крайней мере компьютер nVidia. Его достаточно, чтобы вычислить, какая информация важна, а какая нет. Они сжимают важную информацию и отправляют ее в сеть для обучения. Это огромная степень сжатия данных из реального мира.

Вопрос: У вас есть эта сеть из сотен тысяч компьютеров, которая напоминает мощный распределенный ЦОД. Видите ли вы её применение для целей, отличных от автопилота?

Илон: Я полагаю, это можно было бы использовать для чего-то еще. Пока мы сосредоточены на автопилоте. Как только доведем его до нужного уровня, сможем подумать о других применениях. К тому времени это будут миллионы или десятки миллионов машин с HW3.0 или FSDC.

Вопрос: Вычисление дорожного трафика?

Илон: Да, может быть. это может быть что-то вроде AWS (Amazon Web Services).

Вопрос: Я водитель Model 3 в Миннесоте, где много снега. Камера и радар не могут видеть дорожную разметку сквозь снег. Как вы собираетесь решать подобную проблему? Будете использовать GPS высокой точности?

Андрей: Уже сегодня автопилот довольно неплохо ведется себя на заснеженной дороге. Даже когда разметка скрыта, или истертая, или покрыта водой в сильный дождь, все равно автопилот ведет себя относительно хорошо. Мы пока еще специально не обрабатывали заснеженную дорогу с помощью нашего data engine. Но я уверен, что эта задача поддается решению. Потому что на многих изображениях заснеженной дороги, если вы спросите человека, где должна быть разметка, он покажет её вам. Люди соглашаются в том где провести линии разметки. И пока люди могут прийти к согласию и разметить ваши данные, нейронная сеть сможет этому научится и будет хорошо работать. Вопрос только в том есть ли достаточно информации в исходном сигнале. Достаточно для человека аннотатора? Если ответ да, то нейронная сеть справится с этим просто отлично.

Илон: В исходном сигнале есть несколько важных источников информации. Так разметка, это лишь один из них. Самый важный источник это проезжая часть (drive space). Где можно ехать, а где нельзя. Гораздо важнее разметки. Распознавание проезжей части работает очень хорошо. Я думаю, особенно после предстоящей зимы, будет работать просто невероятно. Мы будем удивляться, как это может настолько хорошо работать. Это просто безумие.

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

Илон: Очень важно не привязываться жестко к GPS. Ошибка GPS может быть весьма существенной. И реальная дорожная ситуация может быть непредсказуемой. Это может быть ремонт дороги или объезд. Если автомобиль слишком сильно полагается на GPS, это плохая ситуация. Вы напрашиваетесь на неприятности. GPS хорошо использовать только как подсказку.

Вопрос: Некоторые из ваших конкурентов рассказывают о том, как они используют карты высокого разрешения (high definition maps) для улучшения восприятия и планирования пути. Используете ли вы что-то подобное в своей системе, видите ли вы в этом какую-то пользу? Есть ли области, где вы хотели бы иметь больше данных, не от флота, а что-то наподобие карт?

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

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

Илон: Это работает довольно хорошо. Если смотреть на ситуации с перестроениями и т.п., автопилот нормально справляется.

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

Вопрос: у вас есть режим автоколонны (platooning)? Система способна на это?

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

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

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

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

Но на той же неделе я снова ехал в правой полосе, и там было сужение, моя правая полоса сливалась с левой. И моя Model 3 не смогла правильно среагировать, мне пришлось вмешаться. Можете рассказать, как Tesla может решить эту проблему?

Андрей: Я рассказывал про инфраструктуру сбора данных. Если вы вмешались, то, скорее всего, мы получили этот клип. Он попал в статистку, например, с какой вероятностью мы корректно вливаемся в поток. Мы смотрим на эти цифры, смотрим на клипы, и мы видим что не так. И мы пытаемся исправить поведение, чтобы добиться улучшения в сравнении с контрольными показателями.

Илон: Хорошо, у нас есть еще одна презентация, посвященная программному обеспечению. У нас была презентация про оборудование с Питом, потом нейронные сети с Андреем, а теперь следует программное обеспечение со Стюартом.


Первая часть.
Источник: https://habr.com/ru/post/450796/


Интересные статьи

Интересные статьи

Недавно мы писали про протектор, который скрывает вредоносную программу AgentTesla, заслуженного пенсионера на рынке вредоносного ПО. Однако AgentTesla и не думает уходить со сцены, с...
Но если для интернет-магазина, разработанного 3–4 года назад «современные» ошибки вполне простительны потому что перед разработчиками «в те далекие времена» не стояло таких задач, то в магазинах, сдел...
Компания Walmart на этой неделе подала на Tesla в суд. Причина — некачественная установка и обслуживание солнечных панелей, установленных Tesla, что привело к нескольким возгораниям на крышах...
Тема статьи навеяна результатами наблюдений за методикой создания шаблонов различными разработчиками, чьи проекты попадали мне на поддержку. Порой разобраться в, казалось бы, такой простой сущности ка...
Согласно многочисленным исследованиям поведения пользователей на сайте, порядка 25% посетителей покидают ресурс, если страница грузится более 4 секунд.