Гринкруг Ефим Михайлович (должность, звание) подпись (Ф. И. О.) (Дата) Москва, 2014 г реферат


Выбор средств разработки Выбор библиотеки



страница4/7
Дата20.11.2016
Размер1.22 Mb.
Просмотров2024
Скачиваний0
ТипРеферат
1   2   3   4   5   6   7

Выбор средств разработки

  1. Выбор библиотеки

При разработке сложных приложений для работы с изображениями крайне важно правильно выбрать библиотеку, которая позволяет выполнять все необходимые задачи. В настоящее время существует всего несколько альтернатив: OpenCV1, SimpleCV2, Intel Integrated Perfomance Primitives3, Java Advanced Images API4, Python Imaging Library5.

OpenCV - библиотека с открытым исходным кодом, распространяемая под лицензией BSD. В этой библиотеке реализованы функции компьютерного зрения, обработки изображений, машинного обучения и математических алгоритмов. Библиотека написана на C++, но может быть использована в проектах на языках Java, Python, Ruby, Matlab и других. Существуют реализации библиотеки для различных операционных систем, в том числе и для Android. Однако, для некоторых задач библиотека может быть слишком универсальной и включать в себя много лишнего.

Intel Integrated Perfomance Primitives - коммерческая библиотека разработанная компанией Intel. Реализует множество математических функций, функций обработки сигналов и изображений. Библиотека очень высоко оптимизирована и использует все расширенные наборы инструкций современных процессоров, как Intel так и AMD. Работает под операционными системами Linux, Windows и Max OS. Из недостатков следует отметить высокую стоимость: 199$ за однопользовательскую лицензию.

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

Java Advanced Images API - библиотека является частью Java SE. Она содержит лишь несколько основных функций для работы с изображениями, какие-то более или менее сложные функции (поворот изображения, например) приходится писать самостоятельно.

Python Imaging Library - библиотека распространяется в двух версиях: свободной и проприетарной. Под свободной лицензией выпускаются старые проприеритарные версии. Как видно из названия может использоваться только в проектах на языке Python. У библиотеки почти полностью отсутствует документация, в расчете на то, что люди будут покупать коммерческую поддержку. Функции реализовано мало и они рассчитаны в первую очередь на дизайнерскую обработку изображений и практически отсутствуют возможности для их анализа.

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


    1. Выбор языка программирования

Список альтернатив определяется возможностями выбранной библиотеки. Так как библиотека написана на C++, то и ее интерфейс в первую очередь предназначен для работы с C++, но также существует полная поддержка интерфейсов для языков Java и Python. Интерфейсы для других языков реализованы частично или не стабильно, поэтому рассмотрены только уже перечисленные четыре языка. Главным критерием для выбора языка программирования является скорость работы и объем потребляемой памяти программами, написанными на том или ином языке, так как количество данных, которые предстоит обработать, достаточно велико.



Рисунок 2.1. Сравнение производительности программ на языках C++ и Java.

Для сравнения использовался сервис The Computer Language Benchmarks Game6. Данный сервис позволяет сравнивать скорость программ, количество потребляемой памяти и даже объем кода у аналогичных программ на различных языках программирования. Для сравнения, используются одиннадцать различных тестов, с исходными кодами можно ознакомится на веб-сайте проекта. Так же можно выбрать платформу для тестирования приложения: одноядерный или четырехядерный процессор и 32х или 64х битная система.




Рисунок 2.2. Сравнение производительности программ на языках C++ и Python.

Из графика 2.1 видно, программы написанные на языке С++, выполняются быстрее до трех раз, а памяти занимают более чем в тридцать раз меньше. Преимущество С++ над Python (см. рис. 2.2) еще более очевидно. Конечно в обоих случаях программы на С++ проигрывают по такому показателю как количество строк кода. Это значит что процесс разработки идет дольше.

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

  1. Разработка классификатора

    1. Выбор классификатора

Существует множество различных классификаторов. В библиотеке OpenCV реализованы следующие:


Нормальный байесовский классификатор [12].

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

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

Алгоритмы на основе метода опорных векторов.

Основная идея метода опорных векторов — перевод исходных векторов в пространство более высокой размерности и поиск разделяющей гиперплоскости с максимальным зазором в этом пространстве. Две параллельных гиперплоскости строятся по обеим сторонам гиперплоскости, разделяющей наши классы. Оптимальным решением считается то, которое максимизирует расстояние от разделяющей гиперплоскости, до ближайших векторов признаков из обоих классов (в случае двух классов). Ближайшие к гиперплоскости вектора называются опорными векторами, это значит, что положение остальных векторов не влияет на гиперплоскость.



Деревья принятия решений [4].

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



Бустинг.

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

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

Градиентные усиленные деревья [10].

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

Случайные деревья [3]. Алгоритм позволяет решать задачи классификации и регрессионного анализа. Случайные деревья — это сборка деревьев принятия решений, в терминологии авторов метода лес. Классификация работает следующим образом: классификатору на вход приходит вектор признаков, он классифицируется всеми деревьями, а результат выбирается путем голосования.

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

Нейронные сети.

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

Алгоритмы бустинга, такие как дискретный AdaBoost, вещественный AdaBoost, LogitBoost, Gentle AdaBoost, используются в задачах распознавания образов, потому что они слабо подвержены переобучению, по сравнению с другими алгоритмами машинного обучения. Кроме того использование бустинга позволяет легко использовать вектора признаков большой размерности.

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



    1. Каталог: data -> 2014
      2014 -> Особенности проведения маркетИнговых исследований для новых товаров
      2014 -> Программа исследования 28
      2014 -> Специализированный журнал автомобильной тематики: специфика аудитории, контента, продвижения на рынок
      2014 -> Федеральное государственное автономное образовательное
      2014 -> Программа «Управление образованием»
      2014 -> Приложения выберите пункт Электронная почта
      2014 -> Клиент-серверная система на основе беспроводной сети стандарта ieee 802. 15. 4
      2014 -> Растущая конкуренция в современном мире заставляет страны и регионы пересматривать их подход к экономическому развитию. Сегодня региональные власти ищут новые способы создания и развития инновационных компаний


      Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал