Друзья, продолжаем рассказ о нейронных сетях, который мы начали в прошлый раз, и о том, .
Что собой представляет нейронная сеть
Нейронная сеть в простейшем случае — математическая модель, состоящая их нескольких слоёв элементов, выполняющих параллельные вычисления. Изначально такая архитектура была создана по аналогии с мельчайшими вычислительными элементами человеческого мозга — нейронами. Минимальные вычислительные элементы искусственной нейронной сети тоже называются нейронами. Нейронные сети обычно состоят из трёх или более слоёв: входного слоя, скрытого слоя (или слоёв) и выходного слоя (рис. 1), в некоторых случаях входной и выходной слои не учитываются, и тогда количество слоёв в сети считается по количеству скрытых слоёв. Такой тип нейронной сети называется перцептрон.
Рис. 1. Простейший перцептрон
Важной особенностью нейронной сети является её умение обучаться на примерах, это называется обучением с учителем. Нейронная сеть обучается на большом количестве примеров, состоящих из пар вход-выход (соответствующие друг другу вход и выход). В задачах распознавания объектов такой парой будет входное изображение и соответствующий ему лейбл — название объекта. Обучение нейронной сети — итеративный процесс, уменьшающий отклонение выхода сети от заданного «ответа учителя» — лейбла, соответствующего данному изображению (Рис. 2). Этот процесс состоит из шагов, называемых эпохами обучения (они обычно исчисляются тысячами), на каждом из которых происходит подгонка «весов» нейронной сети — параметров скрытых слоёв сети. По завершении процесса обучения качество работы нейронной сети обычно достаточно хорошее для выполнения задачи, под которую она была обучена, хотя оптимальный набор параметров, идеально распознающий все изображения, часто подобрать невозможно.
Рис. 2. Обучение нейронной сети
Что такое глубокие нейронные сети
Глубокие, или глубинные, нейронные сети — это нейронные сети, состоящие из нескольких скрытых слоёв (Рис.3). Данный рисунок представляет собой изображение глубинной нейронной сети, дающее читателю общее представление о том, как выглядит нейронная сеть. Тем не менее, реальная архитектура глубинных нейронных сетей гораздо сложнее.
Рис. 3. Нейронная сеть с множеством скрытых слоёв
Создатели свёрточных нейронных сетей, конечно, сначала вдохновились биологическими структурами зрительной системы. Первые вычислительные модели, основанные на концепции иерархической организации визуального потока примата, известны как Неокогнитрон Фукушимы (Рис.4). Современное понимание физиологии зрительной системы схоже с типом обработки информации в свёрточных сетях, по крайней мере, для быстрого распознавания объектов.
Рис. 4. Диаграмма, показывающая связи между слоями в модели Неокогнитрон .
Позже эта концепция была реализована канадским исследователем Яном ЛеКуном в его свёрточной нейронной сети, созданной им для распознавания рукописных символов . Данная нейронная сеть состояла из слоёв двух типов: свёрточных слоев и субдискретизирующих (subsampling) слоёв (или слоёв подвыборки-pooling). В ней каждый слой имеет топографическую структуру, то есть каждый нейрон связан с фиксированной точкой исходного изображения, а также с рецептивным полем (областью входного изображения, которая обрабатывается данным нейроном). В каждом месте каждого слоя существует целый ряд различных нейронов, каждый со своим набором входных весов, связанных с нейронами в прямоугольном фрагменте предыдущего слоя. Разные входные прямоугольные фрагменты с одинаковым набором весов связаны с нейронами из разных локаций.
Общая архитектура глубинной нейронной сети для распознавания образов представлена на рисунке 5. Входное изображение представлено в виде набора пикселей или небольших участков изображения (например, 5-на-5 пикселей)
Рис. 5. Диаграмма свёрточной нейронной сети
Как правило, глубинные нейронные сети изображены в упрощённом виде: как стадии обработки, которые иногда называют фильтрами. Каждая стадия отличается от другой рядом характеристик, таких как размер рецептивного поля, тип признаков, который сеть учится распознавать в данном слое, и тип вычислений, выполняемых на каждой стадии.
Сферы применения глубинных нейронных сетей, в том числе свёрточных сетей, не ограничиваются распознаванием лиц. Они широко используются для распознавания речи и аудио-сигналов, обработки показаний с разного типа сенсоров или для сегментации сложных многослойных изображений (таких как спутниковые карты ) или медицинских изображений (рентгеновские снимки, снимки фМРТ- см. ).
Нейронные сети в биометрии и распознавании лиц
Для достижения высокой точности распознавания нейронная сеть предобучается на большом массиве изображений, например, таком, как в базе данных MegaFace .Это основной метод обучения для распознавания лиц.
Рис. 6. База данных MegaFace содержит 1 млн. изображений более 690 тыс. людей
После того, как сеть обучена распознавать лица, процесс распознавания лица может быть описан следующим образом (рис.7). Сначала изображение обрабатывается с помощью детектора лица: алгоритма, который определяет прямоугольный фрагмент изображения с лицом. Этот фрагмент нормализуется для того, чтобы легче обрабатываться нейронной сетью: наилучший результат будет достигнут, если все входные изображения будут одинакового размера, цветности и т. д. Нормализованное изображение подаётся на вход нейронной сети для обработки алгоритмом. Данный алгоритм обычно является уникальной разработкой компании для повышения качества распознавания, однако существуют и «стандартные» решения для данной задачи. Нейронная сеть строит уникальный вектор признаков, который затем переносится в базу данных. Поисковая система сравнивает его со всеми векторами признаков, хранящихся в базе данных, и даёт результат поиска в виде определённого числа имён или профилей пользователей со схожими лицевыми признаками, каждому из которых присваивается определённое число. Это число представляет собой степень схожести нашего вектора признаков с найденным в базе данных.
Рис. 7. Процесс распознавания лица
Определение качества алгоритма
Точность
Когда мы выбираем, какой алгоритм применить к задаче распознавания объекта или лица, мы должны иметь средство сравнения эффективности различных алгоритмов. В этой части мы опишем инструменты, с помощью которых это делается .
Оценка качества работы системы распознавания лиц проводится с помощью набора метрик, которые соответствуют типичным сценариям использования системы для аутентификации с помощью биометрии.
Как правило, работа любой нейронной сети может быть измерена с точки зрения точности: после настройки параметров и завершения процесса обучения сеть проверяется на тестовом множестве, для которого мы имеем отклик учителя, но который отделён от обучающего набора. Как правило, этот параметр является количественной мерой: число (часто в процентах), которое показывает, насколько хорошо система способна распознавать новые объекты. Еще одна типичная мера — это ошибка (может быть выражена как в процентах, так и в числовом эквиваленте). Тем не менее, для биометрии существуют более точные меры.
В биометрии вообще и биометрии для распознавания лиц, в частности, существует два типа приложений: верификация и идентификация. Верификация представляет собой процесс подтверждения определённой личности путём сравнения изображения индивида (вектора признаков лица или другого вектора признаков, например, сетчатки или отпечатков пальцев) с одним или несколькими ранее сохранёнными шаблонами. Идентификация — это процесс определения личности индивида. Биометрические образцы собирают и сравнивают со всеми шаблонами в базе данных. Существует идентификация в замкнутом множестве признаков, если предполагается, что человек существует в базе данных. Таким образом, распознавание объединяет один или оба термина — верификацию и идентификацию.
Часто помимо непосредственно результата сравнения, требуется оценить уровень «уверенности» системы в своём решении. Такое значение называют термином «уровень сходства» (или подобия, similarity score). Больший показатель сходства указывает на то, что два сравниваемых биометрических образца более похожи.
Существует ряд методов для оценки качества работы системы (как для задачи верификации, так и идентификации). О них мы расскажем в следующий раз. А вы оставайтесь с нами и не стесняйтесь оставлять комментарии и задавать вопросы.
ПРИМЕЧАНИЯ
- Fukushima (1980) «Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position,» Biological Cybernetics.
- LeCun, B. Boser, J.S. Denker, D. Henderson, R.E. Howard, W. Hubbard and L.D. Jackel (1989) «Backpropagation Applied to Handwritten Zip Code Recognition», Neural Computation, vol. 1, pp., 541−551.
- Jiaxuan You, Xiaocheng Li, Melvin Low, David Lobell, Stefano Ermon Deep Gaussian Process for Crop Yield Prediction Based on Remote Sensing Data.
- Ian Goodfellow, Yoshua Bengio, Aaron Courville (2016) Deep Learning. MIT press.
- Poh, C-H. Chan, J. Kittler, Julian Fierrez (UAM), and Javier Galbally (UAM)(2012) Description of Metrics For the Evaluation of Biometric Performance.
Введение
Темой данного исследования является разработка системы распознавания изображений на основе аппарата искусственных нейронных сетей. Задача распознавания изображений является очень важной, так как возможность автоматического распознавания компьютером изображений приносит множество новых возможностей в развитии науки и техники, таких, как разработка систем поиска лиц и других объектов на фотографиях, контроля качества производимой продукции без участия человека, автоматического управления транспортом и множество других.
Что касается искусственных нейронных сетей, то в последние годы данный раздел машинного обучения получается все большее развитие в связи со значительным повышением вычислительных мощностей существующих компьютеров и повсеместном распространении применения графических карт для вычислений, что позволяет обучать нейронные сети гораздо большей глубины и сложной структуры чем раньше, которые, в свою очередь, показывают значительно лучшие результаты по сравнению с другими алгоритмами для многих задач, в особенности задачи распознавания изображений. Данное направление развития нейронных сетей получило название deep learning (“глубокое обучение”) и является одним из наиболее успешных и быстро развивающихся в настоящее время. Так, например, по результатам ежегодного соревнования по распознаванию изображений ImageNet-2014 подавляющее большинство успешных алгоритмов использовало глубокие сверточные сети.
Так как задача распознавания изображений является очень обширной и в большинстве случаев требует отдельного подхода для различных типов изображений, то рассмотреть задачу распознавания изображений в целом в рамках одного исследования практически невозможно, поэтому было принято решение для примера рассмотреть отдельно такую подзадачу распознавания изображений, как распознавание дорожных знаков.
Таким образом, основной целью данного исследования была разработка системы распознавания изображений на основе искусственных нейронных сетей для изображений дорожных знаков. Для достижения данной цели были сформулированы следующие задачи:
Выполнение аналитического обзора литературы по теме искусственных нейронных сетей и их применения для задачи распознавания изображений
Разработка алгоритма для распознавания дорожных знаков с применением аппарата искусственных нейронных сетей
Разработка прототипа системы распознавания изображений на основе разработанного алгоритма. Результатом выполнения данной задачи должен являться программный комплекс, позволяющий пользователю загрузить изображение и получить предсказание класса данного изображения
Проведение экспериментальных исследований. Необходимо провести исследования и оценить точность работы полученного алгоритма
В ходе проведенного исследования все поставленные задачи были выполнены. Конкретные результаты по каждой из них будут описаны в основной части работы.
1. Обзор литературы
.1 Машинное обучение
Нейронные сети, которые подробно рассматриваются в данной работе, являются одной из разновидностей алгоритмов машинного обучения, или machine learning. Машинное обучение - это один из подразделов искусственного интеллекта. Основным свойством алгоритмов machine learning является их способность обучаться в процессе работы. Например, алгоритм построения дерева решений, не имея никакой предварительной информации о том, что представляют собой данные и какие в них существуют закономерности, а только некоторый входной набор объектов и значения некоторых признаков для каждого из них вместе с меткой класса, в процессе построения дерева сам выявляет скрытые закономерности, то есть обучается, и после обучения способен предсказывать класс уже для новых объектов, которые он не видел ранее.
Выделяют два основных типа машинного обучения: обучение с учителем и обучение без учителя. Обучение с учителем предполагает, что алгоритму кроме самих исходных данных предоставляется некоторая дополнительная информация о них, которую он может в дальнейшем использовать для обучения. К числу наиболее популярных задач для обучения с учителем относятся задачи классификации и регрессии. Например, задачу классификации можно сформулировать следующим образом: имея некоторый набор объектов, каждый из которых относится к одному из нескольких классов, необходимо определить, к какому из этих классов относится новый объект. Задача распознавания дорожных знаков, которая была рассмотрена в этой работе, является типичной разновидностью задачи классификации: существует несколько видов дорожных знаков - классов, и задача алгоритма - «распознать» знак, то есть отнести его к одному из существующих классов.
Обучение без учителя отличается от обучения с учителем тем, что алгоритму не предоставляется никакой дополнительной информации кроме самого набора исходных данных. Наиболее популярным примером задачи обучения без учителя является задача кластеризация. Суть задачи кластеризации состоит в следующем: на вход алгоритму подается некоторое количество объектов, принадлежащих разным классам (но какому классу принадлежит какой объект неизвестно, может быть неизвестно также само количество классов), и цель работы алгоритма - разбить это множество объектов на подмножества «схожих» объектов, то есть принадлежащих одному классу.
Среди всех алгоритмов машинного обучения выделяют несколько основных семейств . Если речь идет о задаче классификации, к наиболее популярным таким семействам относятся, например:
· Классификаторы, основанные на правилах (Rule-based Classifiers) - основная идея таких классификаторов заключается в поиске правил отнесения объектов к тому или иному классу в форме “IF - THEN”. Для поиска таких правил обычно используются некоторые статистические метрики, также часто встречается построение правил на основе дерева решений.
· Логистическая регрессия - основная идея заключается в поиске линейной плоскости, максимально точно разделяющей пространство на два полупространства так, что объекты разных классов принадлежат разным полупространствам. При этом уравнение целевой плоскости ищется в виде линейной комбинации входных параметров. Для обучения подобного классификатора может применяться, например, метод градиентного спуска.
· Байесовский классификатор - как следует из названия, классификатор основан на теореме Байеса, которая записывается в форме
нейронный сеть машинный обучение
Идея классификатора в данном случае заключается
в том, чтобы найти класс с максимальной апостериорной вероятностью при условии,
что все параметры имеют те значения, которые они имеют для классифицируемого
экземпляра. В общем случае данная задача предполагает предварительного знания
очень большого количества условных вероятностей и, соответственно, огромного
размера обучающей выборки и высокой сложности вычислений, поэтому на практике
чаще всего применяется разновидность байесовского классификатора, называемая
Наивным Байесовским классификатором, в которой предполагается, что все
параметры независимы друг от друга, соответственно, формула принимает гораздо
более простой вид и для ее использования требуется знать лишь небольшое
количество условных вероятностей.
Хотя данное допущение обычно является далеким от реальности, наивный байесовский классификатор часто показывает неплохие результаты .
· Деревья решений - в упрощенном виде, данный алгоритм заключается в построении дерева, в котором каждый узел соответствует некоторому тесту, который выполняется над параметрами объекта, а листьями являются итоговые классы. Существует множество разновидностей деревьев решений и алгоритмов их построения. Например, один из наиболее популярных алгоритмов - C4.5.
· Нейронные сети - модель, представляемая в виде совокупностей элементов (нейронов) и связей между ними, которые в общем случае могут быть направленными или не направленными и имеют некоторые веса. В ходе работы нейронной сети на часть ее нейронов, называемых входными, поступает сигнал (входные данные), который некоторым образом распространяется и преобразуется, и на выходе сети (выходных нейронах) можно видеть результат работы сети, например, вероятности отдельных классов. Нейронные сети будут рассмотрены в данной работе более подробно в следующем разделе.
· Машины опорных векторов - концепция алгоритма заключается также, как в случае логистической регрессии, в поиске разделяющей плоскости (или нескольких плоскостей), однако способ поиска данной плоскости в этом случае отличается - ищется плоскость такая, что расстояние от нее до ближайших точек - представителей обоих классов максимально, для чего обычно используются методы квадратичной оптимизации.
· Ленивые классификаторы (Lazy learners) - особая разновидность алгоритмов классификации, которые, вместо того чтобы предварительно строить модель и в дальнейшем принимать решения об отнесении объекта к тому или иному классу на ее основе, основываются на идее, что похожие объекты чаще всего имеют один и тот же класс. Когда такой алгоритм получается на вход объект для классификации, он ищет среди просмотренных ранее объектов похожие на него и, пользуясь информацией об их классах, формирует своей предсказание относительно класса целевого объекта.
Можно видеть, что алгоритмы классификации могут
иметь самые различные идеи и в своей основе и, разумеется, для разных типов
задач показывают различную эффективность. Так, для задач с небольшим
количеством входных признаков, могут оказаться полезными системы, основанные на
правилах, если для входных объектов можно быстро и удобно вычислить некоторую
метрику похожести - ленивые классификаторы, если же речь идет про задачи с
очень большим количеством параметров, которые к тому же трудно идентифицировать
или интерпретировать, таких как распознавание изображений или речи, наиболее
подходящим методом классификации становятся нейронные сети.
1.2 Нейронные сети
Искусственные нейронные сети являются одной из широко известных и используемых моделей машинного обучения. Идея искусственных нейронных сетей базируется на имитации нервной системы животных и людей.
Упрощенная модель нервной системы животных при этом представляется в виде системы клеток, каждая из которых имеет тело и ответвления двух типов: дендриты и аксоны. В определенный момент клетка получает сигналы от других клеток через дендриты и, если эти сигналы будут достаточной силы, возбуждается и передает это возбуждение другим клеткам, с которыми она связана, через аксоны. Таким образом сигнал (возбуждение) распространяется по всей нервной системы. Модель нейронных сетей устроена аналогичным образом. Нейронная сеть состоит из нейронов и направленных связей между ними, при этом каждая связь имеет некоторый вес. При этом часть нейронов является входными - на них поступают данные из внешней среды. Затем на каждом шаге нейрон получает сигнал от всех входных нейронов, вычисляет взвешенную сумму сигналов, применяет к ней некоторую функцию и передает результат на каждый из своих выходов. Также сеть имеет некоторое количество выходных нейронов, которые формируют результат работы сети. Так, для задачи классификации выходные значения этих нейронов могут означать спрогнозированные вероятности каждого из классов для входного объекта. Соответственно, обучение нейронной сети заключается в подборе таких весов для связей между нейронами, чтобы выходные значения для всех входных данных оказывались максимально близкими к действительным.
Выделяется несколько основных типов архитектур нейронных сетей:
· Сеть прямого распространения (feed-forward network) - подразумевает, что нейроны и связи между ними образуют ациклический граф, где сигналы распространяются только в одном направлении. Именно такие сети являются наиболее популярными и широко изученными, и их обучение представляет наименьшие трудности.
· Рекуррентные нейронные сети (recurrent neural networks) - в таких сетях, в отличие от сетей прямого распространения, сигналы может передаваться в обоих направлениях, и могут поступать на один и тот же нейрон несколько раз в процессе обработки одного входного значения. Частной разновидностью рекуррентных нейронных сетей является, например, машина Больцмана. Основной трудностью в работе с такими сетями является их обучение, так как создать эффективный алгоритм для этого в общем случае является сложной задачей и до сих пор не имеет универсального решения.
· Самоорганизующиеся карты Кохонена - нейронная сеть, предназначенная в первую очередь для кластеризации и визуализации данных.
В истории развития нейронных сетей выделяют 3
основных периода подъема. Первые исследования в области искусственных нейронных
сетей относятся к 40-м годам 20 века. В 1954 году Дж. Маккалок и У. Питтс
опубликовали работу «Логическое исчисление идей, относящихся к нервной
деятельности» , в которой были изложены основные принципы построения
искусственных нейронных сетей. В 1949 году была опубликована книга Д.Хебба
«Организация поведения», где автор рассмотрел теоретические основы обучения
нейронных сетей и впервые сформулировал концепцию обучения нейронных сетей как
настройку весов между нейронами. В 1954 году В.Кларк впервые осуществил попытку
реализовать аналог сети Хебба с помощью компьютера. В 1958 году Ф. Росенблатт
предложил модель персептрона, который представлял собой по сути нейронную сеть
с одним скрытым слоем . Принципиальный вид персептрона Росенблатта
представлен на рисунке 1.
Рисунок 1. Персептрон Росенблатта
Данная модель обучалась с помощью метода коррекции ошибок, который заключался в том, что веса остаются неизменными до тех пор, пока выходное значение персептрона корректно, в случае же ошибки вес связи изменяется на 1 в сторону, обратную знаку произошедшей ошибки. Данный алгоритм, как было доказано Росенблаттом, всегда сходится. Используя такую модель, удалось создать компьютер, распознающий некоторые буквы латинского алфавита, что, несомненно, было большим успехом в то время.
Однако интерес к нейронным сетям существенно снизился после публикации М. Минским и С. Папертом книги «Персептроны» (“Perceptrons”) в 1969 году , где они описали существенные ограничения, которые имеет модель персептрона, в частности, невозможность представления функции исключающего или, а также указали на слишком высокие требования к требуемой вычислительной мощи компьютеров для обучения нейронных сетей. Так как данные ученые имели очень высокий авторитет в научном сообществе, нейронные сети были на некоторое время признаны малоперспективной технологией. Ситуация изменилась только после создания в 1974 году алгоритма обратного распространения ошибки.
Алгоритм обратного распространения ошибки (backpropagation algorithm) был предложен в 1974 году одновременно и независимо двумя учеными, П.Вербосом и А. Галушкиным. Данный алгоритм основан на методе градиентного спуска. Основная идея алгоритма заключается в распространении информации об ошибке от выходов сети к ее входам то есть в обратном направлении по отношению к стандартному походу. При этом веса связей корректируются на основе дошедшей до них информации об ошибке. Основное требование, которое накладывает данный алгоритм - то, что функция активации нейронов должна быть дифференцируема, так как метод градиентного спуска, что неудивительно, вычисляется на основе градиента.
Алгоритм обратного распространения ошибки позволяет легко обучать сеть, имеющую несколько скрытых слоев, что позволяет обойти ограничения персептрона, блокирующие развитие данной отрасли ранее. С математической точки зрения данный алгоритм сводится к последовательному перемножению матриц - что является достаточно хорошо изученной и оптимизируемой задачей. Кроме того, данный алгоритм хорошо параллелизуется, что позволяет существенно ускорить время обучения сети. Все это совместно привело к новому расцвету нейронных сетей и множеству активных исследований в данном направлении.
Алгоритм backpropagation, в то же время, имеет ряд проблем. Так, использование градиентного спуска предполагает риск схождения к локальному минимуму. Другой важной проблемой является долгое время обучения алгоритма при наличии большого количества слоев, так как ошибка в процессе обратного распространения имеет свойство все сильнее уменьшаться при приближении к началу сети, соответственно, обучение начальных слоев сети будет происходить крайне медленно. Еще одним недостатком, свойственным нейронным сетям в целом, является сложность в интерпретации результатов их работы. Обученная модель нейронной сети представляет собой некоторое подобие черного ящика, на вход которой подается объект и на выходе получается прогноз, однако определить, какие признаки входного объекта при этом учитывались и какой из нейронов за что отвечает, обычно достаточно проблематично. Это делает нейронные сети во многом менее привлекательными по сравнению, например, с деревьями решений, в которых обученная модель сама по себе представляет некоторую квинтессенцию знаний о рассматриваемой предметной области и исследователю легко понять, почему данный объект был отнесен к тому или иному классу.
Данные недостатки, в сочетании с тем, что, хотя нейронные сети и показывали неплохие результаты, эти результаты были сравнимы с результатами других классификаторов, например, набирающих популярность машин опорных векторов, при этом результаты последних были гораздо проще в интерпретации а обучение требовало меньшего времени, привело к очередному спаду развития нейронных сетей.
Этот спад завершился только в 2000-х годах 21
века, когда появилось и стало распространяться понятие deep
learning, или глубокого
обучения. Возрождению нейронных сетей способствовало появление новых
архитектур, таких, например, как сверточные сети, restricted
bolzman machines,
стэковые автоенкодеры и т.д., которые позволили добиться существенно более
высоких результатов в таких сфера машинного обучения, как распознавание
изображений и речи. Существенным фактором для их развития стало также появление
и распространение мощных видеокарт и их применение для вычислительных задач.
Видеокарты, отличаясь значительно большим количеством ядер по сравнения с
процессором, пусть и меньшей мощности каждое, идеально подходят для задач
обучения нейронных сетей. Это в сочетании с существенно возросшей в последнее
время производительностью компьютеров в целом и распространением вычислительных
кластеров позволило обучать существенно более сложные и глубокие архитектуры
нейронных сетей, чем ранее.
1.3
Deep
learning
Одной из наиболее важных проблем, с которыми приходится сталкиваться при использовании алгоритмов машинного обучения, является проблема выбора правильных признаков, на основе которых производится обучение. Особенно значимой становится данная проблема при рассмотрении таких задач, как распознавание изображений, распознавание речи, обработка естественного языка и тому подобных, то есть тех, где отсутствует очевидный набор признаков, которые могут быть использованы для обучения. Обычно выбор набора признаков для обучения осуществляется самим исследователем путем некоторой аналитической работы, и именно выбранный набор признаков во многом определяет успешность работы алгоритма. Так, для задачи распознавания изображений в качестве таких признаков может служить преобладающий цвет в изображении, степень его изменения, наличие на изображении четких границ или что-то еще. Более подробно вопрос распознавания изображений и выбора правильных признаков для этого будет рассмотрен в соответствующей главе.
Однако такой подход имеет существенные недостатки. Во-первых, данный подход подразумевает существенный объем работы по выявлению признаков, причем эта работа осуществляется вручную исследователем и может требовать больших затрат времени. Во-вторых, выявление признаков, на основании которых можно получить качественный алгоритм, в данном случае становится во многом случайным, к тому же, таким образом маловероятно, что будут приняты во внимание признаки, которые могут оказывать важное влияние на внутреннюю структуру изображения, но при этом неочевидны для человека. Таким образом, особенно привлекательной выглядит идея автоматического определения признаков, которые в дальнейшем могут быть использованы для работы алгоритмов машинного обучения. И именно такую возможность предоставляет использование подхода deep learning.
С точки зрения теории машинного обучения, deep learning является подмножеством так называемого representation learning. Основная концепция representation learning - как раз таки автоматический поиск признаков, на основании которых в дальнейшем будет работать некоторый алгоритм, например, классификации.
С другой стороны, еще одна важная проблема, с которой приходится сталкиваться при использовании машинного обучения - это наличие факторов вариации, которые могут оказать существенное влияние на внешний вид исходных данных, однако при этом не имеют отношения к самой их сути, которую исследователь и пытается анализировать . Так, в задаче распознавания изображений такими факторами могут являться угол, под которым предмет на изображении повернут к наблюдателю, время суток, освещение и т.д. Так, в зависимости от точки зрения и погоды красная машина может иметь на фотографии различный оттенок и форму. Поэтому для подобных задач, например, идентификации предмета, изображенного на фотографии, выглядит разумным учитывать не конкретные низкоуровневые факты, такие как цвет определенного пикселя, а характеристики более высокого уровня абстракции, например, наличие колес. Однако очевидно, что определить на основе исходного изображения, присутствуют ли у него колеса - задача нетривиальная, и ее решение напрямую может быть весьма сложным. Кроме того, наличие колес - только одно из огромного множества возможных признаков, и определение их всех и составление алгоритмов для проверки изображения на наличие их выглядит не очень реалистичным. Именно здесь исследователи могут использовать все преимущества подхода deep learning. Deep learning основан на предоставлении исходного объекта в виде иерархической структуры признаков, таким образом, что каждый следующий уровень признаков строится на основе элементов предыдущего уровня. Так, если речь идет об изображениях, в качестве самого низшего уровня будут выступать исходные пиксели изображения, следующим уровнем будут отрезки, которые можно выделить среди этих пикселей, затем - углы и другие геометрические фигуры, в которые складываются отрезки. На следующем уровне их фигур образуются уже узнаваемые для человека объекты, например, колеса, и наконец, последний уровень иерархии отвечает за конкретные предметы на изображении, например, автомобиль.
Для реализации подхода deep learning в современной науке используются многослойные нейронные сети различных архитектур. Нейронные сети идеально подходят для решениях задачи выявления из данных и построения иерархического множества признаков, так как, по сути, нейронная сеть представляет собой совокупность нейронов, каждый из которых активируется только если входные данные удовлетворяют определенным критериям - то есть представляет собой некоторый признак, при этому правила активации нейрона - то, что и определяет данный признак - обучаются автоматически. В то же время, нейронные сети в своем наиболее распространенном виде, сами по себе представляют иерархичную структуру, где каждый следующий слой нейронов использует в качестве своего входа выходы нейронов предыдущего слоя - или, другими словами, признаки более высокого уровня формируются на основе признаков более низкого уровня.
Распространению данного подхода и, в связи с этим, очередному расцвету нейронных сетей, послужило три взаимосвязанных причины:
· Появление новых архитектур нейронных сетей, заточенных для решения определенных задач (сверточные сети, машины Больцмана и т.д.)
· Развитие и доступность вычислений с использованием gpu и параллельных вычислений в целом
· Появление и распространение подхода послойного обучения нейронных сетей, при котором каждый слой обучается отдельно с помощью стандартного алгоритма backpropagation (обычно на неразмеченных данных, то есть по сути происходит обучение автоенкодера), что позволяет выявить существенные признаки на данном уровне, а затем все слои объединяются в единую сеть и происходит дообучение сети уже с применением размеченных данных для решения конкретной задачи (fine-tuning). Данный подход имеет два существенных преимущества. Во-первых, таким образом существенно повышается эффективность обучения сети, так как в каждый момент времени обучается не глубокая структура, а сеть с одним скрытым слоем - в результате исчезают проблемы с уменьшением значений ошибки по мере повышения глубины сети и соответствующим снижением скорости обучения. И во-вторых, данный подход к обучению сети позволяет использовать при обучении неразмеченные данные, которых обычно гораздо больше чем размеченных - что делает обучение сети более простым и доступным для исследователей. Размеченные данные в таком подходе требуются только в самом конце для донастройки сети на решение определенной задачи классификации, и при этом, поскольку общая структура признаков, описывающих данные, уже создана в процессе предыдущего обучения, для донастройки сети требуется значительно меньше данных, чем для первоначального обучения с целью выявления признаков. Кроме сокращения требуемого количества размеченных данных, использование подобного подхода позволяет обучить один раз сеть с использованием большого количества неразмеченных данных и затем использовать полученную структуру признаков для решения различных задач классификации, донастраивая сеть с помощью различных наборов данных - за гораздо меньшее время, чем потребовалось бы в случае полного обучения сети каждый раз.
Рассмотрим чуть более подробно основные архитектуры нейронных сетей, обычно используемые в контексте глубокого обучения.
· Многослойный персептрон - представляет собой обычную полносвязную нейронную сеть с большим количество слоев. Вопрос о том, какое количество слоев считается достаточно большим, не имеет однозначного ответа, но обычно сети, имеющие 5-7 слоев, уже считаются «глубокими». Данная архитектура нейронных сетей, хотя и не имеет принципиальных отличий от сетей, которые использовать ранее до распространения понятия глубокого обучения, может оказаться весьма эффективной в случае успешного решения задачи ее обучения, что являлось главной проблемой работы с такими сетями ранее. В настоящее время данная проблема решается путем использования для обучения сети графических карт, что позволяет ускорить обучение и, соответственно, провести большее количество итераций обучения, или послойного обучения сети, упомянутого ранее. Так, в 2012 году Ciresan с коллегами опубликовали статью «Deep big multilayer perceptrons for digit recognition» , в которой сделали предположение, что многослойный персептрон с большим количеством слоев, в случае достаточной продолжительности обучения (которая достигается за разумное время с использованием параллельных вычислений на gpu) и достаточном количестве данных для обучения (которое достигается путем применения различных случайных трансформаций к исходному множеству данных) может показать результативность не худшую чем другие, более сложные модели. Их модель, представляющая собой нейронную сеть с 5 скрытыми слоями, при классификации цифр из датасета MNIST, показала процент ошибки 0.35, что лучше, чем опубликованные ранее результаты более сложных моделей. Также, путем объединения нескольких обученных таким образом сетей в единую модель, им удалось снизить показатель ошибки до 0.31%. Таким образом, несмотря на кажущуюся простоту, многослойный персептрон является вполне успешным представителем алгоритмов глубокого обучения.
· Stacked
autoencoder (стэковый
автоенкодер) - данная модель тесно связана с многослойным персептроном и в
целом с задачей обучения глубоких нейронных сетей. Именно с использованием
стэкового автоенкодера реализуется послойное обучение глубоких сетей. Однако
данная модель используется не только для целей обучения других моделей, а часто
имеет большое практическое значение сама по себе. Чтобы описать суть стэкового
автоенкодера, рассмотрим сначала понятие обычного автоенкодера. Автоенкодер
представляет собой алгоритм обучения без учителя, в котором в качестве
ожидаемых выходных значений нейронной сети выступают ее же входные значения.
Схематически модель автоенкодера представлена на рисунке 2:
Рисунок 2. Классический автоенкодер
Очевидно, что задача обучения подобной модели имеет тривиальное решение, если количество нейронов в скрытом слое равно количеству входных нейронов - тогда скрытому слоя достаточно просто транслировать свои входные значения на выход. Поэтому при обучении автоенкодеров вводятся дополнительные ограничения, например, количество нейронов в скрытом слое устанавливается значительном меньшим чем во входном слое, либо применяются особые методики регуляризации, направленные на то, чтобы обеспечить высокую степень разреженности нейронов скрытого слоя . Одно из наиболее распространенных применений автоенкодеров в чистом виде - это задача получения сжатого представления исходных данных. Так, например, автоенкодер с 30 нейронами в скрытом слое, обученный на датасете MNIST, позволяет восстановить на выходном слое исходные изображения цифр практически без изменений, что означает, что на самом деле каждое из исходных изображений можно достаточно точно описать только 30 числами. В данном своем применении автоенкодеры часто рассматриваются в качестве альтернативы методу главных компонент. Стэковый же автоенодер представляет собой по сути комбинацию нескольких обычных автоенкодеров, обучаемых слой за слоем. При этом выходные значения обученных нейронов скрытого слоя первого из автоэнкодеров выступают в качестве входных значений для второго из них и т.д.
· Сверточные сети - одна из наиболее популярных в последнее время моделей глубокого обучения, применяющаяся в первую очередь для распознавания изображений . Концепция сверточных сетей построена на трех основных идеях:
o Локальная чувствительность (local receptive fields) - если говорить о задаче распознавания изображений, это означает, что на распознавание того или иного элемента на изображении должно в первую очередь оказывать влияние его непосредственное окружение, в то время как пиксели, находящиеся в другой части изображения, скорее всего с данным элементом никак не связаны и не содержат информации, которая помогла бы правильно его идентифицировать
o Разделенные веса (shared weights) - наличие в модели разделенных весов фактически олицетворяет предположение, что один и тот же объект может быть найден в любой части изображения, при этом для его поиска во всех частях изображения применяется один и тот же паттерн (набор весов)
o Сабсемплинг (subsampling) - концепция, позволяющая сделать модель более устойчивой к незначительным отклонениям от искомого паттерна - в том числе, связанным с мелкими деформациями, изменением освещения и т.д. Идея сабсемплинга заключается в том, что при сопоставлении с паттерном учитывается не точное значение для данного пикселя или области пикселей, а его агрегация в некоторой окрестности, например, среднее или максимальное значение.
С математической точки зрения, основой сверточных нейронных сетей является операция матричной свертки, которая заключается в поэлементном перемножении матрицы, представляющей собой небольшой участок исходного изображения (например, 7*7 пикселей) с матрицей того же размера, называемой ядром свертки, и последующее суммирование полученных значений. При этом ядро сверки представляет собой по сути некоторый шаблон, а полученное в результате суммирования число характеризует степень похожести данной области изображения на этот шаблон. Соответственно, каждый слой сверточной сети состоит из некоторого количества шаблонов, и задача обучения сети заключается в подборе правильных значений в этих шаблонах - так, чтобы они отражали наиболее значимые характеристики исходных изображений. При этом каждый шаблон сопоставляется последовательно со всеми частями изображения - именно в этом находит выражение идея разделения весов. Слои такого типа в сверточной сети называются слоями свертки. Кроме слоев свертки, в сверточных сетях присутствуют слои сабсемплинга, которые заменяют небольшие области изображения одним числом, тем самым одновременно уменьшая размер образца для работы следующего слоя и делая сеть более устойчивой к небольшим изменениям в данных. В последних же слоях сверточной сети обычно используется один или несколько полносвязанных слоев, обучаемых для выполнения непосредственно классификации объектов. В последние годы использование сверточных сетей стало фактически стандартом при классификации изображений и позволяет добить наилучших результатов в этой области.
· Ограниченные машины Больцмана (Restricted Boltzmann Machines) - еще одна разновидность моделей глубокого обучения, в отличие от сверточных сетей, применяемая в первую очередь для задачи распознавания речи. Машина Больцмана в своем классическом понимании представляет собой неориентированный граф, ребра в котором отражают зависимости между узлами (нейронами). При этом часть нейронов является видимыми, а часть скрытыми. С точки зрения нейронных сетей машина Больцмана представляет собой по сути рекуррентную нейронную сеть, с точки зрения статистики - случайное марковское поле. Важными понятиями для машин Больцмана являются понятия энергии сети и состояния равновесия. Энергия сети зависит от того, какое количество сильно связанных между собой нейронов одновременно находятся в активированном состоянии, задача же обучения такой сети состоит в ее схождении к состоянию равновесия, при котором ее энергия минимальна. Основным недостатком подобных сетей являются большие проблемы с обучением их в общем виде. Для решения данной проблемы Дж. Хинтоном с коллегами была предложена модель ограниченно машины Больцмана (Restricted Boltzmann Machines), которая накладывает ограничение на структуру сети, представляя ее в виде двудольного графа, в одной части которого находятся только видимые нейроны, а в другой - только скрытые, соответственно, связи присутствуют только между видимыми и скрытыми нейронами. Данное ограничение позволило разработать эффективные алгоритмы для обучения сетей такого вида, благодаря чему был осуществлен существенный прогресс в решении задач распознавания речи, где данная модель практически вытеснила популярную ранее модель скрытых сетей Маркова.
Теперь, рассмотрев основные понятия и принципы
глубокого обучения, кратко рассмотрим основные принципы и эволюцию развития
распознавания изображений и то, какое место в нем занимает deep
learning.
1.4 Распознавание изображений
Существует множество формулировок для задачи распознавания изображений, и определить ее однозначно достаточно сложно. Например, можно рассматривать распознавание изображений как задачу поиска и идентификации на исходном изображении некоторых логических объектов.
Распознавание изображений обычно является сложной задачей для компьютерного алгоритма. Это связано, в первую очередь, с высокой вариативностью изображений отдельных объектов. Так, задача поиска автомобиля на изображении является простой для человеческого мозга, который способен автоматически идентифицировать у объекта наличие важных для автомобиля признаков (колеса, специфическая форма) и при необходимости «достаивать» картинку в воображении, представляя недостающие детали, и крайне сложной для компьютера, так как существует огромное количество разновидностей автомобилей разных марок и моделей, имеющих во многом разную форму, кроме того, итоговая форма объекта на изображении сильно зависит от точки съемки, угла, под которым он снимается и других параметров. Также немаловажную роль играет освещение, которое оказывает влияние на цвет полученного изображения, а также может делать незаметными или искажать отдельные детали.
Таким образом, основные трудности при распознавании изображений вызывают:
· Вариативность предметов внутри класса
· Вариативность формы, размера, ориентации, положения на изображении
· Вариативность освещения
Для борьбы с этими трудностями на протяжении истории развития распознавания изображений были предложены самые различные методы, и в настоящее время в этой сфере уже удалось добиться существенного прогресса.
Первые исследования в области распознавания изображений были опубликованы в 1963 году Л.Робертсом в статье «Machine Perception Of Three-Dimensional Solids», где автор сделал попытку абстрагироваться от возможных изменений в форме предмета и сконцентрировался на распознавании изображений простых геометрических форм в условиях различного освещения и при наличии поворотов. Разработанная им компьютерная программа была способна идентифицировать на изображении геометрические объекты некоторых простых форм и формировать их трехмерную модель на компьютере.
В 1987 году Ш.Улманом и Д.Хуттенлохером была опубликована статья «Object Recongnition Using Alignment» где они также сделали попытку распознавания объектов относительно простых форм, при этом процесс распознавания был организован в два этапа: сначала поиск области на изображении, где находится целевой объект, и определение его возможных размеров и ориентации (“alignment”) с помощью небольшого набора характерных признаков, и затем попиксельное сравнение потенциального изображения объекта с ожидаемым.
Однако попиксельное сравнение изображений имеет множество существенных недостатков, таких как его трудоемкость, необходимость наличия шаблона для каждого из объектов возможных классов, а также то, что в случае попиксельного сравнения может осуществляться только поиск конкретного объекта, а не целого класса объектов. В некоторых ситуациях это применимо, однако в большинстве случаев все же требуется поиск не одного конкретного объекта, а множества объектов какого-либо класса.
Одним из важных направлений в дальнейшем развитии распознавания изображений стало распознавание изображений на основе идентификации контуров. Во многих случаях именно контуры содержат большую часть информации об изображении, и в то же время рассмотрение изображения в виде совокупности контуров позволяет его существенно упростить. Для решения задачи поиска контуров на изображении классическим и наиболее известным подходом является детектор Кэнни (Canny Edge Detector), работа которого основана на поиске локального максимума градиента .
Другим важным направлением в области анализа изображений является применение математических методов, таких как частотная фильтрация и спектральный анализ. Данные методы применяются, например, для сжатия изображений (JPEG сжатие) или повышения его качества (фильтр Гаусса). Однако, поскольку данные методы не связаны непосредственно с распознаванием изображений, более подробно они здесь рассматриваться не будут.
Еще одна задача, которая часто рассматривается в связи с задачей распознавания изображений - это задача сегментации. Основная цель сегментации - это выделение на изображении отдельных объектов, каждый из которых затем может быть отдельно изучен и проклассифицирован. Задача сегментации значительно упрощается, если исходное изображение является бинарным - то есть состоит из пикселей только двух цветов. В этом случае задача сегментации часто решается с применением методов математической морфологии . Суть методов математической морфологии заключается в представлении изображения как некоторого множества двоичных значений и применении к этому множеству логических операций, основные среди которых это перенос, наращивание (логическое сложение) и эрозия (логическое умножение). С применением данных операций и их производных, таких как замыкание и размыкание, появляется возможность, например, устранить шум на изображении или выделить границы. Если подобные методы применяются в задаче сегментации, то наиболее важной их задачей становится как раз таки задача устранения шума и формирования на изображении более-менее однородных участков, которые затем легко найти с помощью алгоритмов, аналогичных поиску связных компонент в графе - это и будут искомые сегменты изображения.
Что касается сегментации RGB-изображений, то одним из важных источников информации о сегментах изображения может стать его текстура. Для определения текстуры изображения часто применяется фильтр Габора , который был создан в попытках воспроизвести особенности восприятия текстур человеческим зрением. В основе работы данного фильтра лежит функция частотного преобразования изображения.
Другое важное семейство алгоритмов, используемых для распознавания изображений - это алгоритмы, основанные на поиске локальных особенностей. Локальные особенности представляют собой некоторые хорошо различимые области изображения, которые позволяют соотнести изображение с моделью (искомым объектом) и определить, соответствует ли данное изображение модели и, если соответствует, определить параметры модели (например, угол наклона, примененное сжатие и т.д.). Для качественного выполнения своих функций локальные особенности должны быть устойчивы к афинным преобразованиям, сдвигам и т.д. Классическим примером локальных особенностей являются углы, которые часто присутствуют на границах различных объектов. Наиболее популярным алгоритмом для поиска углов является детектор Харриса .
В последнее же время все большей популярностью
пользуются методы распознавания изображений, основанные на нейронных сетях и
глубоком обучении. Основной расцвет этих методов наступил после появления в
конце 20 века сверточных сетей (LeCun,
), которые показывают значительно лучшие результаты в распознавании
изображений по сравнения с остальными методами. Так, большая часть лидирующих
(и не только) алгоритмов в ежегодном соревновании по распознаванию изображений ImageNet-2014
использовала в том или ином виде сверточные сети.
1.5 Распознавание дорожных знаков
Распознавание дорожных знаков в общем виде - это одна из многочисленных задач распознавания изображений или, в некоторых случаях, видеозаписей. Эта задача имеет большое практическое значение, так как распознавание дорожных знаков используется, например, в программах автоматизации управления автомобилем. Задача распознавания дорожных знаков имеет множество вариаций - например, идентификация наличия дорожных знаков на фотографии, выделение на изображении участка, представляющего собой дорожный знак, определение, какой конкретный знак изображен на фотографии, заведомо являющейся изображением дорожного знака и т.д. Обычно выделяют три глобальные задачи, связанные с распознаванием дорожных знаков - их идентификация среди окружающего ландшафта, непосредственно распознавание, или классификация, и так называемый трекинг - здесь подразумевается возможность алгоритма «следить», то есть держать в фокусе дорожный знак в видеоряде. Каждая из этих подзадач сама по себе является отдельным предметом для исследования и имеет обычно свой круг исследователей и традиционных подходов. В данной работе внимание было сосредоточено на задаче классификации дорожного знака, изображенного на фотографии, поэтому рассмотрим ее более подробно.
Данная задача является задачей классификации для классов с несбалансированной частотой. Это значит, что вероятность принадлежности изображения различным классам различна, поскольку некоторые классы встречаются чаще, чем другим - например, на российских дорогах знак ограничения скорости «40» встречается существенно чаще, чем знак «Сквозной проезд запрещен». Кроме того, дорожные знаки образуют несколько групп классов таких, что классы внутри одной группы сильно схожи между собой - например, все знаки ограничения скорости выглядят очень похоже и отличаются лишь цифрами внутри них, что, конечно, существенно осложняет задачу классификации. С другой стороны, дорожные знаки имеют четкую геометрическую форму и небольшой набор возможных цветов, что могло бы существенно упростить процедуру классификации - если бы не тот факт, что реальные фотографии дорожных знаков могут быть сняты с разных ракурсов и при различном освещении. Таким образом, задача классификации дорожных знаков, хотя и может рассматриваться как типичная задача распознавания изображений, но для достижения наилучшего результата требует особого подхода.
До определенного момента времени исследования по этой теме были достаточно хаотичны и не связаны между собой, так как каждый исследователь ставил между собой собственные задачи и использовал собственный набор данных, так что не было возможности сравнить и обобщить имеющиеся результаты. Так, в 2005 году Bahlmann с коллегами в рамках комплексной системы распознавания дорожных знаков, поддерживающей все 3 упомянутые ранее подзадачи распознавания дорожных знаков, реализовали алгоритм распознавания знаков, работающий с точностью 94% для дорожных знаков, относящихся к 23 различным классам . Обучение было произведено на 40000 изображениях, при этом количество изображений, соответствующих каждому классу, варьировалось от 30 до 600. Для детектирования дорожных знаков в данной системе применялся алгоритм AdaBoost и вейвлеты Хаара, а для классификации найденных знаков - подход, основанный на алгоритме Expectation Maximization. Система распознавания дорожных знаков с ограничениями скорости, разработанная Moutarde в 2007 году, имела точность до 90% и была обучена на множестве в 281 изображение . В этой системе были использованы детекторы окружностей и квадратов для обнаружения дорожных знаков на изображений (для европейских и американских знаков соответственно), в которых затем выделялась каждая цифра и классифицировалась с помощью нейронной сети. В 2010 году Ruta с коллегами разработали систему для детектирования и классификации 48 различных типов дорожных знаков с точностью классификации 85,3% . Их подход был основан на поиске в изображении окружностей и многогранников и выделении в них небольшого количества особых регионов, которые позволяют отличить данный знак от всех остальных. При этом было применено особое преобразование цветов изображений, названное авторами Colour Distance Transform и позволяющее сократить количество цветов, присутствующих на изображении, а соответственно - увеличить возможности по сравнению изображений и сократить размер обрабатываемых данных. Broggie с колленами в 2007 году предложили трехступенчатый алгоритм для детектирования и классификации дорожных знаков, состоящий из сегментации цветов, определения формы и нейронной сети, однако в их публикации отсутствую количественные показатели результатов работы их алгоритма . Гао и др. в 2006 году предложили систему распознавания дорожных знаков, основанную на анализе цвета и формы предполагаемого знака и показавшую точность распознавания 95% среди 98 экземпляров дорожных знаков .
Ситуация с разрозненностью исследования в сфере распознавания дорожных знаков изменилась в 2011 году, когда в рамках конференции IJCNN (International Joint Conference on Neural Networks) было проведено соревнование по распознаванию дорожных знаков. Для данного соревнования был разработан набор данных GTSRB (German Traffic Sign Recognition Benchmark), содержащий более 50000 изображений дорожных знаков, расположенных на дорогах Германии и принадлежащих 43 различным классам. На основе данного набора данных было проведено соревнование, состоящее их двух этапов. По результатам второго этапа была опубликована статья “Man vs. Computer: Benchmarking Machine Learning Algorithms for Traffic Sign Recognition”, где приводится обзор результатов конкурса и описание подходов, использованных наиболее успешными командами . Также по следам данного мероприятия был опубликован ряд статей самими авторами алгоритмов - участниками соревнования, а данный набор данных впоследствии стал базовым бенчмарком для алгоритмов, связанных с распознаванием дорожных знаков, аналогично всем известному MNIST для распознавания рукописных цифр.
К числу наиболее успешных в данном соревновании алгоритмов относится комитет сверточных сетей (команда IDSIA), многошкальная сверточная сеть (Multi-Scale CNN, команда Sermanet) и случайный лес (Random Forests, команда CAOR). Рассмотрим каждый из этих алгоритмов чуть более подробно.
Комитет нейронных сетей, предложенный командой IDSIA из итальянского Dalle Molle Institute for Artificial Intelligence Research во главе с D. Ciresan, достиг точности классификации знаков 99,46%, что выше точности человека (99,22%), оценка который была проведена в рамках того же конкурса. Данный алгоритм был впоследствии более подробно описан в статье “Multi-Column Deep Neural Network for Traffic Sign Classification” . Основная идея подхода заключается в том, что к исходным данным были применены 4 различных метода нормализации: корректировка изображения (Image Adjustment), выравнивание диаграммы (Histogram Equalization), адаптивное выравнивание диаграммы (Adaptive Histogram Equalization) и нормализация контраста (Constrast Normalization). Затем для каждого набора данных, полученных в результате нормализации, и исходного набора данных было построено и обучено по 5 сверточных сетей со случайно инициализированными начальными значениями весов, каждая из 8 слоев, при этом для входных значений сети при обучении применялись различные случайные трансформации, что позволило повысить размер и вариативность обучающей выборки. Результирующее предсказание сети формировалось путем усреднения предсказания каждой из сверточных сетей. Для обучения данных сетей применялась реализация с использованием вычислений на gpu.
Алгоритм с использованием многошкальной сверточная
сеть была предложена командой, состоящей из P.Sermanet
и Y. LeCun
из университета Нью Йорка. Данный
алгоритм
был
подробно
описан
в
статье
“Traffic Sign Recognition with Milti-Scale Convolutional Networks” . В
данном алгоритме все исходные изображения были масштабированы до размера 32*32
пикселя и преобразованы в оттенки серого, после чего к ним была применена
нормализация контраста. Также размер исходного обучающего множества был
увеличен в 5 раз путем применения к исходным изображениям небольших случайных
трансформаций. Результирующая сеть была составлена из двух этапов (stages),
как представлено на рисунке 3, при этом в итоговой классификации были
использованы выходные значения не только второго этапа, но и первого. Данная
сеть показала точность 98,31%.
Рисунок 3. Многошкальная нейронная сеть
Третий успешный алгоритм с применение случайного
леса был разработан командой CAOR
из MINES ParisTech. Подробное описание их алгоритма было опубликовано в статье
“Real-time
traffic sign
recognition
using spatially
weighted
HOG trees”
. Данный алгоритм основан на построении леса из 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 .
· Pylearn2 (www.github.com/lisa-lab/pylearn2) - python-библиотека с открытым исходным кодом, построенная на основе Theano, но предоставляющая более удобный и простой интерфейс для исследователей, предоставляющая готовый набор алгоритмов и позволяющее простое конфигурирование сетей в формате YAML-файлов . Разрабатывается группой ученых из 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. Разработка прототипа системы распознавания изображений
.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. Однако для соответствия рассматриваемым изображениям, которые имеют существенно меньший размер, сеть была модифицирована. Краткое ее описание выглядит так:
Схема данной сети представлена на рисунке 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. Результаты экспериментальных исследований
.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. Результаты обучения сверточной сети
Можно видеть, что наилучшие результаты показала
сеть, построенная на основе черно-белых изображений после выравнивания
гистограммы. Это можно объяснить тем, что в процессе выравнивания диаграммы
качество изображений, например, различия между изображением и фоном и общая
степень яркости улучшились, в то же время лишняя информация, содержащаяся в цвете
и не несущая существенной смысловой нагрузки - человек способен без труда
распознать те же самые знаки в черно-белом варианте - но зашумляющая
изображение и усложняющая классификацию - была устранена. Обучить с использованием метода
обратного распространения ошибки каждую сеть на обучающем множестве (множество
одно и то же для всех сетей, но к изображениям применены разные преобразования) 2. Для каждого экземпляра обучающего
множества получить по два наиболее вероятных класса в порядке убывания
вероятности от каждой сети, сохранить полученный набор (всего 12 значений) и
действительную метку класса Использовать полученный набор данных -
12 атрибутов и метка класса - в качестве обучающего множества для итогового
классификатора Оценить точность полученной модели: для
каждого экземпляра тестового множества получить по два наиболее вероятных
класса в порядке убывания вероятности от каждой сети и итоговое предсказание
класса на основе этого набора данных По результатам выполнения шагов из данной схемы
была вычислена итоговая точность комбинированного алгоритма: 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%, что позволяет получить
практические результаты, кроме того, предложенный подход с применением
дополнительного классификатора для комбинации результатов нейронных сетей имеет
множество возможностей для дальнейшего совершенствования. Заключение
В данной работе была подробно изучена задача
распознавания изображений с применением аппарата искусственных нейронных сетей.
Были рассмотрены наиболее актуальные в настоящее время подходы к распознаванию
изображений, в том числе использующие глубокие нейронные сети, а также
разработан собственный алгоритм для распознавания изображений на примере задачи
распознавания дорожных знаков с применением глубоких сетей. По результатам
работы можно сказать, что все поставленные в начале работы задачи были
выполнены: Был проведен аналитический обзор
литературы по теме применения искусственных нейронных сетей для распознавания
изображений. По результатам данного обзора было выяснено, что наиболее
эффективными и распространенными в последнее время являются подходы к
распознаванию изображений, основанные на применении глубоких сверточных сетей Была разработан алгоритм для
распознавания изображений на примере задачи распознавания дорожных знаков,
использующий ансамбль нейронных сетей, состоящий из двух многослойных
персептронов и 4 глубоких сверточных сетей, и с применением двух типов
дополнительного классификатора - J48
и KStar - для комбинации
результатов отдельных сетей и формирования итогового предсказания Был разработан прототип системы для
распознавания изображений на примере дорожных знаков на основе алгоритма из
п.3, которая предоставляет пользователю web-интерфейс
для загрузки изображения и, используя предварительно обученные модели,
классифицирует данное изображение и выводит пользователю результат
классификации Разработанный в п.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. 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. Bastien
F. et al. Theano: new features and speed improvements //arXiv preprint
arXiv:1211.5590. - 2012. Bengio
Y., Goodfellow I., Courville A . Deep Learning. - MIT Press, book in
preparation Bergstra
J. et al. Theano: A CPU and GPU math compiler in Python //Proc. 9th Python in
Science Conf. - 2010. - С. 1-7. Broggi
A. et al. Real time road signs recognition //Intelligent Vehicles Symposium,
2007 IEEE. - IEEE, 2007. - С. 981-986. Canny
J. A computational approach to edge detection //Pattern Analysis and Machine
Intelligence, IEEE Transactions on. - 1986. - №. 6. - С. 679-698. 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. 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. 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. 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. Goodfellow
I. J. et al. Pylearn2: a machine learning research library //arXiv preprint
arXiv:1308.4214. - 2013. Han
J., Kamber M., Pei J. Data mining: Concepts and techniques. - Morgan kaufmann,
2006. Harris
C., Stephens M. A combined corner and edge detector //Alvey vision conference.
- 1988. - Т. 15. - С. 50. 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. 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. Huttenlocher
D. P., Ullman S. Object recognition using alignment //Proc. ICCV. - 1987. - Т.
87. - С. 102-111. Jia,
Yangqing. "Caffe: An open source convolutional architecture for fast
feature embedding." h ttp://caffe. berkeleyvision. org (2013). Krizhevsky
A., Sutskever I., Hinton G. E. Imagenet classification with deep convolutional
neural networks //Advances in neural information processing systems. - 2012. -
С. 1097-1105. 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. LeCun
Y., Bengio Y. Convolutional networks for images, speech, and time series //The
handbook of brain theory and neural networks. - 1995. - Т. 3361. - С. 310. LeCun
Y. et al. Learning algorithms for classification: A comparison on handwritten
digit recognition //Neural networks: the statistical mechanics perspective. -
1995. - Т. 261. - С. 276. 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. Matan
O. et al. Handwritten character recognition using neural network architectures
//Proceedings of the 4th USPS Advanced technology Conference. - 1990. - С.
1003-1011. 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. Minsky
M., Seymour P. Perceptrons. - 1969. Mitchell
T. Generative and discriminative classifiers: naive Bayes and logistic
regression, 2005 //Manuscript available at #"897281.files/image021.gif">
Выполнен обзор нейросетевых методов, используемых при распознавании изображений. Нейросетевые методы - это методы, базирующиеся на применении различных типов нейронных сетей (НС). Основные направления применения различных НС для распознавания образов и изображений:
- применение для извлечение ключевых характеристик или признаков заданных образов,
- классификация самих образов или уже извлечённых из них характеристик (в первом случае извлечение ключевых характеристик происходит неявно внутри сети),
- решение оптимизационных задач.
Архитектура искусственных НС имеет некоторое сходство с естественными нейронными сетями. НС, предназначенные для решения различных задач, могут существенно различаться алгоритмами функционирования, но их главные свойства следующие .
НС состоит из элементов, называемых формальными нейронами, которые сами по себе очень просты и связаны с другими нейронами. Каждый нейрон преобразует набор сигналов, поступающих к нему на вход в выходной сигнал. Именно связи между нейронами, кодируемые весами, играют ключевую роль. Одно из преимуществ НС (а так же недостаток при реализации их на последовательной архитектуре) это то, что все элементы могут функционировать параллельно, тем самым существенно повышая эффективность решения задачи, особенно в обработке изображений. Кроме того, что НС позволяют эффективно решать многие задачи, они предоставляют мощные гибкие и универсальные механизмы обучения, что является их главным преимуществом перед другими методами (вероятностные методы, линейные разделители, решающие деревья и т.п.). Обучение избавляет от необходимости выбирать ключевые признаки, их значимость и отношения между признаками. Но тем не менее выбор исходного представления входных данных (вектор в n-мерном пространстве, частотные характеристики, вэйвлеты и т.п.), существенно влияет на качество решения и является отдельной темой. НС обладают хорошей обобщающей способностью (лучше чем у решающих деревьев ), т.е. могут успешно распространять опыт, полученный на конечном обучающем наборе, на всё множество образов.
Опишем применение НС для распознавания изображений, отмечая возможности применения для распознавания человека по изображению лица.
1. Многослойные нейронные сети
Архитектура многослойной нейронной сети (МНС) состоит из последовательно соединённых слоёв, где нейрон каждого слоя своими входами связан со всеми нейронами предыдущего слоя, а выходами - следующего. НС с двумя решающими слоями может с любой точностью аппроксимировать любую многомерную функцию. НС с одним решающим слоем способна формировать линейные разделяющие поверхности, что сильно сужает круг задач ими решаемых, в частности такая сеть не сможет решить задачу типа “исключающее или”. НС с нелинейной функцией активации и двумя решающими слоями позволяет формировать любые выпуклые области в пространстве решений, а с тремя решающими слоями - области любой сложности, в том числе и невыпуклой. При этом МНС не теряет своей обобщающей способности. Обучаются МНС при помощи алгоритма обратного распространения ошибки, являющегося методом градиентного спуска в пространстве весов с целью минимизации суммарной ошибки сети. При этом ошибки (точнее величины коррекции весов) распространяется в обратном направлении от входов к выходам, сквозь веса, соединяющие нейроны.
Простейшее применение однослойной НС (называемой автоассоциативной памятью) заключается в обучении сети восстанавливать подаваемые изображения. Подавая на вход тестовое изображение и вычисляя качество реконструированного изображения, можно оценить насколько сеть распознала входное изображение. Положительные свойства этого метода заключаются в том, что сеть может восстанавливать искажённые и зашумленные изображения, но для более серьёзных целей он не подходит.
Рис. 1. Многослойная нейронная сеть для классификации изображений. Нейрон с максимальной активностью (здесь первый) указывает принадлежность к распознанному классу.
МНС так же используется для непосредственной классификации изображений – на вход подаётся или само изображение в каком-либо виде, или набор ранее извлечённых ключевых характеристик изображения, на выходе нейрон с максимальной активностью указывает принадлежность к распознанному классу (рис. 1). Если эта активность ниже некоторого порога, то считается, что поданный образ не относится ни к одному из известных классов. Процесс обучения устанавливает соответствие подаваемых на вход образов с принадлежностью к определённому классу. Это называется обучением с учителем. В применении к распознаванию человека по изображению лица, такой подход хорош для задач контроля доступа небольшой группы лиц. Такой подход обеспечивает непосредственное сравнение сетью самих образов, но с увеличением числа классов время обучения и работы сети возрастает экспоненциально. Поэтому для таких задач, как поиск похожего человека в большой базе данных, требует извлечения компактного набора ключевых характеристик, на основе которых можно производить поиск.
Подход к классификации с использованием частотных характеристик всего изображения, описан в . Применялась однослойная НС, основанная на многозначных нейронах. Отмечено 100% распознавание на базе данных MIT, но при этом осуществлялось распознавание среди изображений, которым сеть была обучена.
Применение МНС для классификации изображений лиц на основе таких характеристик, как расстояния между некоторыми специфическими частями лица (нос, рот, глаза), описано в . В этом случае на вход НС подавались эти расстояния. Использовались так же гибридные методы – в первом на вход НС подавались результаты обработки скрытой марковской моделью, а во втором – результат работы НС подавался на вход марковской модели. Во втором случае преимуществ не наблюдалось, что говорит о том, что результат классификации НС достаточен.
В показано применение НС для классификации изображений, когда на вход сети поступают результаты декомпозиции изображения по методу главных компонент.
В классической МНС межслойные нейронные соединения полносвязны, и изображение представлено в виде одномерного вектора, хотя оно двумерно. Архитектура свёрточной НС направлена на преодоление этих недостатков. В ней использовались локальные рецепторные поля (обеспечивают локальную двумерную связность нейронов), общие веса (обеспечивают детектирование некоторых черт в любом месте изображения) и иерархическая организация с пространственными подвыборками (spatial subsampling). Свёрточная НС (СНС) обеспечивает частичную устойчивость к изменениям масштаба, смещениям, поворотам, искажениям. Архитектура СНС состоит из многих слоёв, каждый из которых имеет несколько плоскостей, причём нейроны следующего слоя связаны только с небольшим числом нейронов предыдущего слоя из окрестности локальной области (как в зрительной коре человека). Веса в каждой точке одной плоскости одинаковы (свёрточные слоя). За свёрточным слоем следует слой, уменьшающий его размерность путём локального усреднения. Затем опять свёрточный слой, и так далее. Таким образом, достигается иерархическая организация. Более поздние слои извлекают более общие характеристики, меньше зависящие от искажений изображения. Обучается СНС стандартным методом обратного распространения ошибки. Сравнение МНС и СНС показало существенные преимущества последней как по скорости, так и по надёжности классификации. Полезным свойством СНС является и то, что характеристики, формируемые на выходах верхних слоёв иерархии, могут быть применимы для классификации по методу ближайшего соседа (например, вычисляя евклидово расстояние), причём СНС может успешно извлекать такие характеристики и для образов, отсутствующих в обучающем наборе. Для СНС характерны быстрая скорость обучения и работы. Тестировании СНС на базе данных ORL, содержащей изображения лиц с небольшими изменениями освещения, масштаба, пространственных поворотов, положения и различными эмоциями, показало приблизительно 98% точность распознавания, причём для известных лиц, предъявлялись варианты их изображений, отсутствующие в обучающем наборе. Такой результат делает эту архитектуру перспективной для дальнейших разработок в области распознавания изображений пространственных объектов.
МНС применяются и для обнаружения объектов определённого типа. Кроме того, что любая обученная МНС в некоторой мере может определять принадлежность образов к “своим” классам, её можно специально обучить надёжному детектированию определённых классов. В этом случае выходными классами будут классы принадлежащие и не принадлежащие к заданному типу образов. В применялся нейросетевой детектор для обнаружения изображения лица во входном изображении. Изображение сканировалось окном 20х20 пикселей, которое подавалось на вход сети, решающей принадлежит ли данный участок к классу лиц. Обучение производилось как с использованием положительных примеров (различных изображений лиц), так и отрицательных (изображений, не являющихся лицами). Для повышения надёжности детектирования использовался коллектив НС, обученных с различными начальными весами, вследствие чего НС ошибались по разному, а окончательное решение принималось голосованием всего коллектива.
Рис. 2. Главные компоненты (собственные лица) и разложение изображения на главные компоненты.
НС применяется так же для извлечения ключевых характеристик изображения, которые затем используются для последующей классификации. В , показан способ нейросетевой реализации метода анализа главных компонент. Суть метода анализа главных компонент заключается в получении максимально декореллированных коэффициентов, характеризующих входные образы. Эти коэффициенты называются главными компонентами и используются для статистического сжатия изображений, в котором небольшое число коэффициентов используется для представления всего образа. НС с одним скрытым слоем содержащим N нейронов (которое много меньше чем размерность изображения), обученная по методу обратного распространения ошибки восстанавливать на выходе изображение, поданное на вход, формирует на выходе скрытых нейронов коэффициенты первых N главных компонент, которые и используются для сравнения. Обычно используется от 10 до 200 главных компонент. С увеличением номера компоненты её репрезентативность сильно понижается, и использовать компоненты с большими номерами не имеет смысла. При использовании нелинейных активационных функций нейронных элементов возможна нелинейная декомпозиция на главные компоненты. Нелинейность позволяет более точно отразить вариации входных данных. Применяя анализ главных компонент к декомпозиции изображений лиц, получим главные компоненты, называемые собственными лицами (holons в работе ), которым так же присуще полезное свойство – существуют компоненты, которые в основном отражают такие существенные характеристики лица как пол, раса, эмоции. При восстановлении компоненты имеют вид, похожий на лицо, причём первые отражают наиболее общую форму лица, последние – различные мелкие отличия между лицами (рис. 2). Такой метод хорошо применим для поиска похожих изображений лиц в больших базах данных. Показана так же возможность дальнейшего уменьшения размерности главных компонент при помощи НС . Оценивая качество реконструкции входного изображения можно очень точно определять его принадлежность к классу лиц.