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

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

12.2. Приложение Б. Применение двумерного быстрого преобразования Фурье для вычисления сверток

12.2.1. Постановка задачи

Входные данные:

  1. Двумерная матрица векторов признаков featureMap(матрица признаков на некотором уровне пирамиды признаков). Данная матрица может быть представлена в виде трехмерного прямоугольного параллелепипеда размерности N^f_yN^f_xp, где N^f_x– число столбцов матрицы векторов, N^f_y- количество строк матрицы векторов, p=31 – размерность вектора признаков. Двумерную матрицу, полученную при каждом фиксированном p , будем называть каналом.
  2. Двумерная матрица весовых векторов фильтра filter (это может быть точный или грубый фильтр). Данная матрица может быть представлена в виде трехмерного прямоугольного параллелепипеда размерности N^g_yN^g_xp, где N^g_x– число столбцов матрицы весовых векторов, N^g_y – количество строк матрицы весовых векторов, p=31 – размерность вектора весов.

Выходные данные: двумерная матрица свертки conv размерности

(N^f_y-N^g_y+1)(N^f_y-N^g_y+1)

Задача: определить значения элементов матрицы свертки в соответствии с формулой

conv[i,j]=\sum^{N^g_y-1}_{di=0} \sum^{N^g_x-1}_{dj=0} \sum^{p-1}_{k=0} filter[di,dj,k]*featureMap[i+di,j+dj,k]
12.2.2. Этапы решения
  1. Для каждого канала f^s,s=\overline{0,(p-1)} матрицы векторов признаков featureMap оперделяем образ Фурье. Для этого используется двумерное дискретное преобразование Фурье. Для вычисления двумерного преобразования применяется одномерное БПФ сначала к строкам, потом к столбцам (или наоборот):

    F_{k_x,k_y}=\sum^{N^f_x-1}_{n_x=0} \sum^{N^f_y-1}_{n_y=0} {f_{n_x,n_y}*e^{-2\pi i\Biggl(\frac {k_xn_x} {N^f_x} +\frac {k_yn_y} {N^f_y}\Biggr)}} =\sum^{N^f_x-1}_{n_x=0} e^{-2\pi i\Biggl(\frac {k_xn_x} {N^f_x}\Biggr)} \sum^{N^f_y-1}_{n_y=0} {f_{n_x,n_y}} *e^{-2\pi i\Biggl(\frac {k_yn_y} {N^f_y}\Biggr)

    где 0 \leqslant k_x < (N^f_x-1),0 \leqslant k_y < (N^f_y-1).

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

  2. Для каждого канала g^s,s=\overline{0,(p-1)} матрицы весовых векторов фильтра filter получаем образ Фурье. Для этого матрицу весов каждого канала необходимо повернуть на 180^0 и дополнить нулями до размерности матрицы признаков, затем применить двумерное дискретное преобразование Фурье (аналогично применяется одномерное преобразование последовательно к строкам и столбцам):

    G_{k_x,k_y}=\sum^{N^f_x-1}_{n_x=0} \sum^{N^f_y-1}_{n_y=0} {g_{n_x,n_y}*e^{-2\pi i\Biggl(\frac {k_xn_x} {N^f_x} +\frac {k_yn_y} {N^f_y}\Biggr)}} =\sum^{N^f_x-1}_{n_x=0} e^{-2\pi i\Biggl(\frac {k_xn_x} {N^f_x}\Biggr)} \sum^{N^f_y-1}_{n_y=0} {g_{n_x,n_y}} *e^{-2\pi i\Biggl(\frac {k_yn_y} {N^f_y}\Biggr)

    где 0 \leqslant k_x < (N^f_x-1),0 \leqslant k_y < (N^f_y-1)

  3. Для каждого канала находим свертку образов Фурье pConv: pConv^s_{m,n}=\sum^{N^f_x-1}_{k_x=0} \sum^{N^f_y-1}_{k_y=0} G_{k_x,k_y} F_{k_x,k_y}

    где 0 \leqslant m < N^f_x-1,0 \leqslant n < N^f_y-1


    Рис. 14.7.
  4. Находим суммарную свертку по всем каналам sunPConv: sumPConv_{m,n}=\sum^{p-1}_{s=0} pConv^s_{m,n}, где 0 \leqslant m < N^f_x-1,0 \leqslant n < N^f_y-1
  5. Определяем прообраз Фурье для свертки, используя одномерное преобразование Фурье:
    conv_{m,n}=\frac 1 {(N^f_x-1)(N^f_y-1)}\sum^{N^f_x-1}_{n_x=0} \sum^{N^f_y-1}_{n_y=0}sumPConv_{n_xn_y}*e^{2\pi i\Biggl(\frac {nn_x} {N^f_x-1} +\frac {mn_y} {N^f_y-1}\Biggr)}
    =\frac 1 {(N^f_x-1)}\sum^{N^f_x-1}_{n_x=0} *e^{2\pi i\Biggl(\frac {mn_x} {N^f_x-1}\Biggr)} \frac 1 {(N^f_y-1)} \sum^{N^f_y-1}_{n_y=0}sumPConv_{n_xn_y}
    *e^{2\pi i\Biggl(\frac {nn_y} {N^f_y-1}\Biggr)}
    где 0 \leqslant m < N^f_x-1,0 \leqslant n < N^f_y-1
12.2.3. Одномерное дискретное преобразование Фурье

Постановка задачи:

\lbrace x_m \rbrace,m=\overline{0,(N-1)} – последовательность действительных чисел, N - произвольное число (в общем случае составное).

\lbrace \overline{x_k}=sum_{m=0}^{N-1}x_mW^{mk},W= e^{-\frac {2\pi i} {N}} \rbrace,k=\overline{0,(N-1)} – множество образов Фурье для последовательности \lbrace x_m \rbrace.

Задача состоит в том, чтобы определить множество образов Фурье.

Алгоритм:

Пусть N имеет два простых множителя N_1 и N_2. Тогда любые m и k можно представить в виде m=N_1m_2+m_1, m_1=\overline{0,(N_1-1)}, m_2=\overline{0,(N_2-1)} и k=N_2k_1+k_2, k_1=\overline{0,(N_1-1)}, k_2=\overline{0,(N_2-1)}. Как следствие, каждый элемент последовательности образов Фурье выражается следующим образом:

\overline{x_{N_2k_1+k_2}}=\sum_{N_1m_2+m_1=0}^{N-1} {x_{N_1m_2+m_1}W^{(N_1m_2+m_1)(N_2k_1+k_2)}}
=\sum_{m_1=0}^{N_1-1} W^{N_2k_1m_1}W^{m_1k_2} \sum_{m_2=0}^{N_2-1}x_{N_1m_2+m_1}W^{N_1k_2m_2}
=\sum_{m_1=0}^{N_1-1} W_1^{k_1m_1}W^{m_1k_2} \sum_{m_2=0}^{N_2-1}x_{N_1m_2+m_1}W_2^{k_2m_2}
=\sum_{m_1=0}^{N_1-1} W_1^{k_1m_1}W^{m_1k_2} \overline{y_{m_1,k_2}}

где

W_1=W^{N_2}=e^{-\frac {2\pi i} {N_1}},W_2=W^{N_1}=e^{-\frac {2\pi i} {N_2}

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

Андрей Терёхин
Андрей Терёхин

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

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

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

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