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

Когда я переехал в Бэй, я все еще работал бухгалтером, но я специально выбрал фирму с большим упором на баланс между работой и личной жизнью, так как знал, что изучение программирования будет занимать много времени каждую неделю. Но с чего начать? Сначала, еще не зная, что беспилотные автомобили определенно станут моей целью вскоре после этого, я фактически начал с некоторого базового веб-дизайна (например, HTML и CSS) через Code Academy. Затем я взял книгу по Ruby, которая побудила меня больше заниматься созданием настоящих программ.

В поисках дерзости

Именно в этот момент, в середине 2016 года, я начал читать все больше и больше статей о беспилотных автомобилях, продолжая при этом полагать, что для меня это были годы. Я увидел, что язык программирования Python очень популярен в этой области, и вскоре прочитал, что в Udacity есть отличный класс программирования для изучения Python (Введение в информатику для тех, кто интересуется - я очень рекомендую его, если вы хотите изучить Python. основы; вы создадите базовую поисковую систему, такую ​​как Google!). Когда я подошел к концу этого курса, Udacity объявил об одной из самых захватывающих вещей, о которых я мог думать, учитывая мои интересы: о программе Self-Driving Car Nanodegree.

Для тех, кто никогда не слышал о программах Nanodegree от Udacity, они учат вас навыкам, необходимым для работы в определенной области, а также проектам, которые могут помочь пополнить ваше портфолио - например, многие рекрутеры смотрят на репозиторий на Github как на свидетельство того, что их способности. Эти программы Nanodegree включают такие области, как анализ данных, машинное обучение, разработка для iOS и Android и многое другое. Программы также включают в себя различные семинары по вопросам карьеры, которые помогут улучшить ваше резюме, навыки прохождения собеседований и т. Д.

Машинное обучение

Как бы я ни был взволнован тем, что программа Nanodegree полностью сосредоточена на том, чтобы подготовить кого-то, чтобы стать инженером-самоучкой, я определенно еще не был к этому готов. К счастью, Udacity была довольно открыта для некоторых курсов и наностепеней, которые будут важны для программы, которая должна была принять первую группу студентов всего через пару месяцев после объявления программы в октябре 2016 года. Одним из них был Машинное обучение Nanodegree. Хотя я, вероятно, был немного не в себе, когда впервые начал ее, эта программа действительно помогла мне с окончательным первым семестром SDC Nanodegree, поскольку она в основном была сосредоточена на различных методах машинного обучения.

У Machine Learning Nanodegree есть несколько отличных проектов, если вам интересна эта область. Я использовал контролируемое обучение, чтобы предсказать такие вещи, как выживет ли конкретный человек на Титанике или ему потребуется дополнительная помощь в школе, неконтролируемое обучение, чтобы разделить различные сегменты клиентов на группы, и обучение с подкреплением, чтобы научить смарткаб прибыть к месту назначения безопасно и эффективно . Есть масса ресурсов, которые могут объяснить эти методы лучше, чем у меня есть возможность сделать здесь. MLND завершается Capstone Project, в котором основное внимание уделяется более глубокому изучению таких областей, как глубокое обучение - я все еще заканчиваю свою работу в тандеме с SDCND, но если вы хотите предварительный просмотр, см. Мое предложение или мое в -progress Capstone репозиторий . Я использую подход, основанный на глубоком обучении, для обнаружения полос на дорогах.

Самоуправляемый автомобиль Наностепень

В отличие от машинного обучения Nanodegree, Udacity решила ограничить количество поступающих студентов для Self-Driving Car Nanodegree. Первая когорта на октябрь 2016 г. должна была принять всего около 500 студентов (что, я считаю, на самом деле больше, чем их первоначальное число). Тысячи подали заявки, в том числе и я, хотя я все еще участвовал в нескольких проектах MLND. Меня приняли (!) - но не до октября. Я присоединюсь к третьей когорте, начиная с декабря. На самом деле это сработало отлично, поскольку я закончил только последний предварительный проект MLND, когда должна была начаться декабрьская когорта. Я был невероятно взволнован, но в то же время волновался, что могу перебить меня через голову. Я не только по-настоящему углубился в некоторые продвинутые материалы, но еще и приближался мой напряженный период бухгалтерского учета (с января по апрель не очень весело для бухгалтерской профессии).

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

Следующий проект, Классификация дорожных знаков, был моим первым настоящим опытом построения модели глубокого обучения. Здесь я узнал, как использовать TensorFlow для создания глубокой нейронной сети, способной после обучения высокоточной классификации дорожных знаков. Интересной проблемой для этого проекта было то, что предоставленные нам данные были сильно несбалансированными, что означало, что одни знаки имели тысячи обучающих изображений, а другие - только пару сотен. Это представляет проблему для нейронных сетей - учитывая, что они пытаются минимизировать потери, несбалансированный обучающий набор может означать, что нейронная сеть учится минимизировать потери, просто всегда ошибаясь в определенных признаках. Итак, если вы не проверите свои данные, вы можете увидеть, что ваша модель достигает 90% точности проверки (довольно надежна на первый взгляд), в то время как она все еще может получать несколько признаков того, что только каждый из них составляет пару процентов обучающих изображений 100. % неправильный. Используя расширенные изображения из исходных данных обучения, но только для тех, количество изображений которых ниже среднего для каждого дорожного знака, я создал дополнительные изображения дорожных знаков, чтобы помочь сбалансировать воздействие, и в итоге получил модель, которая была намного более точной на изображениях. его никогда не видел.

Третий проект первого триместра повысил коэффициент крутизны, особенно потому, что Udacity сделал симулятор специально для него. Этот проект, использующий фреймворк глубокого обучения Keras (который построен на основе TensorFlow), основан на концепции поведенческого клонирования. С помощью Behavioral Cloning, снова используя Deep Learning, вы обучаете определенному поведению глубокую нейронную сеть. В данном случае это означало, что нейронная сеть получала изображения с камер моделируемого автомобиля (аналогично изображению выше) с меткой (то есть, что нейронная сеть минимизирует потери и, следовательно, будет предсказывать) для изображения рулевого управления автомобиля. угол. Хотя Udacity в конечном итоге выпустил некоторые из своих собственных обучающих данных, я решил собрать свои собственные, что создало некоторые интересные проблемы. На трассе большую часть времени углы поворота равны нулю, так как вы едете прямо. Как вы, возможно, догадались на основании того, что я упоминал выше для Проекта 2, это может создать проблемы с несбалансированными данными. Итак, я должен был быть осторожным, чтобы собрать достаточно данных с углом поворота рулевого колеса, отличным от нуля, иначе машина всегда могла ехать прямо. Другая проблема заключается в том, что данные нельзя собирать просто из центра полосы - иначе, когда автомобиль неизбежно окажется немного в стороне, он, вероятно, по умолчанию вернется к своему наиболее вероятному исходу - ехать прямо. Опять же, я должен был убедиться, что у меня было достаточно данных для восстановления, снятых с боков, включая очень острые углы поворота из необычных мест, почти уезжающих на обочину дороги. Возможно, самым полезным опытом за весь семестр 1 было наблюдение, как моя смоделированная машина, управляя автомобилем на основе моей обученной нейронной сети, самостоятельно объезжает всю трассу.

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

Помните проблемы с изогнутыми линиями в Project One? Четвертый проект Advanced Lane Lines представил более глубокую технику. Опять же, используя компьютерное зрение, на этот раз узнал, как использовать разные градиенты и цветовые пороги для создания бинарно-активированных изображений, в которых активными останутся только определенные области дорожного видео. Затем, используя методы неискажения изображения (все камеры имеют определенное количество искажений, которые они естественным образом создают), а затем трансформируют его в перспективе (представьте себе дорогу с высоты птичьего полета), моя модель затем вычисляла полиномиальную функцию, которая соответствовала линии . С учетом этих полиномиальных функций обнаруженная полоса вместе с определенной информацией, такой как кривизна дороги и место в полосе движения по отношению к центру, затем можно вернуть на исходное изображение, как показано выше. Смотрите мое финальное видео проекта с определением полосы движения здесь.

Заключительный проект семестра 1 был посвящен Обнаружению транспортных средств. Здесь мне пригодились мои знания из программы Machine Learning Nanodegree, так как мы использовали алгоритм Support Vector Machines, помогающий определить, где на изображении появился автомобиль. Раньше я уже использовал SVM несколько раз! Конечно, нужно было изучить еще несколько важных концепций. Гистограммы ориентированных градиентов (сокращенно HOG) помогли обучить SVM, показывая различия между градиентами (то есть изменения значений пикселей на изображении для некоторого упрощения) на изображении с автомобилем по сравнению с изображением без автомобиля. Затем обученный SVM был запущен на заданном изображении дороги, но они не были точными на 100%. Таким образом, мне нужно было удалить ложные срабатывания, а также учитывать возможные пропуски автомобиля, вызванные тем, где на расстоянии он может появиться. Приведенные выше тепловые карты показывают часть решения - путем удаления пятен обнаружения с меньшим, чем определенное количество обнаружений, были созданы вышеупомянутые тепловые карты, которые затем помечены ограничивающими рамками, чтобы показать истинные обнаруженные транспортные средства. Смотрите мой готовый продукт здесь.

Что дальше?

Итак, я закончил 1-й семестр программы Self-Driving Car Nanodegree, изучая навыки, о которых я даже не мечтал бы годами назад всего год назад. Если кто-то действительно заинтересован в этой области, я настоятельно рекомендую им подать заявку (размер когорт продолжает увеличиваться). Это действительно занимает много времени - я до сих пор удивляюсь, что мне удалось сделать это до официального окончания семестра, учитывая обязательства, которые у меня были на моей обычной работе. Большинству людей, вероятно, потребуется 20 часов в неделю, чтобы делать это. Это, безусловно, дешевле, чем образование в колледже, хотя и обойдется вам в 800 долларов за семестр (а их три).

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

А пока я перехожу к Термину 2 SDCND. Если термин 1 был компьютерным зрением и глубоким обучением, термин 2 посвящен Sensor Fusion (использование данных радара и лидара для отслеживания объектов вокруг вас), локализации и управления. Я ожидаю трудного срока, учитывая отсутствие у меня опыта в каждой из этих областей, но я также очень рад сделать еще один шаг в этом направлении. В конце концов, хотя моя первая цель - получить работу, настоящая конечная цель - увидеть на дороге автономный автомобиль, полностью доступный для всех, кто хочет кататься. Это настоящий следующий шаг.