Опыт использования нейронных сетей для распознавания букв

Введение

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

1. Общие сведения о нейронных сетях

Нейронные сети – это раздел искусственного интеллекта, в котором для обработки сигналов используются явления, аналогичные происходящим в нейронах живых существ [2].

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

2. Постановка задачи

Дано ограниченное число изображений заглавных латинских букв десяти типов: A, C, D, E, F, G, H, L, P, R. Необходимо построить нейронную сеть, которая смогла бы их классифицировать с наименьшим числом ошибок (наибольшая обобщающая способность) используя как можно меньше изображений для обучения и при этом обладая наибольшей производительностью.

3. Экспериментальные исследования

Для решения обозначенной проблемы была разработана методика организации экспериментов. Была скачана выборка изображений букв с [1] и выбран «Artificial Characters». В ней содержалось шесть тысяч изображений заглавных латинских букв. Всего было десять типов изображений: «A», «C», «D», «E», «F», «G», «H», «L», «P», «R». На каждую заглавную букву латинского алфавита приходилось ровно шестьсот изображений из выборки. Все буквы описывались набором отрезков.

Для того, чтобы использовать эту выборку для экспериментов, эти изображения были конвертированы в растровый тип. Для этого была написана программа на Java, реализующая алгоритм Брезенхема. На выходе для каждой буквы получалось черно-белое изображение, где ноль соответствует пустому холсту, единица указывает на то, что данный пиксель является черным, т.е. частью буквы. После всех вышеуказанных процедур было получено шесть тысяч изображений размером 55х65, все буквы были выровнены по левому нижнему углу. Эксперименты проводились на двух ЭВМ.

Первая ЭВМ intel core i3 2367М 1.4 GHz 2 cores 4 threads, ОС Windows 7 Home Premium, HDD диск с SSD кэшем. Вторая ЭВМ intel core i5 4670K 4.2GHz 4 cores 4 threads, ОС Ubuntu 14.04.5. SSD диск.

Часть нейронных сетей была реализована в среде Matlab, часть нейронных сетей реализована в CodeBlocks на С++. Переход на С++ был вынужденным шагом, т.к. в Ubuntu нет Matlab, а на первой ЭВМ нейронные сети работали крайне медленно при большом числе синаптических связей.

Реализации были одинаковыми по структуре. 1. Чтение из файлов входных данных 2. Инициализация параметров: 2.1 скорость обучения 2.2 количество слоев нейронной сети и количество нейронов в каждом из них 2.3 количество тестовых, валидационных и обучающих изображений 2.4 настройка параметров функции активации нейронов если необходимо 3. Большой цикл до конца программы: 3.1 цикл обучения 3.2 цикл тестирования 3.3 цикл валидации 3.4 Анализ результата 3.4.1 необходимость выхода из цикла 3.4.2 проверка обновления рекорда 3.4.3 проверка необходимости модификации весов нейронной сети.

Вышеуказанная реализация получила в работе название алгоритма бесконечного обучения. Причина кроется в необходимости выхода из цикла. Условием выхода из цикла первоначально было: «валидационная выборка распознана на девяносто пять и более процентов», что, в принципе, являлось долгое время недостижимой планкой для нейронной сети. Позднее это условие было усилено: «валидационная выборка распознана без ошибок». Анализ результата полностью производился на основе результатов на валидационной выборке. Рекорд вычислялся по наилучшему результату. При его улучшении, все параметры обучения, архитектура нейронной сети и ее веса вместе с рекордом и результатом на тестовой выборке записывались на жесткий диск.

Для завершения эксперимента в среде Matlab необходимо использовать кнопку «pause», которая доступна после запуска скрипта. При нажатии на паузу, появляется кнопка «quit debugging» и отображается строка кода, которая выполняется, если она не связана с обновлением рекорда, то можно завершить эксперимент без каких-либо потерь. В CodeBlocks запускалось просто консольное приложение, поэтому в коде был предусмотрен вывод на консоль признака начала записи нового результата на жесткий диск и его завершения. Если на консоли последний вывод был признак завершения, то можно смело нажимать на крест для его завершения эксперимента.

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

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

В рамках проведения эксперимента было сгенерировано 6 типов нейронных сетей, в каждой из которых варьировались параметры.

4. Результаты

Результаты качества распознавания нейронными сетями изображений тестовой выборки даны в процентном соотношении. Однослойный персептрон &mdash 87.5 %. Многослойный персептрон с синусоидной функцией активации — 84 %. Многослойный персептрон с сигмоидальной рациональной функцией активации — 84 %. Многослойный персептрон с биполярно-сигмиоидной функцией активации — 94.33 %. Гетерогенный многослойный персептрон с биполярно-сигмиоидной функцией активации и последним слоем софтмакс — 95.13 %. Гетерогенный многослойный персептрон со слоем модифицированного медианного фильтра, биполярносигмиоидной функцией активации и последним слоем софтмакс — 97.73 %.

Учитывая вышеуказанные результаты наилучшим оказался гетерогенный многослойный персептрон со следущей архитектурой:

  • Входной слой 3575 нейронов.
  • Слой медианного фильтра два на два 3456 нейронов.
  • Слой с биполярно-сигмиоидной функции активации 50 нейронов.
  • Слой с биполярно-сигмиоидной функции активации 200 нейронов.
  • Слой с функцией активации софтмакс 10 нейронов.

Результат данной сети (97.73 % ) говорит о ее пригодности для решения поставленной задачи.

5. Выводы

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

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

  • Интернет адрес: http://archive.ics.uci.edu/ml/datasets.html.
  • Ясницкий Л. Н. // Введение в искусственный интеллект. Москва, 2005.