Гауссова модель смеси для вычитания фона - PullRequest
2 голосов
/ 10 октября 2019

Это больше похоже на то, что я хотел бы обсудить с сообществом, чем на то, что я ищу для абсолютного ответа.

Я пытаюсь реализовать алгоритм вычитания фона на основе GMM с нуля. Судя по всему, OpenCV уже хорошо реализовал его (MOG2). Я все еще пытаюсь реализовать это с нуля, так как я хотел бы протестировать некоторые параметры, к которым OpenCV не предоставляет доступ. Тем не менее, моя реализация была очень медленной при работе с изображениями 4К и заняла огромное количество памяти, в то время как OpenCV может достигать 5-10 изображений в секунду или даже быстрее и не занимает много памяти. Я НЕ удивлен, что OpenCV был намного быстрее моего, но все же любопытно, как это было достигнуто.

Итак, вот мои мысли:

  • Подход GMM заключается в построении смеси гауссианов для описания фона / переднего плана для каждого пикселя . Тем не менее, каждый пиксель будет иметь 3-5 связанных трехмерных гауссовых компонентов. Мы можем упростить вычисления, используя общую дисперсию для разных каналов вместо ковариации. Тогда у нас должно быть как минимум 3 средних, 1 дисперсия и 1 весовой параметр для каждого гауссова компонента. Если предположить, что каждый пиксель будет поддерживать 3 компонента. Это будет примерно 4000 *2000* 3 * (3 + 1 + 1) параметров при чтении изображения.

  • Вычисление для обновления GMM, хотя оно не очень сложное для одного пикселя, общее количество времени для вычисления целых 4000 * 2000 пикселей все равно должно быть очень дорогим.

  • Я не думаю, что OpenCV MOG2 был ускорен CUDA, когда я тестировал на своем Mac без графической карты. Скорость была все еще быстрой.

Итак, мой вопрос:

  • Сжимает ли OpenCV изображение перед подачей его в модель и распаковывает результаты при возврате?
  • Можно ли добиться обработки почти в реальном времени для изображений 4k (без сжатия изображений) с распараллеливанием на ЦП?
  • Моя реализация использовала 4000 * 2000 двойных связанных списков для поддержки гауссовых компонентов для изображений 4k. Я ожидал, что это должно сэкономить мне немного памяти, но память все еще взорвалась, когда я проверил это на образе 4k.

Plus:

  • Я тестировал OpenCVMOG2 на измененном изображении ((3840, 2160) до (384, 216)), и обнаружение кажется приемлемым.

Это может быть странный вопрос ... Но я был бы признателен за любые мнения по этому поводу.

...