Обчислювальна складність кореляції в часі проти множення в частотному просторі


12

Я працюю з 2d співвідношенням для технік обробки зображень (розпізнавання візерунків тощо ...). Мені було цікаво, чи існує теоретичний підхід щодо того, як сказати, коли використовувати множення у просторі частот над кореляцією у часовому просторі. Для розмірів 2 х частотний простір, очевидно, швидше, але як щодо маленьких, простих розмірів, наприклад 11?

Відповіді:


10

Я припускаю, що це робиться на звичайному процесорі, одному ядрі, виконуючи один простий потік, без фантазійного обладнання. Якщо це відбувається більше, це, ймовірно, може бути пояснено коригуванням міркувань простішої системи. Не набагато більше можна сказати без конкретної системи для обговорення, чи цілого підручника чи науково-дослідної роботи, що охоплює цілий ряд можливостей.

Я б не турбувався про потужність двох розмірів. Це не має значення. Алгоритми FFT з одиницями метеликів і всіма, що існують для факторів 3, або будь-якої невеликої кількості, а не лише 2. Існують розумні алгоритми і для великих розмірів даних. Мені не подобається цитувати Вікіпедію про це через його непостійний характер, але все одно:

існують FFT з O (N log N) складністю для всіх N, навіть для простих N

Реалізація FFT для довільних N можна знайти в бібліотеці GPL'd FFTW .

Єдиний надійний спосіб з точки зору серйозної інженерії - це побудувати та виміряти, але ми, звичайно, можемо отримати уявлення з теорії, побачити зв’язки між змінними. Нам потрібні оцінки, скільки арифметичних операцій бере участь у кожному методі.

Перемноження все ще повільніше, ніж додавання на більшості процесорів, навіть якщо різниця різко зменшилася за ці роки, тому давайте просто порахувати множення. Облік додатків вимагає трохи більше роздумів і відстеження речей.

Пряма згортання, насправді множення та додавання за допомогою ядра згортки, повторюючи для кожного вихідного пікселя, потребує множення W² · K², де W - кількість пікселів уздовж однієї сторони зображення (припускаючи квадрат для простоти), а K - розмір ядра згортки як пікселі вздовж однієї сторони. Для обчислення одного вихідного пікселя потрібне множення K² за допомогою ядра та однакового розміру вхідного зображення. Повторіть для всіх вихідних пікселів, які мають таку ж цифру, як у вхідному зображенні.

(N мульт ) прямий = W² · K²

Щоб виконати роботу в просторі Фур'є, ми повинні Фур'є перетворити зображення. Це робиться, застосовуючи FFT до кожного стовпця окремо, а потім до кожного рядка. FFT для N точок даних займає приблизно 2N · log (N) множення; ми хочемо, щоб N було W, довжина одного стовпця або ряду. Усі логарифми тут є базовими двома.

Є W рядки та W стовпці, тому після того, як всі FFT будуть виконані, ми зробили множення 2W · (2W · log (W)). Удвічі це, тому що після того, як ми помножимо перетворення Фур'є ядра, нам доведеться перевернути дані Фур'є, щоб повернутися до розумного зображення. Це 8W² · журнал (Вт). Звичайно, потрібно перемножувати на перетворення Фур'є ядра ще одне множення W². (Зроблено один раз, а не один раз на вихідний піксель, на рядок чи що-небудь інше.) Це складні множення, тому це 4W² реальні множення.

Тож, якщо я не заграю (і я, мабуть, зробив) у нас є

(N mult ) Фур'є = 4W² · (2 ​​· log (W) + 1)

Коли ми хочемо робити речі прямо? Коли K достатньо малий, щоб W² · K² менше 4W² · (2 ​​· log (W) + 1). Загальний фактор W² легко з'ясовується. Ми, мабуть, можемо скинути "+1", оскільки маємо справу з ідеалізованими оцінками. +1, ймовірно, втрачається в помилках відносно фактичних реалізацій, не враховуючи доповнень, накладних витрат та ін. Це листя:

K² < 8·log(W)

Це приблизна умова вибору прямого підходу через підхід частотного простору.

Зауважте, що співвідношення двох зображень однакового розміру - це подібно до об'єднання ядра розміром K = W. Простір Фур'є - це завжди спосіб.

Це можна вдосконалити та аргументувати, щоб врахувати накладні витрати, конвеєрні конвеєри, поплавок проти фіксованої точки та викинути у вікно за допомогою GPGPU та спеціалізованого обладнання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.