Информационное письмо
Образец оформления статьи
Анкета автора
24.01.2015

Распознавание образов с помощью нейронных сетей в среде MatlabR2009b

Николаев Сергей Валерьевич
студент 3 курса факультета математики, информационных технологий и техники Приамурский государственный университет им. Шолом-Алейхема Биробиджан, Россия
Баженов Руслан Иванович
к.п.н., доцент, зав.кафедрой информатики и вычислительной техники факультет математики, информационных технологий и техники Приамурский государственный университет им. Шолом-Алейхема Биробиджан, Россия
Аннотация: Цель данной статьи показать шаблон, который позволит студенту приобрести необходимые знания для создания, обучения, и стимуляции нейронной сети, научится работать с GUI-интерфейсом инструмента NNtool. Для реализации задачи используется система MatlabR2009b.
Ключевые слова: нейронная сеть, распознавание образов, NNtool
Электронная версия
Скачать (1.15 Mb)

Искусственные нейронные сети представляют собой математическую модель функционирования биологических нейронных сетей – сетей нервных клеток живого организма. Как и в биологической нейронной сети, основным элементом искусственной нейронной сети является нейрон. Соединенные между собой нейроны, образуют слои, количество которых может варьироваться в зависимости от сложности нейронной сети и решаемых ею задач. Теоретические основы программирования таких нейронных сетей, описываются во многих работах [7, 10, 11].

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

Цель разрабатываемого шаблона, создать нейронную сеть, которая сможет распознавать визуальные образы букв русского алфавита. Программный код, который решает подобную задачу, присутствует в системе Matlab, как демонстрационная программа с названием appcr1. Подробно этот код разобран и пояснен в книге «Нейронные сети» В. С. Медведева, В. Г. Потемкина [6], а так же описан в работе И. С. Миронова, С. В. Скурлаева [7]

В системе Matlab также присутствует инструмент NNtool, имеющий графический интерфейс пользователя, который существенно облегчает задачу и может быть легко использован даже неопытным пользователем. Подробно этот инструмент описан в работах В. Иванников, А. Ланнэ [5] и П. А. Сахнюка [8] и др. [12]. В работе А. И. Шеремет, В. В. Перепелицы, А. М. Денисовой показан пример разработки нейронной сети для распознавания визуальных образов символов латинского алфавита с помощью NNtool [9]. Зарубежные ученые также применяю искусственные нейронные сети в своих исследованиях [13, 14].

Рассмотрим встроенную функцию Matlab prprob, которая представляет собой матрицу, содержащую набор признаков букв латинского языка. Каждая буква имеет размерность 7 на 5 пикселей.

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

Рис. 1. Шаблон буквы А созданный в графическом редакторе

Рис. 1. Шаблон буквы А созданный в графическом редакторе

Рис. 2. Шаблон буквы Б созданный в графическом редакторе

Рис. 2. Шаблон буквы Б созданный в графическом редакторе

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

Для этого выберем в командном меню: FileàNewàFunction M-file. Откроется графический редактор, в который необходимо вставить приведенный ниже код.

Код функции ImgRead:

function y = Imgread(x)

%UNTITLED Summary of this function goes here

% Detailed explanation goes here

img=imread(x);

img1=img(:,:,1)';

img2=reshape (img1,[35, 1]);

for i=1:35

if (img2(i,1)==0)

img2(i,1)=1;

end

end

for i=1:35

if (img2(i,1)==255)

img2(i,1)=0;

end

end

y=img2;

end

Использую данную функцию, создадим матрицу признаков русского алфавита, введя в окно команд следующий код:

images1=Imgread('C:\alphabet\А.png');

images33=Imgread('C:\alphabet\Я.png');

RA=[images1,images2,images3,images4,images5,images6,images7,images8,...

images9,images10,images11,images12,images13,images14,images15,images16,...

images17,images18,images19,images20,images21,images22,images23,...

images24,images25,images26,images27,images28,images29,images30,images31,...

images32,images33];

Заметим, что для того, чтобы код работал, шаблоны должны располагаться в каталоге C:\alphabet\, в качестве имени сам символ, с разрешением png, или внести соответствующие изменения в код.

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

В качестве матрицы целей создадим единичную матрицу размерностью 33 на 33.

Для этого введем код. Так же объявим переменные, содержащие в себе количество строк и столбцов.

%Создаем переменные для создания нейронной сети в NNtool

P=double(RA);

T=eye(33);

[R,Q] = size(P);

[S2,Q] = size(T);

Для обучения сети нам понадобятся данные с шумом. Создадим эти данные, введя следующий код в окно команд:

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

%NNtool

P1=P;

T1=T;

for i=1:100

P1=[P1,P+rand(R,Q)*0.1,P+rand(R,Q)*0.2];

T1=[T1,T,T];

end

Для симуляции сети нам понадобится переменная, содержащая в себе набор признаков одной буквы, например, буквы И.

Введем соответствующую команду, заодно выведем на экран получившийся зашумленный образ (рис.3).

noisy10 = P(:,10) + randn(35,1)*0.2;

plotchar(noisy10); % Зашумленный символ И  

Рис. 3. Зашумленный образ буквы И

Рис. 3. Зашумленный образ буквы И

Теперь вызовем инструмент NNtool, где с помощью графического интерфейса создадим нейронную сеть. Сделать это можно с помощью соответствующей команды nntool (рис.4).

 Рис. 4. Окно менеджера данных нейронной сети

Рис. 4. Окно менеджера данных нейронной сети

С помощью кнопки Import добавляем необходимые нам переменные (рис.5).

Рис. 5. Окно импорта данных

Рис. 5. Окно импорта данных

Переменные P,P1 и noisy10 добавить как input data.

Переменные T,T1 добавить как Target data.

После импорта всех переменных окно должно выглядеть как на рис.6. 

после импорта переменных

Рис. 6. Окно менеджера данных нейронной сети после импорта переменных

Нажав кнопку New, приступим к созданию нейронной сети. В окне параметров нейронной сети введем настройки (рис.7).

Рис. 7. Окно создания нейронной сети 

Рис. 7. Окно создания нейронной сети

После выбранных параметров создаем сеть, нажав кнопку Create.

После этого сеть должна появиться в окне менеджера данных нейронной сети в разделе networks (рис.8).

Рис 8. Окно менеджера данных нейронной сети после создания нейронной сети

Рис 8. Окно менеджера данных нейронной сети  после создания нейронной сети 

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

Рис. 9. Структура нейронной сети 

Рис. 9. Структура нейронной сети

Рассмотрим вкладку Train, где будет проводиться обучение нейронной сети. В начале проведем обучение на идеальных данных. Введем соответствующие параметры (рис.10).

Рис. 10. Настройка данных, с помощью которых будет происходить обучение

Рис. 10. Настройка данных, с помощью которых будет происходить обучение 

Рис. 11. Параметры обучения нейронной сети

Рис. 11. Параметры обучения нейронной сети

После установки всех параметров запускаем обучение, нажав кнопку Train Network (рис.11). В появившемся окне (рис.12) можем наблюдать процесс обучения нейронной сети.

Рис. 12. Процесс обучения 

Рис. 12. Процесс обучения

С помощью кнопки Performance можно просмотреть процесс обучения с помощью графика (рис.13).

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

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

Теперь необходимо провести обучение на данных с шумом. Для этого изменим параметры во вкладке train (рис.14, 15).

Рис. 14. Параметры обучения на данных с шумом

Рис. 14. Параметры обучения на данных с шумом

Рис. 15. Параметра обучения на данных с шумом 

Рис. 15. Параметра обучения на данных с шумом

 Окно процесса обучения будет выглядеть как рис.16.

Рис. 16. Процесс обучения сети на данных с шумом

Рис. 16. Процесс обучения сети на данных с шумом

График обучения представлен на рис. 17.

Рис. 17. График обучения нейронной сети на данных с шумом 

Рис. 17. График обучения нейронной сети на данных с шумом

В результате сеть обучена. Теперь необходимо проверить нейронную сеть. Для этого создана переменная noisy10, которая содержит в себе символ «И» с шумом.

Перейдем на вкладку Simulate, в окне созданной сети (рис.18). 

Рис. 18. Вкладка Simulate

Рис. 18. Вкладка Simulate

 Выберем в качестве входных данных переменную noisy10, а в качестве выходных данных напишем переменную Ans (рис.19).

 Рис. 19. Вкладка Simulate с выбранными параметрами

Рис. 19. Вкладка Simulate с выбранными параметрами

Для начала процесса симуляции необходимо нажать кнопку Simulate Network.

После этого в окне менеджера данных нейронной сети появится переменная Ans (рис.20).

Рис. 20. Окно менеджера данных нейронной сети после проведенной симуляции

Рис. 20. Окно менеджера данных нейронной сети после проведенной симуляции 

Экспортируем нейронную сеть и переменную Ans. Для этого необходимо нажать кнопку Export и в появившемся окне выбрать необходимые нам переменные и еще раз нажать кнопку Export (рис.21).

Рис 21. Экспорт переменных 

Рис 21. Экспорт переменных

После экспорта в окно команд Matlab вводим следующий фрагмент кода:

%Проверяем результат распознания

Ans = compet(Ans);

answer = find(compet(Ans) == 1)

plotchar(P(:,answer)); % Распознанный символ И

Перед нами появится окно (рис.22), отображающее распознанный символ. 

Рис. 22. Распознанный символ И

Рис. 22. Распознанный символ И

 А в окне команд появится строчка:

answer =

10

Означающая, что поступивший символ – это символ под номером 10 в нашем алфавите.

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

Данная работа знакомит с GUI-интерфейсом NNtoot и может в дальнейшем использоваться студентами для создания более сложных, по своей структуре и задаче, нейронных сетей в различных курсах [1-4]. 

Список литературы:

1. Баженов Р.И. Интеллектуальные информационные технологии. Биробиджан: ПГУ им. Шолом-Алейхема, 2011. 176 с.

2. Баженов Р.И. Информационная безопасность и защита информации: практикум. Биробиджан: Изд-во ГОУВПО «ДВГСГА», 2011. 140 с.

3. Баженов Р.И. Проектирование методики обучения дисциплины «Информационные технологии в менеджменте» // Современная педагогика. 2014. № 8 (21). С. 24-31.

4. Баженов Р.И. Об организации научно-исследовательской практики магистрантов направления «Информационные системы и технологии» // Современные научные исследования и инновации. 2014. № 9-2 (41). С. 62-69.

5. Иванников В., Ланнэ А. Matlab для DSP. Нейронные сети: графический интерфейс пользователя [Электронный ресурс]. URL: http://www.chipinfo.ru/literature/chipnews/200108/1.html#lanne8

6. Медведев В. С., Потемкин В. Г. Нейронные сети. MATLAB 6. М.: ДИАЛОГ-МИФИ, 2001. 630 с.

7. Миронов И.С., Скурлаев С.В. Распознавание образов при помощи нейронной сети [Электронный ресурс]. URL: http://confonline.susu.ru/index.php?option=com_content&view=article&id=57:2011-05-06-04-36-21&catid=16:-2----&Itemid=18

8. Сахнюк П.А. Интеллектуальные информационные системы. Лабораторные работы [Электронный ресурс]. URL: http://www.stgau.ru/company/personal/user/7684/files/lib/202.pdf

9. Шеремет А.И., Перепелица В.В., Денисова А.М. Проектирование нейронной сети для распознавания символов в программной среде MATLAB [Электронный ресурс]. URL: http://nauka.zinet.info/13/sheremet.php

10. Principe J.C., Euliano N.R., Lefebvre W.C. Neural and Adaptive Systems. Fundamentals Through Simulations. New York. John Wiley & Sons Inc. 2000.

11. Luo F-L., Unbehauen R. Applied Neural Networks for Signal Processing. Cambridge University Press. 1998.

12. Demuth H., Beale M. Neural Network Toolbox. For Use with MATLAB. The MathWorks Inc. 1992-2000.

13. Awadalla M. H. A., Ismaeil I. I., Sadek M. A. Spiking neural network-based control chart pattern recognition //Journal of Engineering and Technology Research. 2011. Т. 3. №. 1. С. 5-15.

14. Dede G., Sazlı M. H. Speech recognition with artificial neural networks //Digital Signal Processing. 2010. Т. 20. №. 3. С. 763-768.