Опубликован: 02.09.2013 | Доступ: свободный | Студентов: 429 / 54 | Длительность: 19:27:00

Самостоятельная работа 7: Оптимизация и распараллеливание вычислений в задаче детектирования объектов на изображениях с использованием алгоритма Latent SVM

5. Обзор базовой программной реализации алгоритма Latent SVM

5.1. Основные структуры данных

Перед тем, как переходить к описанию программной реализации алгоритма, рассмотрим основные структуры данных:

1. position – структура, предназначенная для хранения положения объекта:

  • unsigned int x – координата по горизонтали,
  • unsigned int y – координата по вертикали,
  • unsigned int l – уровень пирамиды признаков.

2. filterObject – структура для хранения параметров фильтра (используется для хранения грубых и точных фильтров):

  • position V – расположение точного фильтра относительно грубого,
  • float fineFunction[4] – коэффициенты штрафной функции (порядок коэффициентов соответствует функции d_1x+d_2y+d_3x^2+d_4y^2,
  • unsigned int sizeX – размерность фильтра по горизонтали,
  • unsigned int sizeY – размерность фильтра по вертикали,
  • unsigned int p – размерность вектора признаков (всегда принимает значение, равное 31),
  • float *H – матрица весов фильтра, развернутая по строкам.

3. featureMap – структура хранения матрицы признаков на одном уровне пирамиды:

  • int sizeX – размерность матрицы признаков по горизонтали,
  • int sizeY– размерность матрицы признаков по вертикали,
  • int p – размерность вектора признаков (всегда принимает значение, равное 31),
  • мfloat *map – матрица признаков, развернутая по строкам.

4. featurePyramid – структура хранения пирамиды признаков:

  • int countLevel – количество уровней в пирамиде признаков,
  • int lambda – коэффициент масштабирования (параметр \lambda в математической модели),
  • featureMap **pyramid – массив матриц признаков для всех уровней пирамиды изображений.

5.2. Структура программных модулей

В реализации алгоритма вывода выделено два программных модуля:

  1. Модуль построения пирамиды признаков (featurePyramid).
  2. Модуль вычисления положения объекта заданного класса (matching).

Модуль построения пирамиды признаков предназначен для построения математической модели изображения, необходимой для поиска объектов. Моделью изображения является пирамида карт свойств (пирамида признаков). Модуль построения пирамиды признаков поддерживает следующую функциональность:

  1. Масштабирование исходного изображения. Данная процедура позволяет получить набор изображений с увеличенным и уменьшенным разрешением – пирамиду изображений.
  2. Построение матриц векторов признаков (карты свойств) для каждого изображения в пирамиде – getFeaturePyramid. Указанная функция включает следующие этапы:
  • Разбиение изображения на блоки фиксированного размера. Блок состоит из подмножества пикселей, каждый из которых характеризуется интенсивностью цвета.
  • Построение гистограммы градиентов по изображению.
  • Построение объединенной гистограммы в ячейки (исходной карты свойств) – getFeatureMaps_dp.
  • Нормализация и отсечение карты свойств – normalizationAndTruncationFeatureMaps.
  • Снижение размерности карты свойств – PCAFeatureMaps.

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

1. Оценка всех возможных положений объекта на изображении (построение значений оценочной функции) – thresholdFunctionalScore. Для получения значений оценочной функции используется программная функция convolution, которая отвечает за вычисление значений свертки матрицы признаков и фильтра по определению. Для вычисления сверток с использованием БПФ разработан набор функций, необходимых с точки зрения алгоритма (Приложение Б. Применение двумерного быстрого преобразования Фурье для вычисления сверток):

  • fftImagesMulti – функция вычисления произведения образов Фурье,
  • rot2PI – функция поворота матрицы фильтра,
  • getFFTImageFilterObject – функция вычисления образа Фурье для фильтра,
  • getFFTImageFeatureMap – функция вычисления образа Фурье для матрицы признаков,
  • convFFTConv2d – функция вычисления свертки средствами БПФ.

2. Выделение наиболее вероятных положений объекта.

3. Построение прямоугольников, окаймляющих объект, на основании полученных положений.

4. Отсечение частей прямоугольников, выходящих за границы изображения, – nonMaximumSuppression.

5. Отображение изображения и окаймляющих прямоугольников средствами OpenCV – showBoxes.

6. Оптимизация и распараллеливание быстрого преобразования Фурье для вычисления сверток

На данном этапе лабораторной работы предлагается выполнить следующую последовательность действий:

  1. Провести анализ эффективности последовательной реализация, в которой для вычисления сверток матриц векторов признаков с фильтрами используется двумерное БПФ. Для этого необходимо воспользоваться инструментом Intel Parallel Amplifier в режиме "Hotspots". Результаты такого анализа позволят установить, что функция вычисления одномерного2 Двумерное быстрое преобразование Фурье реализуется через одномерное. БПФ (fft) выполняется примерно 95% времени от общего времени поиска, поэтому ее необходимо оптимизировать. Просмотр более детальной трассы покажет, что наибольшее время тратится на вычисление синусов и косинусов.
  2. Оптимизировать вычисление синусов и косинусов. Так как изменение аргументов функций синуса и косинуса подчиняется определенному закону, подсчет каждого последующего значения тригонометрической функции можно выполнить на основании предыдущего значения. Величина угла на каждой итерации изменяется по закону:
    \gamma_i=\gamma_0 \cdot i ( 12)
    Таким образом, вычисление синуса и косинуса сводится к однократному их вычислению,sin\gamma_0cos\gamma_0, а последующие значения вычисляются за счет уже имеющихся данных с помощью простых тригонометрических формул (13) и (14).
    sin\,\gamma_{i+1}=sin\,(\gamma_i+\gamma_0)=sin\,\gamma_{i}sin\,\gamma_{0}+cos\,\gamma_{i}sin\,\gamma_{0} ( 13)
    cos\,\gamma_{i+1}=cos\,(\gamma_i+\gamma_0)=cos\,\gamma_{i}cos\,\gamma_{0}+sin\,\gamma_{i}sin\,\gamma_{0} ( 14)
  3. Выполнить распараллеливание рекурсивной реализации одномерного БПФ с помощью механизма задач (task) библиотеки TBB.
  4. Оценить масштабируемость разработанной параллельной реализации. Для этого необходимо провести эксперименты по запуску параллельной реализации в разное количество потоков на некотором наборе изображений.
  5. Вернуться к последовательной оптимизированной версии. Выполнить распараллеливание двумерного БПФ.
  6. Оценить масштабируемость разработанной параллельной реализации аналогично пункту 4.
  7. Провести анализ проделанной работы.

7. Оптимизация и распараллеливание тривиальной реализации вычисления сверток с помощью набора вложенных циклов

На данном этапе лабораторной работы предлагается выполнить следующую последовательность действий:

  1. Провести анализ эффективности последовательной реализации, в которой для вычисления сверток матриц векторов используется набор вложенных циклов. Как и на предыдущем этапе предлагается воспользоваться инструментом Intel Parallel Amplifier в режиме "Hotspots". Результаты такого анализа должны выявить, что наиболее трудоемкой функцией является функция вычисления сверток – convolution.
  2. Выполнить упрощение вложенного цикла – добавление результата очередного умножения осуществлять во временную переменную, результирующее значение которой сохранить в массив сверток. Оценить прирост производительности.
  3. Выполнить разворачивание внутреннего цикла. Провести эксперименты с разворачиванием на 2, 3, 4 и 5 итераций. Оценить эффективность работы приложения для каждого возможного значения развертки.
  4. Выполнить распараллеливание оптимизированной версии сверток с использованием OpenMP [13]. Подобрать оптимальное значение размера порции при формировании расписания.
  5. Провести анализ масштабируемости разработанной параллельной реализации.
  6. Выполнить распараллеливание последовательной оптимизированной версии сверток с использованием средств библиотеки TBB. Подобрать оптимальное значение размера порции при формировании расписания.
  7. Провести исследование масштабируемости разработанной параллельной реализации.
  8. Выполнить анализ результатов, полученных при распараллеливании сверток, которые вычислялись с использованием БПФ и напрямую через набор вложенных циклов.

8. Распараллеливание вычислений по уровням пирамиды признаков

Переходя к распараллеливанию реализации на более высоком уровне, сначала оценим степень параллелизма реализации, использующей параллельное вычисление сверток через набор вложенных циклов. Данная реализация была разработана на предыдущем шаге оптимизации и распараллеливания. Для оценки степени параллелизма обратимся к результатам Concurrency-анализа, которые можно получить с помощью Intel VTune Amplifier XE. Обратите внимание на диаграмму распределения нагрузки между потоками, из нее видно, что потоки периодически возобновляются, когда необходимо вычислить свертки, и засыпают, когда в основном потоке выполняется другая работа. Наличие накладных расходов приводит к плохой масштабируемости предыдущей параллельной реализации.

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

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

9. Оценка качества поиска объектов разных классов с использованием финальной параллельной реализации

На данном этапе для наиболее эффективной параллельной реализации предлагается выполнить массовые эксперименты на базе PASCAL VOC 2007 [21] и оценить качество детектирования Latent SVM на каждом классе объектов, входящих в состав VOC. База данных содержит изображения объектов двадцати классов (aeroplane, bicycle, bird, bottle и др.). Представленные фотографии различаются размером изображенных на них объектов, их положением на сцене, ракурсом и степенью освещенности. Указанные факторы оказывают значительное влияние на точность построенной модели.

Оценку качества детектирования объектов с помощью реализованного алгоритма вывода предполагается выполнить средствами VOC Development Kit, в состав которого входит модуль, позволяющий вычислить среднюю точность предсказания (average precision). Указанная метрика определяется как математическое ожидание точностей следующим образом:

AP=\frac 1 {11} \sum_{r \in \lbrace 0;0.1;...;1 \rbrace} {p(r)},\,\,\,\,\, \dot{p}(r)=max_{\bar{r},\bar{r} \geqslant r}p(\bar{r}) ( 15)

где p(\bar{r})=\frac a {a+c}точность, \bar{r}процент перекрытия детектированного окаймляющего прямоугольника и прямоугольника, который был размечен на исходном изображении как окаймляющий \bar{r} \in \lbrace 0;0.1;...;1 \rbrace, a – количество объектов, для которых процент перекрытия не меньше, чем \bar{r} (т. е. считается, что объект детектирован правильно), c – количество объектов с процентом перекрытия, меньшим, чем \bar{r} (объект найден ошибочно).

Для вычисления средней точности на основании информации о продетектированных прямоугольниках предлагается воспользоваться инструментом VOC Development Kit [24]. Инструкция по работе с VOCdevkit находится в приложении (Приложение В. Инструкция по запуску пакета VOCdevkit).

10. Дополнительные задания

  1. Разработайте и встройте реализацию функции вычисления сверток с использованием NVIDIA CUDA SDK [16]. Оцените эффективность разработанной реализации по сравнению с реализациями, предложенными в работе.
  2. Разработайте и встройте реализацию функции вычисления сверток с использованием Intel® OpenCL SDK [17]. Оцените эффективность разработанной реализации по сравнению с реализациями, предложенными в работе.
  3. Разработайте и встройте реализацию функции вычисления сверток с использованием быстрого преобразования Фурье, имеющегося в библиотеке Intel® Math Kernel Library [18]. Оцените эффективность разработанной реализации по сравнению с реализациями, предложенными в работе.
  4. Разработайте параллельную реализацию функции вычисления сверток, использующей вложенные циклы, с помощью Intel® Cilk Plus [19, 20]. Оцените эффективность разработанной реализации по сравнению с реализациями, предложенными в работе.
Андрей Терёхин
Андрей Терёхин

Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции?

Демянчик Иван
Демянчик Иван

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

" Искомый объект можно описать с помощью фильтра F= \lbrace f_{x',y'},x' \in \lbrace0, ...,w_f \rbrace , y' \in \lbrace 0,...,h_f \rbrace \rbrace "