Использует ли свертка в ArrayFire БПФ?

Я с нетерпением жду возможности ускорить свертку с помощью производной ядра Гаусса (до порядка 2/3) на больших медицинских изображениях (512 x 512 x 1000 double) в одном из наших наборов инструментов с открытым исходным кодом. В настоящее время мы делаем эту свертку с помощью БПФ.

После того, как друг предложил ArrayFire и прочитал этот post Я пытаюсь понять, смогу ли я использовать этот инструментарий. Кажется, это требует больших усилий и позволяет нам обрабатывать несколько бэкэндов, хотя в настоящее время меня интересует только CUDA, поскольку это то, что у меня есть.

Я прочитал это сообщение на форуме говорится, что свертка в ArrayFire переключается в частотную область после определенного размера ядра. Я посмотрел файл cuda convolve.cu, но я не нашел никаких вызовов fft в ArrayFire или каких-либо материалах cuFFT. Я что-то упускаю?

В дальнейшем я хотел бы построить производную ядра Гаусса непосредственно в частотной области, умножить на БПФ изображения и вернуть его обратно. Но я хотел бы сравнить ускорение между созданием ядра свертки в пространстве и частотной области. Кроме того, ArrayFire, похоже, не имеет ядра Гаусса в 3D.


person cdeepakroy    schedule 25.03.2015    source источник


Ответы (1)


Ваше наблюдение верно, мы еще не реализовали резервный вариант fft для больших размеров ядра. Тем не менее, мы стараемся добавить эту функцию в ближайшие пару недель. Какие размеры ядра вы используете в своем приложении?

В настоящее время у нас нет реализованной функции ядра 3D Gaussian. Но я считаю, что это можно легко реализовать с помощью поэлементных операций с поддержкой JIT в ArrayFire. Пример использования поэлементных операций см. на странице . здесь.

person pradeep    schedule 26.03.2015
comment
зависит от конкретной проблемы. Я бы предположил где-то до 40х40х40. Но тогда для больших размеров ядра люди, вероятно, уменьшат размер изображения и прогонят материал через гауссову пирамиду изображений. - person cdeepakroy; 26.03.2015