Улучшить производительность анализа плотного оптического потока (легко)?

Я написал программу, которая использует OpenCV cvCalcOpticalFlowLK. Он отлично работает на входе веб-камеры с низким разрешением, но мне нужно запустить его на потоке Full HD со значительными другими вычислениями после анализа оптического потока для каждого кадра. Обработка 5-минутного видео, уменьшенного до 1440x810, заняла 4 часа :( Большая часть времени уходит в cvCalcOpticalFlowLK.

Я исследовал возможность повышения скорости за счет добавления большего количества необработанных процессоров, но даже если я получу 8-ядерного зверя, а ускорение является теоретическим идеалом (скажем, в 8 раз, поскольку я в основном использую только одно из своих ядер с частотой 2,9 ГГц), Я бы получил только 4FPS. Я хотел бы достичь 30FPS.

Другие исследования, кажется, указывают на реализацию его на графическом процессоре с помощью CUDA, OpenCL или GLSL (?). Я нашел несколько реализаций, подтверждающих концепцию (например, http://nghiaho.com/?page_id=189), и во многих документах в основном говорится: «Это отличное приложение для графического процессора, мы сделали это, это было потрясающе, и мы не будем делиться нашим кодом». Излишне говорить, что я не заставил ни одного из них бежать.

Кто-нибудь знает о реализации на основе графического процессора, которая будет работать на Mac с картой NVIDIA? Существуют ли ресурсы, которые могли бы помочь мне приступить к написанию собственных? Существуют ли другие плотные алгоритмы OF, которые могут работать лучше?

Спасибо!


person Ian    schedule 01.09.2011    source источник
comment
Поскольку данные оптического потока выводятся только в двух измерениях, уверены ли вы, что получаете лучшие результаты с изображением с более высоким разрешением? Я бы не подумал, что это будет иметь большое значение. Может быть, вы могли бы просто сначала уменьшить масштаб отснятого материала еще больше, запустить сравнение с версией в полном разрешении и проверить точность — или вы могли бы просто увеличить параметр winSize.   -  person Seb Holzapfel    schedule 01.09.2011
comment
да, я уменьшаю изображение, используемое для анализа оптического потока. Когда разрешение становится слишком низким, в исходном изображении теряются детали. В идеале я хотел бы, чтобы он мог работать в полном разрешении.   -  person Ian    schedule 02.09.2011


Ответы (1)


Как насчет байесовского оптического потока OpenVidia? Также в статье Плотный и точный параллельный оптический поток в реальном времени с использованием CUDA говорится, что их работа находится в свободном доступе в зоне CUDA. Не сразу нашел там, но может найдёте, или может напишите авторов?

person w-m    schedule 01.09.2011
comment
Спасибо. Похоже, что первым является Windows, но он может послужить хорошей отправной точкой. Второй - один из тех документов, которые я упомянул в своем первом посте. Может быть, написание авторов поможет. Также нашел это на странице OpenVIDIA, в которой, по их словам, есть учебник LK: amazon.com/gp/product/0321749642 - person Ian; 02.09.2011