Мотивация проекта:

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

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

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

Этот блог разделен на 2 части:
1. Понимание проекта
2. Работа и архитектура нейронной сети.

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

Первая часть: понимание проекта

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

Высокоуровневая схема оборудования:

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

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

Плата Arduino используется в качестве интерфейса между ноутбуком и передатчиком для управления автомобилем (дистанционное управление) с инструкциями по напряжению (1-ON, 0-OFF). Библиотека PyGame, используемая для управления через программу python.

Но какие данные изображений мы собираемся собирать? в каком разрешении?

Из-за ограниченной пропускной способности вычислений, хранилища и потоковой передачи; ограничение изображений размером 320 x 240 и изображения в оттенках серого поможет сократить время вычислений и задержку при потоковой передаче 30 кадров в секунду.

При ближайшем рассмотрении того, что видит камера, изображение будет разделено на 2 части, нижнюю половину и верхнюю половину, где мы будем использовать только нижнюю половину, чтобы делать недальновидные прогнозы; верхняя половина может вводить в заблуждение и быть неясной из-за меньшего разрешения изображения.

Установка:

Мы устанавливаем гусеницу для автомобиля, как видно, чтобы помочь отличить дорогу от тротуара, если этого не сделать, не будет никакого выравнивания гусеницы. Мы использовали белые листы формата А4, чтобы создать тротуар с обеих сторон.

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

Интерфейс Arduino-передатчика

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

Потоковые изображения:

Изображения передаются через порт COM3 по беспроводной сети через последовательную библиотеку python, по IP-адресу беспроводной сети ПК/ноутбука, что позволяет нам осуществлять потоковую передачу без каких-либо интернет-зависимостей.

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

Вторая часть: работа и архитектура нейронной сети

Использование простой искусственной нейронной сети в OpenCV с 38 400 входами и 4 выходами. Черно-белое изображение будет нашим входом в модель ИНС, черно-белое изображение содержит только 1 канал со значениями от 0 до 255 (диапазон пикселей) из потоковых входных изображений, поступающих через камеру.

Давайте разберемся, из чего состоит ИНС:

Входной слой, скрытые слои и выходной слой; где каждый слой имеет нейроны, которые в основном являются вычислительными единицами. Вход, который представляет собой изображение a, имеет размеры 320 x 240 = 76 800 / 2 (нижняя половина изображения) = 38 400 значений сглаженного массива (с 1 каналом).

Нейрон вычисляет линейную комбинацию параметров ИНС, то есть матрицу весов и смещение, с функцией активации, которая обеспечивает нелинейный вывод каждого нейрона. Нейрон определяется как функция:

где z — функция внутри одного нейрона на lслое,Wвесовая матрица, aвывод функции активации,bсмещение значение и g(z)быть нелинейной функцией.

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

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

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

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

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

Стохастический градиентный спуск: это алгоритм поиска оптимизации, который помогает найти минимум функции (потери) путем изменения параметров (весов и смещений) функции (потери); идея состоит в том, что градиент этой функции дает направление наискорейшего подъема, поэтому отрицательный градиент даст направление наискорейшего спуска, как показано.

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

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

LinkedIn: https://www.linkedin.com/in/iamsal/
Github: https://github.com/M-Salman1337/Self-driving-RC-car

Чтобы узнать больше о математике, лежащей в основе нейронных сетей, посмотрите эти видео! (3Синий1Коричневый)