Автомобиль с глубоким обучением научился самостоятельному вождению: Автомобиль с глубоким обучением научился самостоятельному вождению за 20 минут
6 советов тем, кто хочет научиться водить автомобиль в кратчайшие сроки
Этот текст написан в Сообществе, бережно отредактирован и оформлен по стандартам редакции.
Анна Колпакова
получила права
Профиль автора
Я инженер по тестированию ПО, но сейчас нахожусь в отпуске по уходу за ребенком.
Я решила получить права на случай, если придется возить малыша в детский сад. В этом материале я расскажу о психологической и финансовой сторонах процесса вождения: тонкостях взаимодействия с инструктором, первых ощущениях на дороге и стоимости занятий.
Процесс обучения состоит из двух частей — теоретической и практической. Теорию я проходила онлайн, билеты решала в мобильном приложении «Дром ПДД», а практиковалась с инструктором, которого нашла на сайте «Профи-ру».
Обучение оказалось серьезным вызовом не только для меня, но и для моей семьи. Это как большой курс, который нужно во что бы то ни стало пройти, а сил почти нет. Вождение давалось мне средненько, хотя сам процесс доставлял удовольствие. Но эмоционально это очень выматывало. Постоянная синхронизация семейных дел и обучения истощала. Нужно было держать в голове планы — свои, ребенка, мужа, инструктора, что добавляло немало стресса.
Как получить водительские права
Но постепенно появилась стабильность. Мы с инструктором пришли к двум занятиям в неделю длительностью по два часа. Мне стало легче, но чувство незавершенности процесса не давало расслабиться. Хотелось получить готовый инкремент в виде прав.
Совет № 1
Определите свою зону ответственности и учитесь принимать самостоятельные решенияВо время занятий я столкнулась с любопытным явлением. Зоны ответственности не всегда ясны. Инструктор должен одновременно контролировать процесс вождения и самого ученика. Если оба не чувствуют свои зоны ответственности, будет непросто. Например, мне приходилось частенько одергивать себя, чтобы не превратиться в тупого исполнителя чужой воли, а думать своим умом. Нужно было одновременно подчиняться указаниям, но быть достаточно самостоятельной для принятия решений.
Прежде я никогда не садилась за руль автомобиля. Всю жизнь я находилась в автомобиле в качестве пассажира, которому абсолютно неважно, как устроено движение на дороге. В голове была пустота…
Поначалу разметка, знаки, светофоры и даже автомобили — для меня все это словно не существовало. В ходе занятий я стала обращать внимание на элементы дороги. Подобно ребенку, мозг которого пока еще не содержит всей полноты картины, я открывала для себя мир фрагментарно, постепенно связывая все в единую систему. Инструктор напоминал, что я могу задавать вопросы, но как можно задавать вопросы, когда почти не знаешь темы, а имеющиеся знания пока не уложились в голове хоть в какую-то систему.
/new-ekzamen-pdd/
«Рано или поздно все получится»: как сдать экзамен на водительские права
Думаю, что и у инструкторов часто встречается синдром профессора. Когда всем ученикам они рассказывают примерно одинаковые вещи и повторяют их изо дня в день, но каждый из учеников слышит это всего один раз. В результате у профессора складывается чувство, что он говорил тысячу раз каждому из учеников одно и то же, и он с отчаянием восклицает: «Ну я же вам в тысячный раз повторяю!»
Совет № 2
Не отвлекайтесь на посторонние темыЯ старалась быть интересной во время занятия. Рассуждала так: инструктор каждый день учит людей, и это ему наверняка наскучило. Мне нужно говорить на посторонние темы. Но вождение стало захватывать меня все сильнее, и каково же было мое удивление, когда всякий раз инструктор с готовностью отвечал на мои вопросы! А когда я спрашивала снова и снова о трамваях, о поворотах, он еще и старался объяснить нюансы.
Со временем я поняла, что разговорами на посторонние темы я как раз отвлекаю инструктора, а главное, отвлекаюсь сама. Значит, получаю меньше и не даю реализоваться профессиональным навыкам инструктора. Обесценивается вся суть его работы. Поэтому гораздо уместнее общаться по теме. Тогда есть и польза, и взаимное удовлетворение от сотрудничества.
Совет № 3
Подумайте заранее, что именно вам нужно от обученияМоя серьезная ошибка была в том, что я сама не определила цель обучения. Инструктор говорил, что учит меня водить, а не сдавать экзамен. Я до последних занятий не понимала смысл его слов. Я пыталась поймать двух зайцев.
В итоге я потратила некоторое количество бесполезных часов на попытки подготовиться к экзамену. Выглядели они жалко. Инструктор по моей просьбе сам собрал площадку и прогнал маршрут по шоссе Революции, там, где ездят на экзамене. Остальные занятия я приставала с вопросами о формальных правилах и о том, как могут придраться.
Мне стоило быть чуточку внимательнее к ситуации и лучше сконцентрироваться на собственной технике, а не на сдаче экзамена. На момент первого занятия я не прошла всю важную часть теории о дорожном движении. Было очень трудно, ведь инструктор давал уже знания конкретных ситуаций на дороге. У меня же в голове не было знаний даже основ.
/avto-uchebnik/
Курс: как рулить тачкой
Совет № 4
Обсудите с инструктором нюансы его подхода к обучениюУ моего инструктора имелось глубокое убеждение, что если встряхнуть как следует, поддать пинка, придать ускорение, то ученик лучше усвоит урок. Хотя я понимала, что иногда мотивы его были благие, фактически это выглядело как проявление агрессии. Мой организм яростно сопротивлялся, я замирала и в конце концов окончательно путалась.
Проводились замечательные исследования, в которых выяснилось, что те ученики, кто великолепно усвоил тему, при всплеске адреналина показывали даже лучший результат, а те, кто едва понимал, что к чему, делали все наоборот — хуже. Можно предположить, что во время обучения ученик относится ко второй категории, и кричать на него бесполезно, даже наоборот, вредно. Я, например, не просто начинаю плохо усваивать, я замираю. В результате я теряла чувство контроля ситуации и превращалась как раз в тупого исполнителя чужой воли.
/georgia-license/
Я получила водительские права в Грузии за 5200 Р
Совет № 5
Попробуйте договориться с инструктором о разнообразных маршрутахПочти все занятия мы ездили по одному маршруту. Инструктор объяснял это тем, что я не освоила азы. Вот только на одинаковом маршруте я получала и один и тот же опыт, заучивала конкретную ситуацию, а не систему в целом. Ехала я не напрягаясь, повторяя ошибки, словно заучивая их. Поэтому я бы порекомендовала стараться ездить по разным маршрутам.
Совет № 6
Пользуйтесь навигатором, чтобы понимать конечную цель путиИнструктор заранее говорил, куда повернуть, но со своей стороны я не видела маршрута. Отсутствие понимания направления давало некоторое чувство бессмысленности происходящего, хотя фактически это, конечно, не так. Цель: научиться ездить. Но как бы я ни старалась уяснить это, организм сопротивлялся.
На экзамене инспектор, конечно, сам говорит, куда поворачивать, но я бы порекомендовала дополнить персональные занятия навигатором. Так появится и цель, и некоторая дополнительная уверенность в своих действиях. Ведь будет исключена глупая ошибка недопонимания слов инструктора.
Итоги
Общение с инструктором. Хоть инструктор был мужчина уверенных лет, он был очень умен, красив. И в какой-то момент я почувствовала… Что же вы подумали? В какой-то момент я почувствовала, что начало получаться ездить, но при этом он, казалось, не замечал новую меня и даже немного пролонгировал процесс обучения. Возможно, это все только мои ощущения. А если объективно, общение с инструктором было очень здоровым с точки зрения соблюдения границ и отсутствия обидных намеков на слабый пол.
Расходы. Мне было комфортно еще и с финансовой стороны. Отсутствие нужды позволяет чувствовать себя комфортно, прекрасно общаться с тем, кому платишь. В идеале оба не должны испытывать большой нужды в деньгах. Тогда отношения из меркантильной плоскости переходят в плоскость более высокую, человеческую.
Расходы на обучение вождению — 68 000 Р
58 часов занятий с инструктором | 58 000 Р |
Онлайн-обучение в автошколе | 10 000 Р |
58 часов занятий с инструктором
58 000 Р
Онлайн-обучение в автошколе
10 000 Р
С первой попытки я сдала только теоретическую часть экзамена. Вождение — площадку, хотя формально ее отменили — я, конечно, провалила. Но в итоге экзамен все-таки сдала.
Всем планирующим получать права я рекомендую определиться с самого начала, что вам нужно: научиться ездить или сдать экзамен. Если научиться ездить, то брать занятия со сторонним инструктором, но садиться за руль с уже пройденной теорией. Также можно попросить инструктора пользоваться навигатором и ездить по разным маршрутам. Тем, кто планирует сдать экзамен, — советую брать инструктора от автошколы, отрабатывать технику, приемы на площадке. Затем брать дополнительные занятия и ездить по экзаменационным маршрутам.
А мамам и папам в отпуске по уходу за ребенком я советую быть готовыми к серьезному испытанию, но не бояться, ведь в итоге вы получите права прямо во время отпуска по уходу за ребенком. Тем самым вы закроете большую задачу и станете более независимы и мобильны.
Читатели пишут.Здесь делятся опытом и рассказывают свои финансовые истории
Рассказать свою историю
Обучение самостоятельному вождению автомобилей с использованием обучения с подкреплением
Дата публикации Oct 22, 2018
К 2040 году 95% проданных автомобилей будут полностью автономными.
Вау. 😮
Две причины, почему это революционно:
- Это будетсохранить 1,25 миллиона жизнейкаждый год от ДТП
- Это даст вам эквивалентность3 дополнительных года в жизни, в настоящее время провел в пути
Из-за этого влияния автомобили с самостоятельным вождением станут индустрией стоимостью в триллион долларовЧто вы могли бы сделать с 3 дополнительными годами?Этот вопрос стимулирует инновации со стороны технологических лидеров, таких как Элон Маск и Google. Но прежде чем мы сможем туда добраться, нам нужно понять технологию, которая делает все это возможным,Усиление обучения,
Представьте, что робот (также известный как агент) пытается поднять ручку, но у него ничего не получается. Он пытается снова, не удается. После повторения этого процесса 1000 раз, он, наконец, успешно. Агент теперь научился брать ручку. Короче говоря, это обучение подкреплению, очень похоже на то, как учатся живые существа.
Есть 3 ключевых термина в обучении подкреплению
- государственныйОписывает текущую ситуацию. (например. Положение в лабиринте)
- действие: Что может сделать агент в своей ситуации (например, двигаться вправо)
- Вознаграждение: Отзывы о том, было ли конкретное действие в данном состоянии хорошим или плохим
Давайте посмотрим на простой пример.
На этом изображении робот в позиции (1, 1) в лабиринте. Это позиция государства. У робота есть набор действий, которые он может выполнять, двигаться вверх или двигаться вправо. Последнее, что следует отметить, это то, что робот будет получать вознаграждение, когда он предпринимает какое-либо действие. Награды определяются программистом, и мы определим награды как таковые.
Награды:
- Введите открытую площадь+1
- Врезаться в стену площади: -1
- Введите выходной квадрат: +100
Каждый раз, когда робот выполняет действие (a), в состоянии (ях) он получает вознаграждение (r). В его голове, он постоянно обновляет свою память о наградах за выполнение определенных действий в этих государствах. Это называется политикой.Политика по сути, как агент принимает решения, Все решения основаны на прогнозируемых вознаграждениях. Давайте представим, что у робота в голове огромный стол. В таблице хранятся все состояния со всеми возможными действиями и прогнозируемыми наградами для этой пары состояние-действие. В начале обучения все прогнозируемые награды устанавливаются на 0.
+------------------+--------------------------+
| State | 1, 1 |
+------------------+--------------------------+
| Action | Up | Down | Left | Right |
+------------------+----+------+------+-------+
| Predicted Reward | 0 | 0 | 0 | 0 |
+------------------+----+------+------+-------+
Робот начинает с случайных действий, так как у него еще нет опыта. Однако после выполнения случайных действий в течение многих итераций он постепенно учится точно прогнозировать вознаграждение за каждое действие. Это достигается путем корректировки прогнозируемого вознаграждения для конкретных пар «состояние-действие» в зависимости от получаемого вознаграждения каждый раз. Эти предсказанные награды формально известны как Q-значения.Q-значения по существу определяют, насколько «хорошо» определенное состояниеи сколько агент хочет перейти в это состояние.
+----------------------------+--------------------------+
| State | 1, 1 |
+----------------------------+--------------------------+
| Action | Up | Down | Left | Right |
+----------------------------+----+------+------+-------+
| Q-Value (Predicted Reward) | 1 | -1 | -1 | 1 |
+----------------------------+----+------+------+-------+
Теперь робот может просто найти самое высокое значение Q и выполнить это действие.Это узнал!
У нас есть две проблемы с нашей моделью прямо сейчас.Один большой, а такжеодин маленький, Начнем с малого.
1. Эксплуатация против разведки
Давайте представим, что агент только начал изучать, поэтому все значения q равны нулю. Агент пытается дойти до конца, что означает, что он стремится выбирать действия с самыми высокими q-значениями. Поскольку все начинаются с 0, у каждого есть 25% шанс быть выбранным. Скажем, агент заканчивает тем, что решил двигаться направо. Политика теперь выглядит так:
+---------+--------------------------+
| State | 1, 1 |
+---------+--------------------------+
| Action | Up | Down | Left | Right |
+---------+----+------+------+-------+
| Q-Value | 0 | 0 | 0 | 1 |
+---------+----+------+------+-------+
Но есть проблема. В следующий раз, когда агент переходит в состояние (1, 1), он всегда выбирает действие,правильно, У агента никогда не было возможности изучить другие действия.Это называется жадной политикой, когда агент всегда выбирает самое высокое значение q.Агент«Эксплуатируя»это предварительное знание, следовательно,эксплуатация, Другой потенциальной политикой является выбор действия случайным образом, следовательно,исследование, На практике многие факторы влияют на нашу политику (как мы выбираем, какое действие предпринять).
Ваш агент работает в симуляции, где он может совершать ошибки без последствий? Или агент работает в режиме реального времени?
Первые выиграют от более высокого уровня освоения, чтобы учиться быстрее, а вторые выиграют от более высокого уровня использования, чтобы уменьшить потери. В зависимости от проблемы обычно используется сочетание эксплуатации и разведки.(Например, эксплуатируйте 70% времени и исследуйте 30% времени)
2. Будущие награды
Большая проблема с нашим агентом сейчас заключается в том, что мы можем смотреть только на шаг впереди.Например, в состоянии (1, 1) агент узнал, что оба действия приведут к награде +1. Мы можем взглянуть на лабиринт и увидеть, что движение вверх не будет идеальным действием, так как это приведет к тупику.Нам нужен способ соотнести будущие вознаграждения с текущим вознаграждением
Уравнение Беллмана приходит на помощь!
Будущее накопленное вознаграждение со скидкойВышеприведенное уравнение известно какБудущее накопленное вознаграждение со скидкой. Это часть уравнения Беллмана иэто позволяет нам учитывать будущие наградыпрошлое состояние t + 1. В этом уравнении:
Вот что представляют собой переменные:
- (Т): Текущее состояние
- (R ₜ): Накопленное дисконтированное вознаграждение в состоянии t (чтобы обновить наше значение q)
- (р): Награда
- (Γ): Ставка дисконтирования (от 0 до 1)
- (К): Количество шагов в будущее, чтобы получить награду
Для всех вас, кто не любит кучу математических уравнений. ✋Это уравнение, по существу, принимает сумму текущего вознаграждения плюс все будущие вознаграждения, дисконтированные на число γ, которое экспоненциально уменьшается с коэффициентом k(Количество шагов в будущее, награда была получена), Использование этого позволяет нам обновлять наши q-значения, основываясь не только на следующем действии, но и на всех последующих действиях.
Применяя это с γ = 0,9, получим:
Q-значения для каждого состояния (γ = 0,9)В последнем состоянии есть только текущая награда (100). Но для штата до этого мы берем скидку на следующее вознаграждение плюс текущее вознаграждение (100 * 0,9 + 1 = 91). Затем для штата до этого мы берем большую скидку на окончательное вознаграждение плюс скидку на следующее вознаграждение в дополнение к текущему вознаграждению (100 * 0,9 * 0,9 + 1 * 0,9 + 1 = 82,9). И так далее.Награды дальше в будущее, по логике должны быть дисконтированы больше, поскольку текущее действие играет меньшую роль в получении этой награды.
И мы сделали это!
Наш агент теперь полностью готов к обучению! Он будет исследовать лабиринт тысячи раз. Каждый раз слегка корректируя свои значения q в сторону R ₜ (накопленное дисконтированное вознаграждение). Только в небольших количествах, потому что большие изменения сделают обучение слишком хаотичным. После тысяч итераций агент узнает приблизительные q-значения, которые он затем может использовать с жадной политикой, чтобы выполнить действие с наибольшим q-значением и довести его до конца лабиринта!
О нет, не снова . ..
Это последний, я обещаю. 😃
Как мы узнаем q-значения для каждой отдельной точки нашей Вселенной?Давай сыграем в игру
Представьте себе, что вы пытаетесь использовать эту форму обучения в реальных условиях. Самостоятельно вождение автомобиля, например. Проблема, с которой мы сталкиваемся, заключается в том, чтонаш мир слишком сложенхранить q-значения для каждого состояния. Представьте себе, что вы сохраняете значение для каждой отдельной координатной точки на Земле. Теперь добавьте другие факторы, такие как погодные условия, направление, в котором находится агент, и постоянно меняющуюся Землю, ипроблема становится невозможной!
«Настойчивость очень важна. Вы не должны сдаваться, если вы не вынуждены сдаваться ». — Элон Маск
Решение, которое мы использовали ранее, можно сравнить с методом грубой силы, где наш агент хранит q-значения для каждого отдельного состояния. Но что если мыиспользуется машинное обучение (нейронные сети) для прогнозирования значений q для каждого действия с учетом вашего состояния в качестве входных данных. Это полностью изменит игру.
Добро пожаловать в Deep Q-Learning
Во многих реальных проблемах в наших штатах существуют шаблоны, соответствующие q-значениям. Например, если автомобиль с автоматическим управлением обнаруживает, что автомобиль остановился перед ним, автомобиль с автоматическим управлением должен остановиться! Это применимо независимо от того, где находится автомобиль с самостоятельным вождением, какая погода или какой-либо другой фактор. Если автомобиль продолжит движение, автомобиль упадет, что приведет к ОЧЕНЬ отрицательной награде (как определено инженерами по машинному обучению) Таким образом, вместо создания таблицы всех возможных условий (погода, местоположение и т. Д.),нейронная сеть может просто узнать, что если автомобиль остановлен перед агентом, выполните действие под названием «Замедление».
Нейронные сети удивительны с одной стороны, изучая паттерны!
Deep Q-Learning использует нейронные сети для изучения закономерностей между состоянием и значением q, используя награду в качестве ожидаемого результата. Они называютсяГлубокие Q-Сети.
Теперь, когда мы понимаем обучение в области подкрепления, мы можем поговорить о том, почему оно так уникально
В традиционной нейронной сети мы должны были бы пометить все наши входы. Так учатся нейронные сети. (Проверьте мою последнюю статью о нейронных сетях, если вам нужно освежить в памяти.)Тем не менее, в сценарии самостоятельного вождения автомобилей, как мы должны определять наши ожидаемые значения в каждом временном интервале?Нам нужно сказать, что поверните колесо на 0,5 градуса влево, увеличьте скорость до 50 км / ч. И через доли секунды нам потребуются новые ярлыки для нашего нового ввода! Это займет годы для маркировки!
В Deep Q-Network вместо определения каждого отдельного значения (угол поворота рулевого колеса, скорость),мы соотносим действия с q-значениями.Например, поворот рулевого колеса на 5 градусов влево — это потенциальное действие Так что 4 градуса вправо, и изменить на 50 км / ч, и изменить на 30 км / ч. Затем мы определяем награды. Это полностью зависит от инженера, и здесь определенно есть что сыграть, так как мы пробуем разные значения.Сбой, очевидно, плохо, и его следует избегать, Так что, может быть, мы дадим ему награду -1000000. С другой стороны, мы будем давать агенту вознаграждение в 1 за каждую секунду, в которой он не потерпит крах, и вознаграждение в 10 за приближение к месту назначения. В этом методеесть обратная связь (награда), присущая нашей среде, Сейчас мы просто сопоставляем эту обратную связь с действиями, которые вызвали эту обратную связь. В этом прелесть обучения с подкреплением.Нам больше не нужно маркировать наши данные!
На данный момент мы еще не полностью завершили обучение в области подкрепления. Пока мы говорим, много улучшений! Машинное обучение — это новое и изменчивое направление. Некоторые из крупнейших достижений включают в себя:
- Переигровка опыта
- Распределительное обучение
- Отдельная целевая сеть (Double Deep Q-Learning)
Я быстро пропущу их, так как они не важны для понимания обучения с подкреплением в целом. Опыт воспроизведенияиспользует подход не обучение нашей нейронной сети в режиме реального времени. Вместо этого он выполняет много действий, получает пакет трио действий-состояний-вознаграждений и случайным образом выбирает эти трио для обучения нейронной сети. Это позволяет использовать более обобщенную модель, поскольку порядок данных рандомизирован.
Распределительное обучениеэто более поздняя разработка, в которой вместо оптимизации нашей нейронной сети для одного значения q для каждого действия мы обучаем ее распределению вероятностей диапазонов значений q для каждого действия. Например, результаты нашей нейронной сети станут:
- Вероятность Q-значения действиябудучи 1–5
- Вероятность Q-значения действиябудучи 6–10
- Вероятность Q-значения действияббудучи 1–5
- Вероятность Q-значения действияббудучи 6–10
Это решает проблемы, которые возникают, когда q-значения имеют несколько пиков. Эти множественные пики обычно усредняются вместе после многочисленных итераций, но этот новый метод позволяет агенту рассматривать каждый пик по отдельности. На практике исследователи показали, чтоэта модель удвоила скорость тренировокдля агентов, играющих в игры Atari!
Да. Я должен был что-то сделать с моими новыми знаниями. Следите за обновлениями, чтобы узнать, как я применил Reinforcement Learning к виртуальной машине с самостоятельным вождением в моей следующей статье! (Сейчас опубликовано)
Укрепление обучения, абстрагирует необходимость маркировки данных. Однако в результате мы теряем немного точности.Представьте себе разницу между тем, как вам говорят, как водить машину, и тем, как водить машину, разбивать и учиться самостоятельно.
«Оказывается, обучение с подкреплением — это тип машинного обучения, чей голод к данным даже больше, чем контролируемое обучение. Действительно сложно получить достаточно данных для алгоритмов обучения с подкреплением ». — Эндрю Нг
Тем не менее, обучение подкреплению является трамплином в новый мир. Это приблизило нас на один шаг ближе кОбщий ИИ, принимая обратную связь непосредственно из окружающей среды.(Узнайте больше о том, как я думаю, мы могли бы создать общий AI), Мы уже доказали ценность обучения с подкреплением в таких областях, какТорговая машина, а такжеСамостоятельные автомобили,Но это все еще новая область, постоянно улучшающаяся и разрушаемая. Так что держись. Укрепление обучения и машинного обучения в целом здесь, чтобы остаться!
Если вы хотите что-то убрать из этой статьи:
- Укрепление обучения абстрагирует необходимость маркировки данных в нейронных сетях
- Глубокое Q-Learning — это метод обучения с подкреплением
- Машинное обучение — это динамичное поле, которое постоянно совершенствуется и нарушается
Если вам понравилась эта статья:
- следуй за моим СМИ,LinkedIn, а такжещебетчтобы оставаться в курсе моего прогресса!
- отправь мне письмо (Jerry2001Qu@gmail. com) я отвечу 😉
Оригинальная статья
DeepPiCar — Часть 1: Как построить самоуправляемый роботизированный автомобиль с глубоким обучением при ограниченном бюджете | Дэвид Тиан
Обзор того, как построить самоуправляемый роботизированный автомобиль с питанием от Raspberry Pi и TensorFlow
Сегодня Tesla, Google, Uber и GM пытаются создать свои собственные беспилотные автомобили, которые могут бегать по дорогам реального мира. Многие аналитики предсказывают, что в течение следующих 5 лет в наших городах появятся полностью автономные автомобили, а через 30 лет почти ВСЕ автомобили будут полностью автономными. Разве не было бы здорово построить свой собственный беспилотный автомобиль, используя некоторые из тех же методов, которые используют большие парни? В этой и следующих нескольких статьях я расскажу вам, как создать с нуля собственный физический, самообучающийся, самоуправляемый роботизированный автомобиль. Вы сможете заставить свой автомобиль обнаруживать полосы движения и следовать по ним, распознавать дорожные знаки и людей на дороге и реагировать на них менее чем за неделю. Вот краткий обзор вашего конечного продукта.
Lane Follow (слева) и Traffic Sign and People Detection (справа) от DeepPiCar DashCamЧасть 2: я перечислю, какое оборудование нужно купить и как его настроить. Короче говоря, вам понадобится плата Raspberry Pi (50 долларов), комплект SunFounder PiCar (115 долларов), Google Edge TPU (75 долларов) плюс несколько аксессуаров, и о том, как важна каждая часть, в следующих статьях. Общая стоимость материалов составляет около 250–300 долларов. Мы также установим все программные драйверы, необходимые для Raspberry Pi и PiCar.
Raspberry Pi 3 B+ (слева), SunFounder PiCar-V (в центре), Google Edge TPU (справа)Часть 3: Мы установим все необходимое программное обеспечение Computer Vision и Deep Learning. Основными программными инструментами, которые мы используем, являются Python (де-факто язык программирования для задач машинного обучения/ИИ), OpenCV (мощный пакет компьютерного зрения) и Tensorflow (популярная среда глубокого обучения Google). Обратите внимание, что все программное обеспечение, которое мы здесь используем, БЕСПЛАТНО и с открытым исходным кодом!
Часть 4: Закончив с (утомительной) настройкой аппаратного и программного обеспечения, мы перейдем к самым интересным частям! Наш первый проект — использовать python и OpenCV, чтобы научить DeepPiCar автономно перемещаться по извилистой дороге с одной полосой движения, обнаруживая линии полосы и управляя соответствующим образом.
Пошаговое обнаружение полосы движенияЧасть 5: мы будем обучать DeepPiCar автономно перемещаться по полосе без необходимости явно писать логику для управления ею, как это было сделано в нашем первом проекте. Это достигается с помощью «клонирования поведения», когда мы используем только видеозаписи дороги и правильные углы поворота руля для каждого видеокадра, чтобы научить DeepPiCar управлять автомобилем самостоятельно. Реализация вдохновлена полноразмерным автономным автомобилем NVIDIA DAVE-2, в котором используется глубокая сверточная нейронная сеть для обнаружения дорожных особенностей и принятия правильных решений по управлению.
Lane Follow in ActionНаконец, в части 6: мы будем использовать методы глубокого обучения, такие как однократное обнаружение объектов с несколькими ящиками и перенос обучения, чтобы научить DeepPiCar обнаруживать различные (миниатюрные) дорожные знаки и пешеходов на дороге. А затем мы научим его останавливаться на красный сигнал светофора и знаки остановки, ездить на зеленый сигнал светофора, останавливаться, чтобы дождаться перехода пешехода, и изменять ограничение скорости в соответствии с вывешенными знаками скорости и т. д.
Модель дорожных знаков и обнаружения людей Обучение работе с TensorFlowВот предпосылки этих статей:
- В первую очередь это готовность чинить и ломать вещи . В отличие от автомобильного симулятора, где все предопределено и идеально повторяемо, реальные модели автомобилей могут быть непредсказуемыми, и вы должны быть готовы запачкать руки и начать возиться как с аппаратным, так и с программным обеспечением.
- Базовые навыки программирования Python . Я предполагаю, что вы знаете, как читать код Python и писать функции, операторы if и циклы в Python. Большая часть моего кода хорошо задокументирована, особенно самые трудные для понимания части.
- Основные знание операционной системы Linux . Я предполагаю, что вы знаете, как запускать команды в оболочке Bash в Linux, которая является операционной системой Raspberry Pi. Мои статьи точно расскажут вам, какие команды запускать, почему мы их запускаем и чего ожидать в результате.
- Наконец, вам потребуется около $250-$300 , чтобы купить все оборудование и рабочий ПК (Windows/Mac или Linux). Опять же, все используемое программное обеспечение будет бесплатным.
Это необязательное чтение, так как я стараюсь охватить в своих статьях все, что вам нужно знать. Однако, если вы хотите глубже погрузиться в глубокое обучение (каламбур), в дополнение к ссылкам, которые я предоставил на протяжении всей статьи, вот еще несколько ресурсов для ознакомления.
Курсы Эндрю Нг по машинному обучению и глубокому обучению на Coursera. Именно эти курсы пробудили во мне страсть к машинному обучению и искусственному интеллекту и вдохновили меня на создание DeepPiCar.
- Машинное обучение (БЕСПЛАТНО): Этот курс охватывает традиционные методы машинного обучения, такие как линейная регрессия, логистическая регрессия, машины опорных векторов и т. д., а также нейронные сети. Он был создан еще в 2012 году, поэтому некоторые из используемых им инструментов, а именно Matlab/Octave, устарели, а о глубоком обучении подробно не говорилось. Но концепции, которым он учит вас, бесценны. Вам нужны только математика на уровне средней школы и некоторые базовые навыки программирования, чтобы пройти курс, и доктор Нг очень хорошо объясняет такие сложные понятия, как обратное распространение ошибки. Для прохождения этого курса требуется около 3 месяцев.
- 5-курсовая специализация по глубокому обучению (БЕСПЛАТНО или 50 долларов США в месяц, если вы хотите получить сертификат): этот курс был введен в начале 2018 года. Таким образом, он охватывает все последние исследования ИИ на тот момент, такие как Fully Connected Нейронные сети, сверточная нейронная сеть (CNN) и модели последовательности (RNN/LSTM). Этот курс был для меня таким праздником. Мне, как инженеру, всегда интересно, как работают некоторые крутые гаджеты, например, как Siri отвечает на ваши вопросы, как машина распознает объекты на дороге и т. д. Теперь я знаю. Для завершения этой специализации из 5 курсов требуется около 3–4 месяцев.
Это все для первой статьи. Увидимся во второй части, где мы запачкаем руки и вместе построим роботизированную машину!
Вот ссылки на полное руководство:
Часть 1: Обзор (эта статья)
Часть 2: Настройка Raspberry Pi и сборка PiCar
Часть 3: Заставьте PiCar видеть и думать
Часть 4: Автономная навигация по полосе через OpenCV
Часть 5: Автономная навигация по полосе с помощью глубокого обучения
Часть 6: Обнаружение и обработка дорожных знаков и пешеходов
Глубокое обучение для беспилотных автомобилей | by Manajit Pal
Использование исследований Nvidia для создания CNN для автономного вождения в Pytorch
Эта статья была написана много лет назад, и я больше не работаю в этой области, поэтому я заранее извиняюсь, если приведенный ниже код не работает. . 😅
Большое спасибо Valohai за использование моего ржавого руководства в качестве введения в их замечательную платформу машинного обучения 😍. Я бы посоветовал вам всем ознакомиться с их примером обучения сети в облаке с полным контролем версий с помощью платформы машинного обучения Valohai (www.valohai.com).
Все мы знаем, что беспилотные автомобили — одна из самых популярных областей исследований и бизнеса для технологических гигантов. То, что несколько лет назад казалось научной фантастикой, теперь кажется чем-то, что вскоре станет неотъемлемой частью жизни. Причина, о которой я говорю «скоро будет», заключается в том, что хотя такие компании, как Tesla, Nissan, Cadillac, имеют программное обеспечение для помощи при вождении автомобиля, им по-прежнему требуется, чтобы человек следил за дорогой и взять на себя управление, когда это необходимо. Тем не менее, интересно видеть, как далеко мы продвинулись в плане инноваций и как быстро развиваются технологии. Настолько, что теперь с помощью базового глубокого обучения и магии нейронных сетей мы можем построить собственный конвейер для автономного вождения! Взволнованный? Я уверен, что я! Тогда давайте приступим к делу…
Предварительные требования:
1. Эта статья предполагает базовое понимание сверточных нейронных сетей и их работы.
2. Упомянутый здесь код написан на Python с использованием фреймворка Pytorch, поэтому рекомендуется базовое знание языка и фреймворка.
Если вышеизложенное кажется вам тарабарщиной, не паникуйте! Этот бесплатный курс от Udacity даст вам все, что вам нужно знать об основах Deep Learning и Pytorch.
My Background
Я начал свое глубокое обучение с одной из стипендиальных программ Udacity, спонсируемых Facebook, благодаря которой я изучил основы Pytorch из упомянутого выше курса. В то же время я также был зачислен в программу Udacity для инженеров-самоуправляемых автомобилей Nanodegree, спонсируемую KPIT, где мне пришлось кодировать сквозную модель глубокого обучения для беспилотного автомобиля в Керасе в качестве одного из моих проектов. Поэтому я решил переписать код в Pytorch и поделиться тем, что узнал в этом процессе. Ладно, хватит болтовни, давайте настроим нашу машину на крутизну, помня об одном — скажем НЕТ переоснащению!
Ресурсы для проекта
1. Симулятор беспилотного автомобиля от Udacity
2. Конечно, Python и Pytorch Framework
3. Если ваша машина не поддерживает GPU, я бы рекомендовал использовать Google Colab для обучения вашей сети . Он предоставляет часы GPU и TPU бесплатно!
4. Если у вас возникли проблемы со сбором данных для обучения, вы можете использовать данные, предоставленные Udacity, для обучения вашей сети.
5. Полный код доступен здесь, а блокнот Colab доступен здесь.
6. Исследовательский документ Nvidia, упомянутый в этой статье, можно найти здесь.
Сбор данных
Набор данных, предоставленный Udacity, работает хорошо, но этого недостаточно, чтобы заставить машину двигаться по пересеченной местности (например, второй трек в симуляторе Udacity). Чтобы собрать данные из дорожки 2, нам сначала нужно создать папку в каталоге нашего проекта. Назовем эту папку — data . Теперь запустите наш симулятор. Выберите второй трек из меню и перейдите на режим обучения вариант.
После входа в режим тренировки вы увидите опцию записи в правом верхнем углу экрана. Щелкните значок и перейдите к папке data . Нажмите выбрать.
Просмотр папки с даннымиВы можете начать запись своей поездки, как только снова нажмете значок записи! Теперь, если вы начинающий геймер, как я, я бы посоветовал не торопиться и постараться, чтобы ваша машина оставалась в центре дороги как можно дольше, даже во время поворотов. Это поможет получить более качественные данные для обучения, которые в конечном итоге сделают хорошую модель. Мы запишем 2 круга в одном направлении трассы, а также еще 2 круга в противоположном направлении, чтобы убедиться, что повороты меняются местами. Это удостоверится, что наша модель не переобучается и лучше делает левые и правые повороты. Давай сделаем это!
Захват данных тренировкиДанные тренировки теперь хранятся в папке данных . Внутри есть одна папка и один файл: IMG и Driving_log. csv . Наша следующая задача — прочитать из CSV-файла имена изображений и связанные с ними данные управления и загрузить соответствующее изображение из папки IMG в Python.
ВРЕМЯ КОДИТЬ!
Было бы лучше работать с Colab, если вы предпочитаете не утруждать себя установкой различных библиотек и фреймворков на свой локальный компьютер, а также если вы хотите воспользоваться бесплатными часами GPU. Кроме того, если вы предпочитаете не собирать данные, вы можете импортировать набор данных Udacity, используя !wget URL
и распакуйте файл с помощью !unzip
. Перво-наперво. Импорт заголовков:
Чтение и разделение данных
Приведенный выше код считывает все данные из файла журнала и сохраняет их в массив Sample
. Строка next(reader, None)
удаляет первую строку, содержащую имена столбцов. Мы будем использовать этот массив, чтобы разделить наши данные на обучение и проверку. Одна хорошая практика из того, что я узнал, состоит в том, чтобы иметь 20–30% данных обучения в качестве набора проверки для сравнения потерь проверки и потерь обучения, чтобы мы могли избежать переобучения. Сделаем так:
Загрузка изображений в загрузчик данных
Теперь, когда мы сделали образцы, пришло время прочитать изображения и дополнить их. Это важный шаг, поскольку он поможет обобщить нашу модель. Но этот процесс требует больших вычислительных ресурсов и времени даже для графических процессоров. Хитрость заключается в том, чтобы распараллелить этот процесс, собирая данные пакетами, дополняя их и отправляя в модель для обучения. Keras достигает этого процесса, используя генераторы Python
и fit_generator 9.0134 функция. В Pytorch для этого мы будем использовать класс
Dataset
и функцию Dataloader
.
Чтобы реализовать это, нам пришлось бы перегрузить несколько функций класса, а именно функции __getitem__
, __len__
и __init__
. Мы также должны были бы определить некоторые увеличивающие процессы. Я написал базовую функцию, которая будет брать изображение, случайным образом обрезать его и переворачивать по горизонтали вместе с получением негатива данных рулевого управления. Обрезка, по сути, помогает модели сфокусироваться только на дороге, убирая небо и другие отвлекающие элементы на изображении, а переворачивание выполняется для того, чтобы изображения были обобщены на левый и правый повороты, по существу сохраняя автомобиль в центре. дороги. Другими методами могут быть добавление случайной яркости для имитации разной продолжительности дня, наложение на изображение слоя искажений и шума для имитации дождя, добавление случайных теней на дороге и т. д. Но пока мы будем придерживаться основ.
Затем мы определяем класс Dataloader
и передаем эту функцию augment
во входные образцы пакетов, объединяем управляющие данные и изображения и возвращаем их.
Обратите внимание, что есть также аргумент с именем , преобразование
. Наше преобразование нормализует значения массива изображений в диапазоне 0–1 , используя лямбда-функцию
. Затем мы используем функцию Dataloader
, чтобы добавить все в генератор, который будет вызываться пакетно во время обучения. Мы определяем размер пакета 32 и перемешиваем их, передавая его в Загрузчик данных
. Параметр num_workers
определяет, сколько рабочих будет создавать пакеты для обработки параллельно.
Архитектура модели
Пришло время построить нашу модель. Давайте внимательно посмотрим на исследовательскую работу Nvidia. Идите вперед и откройте его в новой вкладке. Ссылка находится в разделе ресурсов выше.
Если вы прокрутите вниз до 5-й страницы PDF-файла, вы увидите архитектуру построенной ими CNN.
Ладно, лентяй, я говорю об этом изображении 😝. Если вы посмотрите на числа, вы увидите глубину сверточных слоев, а также входные и выходные характеристики полносвязных слоев. Теперь на каждой карте функций есть несколько упомянутых ядер. Как упоминалось в документе, ребята из Nvidia использовали изображения YUV в качестве входных данных и использовали пошаговые свертки в первых трех сверточных слоях с шагом 2 × 2 и ядром 5 × 5 и нешаговую свертка с размером ядра 3 × 3 в последние два сверточных слоя. Интересно, однако, что не было упоминания о слое maxpool. Я пытался неукоснительно следовать описанной выше архитектуре и построить CNN. Вот что у меня получилось:
К сожалению, с этим подходом что-то не так. Возможно, это был недостаток данных или отсутствие слоев maxpool, сеть работала ужасно. Машину всегда сносило с дороги, даже на прямой. После некоторого поиска в Google я наткнулся на это репо. Модель используется здесь как упрощенная версия архитектуры Nvidia. Я пробовал, и это сработало отлично, когда я тренировался с достаточным количеством эпох. Итак, окончательная архитектура для меня была такой:
Однако не стесняйтесь опробовать первую модель с слоями maxpool. Это потребует некоторых расчетов для заполнения, а также высоты и ширины вывода. Давайте уделим немного времени, чтобы просмотреть несколько вещей здесь-
a) nn.Module
- Класс nn.Module
используется в Pytorch для создания CNN. Мы должны перегрузить функции __init__()
и forward()
для построения сети. Я использовал nn.Sequential()
, чтобы избежать дублирования кода. Что бы ни было в функции nn.Sequential()
, последовательно применяется ко входу. Довольно аккуратно, а?
a) активация elu- Используемая здесь функция активации – elu (экспоненциальная линейная единица). В отличие от relu (выпрямленная линейная единица), elu ускоряет процесс обучения, а также решает проблему исчезающего градиента. Более подробную информацию и уравнение функции elu можно найти здесь.
b) Сведение изображения - Сведение вывода сверточных слоев перед переходом к полносвязным слоям выполняется с помощью строки: output. view(output.size(0), -1)
.
Оптимизатор и критерий
Двигаясь дальше, в документе также обсуждается использование потери среднеквадратичной ошибки в качестве критерия и оптимизатора Адама. Давайте закодируем это! Я установил скорость обучения на 0,0001. Вы можете настроить его соответствующим образом.
Хм, мы где-то здесь. Прежде чем мы напишем заключительные части обучения и проверки, давайте отправимся в мир графических процессоров!
Pytorch и CUDA
Pytorch обеспечивает простую интеграцию с графическими процессорами с поддержкой CUDA (извините, AMD). Это делается с помощью простой функции device()
. Он может значительно ускорить процесс обучения, например, в 10 раз быстрее, чем обычный процессор. Почему бы не воспользоваться этим? Для этого нам нужно передать наши данные и модель в GPU для обработки. Это действительно проще, чем кажется. Мы определяем функцию, которая будет делать это для всех входных данных, которые она получает.
Обратите внимание, что я преобразовал его в float()
, чтобы модель могла вычислять входные данные.
Тренировка
Время тренировать наш шедевр! Сначала мы переносим модель на GPU, затем используем генератор для передачи наших данных, а также их на GPU. Затем мы настраиваем оптимизатор, чтобы он не накапливал градиенты во время обратного распространения, используя функцию optimizer.zero_grad() . Наконец, мы вычисляем общие потери при обучении и делим на размер партии, чтобы получить средние потери при обучении за эпоху. Довольно просто.
Проверка
То же самое для проверки, но на этот раз мы убедимся, что наша модель находится в режиме оценки, чтобы по ошибке не обновить градиенты и не распространить ошибки обратно. Мы используем model.eval()
для изменения режима и чтобы убедиться, что модель не отслеживает, мы используем torch.set_grad_enabled(False)
. Убыток рассчитывается таким же образом.
Сохранение модели
Последний шаг кода здесь! После завершения обучения мы сохраняем модель, чтобы использовать ее для автономного вождения автомобиля в нашем симуляторе. Мы делаем укажите словарь
и сохраните модель в формате .h5 , используя torch.save()
.
Самое интересное начинается
И последнее, прежде чем мы начнем тестировать нашу модель, нам нужен файл, который загрузит нашу модель, получит кадры пути из симулятора для обработки нашей модели и отправит прогноз рулевого управления обратно в симулятор. Не бойся! Я создал файл drive.py
, который в основном представляет собой Pytorch-версию Udacity drive.py 9.0134, который я использовал в своем проекте. Вы можете просмотреть код и поэкспериментировать с ним, если вам нужен другой дроссель и т. д. А пока давайте скопируем и вставим содержимое приведенного ниже кода.
ManajitPal/DeepLearningForSelfDrivingCars
Это реализация модели Nvidia в Pytorch для создания нейронной сети глубокого обучения для беспилотных автомобилей.
…github.com
Также нам понадобится файл model.py
, который должен содержать архитектуру модели. Создайте файл и вставьте свою сетевую архитектуру. Если у вас возникнут какие-либо проблемы, не стесняйтесь взглянуть на мои файл model.py
в репозитории.
Загрузите файл model.h5
в тот же каталог, если вы использовали Google Colab для написания кода. Запустите терминал, cd
в свой каталог и запустите скрипт с нашей моделью:
python drive.py model.h5
Если на вашем компьютере установлены две разные версии python, используйте python3
вместо python
. Нажмите «Разрешить», когда увидите всплывающие окна.
Снова откройте симулятор и выберите автономный режим . Машина должна ехать сама по себе как босс!
Ну вот! Ваш собственный конвейер беспилотных автомобилей. Как это круто! 😁
Вот небольшая демонстрация того, что вы можете ожидать:
Устранение неполадок
Вы можете заметить, что автомобиль сильно раскачивается или, может быть, он привязан к одной стороне дороги.