Разработка многопоточной системы распознавания образов на основе стохастической геометрии для платформы Microsoft. Net

Федотов Н.Г., Романов С.В. РАЗРАБОТКА МНОГОПОТОЧНОЙ СИСТЕМЫ РАСПОЗНАВАНИЯ ОБРАЗОВ НА ОСНОВЕ СТОХАСТИЧЕСКОЙ ГЕОМЕТРИИ ДЛЯ ПЛАТФОРМЫ MICROSOFT .NET

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

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

Одной из последних концепций программирования от корпорации Microsoft стала разработка программ для платформы .Net Framework. Особенностью данной платформы является применение компиляции программы во время выполнения, что теоретически делает программу независимой от аппаратной платформы и операционной системы (на сегодняшний день существует возможность запуска приложений .Net в операционной системе Linux, используя свободно распространяемый пакет Mono).

Набор библиотек, входящий в состав .Net Framework является независимым от языка программирования. После выпуска данной платформы корпорацией Microsoft были обновлены языки C++ и Visual Basic, а так же выпущен новый язык C#, который создавался специально для работы с .Net Framework. Особенностью данного языка является исключительное соответствие концепции объектно-ориентированного программирования и наиболее полное использование возможностей платформы .Net. Именно по этим причинам язык C# был выбран для разработки новой системы генерации признаков на основе стохастической геометрии.

Разработка многопоточных приложений всегда являлась трудоемкой задачей. В .Net Framework сделана попытка упростить создание подобных приложений.

Хорошо известна проблема целостности данных. Если несколько потоков используют один объект для хранения данных, то может возникнуть конфликт при их обновлении. Большинство входящих в состав .Net Framework классов являются thread save, т.е. обращение к их полям и методам из множества потоков не приводит к конфликту. Для обеспечения синхронизации процессов существуют простые программные конструкции. Данные нововведения, в сочетании с общей областью памяти в пределах одного домена приложения обеспечивают значительное упрощение реализации взаимодействия между потоками. Передача ссылочных данных отличается крайне низким «расходом» системных ресурсов.

Изменения коснулись и процедур порождения и удаления потоков. Теперь разработчику предлагаются два способа создания многопоточных приложений. «Классический» способ создания потока значительно упрощен и подразумевает использование всего лишь одного встроенного пространства имен Sys-tem.Threading. В нем предусмотрены все средства для создания, мониторинга, управления приоритетами и удаления потоков. Решение данных задач связано с вызовом методов классов пространства имен System. Threading.

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

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

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

Начнем рассмотрение системы классов с наиболее сложного класса - планировщика, назовем его scheduler. Основные задачи, возложенные на данный класс:

Порождение потоков и управление их работой.

Распределение данных между потоками и объединение, полученных результатов.

Получение исходных данных.

Передача результатов.

Диаграмма данного класса представлена на рис.1.

Рассмотрим подробнее методы и поля данного класса.

Метод begin_work() запускает процесс генерации признаков.

Метод stop_work() прерывает процесс генерации признаков и уничтожает все порожденные потоки.

Метод set_proc_num() устанавливает количество процессоров в системе и соответственно количество потоков, которые порождает данный класс для проведения вычислений.

Метод get_next_coord_set() предназначен для передачи следующих данных для построения сканирующих

прямых. Если все данные уже обрабатываются, то возвращается null, который является сигналом потоку к

завершению работы.

Метод get_cur_t() предназначен для взаимодействия с потоками. Он возвращает текущий функционал Т.

Метод get_nexе_layer() предназначен для передачи в поток следующего необработанного слоя сканирующих прямых. Если все данные уже обрабатываются, то возвращается null, который является сигналом потоку к завершению работы.

Метод get_next_pq_tree() возвращает множество функционалов, среди которых функционал P - один и тот же, а функционалы Q - различны. Данный метод предназначен для взаимодействия с потоками. Если все данные уже обрабатываются, то возвращается null, который является сигналом потоку к завершению работы.

Поле cur_state является наиболее важным для работы данного класса. В нем сохраняются все данные о

состоянии работы, ведется учет данных, которые уже обработаны.

Поле db является ссылкой на объект класса db_work, который предназначен для работы с базой данных. В данном случае используются методы для сохранения результатов вычислений в базе.

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

Поле set хранит информацию о настройках системы.

Поле t_list является ссылкой на объект класса triplet_list, который предназначен для хранения и

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

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

Как видно из описания, большинство классов, входящих в состав планировщика, предназначены для обработки начальных данных. Наибольший интерес представляет класс traces, диаграмма которого представлена на рис.2. Особенностью данного класса является наличие двух событий: on_layers_finished и

on_trace_finished, которые возникают при завершении построения сканирующих прямых и завершении расчета Т функционала соответственно. Методы get_all_layers() и get_trace() предназначены для получения результатов вычисления сканирующих прямых и трейс-матрицы.

Кратко рассмотрим логику работу программы. Когда все исходные данные подготовлены (множество изображений, множество триплетных признаков и настройки системы) и сохранены в соответствующих классах можно запустить планировщик, вызвав метод begin_work(). В соответствии с заданным количеством процессоров, планировщик создает несколько процессов. На первом этапе, осуществляется построение множества сканирующих прямых. Когда все прямые будут построены, потоки уничтожаются, а поле trace_layers генерирует событие on_layers_finished. После данного события, планировщик создает потоки, вычисляющие Т функционал. После завершения вычислений, возникает событие on_trace_finished. На последнем этапе, планировщик передает потокам множество функционалов, заданных для данного Т функционала. Контроль завершенности данной операции осуществляется по свойству потоков is_alive(), которое, с целью увеличения производительности, проверяется только после окончания передачи всех исходных данных. Сохранение результатов происходит непосредственно в базу данных. По окончанию обработки всего дерева функционалов, начинается вычисление следующего Т функционала.

scheduler

Class

Б Fields cur_state

V db

* pjist

<4 set

* Mist tracejayers

E Methods

V begin_work get_cur_t get_next_coord_... get_next_layer

¿V get_next_pq_tree

V set_proc_num

V stop_work

Рис. 1

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

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

Созданная программа написана на одном из самых современных языков - С# и отличается применением многопоточных вычислений, которое позволило значительно ускорить выполнение программы. Применение новейших технологий программирования делают её работу эффективной на наиболее современных компьютерах, работающих под управление операционных систем Microsoft Windows XP и Windows Vista.

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

Сравнение времени выполнения одно- и многопоточного приложений проводилось с гистологическими изображениями, при стандартных настройках системы и вычислении 650 0 0 признаков; вычисления проводились на двуядерном процессоре Intel CoreDuo. Время выполнения многопоточного приложения было меньше в 1.86 раза.

Результат показывает эффективность применения многопоточных вычислений в приложении.

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

Г 7=Г\

traces

Class

Э Fields

layers

result

V set  Methods

V addjayer

V add_trace_layer

V clear

V get_all_layers

V getjrace Э Events

-/ onjayersjinished f on_trace_finished Ч______________________________t

Рис. 2

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