Система распознавания автомобилей

Разработка системы распознавания автомобилей, которая способна обнаруживать транспортные средства на фото и видеопотоке. Настройка нейронной сети и ее обучение на собранных данных. Графический интерфейс для взаимодействия пользователя с системой.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 18.08.2018
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

  • Введение
  • 1. Обзор существующих технических решений
  • 2. Выбор инструментальных и программных средств
  • 3. Этапы разработки нейронной сети
    • 3.1 Сбор данных
    • 3.2 Обработка данных
    • 3.3 Обучение нейронной сети
  • 4. Сравнение обученных нейросетей
  • 5. Реализация системы распознавания
    • 5.1 Модуль распознавания объектов
    • 5.2 Пользовательский интерфейс программы
    • 5.3 Редактор общей модели
  • 6. Тестирование системы
  • Заключение
  • Список используемых источников
  • Введение
  • В современном мире роль машинного обучения (МО) стремительно возрастает. МО открывает новые возможности перед людьми и позволяет автоматизировать те сферы жизни, в которых стандартные алгоритмы не работают. В настоящее время одним из основных направлений, связанных с МО, является разработка беспилотных автомобилей (БА). Подобные транспортные средства помогают людям с ограниченными возможностями передвигаться по местности, позволяют сократить количество дорожных происшествий, снижают расходы на водителей и повышают качество жизни людей.
  • В соответствии с материалами [1], предоставленными Всемирной организацией здравоохранения (ВОЗ), в результате ДТП каждый день в мире погибают более 3 000 человек и приблизительно 100 000 приобретают серьезные травмы. Ежегодно в ДТП от двадцати до пятидесяти миллионов человек получают травмы различной степени тяжести, а жертвами оказываются более одного миллиона человек. Эти показатели остаются практически неизменными с 2007 г. (рис. 1). Более того, основной причиной смерти людей в возрасте 15-29 лет являются травмы, полученные в результате ДТП (рис. 2).
  • Рис. 1. Число случаев смерти в результате ДТП в мире.
  • Рис. 2. Основные причины смерти людей в возрасте 15-29 лет.
  • Одним из возможных способов решения этой проблемы является переход на полностью автоматизированные беспилотные автомобили, которые позволят сократить число ДТП до минимального уровня за счет сокращения влияния человеческого фактора. Разрабатываемая система распознавания автомобилей является необходимой частью самоуправляемых транспортных средств и поможет ускорить время разработки программного обеспечения для БА.
  • Таким образом, целью работы является разработка системы распознавания автомобилей, которая способна обнаруживать транспортные средства на фото и видеопотоке. Для достижения поставленной цели необходимо решить следующие задачи:

- собрать набор данных для обучения нейронной сети, распознающей объекты на видеокадрах;

- настроить нейронную сеть и произвести ее обучение на собранных данных;

- реализовать получение и обработку данных, поступающих с веб_камеры или видеорегистратора;

- создать графический интерфейс для взаимодействия пользователя с системой;

- оптимизировать разработанные алгоритмы для повышения общей производительности системы;

- провести тестирование системы и исправить возможные ошибки.

Для достижения поставленной цели были выбраны следующие программные и инструментальные средства: язык программирования Python, библиотека машинного обучения TensorFlow, модуль для создания пользовательского интерфейса Tkinter и др. При помощи них удалось создать приложение, способное распознавать автомобили с кадров видеоустройства в режиме реального времени.

1. Обзор существующих технических решений

На данный момент не существует готовых открытых систем для распознавания автомобилей на видеопотоке. Большинство имеющихся в сети Интернет проектов по данному направлению представляют собой обученные нейронные сети, работающие на основе интерактивной оболочки Jupyter Notebook [2, 3] и распознающие объекты только с изображений. Один из таких проектов [4] представляет собой набор скриптов, объединенных в среде Jupyter (рис. 3). При работе с ним необходимо вносить изменения в программный код, для чего необходимо обладать навыками программирования, что не подходит для большинства пользователей. Кроме того, в нем отсутствует поддержка просмотра видео в режиме реального времени, а только после самой обработки, что также снижает удобство его применения.

Рис. 3. Проект tatsuyah-vehicle-detection в среде Jupyter.

Еще один проект [5] под названием KittiBox вовсе не имеет графического интерфейса и работает только с изображениями. Результаты сравнения имеющихся на настоящее время проектов для поиска автомобилей на изображениях и видеоданных сведены в таблицу 1.

Таблица 1

Сравнение существующих технических решений для распознавания автомобилей

Проект

Пользовательский интерфейс

Работа с видео

Режим реального времени для видео

Чтение данных с видеоустройства

tatsuyah-vehicle-detection [4]

-

+

-

-

KittiBox [5]

-

-

-

-

vehicle_detection_haarcascades [6]

-

+

+

-

JunshengFu-vehicle-detection [7]

-

+

-

-

CarND-Vehicle-Detection [8]

-

+

-

-

SDC-Vehicle-Detection [9]

-

+

-

-

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

2. Выбор инструментальных и программных средств

Для разработки классификатора была выбрана открытая библиотека машинного обучения TensorFlow [10, 11]. Главным достоинством TensorFlow является наличие широкого набора инструментов, которые ускоряют разработку нейронных сетей. Другим инструментом, используемым в работе, является программное обеспечение LabelImg [12] (рис. 4). Эта программа очень популярна среди разработчиков и необходима для разметки изображений. Под разметкой подразумевается выделение объектов и указание их классов на снимках. Кроме того, LabelImg позволяет генерировать XML файлы с разметкой в формате PASCAL VOC [13] для TensorFlow.

Рис. 4. Программа LabelImg.

В данной работе также используется открытая библиотека компьютерного зрения OpenCV [14, 15] для сбора данных с видеоустройств. Основными преимуществами OpenCV являются простота и высокая производительность. Для построения пользовательского интерфейса применяется кроссплатформенная библиотека Tkinter [16, 17], включающая все необходимые компоненты для его создания. В качестве языка программирования выбран Python [18, 19], т.к. на нем реализована библиотека TensorFlow.

3. Этапы разработки нейронной сети

3.1 Сбор данных

Для обучения нейронной сети необходимо собрать и обработать данные, на которых нейросеть должна научиться выявлять закономерности. Так как система рассчитана на использование в беспилотных автомобилях, то необходимо собрать данные, максимально приближенные к реальным. Для этого имеет смысл использовать кадры с видеоустройств или видеорегистраторов из автомобилей, без редактуры в графических редакторах. Кроме того, нет смысла использовать фотографии или изображения, получившиеся в результате фотографирования на камеры высокого разрешения или при рендеринге с помощью пакетов 3D моделирования. Это является важным моментом, поскольку нейронные сети чувствительны к использующимся данным, и точность распознавания на реальных и обработанных изображениях может сильно отличаться.

Большинство видео, представляющих собой записи с видеорегистраторов, можно получить в сети Интернет на видеохостинге YouTube. Данные для обучения моделей распознавания взяты с открытых каналов этого сервиса (рис. 5). Для скачивания контента с этого ресурса использовалось расширение SaveFrom [20] для интернет браузеров.

Рис. 5. Канал «Авто Страсть» на видеохостинге YouTube.

3.2 Обработка данных

Скачанные видеофайлы сами по себе не несут никакой полезной информации, которая может быть использована для обучения нейронной сети, поэтому их необходимо покадрово разбить на изображения и пометить нужные объекты для распознавания на полученных кадрах. Для извлечения кадров из видео использовалась программа VirtualDub [21] (рис. 6), которая обладает широким набором инструментов по захвату, монтажу и редактированию видеоинформации. Извлеченные кадры вручную просматривались на наличие различных дефектов (рис. 7). Смазанные, размытые, низкокачественные, слишком тусклые или яркие кадры удалялись из выборки. Всего было обработано 23 видео, средняя продолжительность которых составляет 10 минут. В итоге из них было отобрано 300 кадров.

После отбора кадры были размечены в программе LabelImg. Объекты для распознавания выделялись в прямоугольные рамки, после чего указывался класс объекта. Для размеченных изображений автоматически сгенерированы XML файлы (рис. 8), которые содержат общую информацию о принадлежности изображения, а также выделенные объекты с указанием их координат и класса. Всего было размечено 1347 объектов, которые относятся к 18 классам (табл. 2). Помимо транспортных средств выделены также светофоры, дорожные знаки и люди.

Рис. 8. Пример сгенерированного XML файла.

распознавание автомобиль нейронная сеть

Таблица 2

Классы объектов на размеченных изображениях

Класс

Описание

Количество объектов

car

Автомобили

821

truck

Грузовые машины

108

minibus

Микроавтобусы

40

bus

Автобусы

29

tram

Трамваи

2

crosswalk_sign

Знак - пешеходный переход

112

mainroad_sign

Знак - главная дорога

17

nostop_sign

Знак - остановка запрещена

10

noentry_sign

Знак - въезд запрещен

5

giveway_sign

Знак - уступи дорогу

2

stop_sign

Знак - стоп

1

noparking_sign

Знак - парковка запрещена

1

noovertaking_sign

Знак - обгон запрещен

1

prescriptive_sign

Предписывающие знаки

30

warning_sign

Предупреждающие знаки

13

prohibitory_sign

Запрещающие знаки

9

traffic_light

Светофоры

23

person

Люди

123

После разметки изображений 10% из них были отложены в качестве небольшой тестовой выборки, а все остальные составили обучающую выборку. Для тренировки нейронной сети используются файлы формата TFRecord [22], которые вмещают в себя все изображения, входящие в выборку, метки объектов и их границы. Перед тем как создать такой файл, необходимо сначала получить файл в формате CSV (рис. 9), содержащий совокупные данные из XML файлов с размеченными объектами. По нему генерируется запись TFRecord с помощью готового скрипта. Для формирования CSV файла также был разработан специальный скрипт для ускорения работы.

Рис. 9. Сгенерированный CSV файл тестовой выборки.

После получения CSV файлов для обучающей и тестовой выборки они были сконвертированы в записи TFRecord. Для этого использовался уже имеющий скрипт, поставляющийся вместе с TensorFlow. В него была внесена функция для автоматического формирования файла с расширением *.PBTXT (рис. 10) с метками классов, необходимых при обучении и работе нейронной сети. В этом файле производится сопоставление между идентификаторами классов и их названиями.

Рис. 10. Фрагмент сгенерированного *.PBTXT файла.

3.3 Обучение нейронной сети

В качестве нейронной сети выбрана нейросеть с готовой архитектурой MobileNet [23, 24]. Перед ее обучением необходимо задать в конфигурационном файле модели (рис. 11) число классов, которое можно вычислить по файлу с метками. После этого в командной строке задается специальная команда (рис. 12), запускающая процесс обучения (рис. 13), которая содержит пути к директории и конфигурационному файлу.

Рис. 11. Фрагмент конфигурационного файла модели.

Рис. 12. Команда запуска обучения нейронной сети.

Рис. 13. Процесс обучения нейронной сети.

При обучении выводится параметр loss, характеризующий величину ошибок на тренировочной выборке. Чем меньше этот параметр, тем лучше качество модели [25]. Отсутствие уменьшения данного параметра в течении нескольких итераций при обучении сигнализирует о том, что тренировку нейронной сети можно заканчивать. Помимо информации, выводимой в консоль, с помощью отдельной команды (рис. 14) с указанием пути к тренировочной директории можно открыть панель визуализации TensorBoard (рис. 15), где представлены графики изменения величин различных параметров, а также содержится дополнительная информация о модели.

Рис. 14. Команда открытия панели TensorBoard.

Рис. 15. Панель визуализации TensorBoard.

После процедуры обучения необходимо экспортировать модель, чтобы получить ее конечную версию. При обучении в тренировочной папке через определенные интервалы времени сохраняются промежуточные модели (рис. 16), хранящие дополнительные метаданные, и набор их весов. Для объединения всей необходимой информации в одном файле и получения итоговой модели используется специальная команда (рис. 17), в которой указываются пути к конфигурационному файлу, промежуточной экспортируемой модели и выходной директории. Конечная нейронная сеть размещается в файле с расширением *.PB, который хранит сериализованные с помощью специального протокола данные (Protocol Buffers [26]). Этот протокол является платформо-независимым и расширяемым механизмом для сериализации структурированных данных. Он является аналогом XML, но работает быстрее, поскольку данные представлены в бинарном виде. Помимо самой модели необходимо хранить файл с названиями классов, который понадобится при работе нейронной сети для правильного указания меток объектов.

Рис. 16. Тренировочная директория с промежуточными моделями.

Рис. 17. Команда экспорта модели.

4. Сравнение обученных нейросетей

Перед созданием основных компонентов системы было проведено обучение и сравнение различных нейронных сетей для выбора наиболее качественной модели. Всего было обучено 6 нейросетей, которые отличаются друг от друга набором обнаруживаемых классов и типом изображений, на которых происходило обучение. Тренировочная выборка могла состоять из полноцветных снимков или изображений в градациях серого. Для преобразования цветового пространства использовалась утилита ImageMagick [27, 28], которая обладает большим комплектом средств по работе с графическими файлами. Помимо самостоятельно созданных моделей для сравнения была добавлена готовая нейросеть ssd_mobilenet_v1 [29], распознающая 90 классов объектов.

Обучение модели в среднем занимало 10 часов и заканчивалось после 11 000 шагов. Однако уже после 8 000 итераций значение функции потерь в большинстве случаев сильно не менялось и колебалось около 2 (рис. 18).

Рис. 18. Графики функции потерь обученных моделей.

Полученные нейронные сети, а также результаты их тестирования показаны в таблице 3. На изображениях тестовой выборки в сумме представлено 100 транспортных средств. Каждая модель проверялась на двух версиях выборки, первая из которых содержала полноцветные снимки, а другая - в градациях серого. Столбцы с постфиксом 2 в таблице 3 описывают вторую выборку. Сравнение проводилось по следующим критериям:

- правильно обнаруженные и классифицированные объекты (ПК);

- ложное обнаружение (ЛО);

- правильно обнаруженные, но ложно классифицированные объекты (ЛК).

Таблица 3

Сравнение обученных нейронных сетей

Модель

ПК

ЛО

ЛК

ПК2

ЛО2

ЛК2

only-vehicles

77

11

0

74

5

0

only-vehicles_gr

75

14

0

76

13

0

class-vehicles

62

9

2

61

14

2

class-vehicles_gr

54

9

3

61

5

4

full

75

12

3

73

18

3

full_gr

68

1

1

68

0

1

ssd_mobilenet_v1

54

3

0

45

4

2

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

- only-vehicles обнаруживает только транспортные средства без их деления на классы;

- class-vehicles обнаруживает транспортные средства с делением на 4 класса: car, truck, bus, minibus;

- full обнаруживает объекты всех классов, перечисленных в таблице 2;

- ssd_mobilenet_v1 обнаруживает транспортные средства нескольких видов, а также людей, животных, светофоры и др.

По итогам тестирования для дальнейшей работы было отобрано две модели - only-vehicles и full. Нейросети, тренированные на цветных изображениях, в целом показали лучшие результаты, чем их аналоги, обученные на кадрах в оттенках серого. Применение монохромных изображений также не дало более высоких результатов.

5. Реализация системы распознавания

5.1 Модуль распознавания объектов

Основной частью системы является модуль распознавания. Он базируется на библиотеке TensorFlow и позволяет загружать одновременно несколько моделей. Помимо нейронных сетей (детекторов), описание создания и обучения которых представлено выше, модуль поддерживает использование различных классификаторов. Их обучение не требует предварительной разметки объектов на изображениях, что позволяет быстрее получать готовые модели. Процесс тренировки классификатора хорошо описан в статье на Google Developers Codelabs [30]. Так же, как и в случае с детекторами, от классификаторов требуются два файла: PB_файл с моделью и PBTXT_файл с метками классов. Кроме моделей нейронных сетей поддерживаются пользовательские скрипты, с помощью которых можно решать большой круг задач. Модуль работает только со скриптами, разработанными на языке Python. Дополнительно к TensorFlow используется библиотека OpenCV, обеспечивающая работу с изображениями и видео в режиме реального времени.

Модуль распознавания вынесен в программный класс, методы которого запускаются в отдельном потоке, чтобы не блокировать выполнение основного цикла программы. Перед запуском процесса распознавания происходит инициализация моделей, составляющих общую главную модель, описанную в формате JSON. Все нейронные сети и скрипты записываются в один список (рис. 19), элементы которого поочередно запускаются во время распознавания.

Рис. 19. Структура списка моделей.

Каждый элемент списка содержит следующую информацию:

1. Название модели.

2. Тип модели (детектор, классификатор, скрипт).

3. Режим отображения рамок объектов. Имеет два возможных состояния: включен и отключен. Когда этот режим включен, то на изображениях / кадрах появляются ограничительные рамки объектов с меткой их класса.

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

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

Рис. 20. Схема общей модели.

Результаты. Это поле представляет собой словарь (рис. 21), в который записывается список обнаруженных объектов (рис. 22) с ключом detected_objects. Элемент списка обнаруженных объектов записывается в виде словаря, у которого с ключом class передается метка класса, а с ключом box - данные о границах объекта. Границы объекта хранятся в виде четырех точек xmin, ymin, xmax и ymax, которые содержат относительные значения координат в диапазоне от 0 до 1 от левого верхнего угла изображения (рис. 23). Кроме того, в основном словаре зарезервирован специальный ключ output_text, который может быть использован пользовательскими скриптами для вывода необходимой информации в консоль.

Рис. 21. Структура словаря результатов.

Рис. 22. Структура списка обнаруженных объектов.

Рис. 23. Координаты границ объекта.

5.2 Пользовательский интерфейс программы

Графический интерфейс был разработан с использованием кроссплатформенной библиотеки Tkinter, которая позволяет легко создавать различные виджеты, задавать положение элементов в окне и описывать логику их функционирования. Для учета возможных действий пользователя и сценариев поведения системы были разработаны UML диаграммы, которые позволяют определить необходимые компоненты пользовательского интерфейса и возможные ситуации, возникающие при взаимодействии пользователя с системой.

Первая диаграмма (рис. 24) описывает возможные состояния системы. Она дает описание того, как объект переходит из одного состояния в другое, и служит для моделирования изменений состояний системы.

Рис. 24. Диаграмма состояний.

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

На первой диаграмме (рис. 25) приведен процесс выбора файла, а на другой (рис. 26) отображен процесс обработки данных с видеоустройства.

Рис. 25. Диаграмма деятельности - выбор файла.

Рис. 26. Диаграмма деятельности - обработка видео.

Созданные UML диаграммы позволяют выделить необходимые компоненты для взаимодействия пользователя с системой и разработать графический интерфейс (рис. 27). В его состав входят следующие элементы:

1. Кнопка вызова файлового диалога для выбора файла общей модели.

2. Текстовое поле, содержащее путь к файлу общей модели.

3. Кнопка вызова файлового диалога для выбора изображения или видеофайла.

4. Текстовое поле, содержащее путь к изображению или источнику видео.

5. Кнопка запуска процесса обработки изображения/видео.

6. Графический виджет, отображающий обработанные кадры.

7. Кнопка завершения процесса обработки, возникающая после его запуска.

Рис. 27. Пользовательский интерфейс разработанной программы.

5.3 Редактор общей модели

Для запуска процесса распознавания необходимо наличие общей модели, заданной в формате JSON (рис. 28), которая описывает все элементы, участвующие в обработке видео. Каждая отдельная модель содержит следующие ключи:

1. Идентификатор (id). Возможные значения: 0, 1, 2, …

2. Предки (ancestors). Содержит список идентификаторов родительских моделей. Является необязательным параметром. При его отсутствии конкретная модель получает данные напрямую с видеоустройства. При наличии списка данные берутся из результатов родительских моделей. Возможные значения: [0], [0, 1, …], …

3. Тип (type). Возможные значения: detector, classifier, script.

4. Режим отображения рамок объектов (display_boxes). Включение/отключение границ обнаруженных объектов с метками. Возможные значения: true, false.

5. Путь (path). Задает путь к папке или файлу. Для нейронных сетей указывается путь к папке, а для скриптов - к файлу. В папке с нейронной сетью должна находиться конечная модель с расширением *.PB и PBTXT-файл с метками классов. В сторонних скриптах (рис. 29) для правильной работы необходимо объявлять функцию run с двумя аргументами. В первом аргументе передаются результаты родительских моделей, а во втором - кадр с видеоустройства. Результаты предков записываются в виде словаря, где ключом выступает идентификатор модели, а значение представляет результаты конкретной модели. Функция run должна возвращать словарь, в котором с ключом detected_objects можно передавать список обнаруженных объектов, выводящихся после обработки кадра при включенном режиме отображения, а с ключом output_text - текст для вывода в консоль, который может использоваться в отладочных целях.

Рис. 28. Шаблон файла JSON с общей моделью.

Рис. 29. Пример пользовательского скрипта.

Для удобства создания общей модели и автоматической генерации JSON файлов было разработано приложение (рис. 30) для веб-браузеров на JavaScript с использованием библиотеки визуализации vis.js [31], с помощью которой происходит построение графов, представляющих общую модель. Приложение обладает набором инструментов (рис. 31), позволяющих быстро редактировать различные элементы модели без знания правильной разметки файла JSON. Помимо создания новых моделей в него можно импортировать уже существующие модели и работать с ними внутри редактора. После проведения необходимых изменений полученную модель можно легко экспортировать.

Рис. 30. Редактор с начальной моделью.

Рис. 31. Панель инструментов.

На панели инструментов расположены кнопки, выполняющие следующие функции:

1. Импорт модели. Открывает файловый диалог, с помощью которого пользователь может указать необходимую модель для импорта. После выбора файла происходит его считывание и отображение модели в редакторе.

2. Изменение названия модели. Открывает диалог с текстовым полем для задания нового имени выделенной вершины. После подтверждения действия происходит переименование указанной пользователем модели.

3. Добавление новой модели. Добавляет новую вершину и присоединяет ее к выделенным вершинам. Если ничего не выделено, то по умолчанию подключается к камере.

4. Удаление модели. Удаляет выделенные элементы.

5. Добавление новой связи. Создает связи между выделенными вершинами.

6. Изменение направления связи. Меняет текущее направление выделенных связей на противоположное.

7. Удаление связи. Удаляет выделенные связи.

8. Смена типа. Меняет текущий тип выделенных моделей на следующий в доступном списке типов (рис. 32).

9. Изменение режима отображения. Включает/отключает отображение границ обнаруженных объектов и их меток для выделенной вершины в зависимости от текущего состояния. Если на кнопке изображен зачеркнутый квадрат (рис. 33), то обнаруженные объекты выбранной модели не будут отображаться на обработанных кадрах. Если изображен квадрат, то режим отображения включен.

10. Изменение пути. Открывает диалог с текстовым полем для задания пути к папке или файлу указанной вершины. После подтверждения действия происходит смена пути для указанной пользователем модели. Если на кнопке изображена папка с файлом (рис. 34), то для текущей вершины путь задан. Если же изображена пустая папка, то выделенная модель не имеет заданного пути к необходимым файлам.

11. Экспорт модели. Для собранного графа (рис. 35) генерирует JSON файл (рис. 36) и открывает файловый диалог, с помощью которого пользователь может указать местоположение для сохранения конечной модели.

Рис. 32. Доступные типы моделей.

Рис. 33. Состояния кнопки изменения режима отображения.

Рис. 34. Состояния кнопки изменения пути.

Рис. 35. Пример готовой модели в редакторе.

Рис. 36. Пример файла JSON готовой модели.

При работе в редакторе возможны следующие пользовательские действия:

1. Перемещение по окну. Клик левой кнопкой мыши (ЛКМ) с зажатием пустой области и перемещением в нужную позицию.

2. Отдаление/приближение. Перемещение колесика мыши вниз для отдаления и вверх для приближения.

3. Перетаскивание вершины. Клик ЛКМ с зажатием по объекту и его перетаскиванием в нужную позицию.

4. Выделение объекта. Клик ЛКМ по невыделенному объекту. Убирает выделение с остальных объектов.

5. Выделение нескольких объектов. Клик ЛКМ с зажатой кнопкой Ctrl по невыделенному объекту. Сохраняет выделение остальных объектов.

6. Снятие выделения с одного объекта. Клик ЛКМ с зажатой кнопкой Ctrl по выделенному объекту. Сохраняет выделение остальных объектов.

7. Снятие выделения со всех объектов. Клик ЛКМ по пустой области редактора.

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

6. Тестирование системы

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

Рис. 37. Программа с запущенным распознаванием.

Также было проведено тестирование производительности системы на двух различных общих моделях. Первая из них (рис. 38) состояла из обученной нейронной сети full, а вторая (рис. 39) - из нейросети only-vehicles, классификатора, делящего обнаруженные транспортные средства на несколько классов, и скрипта, выводящего информацию о результатах распознавания.

Рис. 38. Общая модель №1.

Рис. 39. Общая модель №2.

Тестирование проводилось для двух разных видео продолжительностью 30 секунд. Они отличаются плотностью дорожного трафика. На каждом кадре первого видео в среднем отображено 4-5 автомобилей, а на втором - около 2. Оба видео представлены в разрешении 1280x720 с частотой 30 кадров/с.

Результаты тестирования показаны в таблице 4. Для каждой модели рассчитывалось значение кадровой частоты (FPS). Формат записи - средняя/максимальная/минимальная частота.

Таблица 4

Результаты тестирования производительности системы

Модель №1

Модель №2

Видео 1

9.3 / 12.8 / 7.1 FPS

6.2 / 10.1 / 3.8 FPS

Видео 2

11.2 / 15.1 / 8.2 FPS

10.7 / 16.9 / 6.1 FPS

Потребление ОЗУ

940 Мб

950 Мб

Характеристики устройства, на котором происходило тестирование:

- операционная система Windows 10 x64;

- процессор Intel Core i7-4700HQ 2.4 ГГц;

- видеоадаптер NVIDIA GeForce GT 750M;

- оперативная память 8 Гб DDR3.

Невысокие показатели FPS объясняются использованием при тестировании не самой производительной видеокарты, но даже ее можно использовать для решения задач низкого и среднего уровня сложности. Кроме того, улучшения можно достичь за счет обработки кадров более низкого разрешения. Для решения же сложных и комплексных задач или обработки видео высокого разрешения необходимо использовать более современные компоненты.

Заключение

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

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

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

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

Список используемых источников

1. Доклад о глобальной дорожной безопасности [Электронный ресурс]. - Режим доступа: http://www.who.int/violence_injury_prevention/road_safety_status/2015/GSRRS2015_Summary_RU.pdf (Дата обращения: 01.02.2018 г.).

2. Project Jupyter [Электронный ресурс]. - Режим доступа: http://jupyter.org (Дата обращения: 01.02.2018 г.).

3. Boscoe, B.M. Using the Jupyter Notebook as a Tool for Open Science: An Empirical Study / B.M. Boscoe, I.V. Pasquetto, M.S. Golshan, C.L. Borgman // arXiv preprint arXiv:1804.05492. - 2018.

4. Vehicle detection using machine learning and computer vision techniques for Udacity's self-driving car course [Электронный ресурс]. - Режим доступа: https://github.com/tatsuyah/vehicle-detection (Дата обращения: 01.02.2018).

5. KittiBox: A car detection model implemented in Tensorflow [Электронный ресурс]. - Режим доступа: https://github.com/MarvinTeichmann/KittiBox (Дата обращения: 01.02.2018).

6. Vehicle Detection by Haar Cascades with OpenCV [Электронный ресурс]. - Режим доступа: https://github.com/andrewssobral/vehicle_detection_haarcascades (Дата обращения: 01.02.2018).

7. Created vehicle detection pipeline with two approaches: (1) deep neural networks (YOLO framework) and (2) support vector machines (OpenCV + HOG) [Электронный ресурс]. - Режим доступа: https://github.com/JunshengFu/vehicle-detection (Дата обращения: 01.02.2018).

8. Vehicle detection using YOLO in Keras runs at 21FPS [Электронный ресурс]. - Режим доступа: https://github.com/xslittlegrass/CarND-Vehicle-Detection (Дата обращения: 01.02.2018).

9. Udacity Project - Vehicle Detection [Электронный ресурс]. - Режим доступа: https://github.com/balancap/SDC-Vehicle-Detection (Дата обращения: 01.02.2018).

10. TensorFlow [Электронный ресурс]. - Режим доступа: https://www.tensorflow.org (Дата обращения: 01.02.2018 г.).

11. Abadi, M. TensorFlow: A System for Large-Scale Machine Learning / M. Abadi, P. Barham, J. Chen, et al. // OSDI. - 2016. - Т. 16. - С. 265-283.

12. LabelImg: Graphical image annotation tool and label object bounding boxes in images [Электронный ресурс]. - Режим доступа: https://github.com/tzutalin/labelImg (Дата обращения: 01.02.2018 г.).

13. The PASCAL Visual Object Classes Homepage [Электронный ресурс]. - Режим доступа: http://host.robots.ox.ac.uk/pascal/VOC/ (Дата обращения: 01.02.2018 г.).

14. OpenCV library [Электронный ресурс]. - Режим доступа: https://opencv.org (Дата обращения: 01.02.2018 г.).

15. Bradski, G. Learning OpenCV: Computer vision with the OpenCV library / G. Bradski, A. Kaehler. - O'Reilly Media, 2008. - 580 p.

16. Tkinter: Python interface to Tcl/Tk [Электронный ресурс]. - Режим доступа: https://docs.python.org/2/library/tkinter.html (Дата обращения: 01.02.2018 г.).

17. Grayson, J.E. Python and Tkinter programming / J.E. Grayson. - Greenwich: Manning, 2000. - 688 p.

18. Python [Электронный ресурс]. - Режим доступа: https://www.python.org (Дата обращения: 01.02.2018 г.).

19. Solem, J.E. Programming Computer Vision with Python: Tools and algorithms for analyzing images / J.E. Solem. - O'Reilly Media, 2012. - 264 p.

20. SaveFrom [Электронный ресурс]. - Режим доступа: https://ru.savefrom.net (Дата обращения: 01.02.2018 г.).

21. VirtualDub [Электронный ресурс]. - Режим доступа: http://www.virtualdub.org (Дата обращения: 01.02.2018 г.).

22. TensorFlow: Importing Data [Электронный ресурс]. - Режим доступа: https://www.tensorflow.org/programmers_guide/datasets (Дата обращения: 01.02.2018 г.).

23. TensorFlow MobileNet Model [Электронный ресурс]. - Режим доступа: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md (Дата обращения: 01.02.2018 г.).

24. Howard, A.G. MobileNets: Efficient convolutional neural networks for mobile vision applications / A.G. Howard, M. Zhu, B. Chen, et al. // arXiv preprint arXiv:1704.04861. - 2017.

25. Liu, W. SSD: Single Shot MultiBox Detector / W. Liu, D. Anguelov, D. Erhan, et al. // arXiv preprint arXiv:1512.02325. - 2015.

26. Protocol Buffers [Электронный ресурс]. - Режим доступа: https://developers.google.com/protocol-buffers/ (Дата обращения: 01.02.2018 г.).

27. ImageMagick [Электронный ресурс]. - Режим доступа: https://www.imagemagick.org (Дата обращения: 01.02.2018 г.).

28. Still, M. The definitive guide to ImageMagick / M. Still. - Apress, 2006. - 336 p.

29. TensorFlow Detection Models [Электронный ресурс]. - Режим доступа: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md (Дата обращения: 01.02.2018 г.).

30. TensorFlow For Poets. Google Developers Codelabs [Электронный ресурс]. - Режим доступа: https://codelabs.developers.google.com/codelabs/tensorflow-for-poets (Дата обращения: 01.04.2018).

31. A dynamic, browser based visualization library [Электронный ресурс]. - Режим доступа: http://visjs.org (Дата обращения: 01.04.2018 г.).

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.