Добрый день, уважаемые читатели! Недавно мне посчастливилось поучаствовать в одном хакатоне по искусственному интеллекту, который организовала группа Roboauto из компании Artin в городе Брно (Чехия), ведущая разработки беспилотного автомобиля. В этой статье я бы хотел поделиться своими впечатлениями и рассказать как все проходило, чему удалось научиться и что полезного узнать. Кому интересно, прошу под кат.
Это был первый хакатон по теме машинного обучения и ИИ, а группа Roboauto добилась больших успехов в этой области, поэтому я зарегистрировался сразу заранее. Хакатон был ориентирован в первую очередь на студентов Технического университета города Брно. Как сообщили заранее авторы на странице хакатона в Facebook, хакатон должен был собой представлять игровое соревнование между командами на симуляторе гоночных автомобилей. Авторы обещали предоставить проект симулятора на языке Java, к которому можно подключить свою программу. Главная цель: написать программу на Java для своего автомобиля таким образом, чтобы автомобиль прошел круг быстрее соперников. Можно использовать нейронные сети либо запрограммированную логику.
На странице события в фейсбуке было опубликовано видео трека соревнований, который нам предстояло пройти:
За несколько дней до дня проведения хакатона всем участникам были высланы на электронную почту краткие инструкции по подготовке к мероприятию. Необходимо было установить IDE Intellij Idea с поддержкой Gradle, Java версии 8 и создать учетную запись на GitLab.
Можно было зарегистрировать свою команду или зарегистрироваться самому. Во втором случае, организаторы подключают тебя к какой-нибудь команде. Меня определили в команду с парнем из моей фирмы NXP, который также зарегистрировался независимо.
Началось все с 2-часового блока теории. Нам дали доступ к wifi и провели представление организаторов и программы хакатона. В течении дня от 12 до полуночи планировался сам хакатон с несколькими сериями заездов и перерывами на обед и ужин. От 17 до 19 часов была секция по прохождению полосы препятствий на радиоуправляемых машинках в отдельной комнате.
Первый спикер Павел сделал агенду презентации: представление среды симулятора, подключение своих проектов, введение в AI. Цель: научить модель автомобиля в симуляторе чтобы она ездила как можно быстрее. Можно также управлять моделями с клавиатуры. Нам показали демонстрацию в симуляторе и реализацию в коде.
Нам дали ссылку на проект на Gitlab. Каждый должен был запросить доступ к репозиторию, клонировать проект к себе локально на компьютер и импортировать до IntelliJ IDEA. Проект включал поддержку Gradle — система генерации типа Maven или CMake. Проект можно сразу запустить: открывается окно симулятора типа такого:
После этого другой спикер Степан сделал краткое введение в теорию машинного обучения и уточнил, что в хакатоне будут использоваться нейронные сети типа Feed forward и обучение с учителем. Целью является научить автомобиль как ездить. Для этого сначала проедем трассу сами с ручным управлением, сохраним точки траектории. Набор данных траектории сохраняется в таблице CSV: расстояние от средней линии дороги, угол по отношению к дороге и одно из значений 0, 1, -1 для величины поворота. Затем научим сеть проезжать трассу по траектории максимально близкой к траектории, пройденной при ручном управлении.
Среди вопросы от участников был интересный вопрос: как указать для сети данные о позициях других автомобилей соперников. Степан сказал, что данные о соперниках можно также задать на вход нейронной сети. Также на вход можно задать данные о скорости, если это поможет в обучении.
Степан показал как сделать два примера ручного управления: неправильный (произвольный) и правильный (аккуратный, близко к середине дороги). При демонстрации обученной сети авто имело большие проблемы на поворотах.
Можно было настроить различные параметры сети: число входов, выходов, число эпох обучения, число нейронов в скрытом слое. В программе для реализации нейронных сетей использовалась библиотека DL4J: deeplearning4j.org. К сожалению, библиотека не работает на 32-битовой операционной системе (у меня была проблема на ноутбуке с Ubuntu 12.04).
Каждая команда определяет цвет своего автомобиля, который необходимо указать в коде программы. Нам сразу рассказали как использовать API приложения для управления своим автомобилем в соревновании.
Мы с коллегой начали с решения проблемы быстрого прохождения трассы обычными методами на основе API. Наше решение было таким: в зависимости от расстояния до следующего поворота и направления поворота мы корректировали ускорение и угол поворота автомобиля. Для получения информации о близости поворота мы использовали объект Grid из API системы. Суть Grid: для автомобиля можно получить прямоугольную сетку поверхности игрового поля перед автомобилем (влево и вправо от автомобиля) произвольного размера (например, шириной 8 и длиной 10 ячеек). Для каждой ячейки можно определить, проходит ли через нее трасса и находится ли в ней в данный момент другой автомобиль.
Здесь ссылка на наш проект. Основные файлы: Driver_team12.java, Team12.java и RunDev.java. Логика управления находится в файле Driver_team12.java.
Ближе к вечеру я принялся разбираться с нейронными сетями. Начал с простой записи траектории при ручном управлении. Посредством тренировки на записанных данных и настройкой параметров (число итераций, число эпох обучения, скорость обучения) удалось добиться несколько лучших результатов прохождения трассы.
На протяжении хакатона было проведено несколько соревнований, в каждом из которых была проведена серия заездов между группами команд. В процессе участники постоянно улучшали свои решения. Большой проблемой была ситуация столкновения нескольких машин, полностью блокировавшая движение по трассе. Здесь выигрывали команды, реализовавшие обработку препятствий наилучшим образом.
В соревновании половина команд представила решение на основе нейронных сетей. Победителем стала одна из таких команд. Одна из лидирующих команд построила нейронную сеть из 25 слоев, на вход принимала множество параметров (среди них расстояние до середины дороги, скорость и данные из объекта Grid). Другая команда использовала две нейронные сети: одну для прямой секции (для минимизации отклонения от середины дороги) и одну для поворота.
Доступно видео заездов с хакатона:
Кроме самого хакатона в программу было включено увлекательное мероприятие — прохождение полосы препятствий на радиуправляемых машинках. От 17 до 19 часов в отдельной комнате можно было попытать свои силы в одолении сложных препятствий на моделях автомобилей с радиоуправлением.
Был организован обед и закуски в течении всего дня. Вечером заказали пиццу. Также можно было без ограничений наливать пиво на кухне.
Вот так интересно, увлекательно и энергично прошел целый день хакатона. Осталось много приятных впечатлений, запомнилось много веселых моментов из соревнований команд. Хакатон стал хорошей тренировкой мозга на выходных, где можно было поломать голову над реальными задачами из жизни и попробовать свои силы в обучении управлению беспилотного автомобиля в простом симуляторе.
Всем желаю удачи и до новых встреч!
О хакатоне
Это был первый хакатон по теме машинного обучения и ИИ, а группа Roboauto добилась больших успехов в этой области, поэтому я зарегистрировался сразу заранее. Хакатон был ориентирован в первую очередь на студентов Технического университета города Брно. Как сообщили заранее авторы на странице хакатона в Facebook, хакатон должен был собой представлять игровое соревнование между командами на симуляторе гоночных автомобилей. Авторы обещали предоставить проект симулятора на языке Java, к которому можно подключить свою программу. Главная цель: написать программу на Java для своего автомобиля таким образом, чтобы автомобиль прошел круг быстрее соперников. Можно использовать нейронные сети либо запрограммированную логику.
На странице события в фейсбуке было опубликовано видео трека соревнований, который нам предстояло пройти:
За несколько дней до дня проведения хакатона всем участникам были высланы на электронную почту краткие инструкции по подготовке к мероприятию. Необходимо было установить IDE Intellij Idea с поддержкой Gradle, Java версии 8 и создать учетную запись на GitLab.
Можно было зарегистрировать свою команду или зарегистрироваться самому. Во втором случае, организаторы подключают тебя к какой-нибудь команде. Меня определили в команду с парнем из моей фирмы NXP, который также зарегистрировался независимо.
Теоретическая часть — введение
Началось все с 2-часового блока теории. Нам дали доступ к wifi и провели представление организаторов и программы хакатона. В течении дня от 12 до полуночи планировался сам хакатон с несколькими сериями заездов и перерывами на обед и ужин. От 17 до 19 часов была секция по прохождению полосы препятствий на радиоуправляемых машинках в отдельной комнате.
Первый спикер Павел сделал агенду презентации: представление среды симулятора, подключение своих проектов, введение в AI. Цель: научить модель автомобиля в симуляторе чтобы она ездила как можно быстрее. Можно также управлять моделями с клавиатуры. Нам показали демонстрацию в симуляторе и реализацию в коде.
Нам дали ссылку на проект на Gitlab. Каждый должен был запросить доступ к репозиторию, клонировать проект к себе локально на компьютер и импортировать до IntelliJ IDEA. Проект включал поддержку Gradle — система генерации типа Maven или CMake. Проект можно сразу запустить: открывается окно симулятора типа такого:
После этого другой спикер Степан сделал краткое введение в теорию машинного обучения и уточнил, что в хакатоне будут использоваться нейронные сети типа Feed forward и обучение с учителем. Целью является научить автомобиль как ездить. Для этого сначала проедем трассу сами с ручным управлением, сохраним точки траектории. Набор данных траектории сохраняется в таблице CSV: расстояние от средней линии дороги, угол по отношению к дороге и одно из значений 0, 1, -1 для величины поворота. Затем научим сеть проезжать трассу по траектории максимально близкой к траектории, пройденной при ручном управлении.
Среди вопросы от участников был интересный вопрос: как указать для сети данные о позициях других автомобилей соперников. Степан сказал, что данные о соперниках можно также задать на вход нейронной сети. Также на вход можно задать данные о скорости, если это поможет в обучении.
Степан показал как сделать два примера ручного управления: неправильный (произвольный) и правильный (аккуратный, близко к середине дороги). При демонстрации обученной сети авто имело большие проблемы на поворотах.
Можно было настроить различные параметры сети: число входов, выходов, число эпох обучения, число нейронов в скрытом слое. В программе для реализации нейронных сетей использовалась библиотека DL4J: deeplearning4j.org. К сожалению, библиотека не работает на 32-битовой операционной системе (у меня была проблема на ноутбуке с Ubuntu 12.04).
Основная часть — соревнование
Каждая команда определяет цвет своего автомобиля, который необходимо указать в коде программы. Нам сразу рассказали как использовать API приложения для управления своим автомобилем в соревновании.
Мы с коллегой начали с решения проблемы быстрого прохождения трассы обычными методами на основе API. Наше решение было таким: в зависимости от расстояния до следующего поворота и направления поворота мы корректировали ускорение и угол поворота автомобиля. Для получения информации о близости поворота мы использовали объект Grid из API системы. Суть Grid: для автомобиля можно получить прямоугольную сетку поверхности игрового поля перед автомобилем (влево и вправо от автомобиля) произвольного размера (например, шириной 8 и длиной 10 ячеек). Для каждой ячейки можно определить, проходит ли через нее трасса и находится ли в ней в данный момент другой автомобиль.
Здесь ссылка на наш проект. Основные файлы: Driver_team12.java, Team12.java и RunDev.java. Логика управления находится в файле Driver_team12.java.
Ближе к вечеру я принялся разбираться с нейронными сетями. Начал с простой записи траектории при ручном управлении. Посредством тренировки на записанных данных и настройкой параметров (число итераций, число эпох обучения, скорость обучения) удалось добиться несколько лучших результатов прохождения трассы.
На протяжении хакатона было проведено несколько соревнований, в каждом из которых была проведена серия заездов между группами команд. В процессе участники постоянно улучшали свои решения. Большой проблемой была ситуация столкновения нескольких машин, полностью блокировавшая движение по трассе. Здесь выигрывали команды, реализовавшие обработку препятствий наилучшим образом.
В соревновании половина команд представила решение на основе нейронных сетей. Победителем стала одна из таких команд. Одна из лидирующих команд построила нейронную сеть из 25 слоев, на вход принимала множество параметров (среди них расстояние до середины дороги, скорость и данные из объекта Grid). Другая команда использовала две нейронные сети: одну для прямой секции (для минимизации отклонения от середины дороги) и одну для поворота.
Доступно видео заездов с хакатона:
Другие интересности
Кроме самого хакатона в программу было включено увлекательное мероприятие — прохождение полосы препятствий на радиуправляемых машинках. От 17 до 19 часов в отдельной комнате можно было попытать свои силы в одолении сложных препятствий на моделях автомобилей с радиоуправлением.
Был организован обед и закуски в течении всего дня. Вечером заказали пиццу. Также можно было без ограничений наливать пиво на кухне.
Вот так интересно, увлекательно и энергично прошел целый день хакатона. Осталось много приятных впечатлений, запомнилось много веселых моментов из соревнований команд. Хакатон стал хорошей тренировкой мозга на выходных, где можно было поломать голову над реальными задачами из жизни и попробовать свои силы в обучении управлению беспилотного автомобиля в простом симуляторе.
Всем желаю удачи и до новых встреч!
sned
Хакатон — форум разработчиков, во время которого специалисты из разных областей разработки программного обеспечения (программисты, дизайнеры, менеджеры) сообща работают над решением какой-либо проблемы.
На мой взгляд расшифровка не помешает.