3.2 Программная реализация
В настоящее время существует два подхода к реализации искусственных нейронных сетей - аппаратная и программная. Программная реализация, уступая аппаратной по скорости работы и автономности, обладает рядом очевидных преимуществ, связанных с простотой использования и внедрения в информационно-управляющую систему.
Несмотря на то, что работы по программной реализации нейронных сетей осуществляются на протяжении более чем 30 лет, найти библиотеку про-грамм позволяющую моделировать и обучать нейронные сети, пригодную для использования в некоторой разрабатываемой системе очень сложно.
К таким средствам можно отнести:Stuttgart Neural Network Simulator [79]; Qnet [80];
NeuroSolutions [81];
Fast Artificial Neural Network Library [82];
Jets Neural Library [83].
Обычно это готовые программные продукты, либо библиотеки программ написанные под Unix.
Самым распространенным инструментом для моделирования нейронных сетей является Matlab Neural Network Toolbox [84]. Нейронные сети в Matlab, в следствие поставленной цели - моделирования широкого класса нейронных сетей, имеют громоздкую реализацию и невысокую скорость при решении конкретного класса задач. Кроме того, использование Matlab в системе реального времени, которыми являются системы безопасности и контроля доступа весьма затруднительно. Еще одним ограничением является тот факт что, не один из указанных продуктов не предоставляет возможности создания и обучения свёрточных нейронных сетей.
В системах безопасности и контроля доступа процесс идентификации изображений должен быть максимально быстрым. Очевидно, что при использовании нейронной сети, наиболее эффективна оптимизированная под конкретную задачу программная реализация. Когда требования к скорости обработки высоки, разработка конкретной программной реализации нейронной сети ста-новится необходимостью.
Исходя из этого для решения поставленной задачи была разработана библиотека классов позволяющая реализовывать как сверточные нейронные сети так и многослойные сети прямого распространения, и алгоритмы обучения.
В качестве языка программирования используется широко известный и легко переносимый на другие платформы язык С++. Программная библиотека содержит следующие классы.Класс TSubsamplePlain реализует подвыборочную плоскость свёрточной нейронной сети и алгоритм ее обучения, данный класс содержит следующие методы:
LoadSinaps - осуществляет загрузку синаптических коэффициентов плоскости;
Forward - реализует "прямой" проход подвыборочной плоскости;
Gradient_Compute - осуществляет "обратный" проход, то есть расчет градиентов для синаптических коэффициентов и смещения подвыборочной плоскости;
RatejCompute - рассчитывает индивидуальную скорость обучения для каждого синаптического коэффициента;
CorrectJSinaps - осуществляет расчет коррекции синаптических коэффициентов и корректирует синапсы;
Класс TConvPlain реализует свёрточную плоскость свёрточной нейронной сети и алгоритм ее обучения, данный класс содержит следующие методы:
LoadSinaps - осуществляет загрузку синаптических коэффициентов плоскости;
Forward - реализует "прямой" проход сверточной плоскости;
GradientjCompute - осуществляет "обратный" проход, то есть расчет градиентов для синаптических коэффициентов и смещения сверточной плоскости;
RatejCompute ~ рассчитывает индивидуальную скорость обучения для каждого синаптического коэффициента;
CorrectJSinaps - осуществляет расчет коррекции синаптических коэффициентов и корректирует синапсы;
Класс TNeuron реализут процесс функционирования нейрона, данный класс содержит следующие методы;
LoadSinaps - осуществляет загрузку синаптических коэффициентов нейрона;
Forward - реализует "прямой" проход нейрона;
GradientJCompute - осуществляет "обратный" проход, то есть расчет градиентов для синаптических коэффициентов и смещения нейрона;
RatejCompute - рассчитывает индивидуальную скорость обучения для каждого синаптического коэффициента;
CorrectJSinaps - осуществляет расчет коррекции синаптических коэффициентов и корректирует синапсы;
На основе предложенной библиотеки, была создана программная система выделения сюжетной части на групповом изображении. Система реализована в сред Borland С++ Builder 6.0, с использованием библиотеки Graphics 32.
Обоснованием такого выбора были следующие соображения: интегрированная среда разработки Borland С++ Builder известна, прежде всего, тем, что предоставляет программисту широкий набор средств быстрой разработки приложений, сохраняя при этом гибкость и возможности языка С++.Библиотека Graphics32 является дополнением к среде Borland С++ Builder и предназначена для высокопроизводительной работы с графикой. Библиотека предоставляет набор классов и процедур, разработанных с целью ускорить и облегчить работу с изображениями. Средства библиотеки позволяют значительно ускорить работу с 32-битными изображениями в формате BMP, включая улучшенную работу в многопоточном режиме, аффинные преобразования изображений на субпиксельном уровне и многое другое. В частности, для данной разработки широко применялись методы преобразования цветных изображений в полутоновые с 256 градациями серого, и методы масштабирования изображений.
Структурная схема созданной программной системы представлена на рис. 3.12. Основными структурными элементами программной системы являются:
Человеко- машинный интерфейс - осуществляет взаимодействие между пользователем и программной системой;
Блок генерации структуры нейронной сети - создает структуру нейронной сети и осуществляет загрузку синаптических коэффициентов выбранных пользователем;
Блок поиска лиц на изображениях - производит загрузку входного изображения в программную систему, его дальнейшее масштабирование, и обес-печивает выделение сюжетной части на входном изображении. Алгоритмы реализованные в данном блоке описаны в разделах 3.2.1 и 3.2.2. Выходными данными блока является информация о количестве и местоположениях лиц на входном изображении.
Рис. 3.12. Структурная схема системы выделения сюжетной части изображения