Разработка системы распознавания изображений на основе аппарата искусственных нейронных сетей

Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.

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

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

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

Алгоритм с использованием многошкальной сверточная сеть была предложена командой, состоящей из P.Sermanet и Y. LeCun из университета Нью Йорка. Данный алгоритм был подробно описан в статье “Traffic Sign Recognition with Milti-Scale Convolutional Networks” [33]. В данном алгоритме все исходные изображения были масштабированы до размера 32*32 пикселя и преобразованы в оттенки серого, после чего к ним была применена нормализация контраста. Также размер исходного обучающего множества был увеличен в 5 раз путем применения к исходным изображениям небольших случайных трансформаций. Результирующая сеть была составлена из двух этапов (stages), как представлено на рисунке 3, при этом в итоговой классификации были использованы выходные значения не только второго этапа, но и первого. Данная сеть показала точность 98,31%.

Рисунок 3. Многошкальная нейронная сеть

Третий успешный алгоритм с применение случайного леса был разработан командой CAOR из MINES ParisTech. Подробное описание их алгоритма было опубликовано в статье “Real-time traffic sign recognition using spatially weighted HOG trees” [36]. Данный алгоритм основан на построении леса из 500 случайных деревьев решений, каждое из которых обучено на случайно выбранном подмножестве обучающего множества, при этом итоговом выходным значением классификатора является получившее наибольшее количество голосов. Данный классификатор, в отличие от предыдущих рассмотренных, использовал не исходные изображения в виде набора пикселей, а предоставленные организаторами конкурса вместе с ними HOG-представления изображений (гистограммы ориентированного градиента). Итоговый результат работы алгоритма составил 96,14 % правильно классифицированных изображений, что, показывает, что для задачи распознавания дорожных знаков могут достаточно успешно использоваться также и методы, не связанные с нейронными сетями и deep learning, хотя их результативность все же отстает от результатов сверточных сетей.

1.6 Анализ существующих библиотек

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

В ходе теоретической фазы были рассмотрены такие библиотеки, как Deeplearning4j, Theano, Pylearn2, Torch и Caffe. Рассмотрим каждую из них более подробно.

· Deeplearning4j (www. deeplearning4j.org) - библиотека с открытым исходным кодом для реализации нейронных сетей и алгоритмов глубокого обучения, написанная на языке Java. Возможно использование из языков Java, Scala и Closure, поддерживается интеграция с Hadoop, Apache Spark, Akka и AWS. Библиотека развивается и поддерживается компанией Skymind, которая также оказывается коммерческую поддержку для данной библиотеки. Внутри данной библиотеки используется библиотека для быстрой работы с n-мерными массивами ND4J разработки той же компании. Deeplearning4j поддерживает множество типов сетей, среди них многослойный персептрон, сверточные сети, Restricted Bolzmann Machines, Stacked Denoising Autoencoders, Deep Autoencoders, Recursive autoencoders, Deep-belief networks, рекуррентные сети и некоторые другие. Важной особенностью данной библиотеки является ее способность работать в кластере. Также библиотека поддерживает обучение сетей с использованием GPU.

· Theano (www.github.com/Theano/Theano) - библиотека на языке Python с открытым исходным кодом, которая позволяет эффективно создавать, вычислять и оптимизировать математические выражения с использованием многомерных массивов. Для представления многомерных массивов и действий над ними при этом используется библиотека NumPy. Данная библиотека предназначена в первую очередь для научных исследований и была создана группой ученых из университета Монреаля. Возможности Theano очень широки, и работа с нейронными сетями - только одна из небольших ее частей. При этом именно данная библиотека является наиболее популярной и чаще всего упоминается, когда речь идет о работе с deep learning [6].

· Pylearn2 (www.github.com/lisa-lab/pylearn2) - python-библиотека с открытым исходным кодом, построенная на основе Theano, но предоставляющая более удобный и простой интерфейс для исследователей, предоставляющая готовый набор алгоритмов и позволяющее простое конфигурирование сетей в формате YAML-файлов [14]. Разрабатывается группой ученых из LISA лаборатории университета Монреаля.

· Torch (www.torch.ch) - библиотека для вычислений и реализации алгоритмов машинного обучения, реализованная на языке C, однако позволяющая исследователям для работы с ней использовать гораздо более удобный скриптовый язык Lua. Данная библиотека предоставляет собственную эффективную реализацию операций над матрицами, многомерных массивов, поддерживает вычисления на GPU. Позволяет реализовывать полносвязные и сверточные сети. Имеет открытый исходный код.

· Caffe (www.caffe.berkeleyvision.org) - библиотека, сконцентрированная на эффективной реализации алгоритмов глубокого обучения, разрабатываемая в первую очередь Berkley Vision and Learning Center, однако, как и все предыдущие, имеет открытый исходный код. Библиотека реализована на языке C, однако предоставляет также удобный интерфейс для Python и Matlab. Поддерживает полносвязные и сверточные сети, позволяет описывать сети в формате в виде набора слоев в фомате .prototxt, поддерживает вычисления на GPU. К преимуществам библиотеки относится также наличие большого количества предобученных моделей и примеров, что в сочетании с остальными характеристиками делает библиотеку наиболее простой для старта работы среди вышеперечисленных.

По совокупности критериев для дальнейшего рассмотрения были выбраны 3 библиотеки: Deeplearning4j, Theano и Caffe. Эти 3 библиотеки были установлены и протестированы на практике.

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

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

1.7 Библиотека Caffe

Библиотека Caffe предоставляет достаточно простой и удобный для исследователя интерфейс, позволяя легко конфигурировать и обучать нейронные сети. Для работы с библиотекой требуется создать описание сети в формате prototxt (protocol buffer definition file - язык описания данных, созданный компанией Google), который несколько похож на формат JSON, хорошо структурирован и понятен для человека. Описание сети представляет собой по сути поочередное описание каждого из ее слоев. В качестве входных данных библиотека может работать с базой данных (leveldb или lmdb), in-memory данными, HDF5 файлами и изображениями. Также есть возможность использовать для целей разработки и тестирования специальный вид данных, называемый DummyData.

Библиотека поддерживает создание слоев следующих типов: InnerProduct (полносвязный слой), Splitting (преобразует данные для передачи сразу на несколько выходных слоев), Flattening (преобразует данные из многомерной матрицы в вектор), Reshape (позволяет изменить размерность данных), Concatenation (преобразует данные из нескольких входных слоев в один выходной), Slicing и еще несколько других. Для сверточных сетей поддерживаются также особые типы слоев - Convolution (слой свертки), Pooling (слой сабсэмблинга) и Local Response Normalization (слой для локальной нормализации данных). Кроме того, поддерживаются несколько видов функции потерь, применяемых при обучении сети (Softmax, Euclidean, Hinge, Sigmoid Cross-Entropy, Infogain и Accuracy) и функций активации нейронов (Rectified-Linear, Sigmoid, Hyperbolic Tangent, Absolute Value, Power и BNLL) - которые также конфигурируются в виде отдельных слоев сети.

Таким образом, сеть описывается декларативно в достаточной простой форме. Примеры использованных в данном исследовании конфигураций сетей можно увидеть в приложении 1. Также для работы библиотеки с использованием стандартных скриптов требуется создать файл solver.prototxt, в котором описывается конфигурация обучения сети - количество итераций для обучения, learning rate, платформа для вычислений - cpu или gpu и т.д.

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

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

2. Разработка прототипа системы распознавания изображений

2.1 Алгоритм классификации изображений

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

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

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

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

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

На основе всех вышеперечисленных идей была сформирована следующая концепция классификатора изображений. Классификатор представляет собой ансамбль из 6 нейронных сетей, функционирующих независимо: 2 многослойных персептрона и 4 сверточных сети. При этом сети одного типа отличаются между собой типом преобразования, примененным к входным данным. Данные на входе подвергаются масштабированию таким образом, чтобы на входе каждой сети всегда оказывались данные одного размера, при этом данные размеры могут различаться для разных сетей. Для агрегации результатов всех сетей используется дополнительный классический классификатор, в качестве которого было использовано 2 варианта: алгоритм J48, основанный на дереве решений, и алгоритм kStar, представляющий собой “ленивый” классификатор. Преобразования, которые используются в классификаторе:

· Бинаризация - изображение заменяется новым, состоящим из пикселей только черного и белого цветов. Для выполнения бинаризации используется метод адаптивного порогового значения (adaptive thresholding). Суть метода заключается в том, что для каждого пикселя изображения вычисляется среднее значение некоторой его окрестности пикселей (предполагается, что изображение содержит только оттенки серого, для этого исходные изображения были предварительно преобразованы соответствующим образом), и затем на основе вычисленного среднего значения определяется, должен пиксель считаться черным или белым.

· Выравнивание гистограммы (histogram equalization) - суть метода заключается в применении к гистограмме изображения некоторой функции, такой, чтобы значения на результирующе диаграмме были распределены максимально равномерно. При этом целевая функция вычисляется на основе функции распределения интенсивности цветов в исходном изображении. Пример применения подобной функции к гистограмме изображения представлен на рисунке 4. Данный метод может применяться как для черно-белых, так и для цветных изображений - отдельно для каждой компонент цвета. В данном исследовании были использованы оба варианта.

Рисунок 4, результаты применения выравнивания диаграммы к изображению

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

Схематично общая схема полученного классификатора представлена на рисунке 5:

Рисунок 5, итоговая схема классификатора

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

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

· Входной слой

· Слой 1, 1500 нейронов

· Слой 2, 500 нейронов

· Слой 3, 300 нейронов

· Слой 4, 150 нейронов

· Выходной слой

Пример файла конфигурации Caffe, описывающий данную сеть, можно увидеть в приложении 1. Что касается сверточных сетей, то за основу их архитектуры была взята известная сеть LeNet, разработанная для классификации изображений из датасета ImageNet. Однако для соответствия рассматриваемым изображениям, которые имеют существенно меньший размер, сеть была модифицирована. Краткое ее описание выглядит так:

· 3 слоя свертки с размерами ядра 9, 3 и 3 соответственно

· 3 слоя сабсемплинга

· 3 полносвязанных слоя размерами 100, 100 и 43 нейрона

Схема данной сети представлена на рисунке 6.

Рисунок 6, схема сверточной сети

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

2.2 Архитектура системы

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

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

Рисунок 7, схема работы системы классификации

Цифрами на схеме указана последовательность действий при работе пользователя с системой. Пользователь загружает изображение. Запрос пользователя, обрабатывается web-сервером и загруженное изображение передается в модуль нейронных сетей, где над изображением выполняются все необходимые преобразования (масштабирование, изменение цветовой схемы и т.д.), после чего каждая из нейронных сетей формирует свое предсказание. Затем управляющая логика данного модуля выбирает для каждой сети два наиболее вероятных предсказания и возвращает эти данные web-серверу. Web-сервер передает полученные данные о предсказаниях сети в модуль классификации, где они обрабатываются и формируется окончательный ответ о прогнозируемом классе изображения, который возвращается web-серверу и оттуда - пользователю. При этом взаимодействие между пользователем и web-сервером и web-сервером и модулями нейронных сетей и классификации осуществляется посредством REST-запросов с помощью протокола HTTP. Изображение передается в формате multipart form data, а данные о результатах работы классификаторов - в формате JSON. Данная логика работы делает отдельные модули достаточно изолированным друг от друга, что позволяет разрабатывать их независимо, в том числе с использованием различных языков программирования, а также в случае необходимости легко изменять логику работы каждого модуля в отдельности, не затрагивая логику работы других.

Для реализации пользовательского интерфейса в данной системе были использованы языки HTML и Java Script, для реализации web-сервера и модуля классификации - язык Java, а для реализации модуля нейронных сетей - язык Python. Внешний вид пользовательского интерфейса системы представлен на рисунке 8.

Рисунок 8. Пользовательский интерфейс системы

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

В целом, разработанное приложение успешно выполняет все поставленные перед ним задачи, в том числе позволяет пользователю удобным образом получить предсказание класса для выбранного им изображения. Поэтому открытым остается только вопрос с практическими результатами работы классификатора, используемого в данном алгоритме, он и будет рассмотрен в главе 3.

3. Результаты экспериментальных исследований

3.1 Исходные данные

В качестве входных данных в данном исследовании был использован уже упомянутый ранее датасет GTSRB (German Traffic Signs Recognition Benchmark). Данный датасет состоит из 51840 изображений, принадлежащих 43 классам. При этом количество изображений, принадлежащих разным классам, различно. Распределение количества изображений по классам представлено на рисунке 9.

Рисунок 9.Распределение количества изображений по классам

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

Рисунок 10. Распределение размеров изображений

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

3.2 Предварительная обработка данных

Перед началом работы исходные данные были соответствующим образом подготовлены - преобразованы из форма PPM в формат JPEG, с которым умеет работать библиотека Caffe, случайным образом разбиты на обучающее и тестовое множество в соотношении 80:20%, а также масштабированы. В алгоритме классификации используются изображения двух размеров - 45*45 (для обучения многослойного перспетрона на бинаризированных данных) и 60*60 (для обучения остальных сетей), поэтому для каждого изображения обучающего и тестового множества были созданы экземпляры этих двух размеров. Также к каждому из изображений были применены указанные ранее преобразования (бинаризация, нормализация гистограммы, повышение контрастности), и уже полученные изображения были сохранены в базе данных LMDB (Lightning Memory-Mapped Database), которая представляет собой быстрое и эффективное хранилище типа «ключ-значение». Такой способ хранения данных обеспечивает наиболее быструю и удобную работу библиотеки Caffe. Для преобразования изображений применялись библиотеки Python Imaging Library (PIL) и scikit-image. Примеры полученных после проведения каждого из преобразований изображений представлены на рисунке 11. Сохраненные в базе данных изображения использовались в дальнейшем уже для непосредственного обучения нейронных сетей.

Рисунок 11. Результаты применения преобразований к изображению

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

3.3 Результаты отдельных моделей

К реализованным в ходе данного исследования моделям относятся:

· Нейронная сеть с одним скрытым слоем

· Многослойная нейронная сеть, построенная на основе исходных данных

· Многослойная нейронная сеть, построенная на основе бинаризированных данных

· Сверточная сеть, построенная на основе исходных данных

· Сверточная сеть, построенная на основе RGB - данных после выравнивания диаграммы

· Сверточная сеть, построенная на основе greyscale - данных после выравнивания диаграммы

· Сверточная сеть, построенная на основе greyscale - данных после усиления контраста

· Комбинированная модель, состоящая из комбинации двух многослойных нейронных сетей и 4 сверточных.

Рассмотрим каждую из них более подробно.

Нейронная есть с одним скрытым слоем, хотя не относится к моделям deep learning, тем не менее оказывается очень полезна для реализации во первых, в качестве обучающего материала для работы с библиотекой, и во вторых - в качестве некоторого базового алгоритма для сравнения с работой остальных моделей. К числу несомненных преимуществ данной модели относится легкость ее построения и высокая скорость обучения.

Данная модель была построена для исходных цветных изображений размера 45*45 пикселей, при этом скрытый слой содержал 500 нейронов. Обучение сети заняло около 30 минут, и результирующая точность предсказания оказалась равна 59,7%.

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

· Входной слой

· Слой 1, 1500 нейронов

· Слой 2, 500 нейронов

· Слой 3, 300 нейронов

· Слой 4, 150 нейронов

· Выходной слой

Схематично модель данной сети изображена на рисунке 12.

Рисунок 12. Схема многослойного персептрона

Итоговая точность полученной модели равна 66,1% для бинаризированных изображений и 81,5% для цветных. Однако - что оправдывает построение модели для бинаризированных изображений, несмотря на ее меньшую точность - нашелся ряд изображений, для которых именно бинаризированная модель смогла определить правильный класс. Кроме того, модель на основе цветных изображений потребовала существенно большего времени на обучение - около 5 часов по сравнению с 1,5 часа для бинаризированной версии.

Остальные построенные модели так или иначе базируются на сверточных сетях, так как именно такие сети показали наибольшую эффективность в задачах вида распознавания изображений. За основу архитектуры нейронной сети была взята известная сеть LeNet, разработанная для классификации изображений из датасета ImageNet. Однако для соответствия рассматриваемым изображениям, которые имеют существенно меньший размер, сеть была модифицирована. Краткое описание архитектуры сети:

· 3 слоя свертки с размерами ядра 9, 3 и 3 соответственно

· 3 слоя сабсемплинга

· 3 полносвязанных слоя размерами 100, 100 и 43 нейрона

Данная сеть была отдельно обучена на исходных изображениях большего размера, изображениях после выравнивания гистограммы (цвет сохранен), изображениях после выравнивания гистограммы приведенных к черно-белому виду и, наконец, черно-белых изображениях с усиленным контрастом. Результаты обучения представлены в таблице 1:

Таблица 1. Результаты обучения сверточной сети

Исходные изображения

Выравнивание гистограммы (цветные)

Вырав. гистограммы (черно-белые)

Усиление контраста (черно-белые)

Точность

87,7%

86,7%

89,1%

82%

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

После построения вышеописанных моделей был построен и обучен классификатор, комбинирующий результаты всех 6 моделей. В качестве алгоритма для итогового классификатора было рассмотрено 2 алгоритма: J48 и kStar. Общая схема обучения итогового алгоритма в результате выглядела так:

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

2. Для каждого экземпляра обучающего множества получить по два наиболее вероятных класса в порядке убывания вероятности от каждой сети, сохранить полученный набор (всего 12 значений) и действительную метку класса

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

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

По результатам выполнения шагов из данной схемы была вычислена итоговая точность комбинированного алгоритма: 93% при использовании алгоритма J48 и 94.8% - при использовании KStar. При этом алгоритм, основанный на дереве решений, показывает чуть худшие результаты, однако обладает двумя важными преимуществами: во-первых, полученное в результате работы алгоритма дерево наглядно демонстрирует логику классификации и позволяет лучше понять реальную структуру данных (например, какая из сетей дает самые точные предсказания для определенного типа знаков и поэтому ее предсказание однозначно определяет результат), во-вторых - после построения модели данный алгоритм позволяет осуществлять классификацию новых сущностей очень быстро, так как для классификации требуется всего лишь один проход по дереве сверху вниз. Что касается алгоритма KStar, то в ходе его работы построения модели фактически не происходит, а классификация основана на поиске наиболее похожих экземпляров среди обучающей выборки. Поэтому данный алгоритм, хотя и классифицирует сущности, но не предоставляет при этом никакой дополнительной информации для них, а главное - классификация каждого экземпляра может требовать значительного количества времени, что может быть неприемлемо для задач, где требуется очень быстро получить результат, например, при распознавании дорожных знаков при автоматическом управлении автомобилем.

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

Таблица 2. Сравнение результатов работы алгоритмов

На рисунке 13 представлен график обучения сети на примере сверточной сеть для greyscale-данных с выравнивание гистограммы (по оси х количество итераций, по оси у - точность).

Рисунок 13. График обучения сверточной сети

Для подведения итогов исследования полезно также изучить результаты классификации и выявить, какие знаки оказались наиболее просты для классификации, а какие, наоборот, распознаются с трудом. Рассмотрим для этого выходные значения алгоритма J48 и полученную таблицу сопряженности (см. приложение 3). Можно видеть, что для части знаков точность классификации равна 100% или очень близка к ним - например, это знаки “Stop” (класс 14) , “Уступи дорогу” (класс 13), “Главная дорога” (класс 12), “Конец всех ограничений” (класс 32), “Сквозной проезд запрощен” (класс 15) (рисунок 12). Большая часть этих знаков имеет характерную форму (“Главная дорога”) или особые графические элементы, не имеющие аналогов на других знаках (“Конец всех ограничений”).

Рисунок 12. Примеры легко распознаваемых дорожных знаков

Другие же знаки часто смешиваются между собой, например, такие, как объезд слева и объезд справа или различные знаки ограничений скорости (рисунок 13).

Рисунок 13. Примеры часто смешиваемых знаков

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

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

Заключение

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

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

2. Была разработан алгоритм для распознавания изображений на примере задачи распознавания дорожных знаков, использующий ансамбль нейронных сетей, состоящий из двух многослойных персептронов и 4 глубоких сверточных сетей, и с применением двух типов дополнительного классификатора - J48 и KStar - для комбинации результатов отдельных сетей и формирования итогового предсказания

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

4. Разработанный в п.3 алгоритм был обучен с использованием датасета GTSRB, при этом были оценены отдельно результаты каждой из входящих в него сетей и итоговая точность алгоритма для двух типов дополнительного классификатора. По результатам экспериментов, наибольшая точность распознавания, равная 94.8%, достигается при использовании ансамбля нейронных сетей и классификатора KStar, а среди отдельных сетей наилучшие результаты - точность 89.1% - показала сверточная сеть, использующая предварительное преобразование изображения в оттенки серого и выполняющая выравнивание гистограммы изображения.

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

Список использованной литературы

1. Al-Azawi M. A. N. Neural Network Based Automatic Traffic Signs Recognition //International Journal of Digital Information and Wireless Communications (IJDIWC). - 2011. - Т. 1. - №. 4. - С. 753-766.

2. Baldi P. Autoencoders, Unsupervised Learning, and Deep Architectures //ICML Unsupervised and Transfer Learning. - 2012. - Т. 27. - С. 37-50.

3. Bahlmann C. et al. A system for traffic sign detection, tracking, and recognition using color, shape, and motion information //Intelligent Vehicles Symposium, 2005. Proceedings. IEEE. - IEEE, 2005. - С. 255-260.

4. Bastien F. et al. Theano: new features and speed improvements //arXiv preprint arXiv:1211.5590. - 2012.

5. Bengio Y., Goodfellow I., Courville A . Deep Learning. - MIT Press, book in preparation

6. Bergstra J. et al. Theano: A CPU and GPU math compiler in Python //Proc. 9th Python in Science Conf. - 2010. - С. 1-7.

7. Broggi A. et al. Real time road signs recognition //Intelligent Vehicles Symposium, 2007 IEEE. - IEEE, 2007. - С. 981-986.

8. Canny J. A computational approach to edge detection //Pattern Analysis and Machine Intelligence, IEEE Transactions on. - 1986. - №. 6. - С. 679-698.

9. Ciresan D., Meier U., Schmidhuber J. Multi-column deep neural networks for image classification //Computer Vision and Pattern Recognition (CVPR), 2012 IEEE Conference on. - IEEE, 2012. - С. 3642-3649.

10. Ciresan D. et al. A committee of neural networks for traffic sign classification //Neural Networks (IJCNN), The 2011 International Joint Conference on. - IEEE, 2011. - С. 1918-1921.

11. Cireєan D. C. et al. Deep big multilayer perceptrons for digit recognition //Neural Networks: Tricks of the Trade. - Springer Berlin Heidelberg, 2012. - С. 581-598.

12. Daugman J. G. Complete discrete 2-D Gabor transforms by neural networks for image analysis and compression //Acoustics, Speech and Signal Processing, IEEE Transactions on. - 1988. - Т. 36. - №. 7. - С. 1169-1179.

13. Gao X. W. et al. Recognition of traffic signs based on their colour and shape features extracted using human vision models //Journal of Visual Communication and Image Representation. - 2006. - Т. 17. - №. 4. - С. 675-685.

14. Goodfellow I. J. et al. Pylearn2: a machine learning research library //arXiv preprint arXiv:1308.4214. - 2013.

15. Han J., Kamber M., Pei J. Data mining: Concepts and techniques. - Morgan kaufmann, 2006.

16. Harris C., Stephens M. A combined corner and edge detector //Alvey vision conference. - 1988. - Т. 15. - С. 50.

17. Houben S. et al. Detection of traffic signs in real-world images: The German Traffic Sign Detection Benchmark //Neural Networks (IJCNN), The 2013 International Joint Conference on. - IEEE, 2013. - С. 1-8.

18. Huang F. J., LeCun Y. Large-scale learning with svm and convolutional netw for generic object recognition //2006 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. - 2006.

19. Huttenlocher D. P., Ullman S. Object recognition using alignment //Proc. ICCV. - 1987. - Т. 87. - С. 102-111.

20. Jia, Yangqing. "Caffe: An open source convolutional architecture for fast feature embedding." h ttp://caffe. berkeleyvision. org (2013).

21. Krizhevsky A., Sutskever I., Hinton G. E. Imagenet classification with deep convolutional neural networks //Advances in neural information processing systems. - 2012. - С. 1097-1105.

22. Lafuente-Arroyo S. et al. Traffic sign classification invariant to rotations using support vector machines //Proceedings of Advabced Concepts for Intelligent Vision Systems, Brussels, Belgium. - 2004.

23. LeCun Y., Bengio Y. Convolutional networks for images, speech, and time series //The handbook of brain theory and neural networks. - 1995. - Т. 3361. - С. 310.

24. LeCun Y. et al. Learning algorithms for classification: A comparison on handwritten digit recognition //Neural networks: the statistical mechanics perspective. - 1995. - Т. 261. - С. 276.

25. Masci J. et al. Stacked convolutional auto-encoders for hierarchical feature extraction //Artificial Neural Networks and Machine Learning-ICANN 2011. - Springer Berlin Heidelberg, 2011. - С. 52-59.

26. Matan O. et al. Handwritten character recognition using neural network architectures //Proceedings of the 4th USPS Advanced technology Conference. - 1990. - С. 1003-1011.

27. McCulloch W. S., Pitts W. A logical calculus of the ideas immanent in nervous activity //The bulletin of mathematical biophysics. - 1943. - Т. 5. - №. 4. - С. 115-133.

28. Minsky M., Seymour P. Perceptrons. - 1969.

29. Mitchell T. Generative and discriminative classifiers: naive Bayes and logistic regression, 2005 //Manuscript available at http://www. cs. cm. edu/~ tom/NewChapters. html.

30. Moutarde F. et al. Robust on-vehicle real-time visual detection of American and European speed limit signs, with a modular Traffic Signs Recognition system //Intelligent Vehicles Symposium, 2007 IEEE. - IEEE, 2007. - С. 1122-1126.

31. Rosenblatt F. The perceptron: a probabilistic model for information storage and organization in the brain //Psychological review. - 1958. - Т. 65. - №. 6. - С. 386.

32. Ruta A., Li Y., Liu X. Real-time traffic sign recognition from video by class-specific discriminative features //Pattern Recognition. - 2010. - Т. 43. - №. 1. - С. 416-430.

33. Sermanet P., LeCun Y. Traffic sign recognition with multi-scale convolutional networks //Neural Networks (IJCNN), The 2011 International Joint Conference on. - IEEE, 2011. - С. 2809-2813.

34. Serra J. Introduction to mathematical morphology //Computer vision, graphics, and image processing. - 1986. - Т. 35. - №. 3. - С. 283-305.

35. Stallkamp J. et al. Man vs. computer: Benchmarking machine learning algorithms for traffic sign recognition //Neural networks. - 2012. - Т. 32. - С. 323-332.

36. Zaklouta F., Stanciulescu B. Real-time traffic sign recognition using spatially weighted HOG trees //Advanced Robotics (ICAR), 2011 15th International Conference on. - IEEE, 2011. - С. 61-66.

Приложение 1

Пример описания конфигурации нейронной сети

нейронный сеть машинный обучение

Многослойная есть с одним скрытым слоем:

name: "CaffeNet"

layer {

name: "data"

type: "Data"

top: "data"

top: "label"

include {

phase: TRAIN

}

transform_param {

mirror: true

crop_size: 30

mean_file: "/home/anna/nn/traffic_signs/imagenet_mean_train_complete.binaryproto"

}

data_param {

source: "/home/anna/nn/traffic_signs/data_complete/ilsvrc12_train_lmdb"

batch_size: 10

backend: LMDB

}

}

layer {

name: "data"

type: "Data"

top: "data"

top: "label"

include {

phase: TEST

}

transform_param {

mirror: false

crop_size: 30

mean_file: "/home/anna/nn/traffic_signs/imagenet_mean_val_complete.binaryproto"

}

data_param {

source: "/home/anna/nn/traffic_signs/data_complete/ilsvrc12_val_lmdb"

batch_size: 1

backend: LMDB

}

}

layer {

name: "fc1"

type: "InnerProduct"

bottom: "data"

top: "fc1"

param {

lr_mult: 1

decay_mult: 1

}

param {

lr_mult: 2

decay_mult: 0

}

inner_product_param {

num_output: 500

weight_filler {

type: "gaussian"

std: 0.005

}

bias_filler {

type: "constant"

value: 0

}

}

}

layer {

name: "fc2"

type: "InnerProduct"

bottom: "fc1"

top: "fc2"

param {

lr_mult: 1

decay_mult: 1

}

param {

lr_mult: 2

decay_mult: 0

}

inner_product_param {

num_output: 43

weight_filler {

type: "gaussian"

std: 0.005

}

bias_filler {

type: "constant"

value: 1

}

}

}

layer {

name: "accuracy"

type: "Accuracy"

bottom: "fc2"

bottom: "label"

top: "accuracy"

include {

phase: TEST

}

}

layer {

name: "loss"

type: "SoftmaxWithLoss"

bottom: "fc2"

bottom: "label"

top: "loss"

}

Приложение 2

Пример исходного кода созданных Python-скриптов

inspect_net.py (демонстрация параметров обученной сети)

import numpy as np

import Image

import caffe

caffe.set_mode_cpu()

net = caffe.Net('/home/anna/nn/traffic_signs/train_val_conv.prototxt', '/home/anna/nn/snapshots/conv/1/snapshot_iter_2000000.caffemodel', caffe.TEST)

print("blobs {}\nparams {}".format(net.blobs.keys(), net.params.keys()))

print "params['conv1']" + str(net.params['conv1'])

print "params['conv1'][0].data.shape" + str(net.params['conv1'][0].data.shape)

print "params['conv1'][1].data.shape" + str(net.params['conv1'][1].data.shape)

print "params['conv2'][0].data.shape" + str(net.params['conv2'][0].data.shape)

print "params['conv2'][1].data.shape" + str(net.params['conv2'][1].data.shape)

print "params['fc6'][0].data.shape" + str(net.params['fc6'][0].data.shape)

print "params['fc7'][0].data.shape" + str(net.params['fc7'][0].data.shape)

print "params['fc8'][0].data.shape" + str(net.params['fc8'][0].data.shape)

im = np.array(Image.open('/home/anna/nn/00035_00007_00001.JPEG'))

im_input = im[np.newaxis, np.newaxis, :, :]

net.blobs['data'].reshape(*im_input.shape)

net.blobs['data'].data[...] = im_input

net.forward()

print "blobs['data'].data.shape " + str(net.blobs['data'].data.shape)

print "blobs['label'].data.shape " + str(net.blobs['label'].data.shape)

print "blobs['conv1'].data.shape " + str(net.blobs['conv1'].data.shape)

print "blobs['pool1'].data.shape " + str(net.blobs['pool1'].data.shape)

print "blobs['norm1'].data.shape " + str(net.blobs['norm1'].data.shape)

print "blobs['conv2'].data.shape " + str(net.blobs['conv2'].data.shape)

print "blobs['pool2'].data.shape " + str(net.blobs['pool2'].data.shape)

print "blobs['norm2'].data.shape " + str(net.blobs['norm2'].data.shape)

create_npy_for_mean.py (создание файлов, используемых для нормализации изображений)

import numpy

import caffe

a=caffe.io.caffe_pb2.BlobProto()

file=open('/home/anna/nn/traffic_signs/imagenet_mean_train_new_large_gec.binaryproto','rb')

data = file.read()

a.ParseFromString(data)

means=a.data

means=numpy.asarray(means)

means_reshaped = means.reshape(3,60,60)

numpy.save('/home/anna/nn/traffic_signs/imagenet_mean_train_new_large_gec2.npy', means_reshaped)

Приложение 3

Таблица 3. Результаты классификации для алгоритма J48

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


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

  • Первое систематическое изучение искусственных нейронных сетей. Описание элементарного перцептрона. Программная реализация модели распознавания графических образов на основе перцептрона. Интерфейс программы, основные окна. Составление алгоритма приложения.

    реферат [100,5 K], добавлен 18.01.2014

  • Общие сведения о принципах построения нейронных сетей. Искусственные нейронные системы. Математическая модель нейрона. Классификация нейронных сетей. Правила обучения Хэбба, Розенблатта и Видроу-Хоффа. Алгоритм обратного распространения ошибки.

    дипломная работа [814,6 K], добавлен 29.09.2014

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

    реферат [158,2 K], добавлен 16.03.2011

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

    презентация [582,1 K], добавлен 25.06.2013

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

    реферат [347,6 K], добавлен 17.12.2011

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

    презентация [1,4 M], добавлен 14.10.2013

  • Нейронные сети как средство анализа процесса продаж мобильных телефонов. Автоматизированные решения на основе технологии нейронных сетей. Разработка программы прогнозирования оптово-розничных продаж мобильных телефонов на основе нейронных сетей.

    дипломная работа [4,6 M], добавлен 22.09.2011

  • Способы применения технологий нейронных сетей в системах обнаружения вторжений. Экспертные системы обнаружения сетевых атак. Искусственные сети, генетические алгоритмы. Преимущества и недостатки систем обнаружения вторжений на основе нейронных сетей.

    контрольная работа [135,5 K], добавлен 30.11.2015

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

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

    курсовая работа [322,5 K], добавлен 14.03.2009

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