Распознавание образа - bsuir-informatics-labs

advertisement
Министерство образования Республики Беларусь
УО «Белорусский Государственный Университет Информатики и
Радиоэлектроники»
Кафедра информатики
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту по курсу
«Архитектура компьютера»
Тема: «Искусственные нейронные сети»
Выполнил:
студент группы 852002
Бенько И.С.
Проверил:
Агейчик М.С.
Минск, 2011
Оглавление
1. Введение ................................................................................................... 3
2. Теория нейронных сетей ......................................................................... 4
3. Известные применения............................................................................ 6
4. Классификация по характеру связей ..................................................... 9
5. Нейронные сети Хопфилда и Хэмминга ............................................. 12
6. Распознавание текста............................................................................. 18
6.1 Выделение образов из картинки.................................................... 19
6.2 Нормировкаобразов ......................................................................... 21
6.3 Распознавание образа ...................................................................... 22
6.4 Результаты ........................................................................................ 23
7. Заключение ............................................................................................. 24
8. Список использованной литературы ................................................... 25
9. Приложение ............................................................................................ 26
2
1. Введение
В последние годы одной из наиболее сложных и интересных задач
является создание искусственного интеллекта. Нейронные сети – это одно
из направлений исследований в области искусственного интеллекта,
основанное на попытках воспроизвести нервную систему человека. А
именно: способность нервной системы обучаться и исправлять ошибки,
что должно позволить смоделировать, хотя и достаточно грубо, работу
человеческого мозга. Нейронные сети нашли применение в задачах
распознавания
образов,
предсказания
результатов
на
основе
статистических выборок, принятия решений и управления, аппроксимации,
сжатия данных, кластеризации. В данной работе будет рассмотрена задача
распознавания образа(текста) с помощью нейронной сети Хэмминга.
3
2. Теория нейронных сетей
Нейронные сети – это одно из направлений исследований в области
искусственного интеллекта, основанное на попытках воспроизвести
нервную систему человека. А именно: способность нервной системы
обучаться и исправлять ошибки, что должно позволить смоделировать,
хотя и достаточно грубо, работу человеческого мозга.
Биологический нейрон – это специальная клетка, которая структурно
состоит из ядра, тела клетки и отростков. Одной из ключевых задач
нейрона является передача электрохимического импульса по всей
нейронной сети через доступные связи с другими нейронами. Притом,
каждая связь характеризуется некоторой величиной, называемой силой
синаптической связи. Эта величина определяет, что произойдет с
электрохимическим импульсом при передаче его другому нейрону: либо
он усилится, либо он ослабится, либо останется неизменным.
Биологическая нейронная сеть обладает высокой степенью
связности: на один нейрон может приходиться несколько тысяч связей с
другими нейронами. Но, это приблизительное значение и в каждом
конкретном случае оно разное. Передача импульсов от одного нейрона к
другому порождает определенное возбуждение всей нейронной сети.
Величина этого возбуждения определяет реакцию нейронной сети на
какие-то входные сигналы. Например, встреча человека со старым
знакомым может привести к сильному возбуждению нейронной сети, если
с этим знакомым связаны какие-то яркие и приятные жизненные
воспоминания. В свою очередь сильное возбуждение нейронной сети
может привести к учащению сердцебиения, более частому морганию глаз
и к другим реакциям. Встреча же с незнакомым человеком для нейронной
сети пройдет практически незаметной, а значит и не вызовет каких-либо
сильных реакций.
Каждый нейрон состоит из тела клетки, которое содержит ядро. От
тела клетки ответвляется множество коротких волокон, называемых
дендритами. Длинные дендриты называются аксонами. Аксоны
растягиваются на большие расстояния, намного превышающее то, что
показано в масштабе этого рисунка. Обычно аксоны имеют длину 1 см
(что превышает в 100 раз диаметр тела клетки), но могут достигать и 1
метра.
4
В 60-80 годах XX века приоритетным направлением исследований в
области
искусственного
интеллекта
были экспертные
системы.
Экспертные системы хорошо себя зарекомендовали, но только в
узкоспециализированных областях. Для создания более универсальных
интеллектуальных систем требовался другой подход. Наверное, это
привело к тому, что исследователи искусственного интеллекта обратили
внимание на биологические нейронные сети, которые лежат в основе
человеческого мозга.
На этом сходство заканчивается. Структура человеческого мозга
гораздо более сложная, чем описанная выше, и поэтому воспроизвести ее
хотя бы более менее точно не представляется возможным.
У нейронных сетей много важных свойств, но ключевое из них – это
способность к обучению. Обучение нейронной сети в первую очередь
заключается в изменении «силы» синаптических связей между нейронами.
Следующий пример наглядно это демонстрирует. В классическом опыте
Павлова, каждый раз непосредственно перед кормлением собаки звонил
колокольчик. Собака достаточно быстро научилась ассоциировать звонок
колокольчика с приемом пищи. Это явилось следствием того, что
синаптические связи между участками головного мозга, ответственными за
слух и слюнные железы, усилились. И в последующем возбуждение
нейронной сети звуком колокольчика, стало приводить к более сильному
слюноотделению у собаки.
На сегодняшний день нейронные сети являются одним из
приоритетных направлений исследований в области искусственного
интеллекта.
5
3. Известные применения
Распознавание образов и классификация
В качестве образов могут выступать различные по своей природе
объекты: символы текста, изображения, образцы звуков и т. д. При
обучении сети предлагаются различные образцы образов с указанием того,
к какому классу они относятся. Образец, как правило, представляется как
вектор значений признаков. При этом совокупность всех признаков
должна однозначно определять класс, к которому относится образец. В
случае, если признаков недостаточно, сеть может соотнести один и тот же
образец с несколькими классами, что неверно. По окончании обучения
сети ей можно предъявлять неизвестные ранее образы и получать ответ о
принадлежности к определённому классу.
Топология такой сети характеризуется тем, что количество нейронов
в выходном слое, как правило, равно количеству определяемых классов.
При этом устанавливается соответствие между выходом нейронной сети и
классом, который он представляет. Когда сети предъявляется некий образ,
на одном из её выходов должен появиться признак того, что образ
принадлежит этому классу. В то же время на других выходах должен быть
признак того, что образ данному классу не принадлежит. Если на двух или
более выходах есть признак принадлежности к классу, считается что сеть
«не уверена» в своём ответе.
Принятие решений и управление
Эта задача близка к задаче классификации. Классификации подлежат
ситуации, характеристики которых поступают на вход нейронной сети. На
выходе сети при этом должен появиться признак решения, которое она
приняла. При этом в качестве входных сигналов используются различные
критерии описания состояния управляемой системы.
Кластеризация
Под кластеризацией понимается разбиение множества входных
сигналов на классы, при том, что ни количество, ни признаки классов
заранее не известны. После обучения такая сеть способна определять, к
какому классу относится входной сигнал. Сеть также может
сигнализировать о том, что входной сигнал не относится ни к одному из
выделенных классов — это является признаком новых, отсутствующих в
обучающей выборке, данных. Таким образом, подобная сеть может
6
выявлять новые, неизвестные ранее классы сигналов. Соответствие между
классами, выделенными сетью, и классами, существующими в предметной
области, устанавливается человеком. Кластеризацию осуществляют,
например, нейронные сети Кохонена.
Нейронные сети в простом варианте Кохонена не могут быть
огромными поэтому их делят на гиперслои (гиперколонки) и ядра
(микроколонки). Если сравнивать с мозгом человека то идеальное
количество параллельных слоёв не должно быть более 112. Эти слои в
свою очередь составляют гиперслои (гиперколонку), в которой от 500 до
2000 микроколонок (ядер). При этом каждый слой делится на множество
гиперколонок пронизывающих насквозь эти слои. Микроколонки
кодируются цифрами и единицами с получением результата на выходе.
Если требуется, то лишние слои и нейроны удаляются или добавляются.
Идеально для подбора числа нейронов и слоёв использовать
суперкомпьютер. Такая система позволяет нейронным сетям быть
пластичной.
Прогнозирование
Способности нейронной сети к прогнозированию напрямую следуют
из ее способности к обобщению и выделению скрытых зависимостей
между входными и выходными данными. После обучения сеть способна
предсказать будущее значение некой последовательности на основе
нескольких предыдущих значений и/или каких-то существующих в
настоящий момент факторов. Следует отметить, что прогнозирование
возможно только тогда, когда предыдущие изменения действительно в
какой-то степени предопределяют будущие. Например, прогнозирование
котировок акций на основе котировок за прошлую неделю может оказаться
успешным (а может и не оказаться), тогда как прогнозирование
результатов завтрашней лотереи на основе данных за последние 50 лет
почти наверняка не даст никаких результатов.
Аппроксимация
Нейронные сети — могут аппроксимировать непрерывные функции.
Доказана обобщённая аппроксимационная теорема: с помощью линейных
операций и каскадного соединения можно из произвольного нелинейного
элемента получить устройство, вычисляющее любуюнепрерывную
функцию с некоторой наперёд заданной точностью. Это означает, что
нелинейная характеристика нейрона может быть произвольной:
7
от сигмоидальной до
произвольного
волнового
пакета
или вейвлета, синуса или многочлена. От выбора нелинейной функции
может зависеть сложность конкретной сети, но с любой нелинейностью
сеть остаётся универсальным аппроксиматором и при правильном выборе
структуры может достаточно точно аппроксимировать функционирование
любого непрерывного автомата.
Сжатие данных и Ассоциативная память
Способность нейросетей к выявлению взаимосвязей между
различными параметрами дает возможность выразить данные большой
размерности более компактно, если данные тесно взаимосвязаны друг с
другом. Обратный процесс — восстановление исходного набора данных из
части информации — называется (авто)ассоциативной памятью.
Ассоциативная память позволяет также восстанавливать исходный
сигнал/образ из зашумленных/поврежденных входных данных. Решение
задачи гетероассоциативной памяти позволяет реализовать память,
адресуемую по содержимому.
8
4. Классификация по характеру связей
Сети прямого распространения (Feedforward)
Все связи направлены строго от входных нейронов к выходным.
Примерами таких сетей являются перцептрон Розенблатта, многослойный
перцептрон, сети Ворда.
Рекуррентные нейронные сети
Сигнал с выходных нейронов или нейронов скрытого слоя частично
передается обратно на входы нейронов входного слоя (обратная связь).
Рекуррентная сеть Хопфилда «фильтрует» входные данные, возвращаясь к
устойчивому состоянию и, таким образом, позволяет решать
задачи компрессии данных и построения ассоциативной памяти. Частным
случаем рекуррентных сетей является двунаправленные сети. В таких
сетях между слоями существуют связи как в направлении от входного слоя
к выходному, так и в обратном. Классическим примером
является Нейронная сеть Коско.
Радиально-базисные функции
Искусственные нейронные сети, использующие в качестве
активационных функций радиально-базисные (такие сети сокращённо
называются RBF-сетями). Общий вид радиально-базисной функции:
, например,
где x — вектор входных сигналов нейрона, σ — ширина окна
функции, φ(y) — убывающая функция (чаще всего, равная нулю вне
некоторого отрезка).
Радиально-базисная сеть характеризуется тремя особенностями:
1. Единственный скрытый слой
2. Только нейроны
активационную функцию
скрытого
слоя
имеют
нелинейную
3. Синаптические веса связей входного и скрытого слоев равны
единице
Про процедуру обучения — см. литературу
9
Самоорганизующиеся карты
Такие сети представляют собой соревновательную нейронную сеть
с обучением без учителя, выполняющую задачу визуализации
и кластеризации. Является методом проецирования многомерного
пространства в пространство с более низкой размерностью (чаще всего,
двумерное), применяется также для решения задач моделирования,
прогнозирования и др. Является одной из версий нейронных сетей
Кохонена.[16] Самоорганизующиеся карты Кохонена служат, в первую
очередь,
для
визуализации
и
первоначального
[17]
(«разведывательного»)анализа данных.
Сигнал в сеть Кохонена поступает сразу на все нейроны, веса
соответствующих синапсов интерпретируются как координаты положения
узла, и выходной сигнал формируется по принципу «победитель забирает
всё» — то есть ненулевой выходной сигнал имеет нейрон, ближайший (в
смысле весов синапсов) к подаваемому на вход объекту. В процессе
обучения веса синапсов настраиваются таким образом, чтобы узлы
решетки «располагались» в местах локальных сгущений данных, то есть
описывали кластерную структуру облака данных, с другой стороны, связи
между нейронами соответствуют отношениям соседства между
соответствующими кластерами в пространстве признаков.
Удобно рассматривать такие карты как двумерные сетки узлов,
размещенных
в
многомерном
пространстве.
Изначально
самоорганизующаяся карта представляет собой сетку из узлов,
соединенный между собой связями. Кохонен рассматривал два варианта
соединения узлов — в прямоугольную и гексагональную сетку — отличие
состоит в том, что в прямоугольной сетке каждый узел соединен с 4-мя
соседними, а в гексагональной — с шестью ближайшими узлами. Для двух
таких сеток процесс построения сети Кохонена отличается лишь в том
месте, где перебираются ближайшие к данному узлу соседи.
Начальное вложение сетки в пространство данных выбирается
произвольным образом. В авторском пакете SOM_PAK предлагаются
варианты случайного начального расположения узлов в пространстве и
вариант расположения узлов в плоскости. После этого узлы начинают
перемещаться в пространстве согласно следующему алгоритму:
1.
Случайным образом выбирается точка данных x.
10
2.
Определяется ближайший к x узел карты (BMU — Best
Matching Unit).
3.
Этот узел перемещается на заданный шаг по направлению к x.
Однако, он перемещается не один, а увлекает за собой определенное
количество ближайших узлов из некоторой окрестности на карте. Из всех
двигающихся узлов наиболее сильно смещается центральный —
ближайший к точке данных — узел, а остальные испытывают тем меньшие
смещения, чем дальше они от BMU. В настройке карты различают два
этапа — этап грубой (ordering) и этап тонкой (fine-tuning) настройки. На
первом этапе выбираются большие значения окрестностей и движение
узлов носит коллективный характер — в результате карта «расправляется»
и грубым образом отражает структуру данных; на этапе тонкой настройки
радиус окрестности равен 1-2 и настраиваются уже индивидуальные
положения узлов. Кроме этого, величина смещения равномерно затухает
со временем, то есть она велика в начале каждого из этапов обучения и
близка к нулю в конце.
4.
Алгоритм повторяется определенное число эпох (понятно, что
число шагов может сильно изменяться в зависимости от задачи).
11
5. Нейронные сети Хопфилда и Хэмминга
Среди различных конфигураций искусственных нейронных сетей (НС)
встречаются такие, при классификации которых по принципу обучения,
строго говоря, не подходят ни обучение с учителем, ни обучение без
учителя. В таких сетях весовые коэффициенты синапсов рассчитываются
только однажды перед началом функционирования сети на основе
информации об обрабатываемых данных, и все обучение сети сводится
именно к этому расчету. С одной стороны, предъявление априорной
информации можно расценивать, как помощь учителя, но с другой – сеть
фактически просто запоминает образцы до того, как на ее вход поступают
реальные данные, и не может изменять свое поведение, поэтому говорить о
звене обратной связи с "миром" (учителем) не приходится. Из сетей с
подобной логикой работы наиболее известны сеть Хопфилда и сеть
Хэмминга, которые обычно используются для организации ассоциативной
памяти. Далее речь пойдет именно о них.
Структурная схема сети Хопфилда приведена на Рис. 1. Она состоит из
единственного слоя нейронов, число которых является одновременно
числом входов и выходов сети. Каждый нейрон связан синапсами со всеми
остальными нейронами, а также имеет один входной синапс, через
который осуществляется ввод сигнала. Выходные сигналы, как обычно,
образуются на аксонах.
12
Рис. 1 - Структурная схема сети Хопфилда.
Задача, решаемая данной сетью в качестве ассоциативной памяти, как
правило, формулируется следующим образом. Известен некоторый набор
двоичных сигналов (изображений, звуковых оцифровок, прочих данных,
описывающих некие объекты или характеристики процессов), которые
считаются образцовыми. Сеть должна уметь из произвольного
неидеального сигнала, поданного на ее вход, выделить ("вспомнить" по
частичной информации) соответствующий образец (если такой есть) или
"дать заключение" о том, что входные данные не соответствуют ни одному
из образцов. В общем случае, любой сигнал может быть описан вектором
X = { xi: i=0...n-1}, n – число нейронов в сети и размерность входных и
выходных векторов. Каждый элемент xi равен либо +1, либо -1. Обозначим
вектор, описывающий k-ый образец, через Xk, а его компоненты,
соответственно, – xik, k=0...m-1, m – число образцов. Когда сеть распознa ет
(или "вспомнит") какой-либо образец на основе предъявленных ей данных,
ее выходы будут содержать именно его, то есть Y = Xk, где Y – вектор
выходных значений сети: Y = { yi: i=0,...n-1}. В противном случае,
выходной вектор не совпадет ни с одним образцовым.
Если, например, сигналы представляют собой некие изображения, то,
отобразив в графическом виде данные с выхода сети, можно будет увидеть
13
картинку, полностью совпадающую с одной из образцовых (в случае
успеха) или же "вольную импровизацию" сети (в случае неудачи).
На стадии инициализации сети весовые
устанавливаются следующим образом:
коэффициенты
синапсов
(1)
Здесь i и j – индексы, соответственно, предсинаптического и
постсинаптического нейронов; xik, xjk – i-ый и j-ый элементы вектора k-ого
образца.
Алгоритм функционирования сети следующий (p – номер итерации):
1. На входы сети подается неизвестный сигнал. Фактически его ввод
осуществляется непосредственной установкой значений аксонов:
yi(0) = xi , i = 0...n-1, (2)
поэтому обозначение на схеме сети входных синапсов в явном виде носит
чисто условный характер. Ноль в скобке справа от yi означает нулевую
итерацию в цикле работы сети.
2. Рассчитывается новое состояние нейронов
, j=0...n-1 (3)
и новые значения аксонов
(4)
где f – активационная функция в виде
скачка, приведенная на Рис. 2а.
3. Проверка, изменились ли выходные
значения аксонов за последнюю
итерацию. Если да – переход к пункту
2,
иначе
(если
выходы
застабилизировались) – конец. При
14
этом выходной вектор представляет собой образец, наилучшим образом
сочетающийся с входными данными.
Как говорилось выше, иногда сеть не может провести распознавание и
выдает на выходе несуществующий образ. Это связано с проблемой
ограниченности возможностей сети. Для сети Хопфилда число
запоминаемых образов m не должно превышать величины, примерно
равной 0.15• n. Кроме того, если два образа А и Б сильно похожи, они,
возможно, будут вызывать у сети перекрестные ассоциации, то есть
предъявление на входы сети вектора А приведет к появлению на ее
выходах вектора Б и наоборот.
Рис. 3. Структурная схема сети Хэмминга.
Когда нет необходимости, чтобы сеть в явном виде выдавала образец, то
есть достаточно, скажем, получать номер образца, ассоциативную память
успешно реализует сеть Хэмминга. Данная сеть характеризуется, по
сравнению с сетью Хопфилда, меньшими затратами на память и объемом
вычислений, что становится очевидным из ее структуры (Рис. 3).
Сеть состоит из двух слоев. Первый и второй слои имеют по m нейронов,
где m – число образцов. Нейроны первого слоя имеют по n синапсов,
соединенных со входами сети (образующими фиктивный нулевой слой).
Нейроны второго слоя связаны между собой ингибиторными
(отрицательными обратными) синаптическими связями. Единственный
15
синапс с положительной обратной связью для каждого нейрона соединен с
его же аксоном.
Идея работы сети состоит в нахождении расстояния Хэмминга от
тестируемого образа до всех образцов. Расстоянием Хэмминга называется
число отличающихся битов в двух бинарных векторах. Сеть должна
выбрать образец с минимальным расстоянием Хэмминга до неизвестного
входного сигнала, в результате чего будет активизирован только один
выход сети, соответствующий этому образцу.
На стадии инициализации весовым коэффициентам первого слоя и порогу
активационной функции присваиваются следующие значения:
, i=0...n-1, k=0...m-1 (5)
Tk = n / 2, k = 0...m-1 (6)
Здесь xik – i-ый элемент k-ого образца.
Весовые коэффициенты тормозящих синапсов во втором слое берут
равными некоторой величине 0 < e < 1/m. Синапс нейрона, связанный с его
же аксоном имеет вес +1.
Алгоритм функционирования сети Хэмминга следующий:
1. На входы сети подается неизвестный вектор X = {xi:i=0...n-1}, исходя из
которого рассчитываются состояния нейронов первого слоя (верхний
индекс в скобках указывает номер слоя):
, j=0...m-1 (7)
После этого полученными значениями инициализируются значения
аксонов второго слоя:
yj(2) = yj(1), j = 0...m-1 (8)
2. Вычислить новые состояния нейронов второго слоя:
(9)
16
и значения их аксонов:
(10)
Активационная функция f имеет вид порога (рис. 2б), причем величина F
должна быть достаточно большой, чтобы любые возможные значения
аргумента не приводили к насыщению.
3. Проверить, изменились ли выходы нейронов второго слоя за последнюю
итерацию. Если да – перейди к шагу 2. Иначе – конец.
Из оценки алгоритма видно, что роль первого слоя весьма условна:
воспользовавшись один раз на шаге 1 значениями его весовых
коэффициентов, сеть больше не обращается к нему, поэтому первый слой
может быть вообще исключен из сети (заменен на матрицу весовых
коэффициентов).
17
6. Распознавание текста
Задача: Требуется написать программу, которая будет выделять из
«зашумленной картинки» образы(буквы) и будет распознавать их.
Для решения данной задачи можно использовать нейронные сети
Хопфилда и Хэмминга. Исследовав эти нейронные сети выбор остановился
на реализации нейронной сети Хэмминга, так как она более точная и
требует меньше памяти.
Алгоритм решения задачи:
1.
2.
3.
Выделение образов из картинки
Нормировка образов
Распознавания каждого образа по отдельности
18
6.1.
Выделение образов из картинки
Для того чтобы выделить образ необходимо понять «а что такое образ»?
Для начала введем некоторые понятия:
Функция расстояние между двумя различными цветами – функция,
принимающая на вход два цвета и возвращающая некоторое численное
значение(расстояние). Для решения данной задачи использовалась
функция суммы квадратов разности 4-х составляющих цветов(A, R,G,B).
Очевидно, чем меньше значение функции, тем более похожи цвета.
Связные пиксели – 2 соседних пикселя(имеют общую сторону), функция
расстояния между двумя их цветами меньше заданной точности(обычно
100).
Алгоритм заключается в следующем:
1.
2.
3.
4.
5.
6.
Строим по картинке неориентированный граф следующим образом.
Вершина – пиксель. Между вершинами будет ребро в том случае,
если соответствующие пиксели связные.
Полученный граф разбивается на связные компоненты. Связная
компонента может представлять либо образ, которых необходимо
выделить, либо фон.
Предполагается, что самая большая связная компонента – фон.
Считаем средний цвет фона.
Удаляем из рассмотрения компоненты, средний цвет которых близок
к среднем цвету фона (функция расстояния меньше заданной
точности).
В итоге получается набор связных компонент, в которых исключен
фон, однако здесь присутствуют шумы. Как правило, шумы
представляют собой небольшие связные области.
Фильтрация шумов:
1. Рассматриваем компоненты от самой большой к самой
маленькой
2. Если размер текущей компоненты значительно отличается
(задается коэффициентом) от среднего значения размера не
отфильтрованных компонент, то эта компонента – является
шумом и, соответственно, удаляется. Иначе – принимается.
19
Оставшиеся связные компоненты и будут рассматриваться как выделенные
образы.
Пример:
Пусть на вход получаем такую картинку:
Получаем:
20
6.2.
Нормировка образов
Под нормировкой здесь понимается – преобразование картинки(образа) к
некому эталонному размеру(увеличение, уменьшение) и составления из
картинки 2-битного вектора, который будет распознаваться нейронной
сетью.
При выделении образа учитываются только пиксели, которые принадлежат
связной компоненте. Таким образом выкидываются шумы.
До
После
Далее изменяем размер картинки до эталонного(50х50):
Получаем матрицу:
21
6.3.
Распознавание образа
Матрица изображения преобразуется в линейный вектор размерности
2500. Вектор подается на вход нейронной сети. Как показала практика,
примерно через 20 итераций нейронная сеть переходит в устойчивое
состояние и возвращается найденный эталонный образ. Точность
распознавания зависит от помех и неточностей в написании букв.
Обучение сети производилось на латинских буквах шрифта Arial
22
6.4.
Картинка
Результаты
Результат
TLCDEFGHXLXNO
PQSSTUVWXYZ
NEURONNETWIOR
K
IVAIRIYBENKO
Как видно, в последнем примере буква “N” распозналась сразу тремя
буквами, что связано с тем, что неверно выделился образ:
23
7. Заключение
Рассмотренная нейронная сеть позволяет достаточно быстро
распознавать изображения. Недостатком такой нейронной сети являются
длительный процесс обучения и, как следствие, небольшая точность
распознавания. Разработанная мною программа может применяться для
распознавания однострочных текстов (например, капчи).
24






8. Список использованной литературы
Lipman R. An introdaction to computing with neural nets // IEEE
Acoustic,Speech and Signal Processing Magazine,1987,no 2,L.4-22.
МакКоннелл Дж. Основы современных алгоритмов. — М.:
Техносфера, 2004. — 368 с.
В.А.Головко, под ред.проф.А.И.Галушкина Нейронные сети:
обучение, организация и применение. - Москва : ИПРЖР, 2001
http://www.recognition.mccme.ru/pub/RecognitionLab.html/methods.html
http://www.codenet.ru/progr/alg/ai/htm/gl3_5.php
http://en.wikipedia.org/wiki/Artificial_neural_network
25
Приложение
9.
Программа написанная на языке C#. Реализация основных функций программы.
Функция расстояние между цветами:
public static int GetColorDistance(Color c1, Color c2)
{
Func<int, int> sqr = x => x * x;
return sqr(c1.R - c2.R) + sqr(c1.G - c2.G) + sqr(c1.B - c2.B) + sqr(c1.A c2.A);
}
Построение графа:
private void MakeGraph()
{
var graphSize = _image.Height * _image.Width;
_graph = Enumerable.Range(0, graphSize).Select(x => new List<int>()).ToArray();
int height = _image.Height;
int width = _image.Width;
Func<int, int, int> getVertex = (i, j) => j * width + i;
Func<int, int, int, bool> isIn = (a, from, to) => a >= from && a <= to;
var syncObj = new object();
Parallel.For(0, width, i =>
{
for (int j = 0; j < height; j++)
{
var vertex = getVertex(i, j);
{
for (int k = i - _blur; k
for (int l = j - _blur;
{
if (k == i && l == j)
if (!isIn(k, 0, width
continue;
<= i + _blur; k++)
l <= j + _blur; l++)
continue;
- 1) || !isIn(l, 0, height - 1))
lock (syncObj)
{
if (
ImageParserHelper.GetColorDistance(_image.GetPixel(i, j),
_image.GetPixel(k, l)) <=
_toleranceLevel)
{
_graph[vertex].Add(getVertex(k, l));
}
}
}
}
}
});
}
Выделение связных компонент:
private void Dfs(int v)
{
if (_set[v] > 0)
26
return;
var q = new Queue<int>();
q.Enqueue(v);
while (q.Count > 0)
{
var vert = q.Dequeue();
if (_set[vert] > 0) continue;
_set[vert] = _curSet;
_graph[vert].ForEach(q.Enqueue);
}
}
private void MakeComponents()
{
var graphSize = _image.Height * _image.Width;
_curSet = 1;
_set = new int[graphSize];
for (int i = 0; i < graphSize; i++)
{
if (_set[i] > 0) continue;
Dfs(i);
_curSet++;
}
_curSet--;
_components = Enumerable.Range(0, _curSet).Select(x => new GraphComponent{Image
= _image}).ToArray();
for(int i = 0; i < graphSize; i++)
{
_components[_set[i]-1].Add(i);
}
}
Удаление фона и шумов:
private void RemoveBackGroundComponents()
{
var biggestComponent = _components.OrderByDescending(x => x.Count).First();
_background = biggestComponent.GetAverageColor();
var newComponents =
_components.Where(
x => ImageParserHelper.GetColorDistance(x.GetAverageColor(), _background) >
_toleranceLevel)
.OrderByDescending(x => x.Count).ToList();
if(newComponents.Count == 0) return;
var minCount = newComponents[0].Count;
long allVertexCount = 0;
var allCount = 0;
for (int i = 1; i < newComponents.Count; i++ )
{
if (newComponents[i].Count * allCount * c_Eps < allVertexCount)
break;
allVertexCount += newComponents[i].Count;
allCount++;
minCount = newComponents[i].Count;
}
27
_components =
newComponents.Where(x => x.Count >= minCount).ToArray();
}
Обучение нейронной сети:
public void Learn(ImageState imageState)
{
if (imageState.Image.GetLength(0) != State.N)
throw new ArgumentException(string.Format("Length of input image must be
exactly {0}", State.N));
var num = State.ImageStates.Count;
for(int j = 0; j < State.N; j++)
{
State.W[num, j] = imageState.Image[j];
}
State.ImageStates.Add(imageState);
}
Поиск образа:
public ImageState FindImage(int[] input, int maxIterations = 1000)
{
var yIn = new double[State.M];
for(int i = 0; i < State.M; i++)
{
for(int j = 0; j < State.N; j++)
{
yIn[i] += (double)State.W[i, j]*input[j]/2;
}
}
Func<double, double> activate = x => x > 0 ? x : 0;
var y = new double[State.M];
var s = new double[State.M];
var yLast = new double[State.M];
Array.Copy(yIn, s, State.M);
ArrayCopyF(s, y, activate);
for (var it = 0; it < maxIterations; it++ )
{
Array.Copy(y, yLast, State.M);
for (var i = 0; i < State.M; i++)
{
var sum = 0.0;
for (var j = 0; j < State.M; j++)
{
if (i == j) continue;
sum += y[j];
}
s[i] = y[i] - State.Eps * sum;
}
ArrayCopyF(s, y, activate);
if (ArrayEquals(y, yLast, Eps))
{
28
for (int k = 0; k < State.M; k++)
if (y[k] > 0)
return State.ImageStates[k];
}
}
return null;
}
29
Download