Более быстрый способ извлечения HOG изображения в скользящем окне в Matlab

Я хочу извлечь HOG каждого скользящего окна размера [wH, wW] изображения I.

В настоящее время у меня есть:


windows = im2col(I, [wH,wW]);

for i=1:step:size(windows,2)

    sub = reshape(windows(:,i), [wH,wW]);

    features(i,:) = featuresExtraction(sub);

end

в котором скрипт featuresExtraction будет извлекать HOG и т. д.

Я пытаюсь бежать и видеть, что он работает очень медленно. Есть ли у вас какие-либо предложения сделать его лучше?

1
nl ja de

1 ответы

Прежде всего, я предлагаю вам профилировать свой код с помощью профилировщика Matlab.

Когда вы это сделаете, я думаю, вы увидите, что либо функция featuresExtraction , либо im2col является причиной медленных вычислений. im2col - это функция, которая также вызывает другие функции Matlab. Вы можете видеть, что когда вы помечаете имя функции и проверяете щелчком правой кнопки мыши на «Open Selection», если в недавно открытом файле есть много кода Matlab.

Цикл для кажется правильным, но, конечно, ваш код выполняет итерацию по всем возможным окнам изображения, и это очень медленно, особенно в петлях Matlab происходит очень медленно.

When you really want to speed up your code I propose that you implement the computational expensive methods in C with a MEX interface. For a good tutorial check this out: A Short MEX Tutorial and Demo

0
добавлено
Можете ли вы рассказать мне, насколько велики ваши изображения и насколько сложным является метод featuresExtraction ? Я думаю, что featuresExtraction реализовано для вычисления функций ровно одного маленького окна. В качестве примера, если featuresExtraction не поддерживает входную матрицу размера [wH, wW, size (windows, 2)] или какой-либо другой формат ввода, который может помешать этому < code> for , вам придется жить с этой скоростью.
добавлено автор who9vy, источник
На самом деле это цикл «for», который замедляет работу. Я бы предпочел иметь решение Matlab для этого, вместо того, чтобы писать другой файл C (я не очень хорошо знаком с C). А также, в функции 'featureExtraction', я также вызываю функции из других libs. Поэтому я не уверен, как написать код C для этого.
добавлено автор Phu Tran Thanh, источник