Лучший способ вычислить наилучший порог с помощью P. Viola, M. Jones Framework

Я пытаюсь реализовать структуру обнаружения П. Виолы и М. Джонса на C++ (в начале, просто классификатор последовательности -не каскадная версия). Я думаю, что разработал все необходимые классы и модули (, например интегральные изображения, функции Хаара), несмотря на один -самый важный:основной алгоритм AdaBoost.

Я прочитал оригинальную статью П. Виолы и М. Джонса и многие другие публикации. К сожалению, я до сих пор не понимаю, как мне найти лучший порог для одного слабого классификатора? Я нашел лишь небольшие ссылки на алгоритмы «взвешенной медианы» и «распределения по Гауссу» и множество фрагментов математических формул...

Я пытался использовать исходники модуля OpenCV Train Cascade в качестве шаблона, но он настолько всеобъемлющий, что обратный инжиниринг кода занимает очень много времени-. Я также написал свой собственный простой код, чтобы понять идею Adaptive Boosting.

Вопрос в том,:не могли бы вы объяснить мне, как лучше всего вычислить лучший порог для одного слабого классификатора?

Ниже я представляю псевдокод AdaBoost, переписанный из образца, найденного в Google, но я не уверен, что это правильный подход. Вычисление одного слабого классификатора занимает очень много времени (несколько часов)и у меня есть сомнения по поводу метода вычисления наилучшего порога особенно.

(1) AdaBoost::FindNewWeakClassifier
(2) AdaBoost::CalculateFeatures
(3) AdaBoost::FindBestThreshold
(4) AdaBoost::FindFeatureError
(5) AdaBoost::NormalizeWeights
(6) AdaBoost::FindLowestError
(7) AdaBoost::ClassifyExamples
(8) AdaBoost::UpdateWeights

DESCRIPTION (1)
-Generates all possible arrangement of features in detection window and put to the vector
DO IN LOOP
    -Runs main calculating function (2)
END

DESCRIPTION(2)
-Normalizes weights (5)
DO FOR EACH HAAR FEATURE
    -Puts sequentially next feature from list on all integral images
    -Finds the best threshold for each feature (3)
    -Finds the error for each the best feature in current iteration (4)
    -Saves errors for each the best feature in current iteration in array
    -Saves threshold for each the best feature in current iteration in array
    -Saves the threshold sign for each the best feature in current iteration in array
END LOOP
-Finds for classifier index with the lowest error selected by above loop (6)
-Gets the value of error from the best feature
-Calculates the value of the best feature in the all integral images (7)
-Updates weights (8)
-Adds new, weak classifier to vector

DESCRIPTION (3)
-Calculates an error for each feature threshold on positives integral images - seperate for "+" and "-" sign (4)
-Returns threshold and sign of the feature with the lowest error

DESCRIPTION(4)
- Returns feature error for all samples, by calculating inequality f(x) * sign < sign * threshold

DESCRIPTION (5)
-Ensures that samples weights are probability distribution

DESCRIPTION (6)
-Finds the classifier with the lowest error

DESCRIPTION (7)
-Calculates a value of the best features at all integral images
-Counts false positives number and false negatives number

DESCRIPTION (8)
-Corrects weights, depending on classification results

Спасибо за любую помощь.

10
задан default locale 12 June 2013 в 09:09
поделиться