Беспилотный автомобиль от ЯКурьер

Итак, я ввязался в боооольшую авантюру. Каким-то абсолютно случайным образом в голове возник вопрос: «Беспилотник, а как это?» Ну, типа, все знают (но не осознают), что они почти есть. Крупнейшие компании пачками скупают стартапы, чтобы приблизить себя хотя бы к уровню автономности 3+. Яндекс во всю хвастается своим флотом Приусов, которые отлично (как 18-летний парень 3-й день за учебным авто) ведет себя на улицах Москвы и Лас-Вегаса. Всё это заставляет чувствовать себя причастным к совершенно феноменальному событию. Будущее наступило — прочувствуйте это!

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

Что уже сделано:

  1. Наладили стык между автомобилем и средой разработки.
  2. Подключили в систему видеопоток.
  3. С целью обеспечения единообразия в системе и требуемой взаимосвязи ввода-вывода синхронизировали захват видеокадров и данных автомобиля.
  4. Сформулировали основополагающую концепцию использовать для восприятия действительности сосредоточенное внимание.
  5. Внедрили технологию параллельных вычислений с использованием GPU, позволяющую многократно ускорить вычисления.
  6. Добавили предобработку кадров, обеспечивающую стабилизацию яркости.
  7. Разработали time-domain фильтр видеопотока, подавляющий статические, малоподвижные области изображений.
  8. Выдвинули идею использования в качестве интеллектуального ядра сосредоточенного внимания расширяемую нейронную сеть с динамически изменяемой топологией и задумали её общеструктурное решение.
  9. Изготовили пространственные фильтры, формирующие четыре свёрточных входных слоя сети, развивающих её абстрагирующие способности.
  • Выделили слой выходных нейронов и некоторые промежуточные слои, а также спроектировали строение выходных нейронов.
  • Поняли, что алгоритм, позволяющий обучить нейронную сеть с динамически изменяемой топологией, должен быть эволюционным и в значительной мере эвристическим.
  • Приступили к разработке собственного эволюционного алгоритма, его цикла, оценки приспособленности и т.д., — чтобы в результате получить эффективное и, самое важное, гибкое интеллектуальное ядро.
  • Обнаружив успехи отдельных тестовых версий алгоритма в способности выделять статистически значимые, предсказывающие признаки в одномерных зашумленных последовательностях, мы в настоящий момент уверенно продолжаем разработку.

Так на сколько сложно прямо здесь и сейчас создать автомобиль, который будет оборудован почтамтом в кузове, ездить по нашему оптимально созданному маршруту без «кожаного мешка» за рулем, сосущего 50% расходов?

.

Автономный автомобиль 3 уровня (всего их 5).

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

Ну и отлично, погнали за данными!)

.

Для начала надо научиться забирать с автомобиля показатели угла поворота руля, газа, тормоза. Далее синхроним это с видео потоком. 

— Нейронка, кушать подано, учись!

У авто есть стандартный разъем OBD2, по которому гуляют все показатели борт компа, на рынке есть куча китайских CAN сканеров, которыми можно все это считать. Но нам нужно не просто видеть в каком-то интерфейсе цифры. Нам нужно разработать свою среду. Найти побайтную историю в нужном проводе, прошкалировать, прогнать через библиотеки, записать и так 30 раз в секунду.  Поэтому первое вложение в этот проект — это покупка CAN адаптера фирмы simac за 200е (заказал с СПБ). Стали ковырять VW passat и поняли, что можем, но должен быть тестовый образец, желательно более френдли для нас. Изучив форумы, мы нашли Tayota и Honda. Выбор пал на Prius, так как у него есть ассистент задней парковки и батареи, которые будут питать неслабый комп.

Спустя 5 месяцев, как мы вникли в тему…….

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

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

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

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

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

И вот наша интуиция сказала: «Нет! Мы не хотим трамвай! Давайте пытаться, хотя бы немного – самую малость пытаться искать решения с качественно новыми свойствами. Наверняка, не обязательно вливать в беспилотные технологии миллиарды долларов, а малые творческие начинания и стартапы могут здесь на что-то претендовать». С такого вот посыла, собственно, и началась та плохо наблюдаемая работа, которая скрыто кипит в наших головах в любом доступном месте и в любое неожиданное время.

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

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

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

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

Предположим, Вы оказались за рулём на бесконечной площадке, устланной серым однотонным асфальтом без всякой разметки под ровным безоблачным голубым небом, и Ваш внутренний голос говорит вам: «Едь, куда глаза глядят!». И вот Вы уже долго-долго жмёте на газ, видимость километров 10 во все стороны, и ничего вокруг по определению не меняется, нет ни машин, ни людей, ни деревьев – вообще ничего. За исключением того, что Вы, как бы это так помягче сказать, в шоке от обстановочки, спрашивается, когда Вы перестанете пристально смотреть вперёд и при этом продолжать ехать? А ещё интересно, будете ли Вы хотя бы минуту непрерывно смотреть вперед перед собой в лобовое стекло, если при этом дать Вам исключительную уверенность в том, что ничего, абсолютно ничего не изменится до заката, и Вам нужно продолжать движение.

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

                            Это не фильтр, это разность 5 кадров с подсветкой на движущиеся предметы.

Итак, в настоящий момент мы сосредоточились на разработке системы внимания, независимой от автомобиля и данных о его состоянии – только по картинке. В основу, ясное дело, мы полагаем наблюдения за вниманием водителя и создание и обучение на основе таких наблюдений некоторой сети. Но даже до выхода водителя на сцену здесь не обошлось без трудностей! Необходимая предобработка видеопотока по текущему и предыдущим кадрам, подсвечивающая изменяющиеся области на видеокадрах, потребовала существенного ускорения вычислений и подключения графических процессоров (мы, на самом деле, давно этого ждали). Условившись, еще на самом старте, на синхронной скорости работы системы не менее, чем в 16 обновлений в секунду, что соответствует временному интервалу, отводимому на полный цикл вычислений в 62,5 мс, мы столкнулись с тем, что уже одна только предобработка, если она выполнялась на центральном процессоре, занимала из них до 50 мс. Так мы повернули свой взгляд в сторону технологий NvidiaCUDA, с которыми до этого никто из нас не был в полной мере знаком, но, усердно покурив мануалы, мы покорили первый оптимизационный вызов, и нам удалось сократить время непосредственных вычислений функций предобработки в 8-10 раз.

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