- •Введение
- •1. Обзор основных подходов
- •1.1. Искусственные нейронные сети
- •1.2. Обучающееся векторное квантование
- •1.3. Метод опорных векторов
- •2.1. Формальная постановка задачи
- •2.3. Предварительная обработка изображения
- •2.4. Признаковое описание рукописного символа
- •2.5. Обучение регулярного многослойного персептрона
- •2.6. Применение решающего правила
- •3. Описание реализации программной системы
- •3.1. Структура программной системы
- •3.2. Описание основных классов
- •3.3. Организация пользовательского интерфейса
- •3.3.1. Вспомогательное приложение
- •3.3.2. Основное приложение
- •Заключение
- •Список литературы
- •А.1. Классы для поддержки работы с растровыми изображениями
3. Описание реализации программной системы
3.1. Структура программной системы
Программная система, решающая поставленную задачу, была разработана на алгоритмическом языке С# в среде визуального программирования Microsoft Visual Studio 2008 .NET и состоит из 2 работающих независимо друг от друга Windows-приложений: основного и вспомогательного. Вспомогательное приложение обеспечивает формирование по входному изображению тренировочного шаблона и его сохранение в выбранный пользователем каталог на диске, а основное – непосредственно решает задачу классификации по предъявленному образу. При этом для обучения многослойного персептрона используется каталог тренировочных шаблонов, сформированный с помощью вспомогательного приложения.
Взаимодействие основного и вспомогательного приложений можно представить в виде следующей схемы (рис. 6):
Рис. 6. Схема взаимодействия приложений программной системы
В обоих приложениях предусмотрен диалоговый режим взаимодействия с пользователем, который реализован с помощью системы меню.
26
3.2. Описание основных классов
Главными объектами, которые используются в рамках программной системы для решения поставленной задачи, являются растровое изображение и многослойный персептрон. Поэтому при реализации программной системы основное внимание было уделено разработке классов, поддерживающих требуемые действия над растровым изображением, в частности, его фильтрацию, а также классам, поля и методы которых настраивают и осуществляют процесс обучения многослойного персептрона.
Перечислим классы, соответствующие данным объектам, а также наиболее важные поля и методы, реализованные в этих классах.
1.Raster – инкапсулирует информацию входном изображении в виде массива пикселей, каждому из которых приписан некоторый цвет в модели RGB. Свойства Width и Height хранят ширину и высоту растра в пикселях, а имя файла, из которого было сформировано изображение, сохраняется в строковое поле FileName.
Объект класса Raster можно создать как задав требуемые размеры изображения, так и на основе выбранного графического файла, с помощью соответствующих конструкторов. Основной метод, используемый в классе Raster, – ToBitmap, который позволяет конвертировать массив пикселей изображения в формат BMP, используемый в данной программной системе.
2.Класс BinaryRaster наследуется от класса Raster и обеспечивает получение числовых характеристик, образующих признаковое описание области на бинарном изображении.
3.ImageFilter – базовый абстрактный класс для всех фильтров, реализованных при разработке данной программной системы. Единственный метод, объявленный в данном классе, – ProcessImage, он имеет следующий прототип:
abstract Raster ProcessImage (Raster source, BackgroundWorker worker),
где source – исходное растровое изображение, BackgroundWorker – компонент-индикатор, отражающий ход выполнения алгоритма фильтрации, реализованного в теле метода.
Каждый конкретный фильтр реализован в производном от ImageFilter классе, который имеет собственную реализацию метода ProcessImage. Фильтры, которые были реализованы
врамках данной программной системы в качестве производных классов для класса ImageFilter, представлены в таблице 2, а иерархия наследования между классами, используемыми для работы с растровыми изображениями, изображена на рис. 7.
27
Таблица 2. Классы, реализующие фильтры обработки растровых изображений
|
Название класса |
|
|
|
|
|
Фильтр, реализуемый классом |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MedianFilter |
|
|
|
|
|
|
|
|
Медианный |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MathMorphologyDilation |
|
|
|
|
|
Морфологическое расширение |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SimpleBinarizationFilter |
|
|
|
|
|
Бинаризация по константному порогу |
|||||||||||||
|
|
|
|
|
|
Базовый класс для фильтров бинаризации, использующих порог, |
||||||||||||||
|
AdaptiveBinarizationFilter |
|
||||||||||||||||||
|
|
|
|
|
|
вычисляемый по адаптивной схеме |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
Адаптивная бинаризация, порог – среднее значение яркости в окрестности |
|||||||||||||||
|
MeanBinarizationFilter |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
пикселя |
|||||||
|
MedianBinarizationFilter |
Адаптивная бинаризация, порог – медиана набора яркостей пикселей из |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
окрестности |
|||||||
|
MinMaxBinarizationFilter |
Адаптивная бинаризация, порог – среднее арифметическое минимального и |
||||||||||||||||||
|
|
|
|
|
|
максимального значений яркости пикселей, попавших в окрестность |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 7. Иерархия наследования между классами для работы с растрами и их фильтрации
4. Для поддержки функционирования многослойного персептрона были разработаны следующие классы:
TNeiron – класс для базового элемента любой нейронной сети;
TLayer – класс, реализующий слой нейронов;
TPerceptron – класс для поддержки многослойного персептрона регулярной версии.
Помимо них, в качестве вспомогательных конструкций используются следующие структуры:
•TTrainerTemplate – набор тренировочных шаблонов, предназначенный для обучения персептрона и состоящий из 2 векторов: вектора входных сигналов и вектора желаемых выходов;
28
•TLayerProperties – перечень свойств, относящихся к каждому слою, входящему в персептрон, к которым относятся: тип слоя (сенсорный, скрытый или моторный), число нейронов, образующих слой, а также тип активационной функции и её производной для всех нейронов слоя. Данная структура является внешней по отношению к классу TPerceptron; она применяется для хранения свойств скрытых слоёв, задаваемых пользователем в диалоговом режиме, и для возможности повторной инициализации персептрона с учётом изменений, внесённых в его структуру.
Поля класса TNeiron хранят информацию о свойствах конкретного нейрона как самостоятельной, неделимой составляющей нейронной сети. В данной реализации нейроны в рамках того слоя, который они образуют, обладают одними и теми же свойствами, к которым относятся тип активационной функции нейрона и её производной и набор постоянных параметров, используемых в этих функциях при вычислениях. Полем данного класса также является порог срабатывания активационной функции нейрона threshold, который определяется в процессе обучения перспетрона и по умолчанию равен нулю.
Класс TLayer предназначен для поддержки слоёв, которые входят в состав персептрона. Каждый объект данного класса характеризуется типом слоя (flag), массивом образующих его нейронов (Neiron), а также их количеством (quantity).
Вклассах TNeiron и TLayer не реализовано никаких других методов, кроме конструкторов, позволяющих инициализировать их объекты.
Вклассе TPerceptron инкапсулирована информация о структуре многослойного персептрона, используемого для решения поставленной задачи, а также реализованы методы, обеспечивающие процесс его обучения. Наиболее значимыми полями данного класса являются:
- N – размерность пространства входных сигналов; - M – число нейронов в моторном (выходном) слое; - K – количество скрытых слоёв в персептроне;
- Layer – массив слоёв, из которых состоит персептрон;
- SynapticWeight – множество весов синаптических связей между каждыми 2 соседними слоями персептрона.
Всостав класса TPerceptron также включены набор тренировочных шаблонов и параметры алгоритма обучения (максимальное число итераций, диапазон значений шагового множителя, траекторный метод оптимизации и требуемая величина погрешности) для удобства их использования в процессе обучения.
Перечислим основные методы класса TPerceptron и их назначение:
29
