HAAR разъяснение классификатора
Я пытаюсь понять, как работают классификаторы Хаара. Я читаю документацию opencv здесь: http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html и кажется, что вы в основном обучаете набор данных, чтобы получить что-то вроде шаблона. Затем вы накладываете шаблон на фактическое изображение, которое хотите проверить, и просматриваете каждый пиксель, чтобы увидеть, является ли он вероятным или нет вероятным. Итак, предполагая, что это правильно, я дошел до того, что смотрел на фото ниже и не понял. Предполагается ли, что блоки представляют регионы "вероятного" и "маловероятного"? заранее спасибо
1 ответ
Эти шаблоны являются характеристиками, которые оцениваются для вашего тренировочного имиджа. Например, для функции 1а тренировочный процесс находит квадратные области на всех ваших тренировочных изображениях, где левая половина обычно ярче правой (или наоборот). Для функции 3а тренировка находит квадратные области, где центр темнее окружающего.
Эти особенности, которые вы изобразили, были выбраны для каскада Хаара не потому, что они особенно хороши, а главным образом потому, что они очень быстро оцениваются.
Более конкретно, при обучении каскада Хаара обнаруживается одна особенность, которая лучше всего помогает дифференцировать ваши положительные и отрицательные тренировочные образы (примерно такая особенность, которая чаще всего верна для положительных изображений и чаще всего ложна для отрицательных изображений). Эта особенность станет первым этапом получившегося каскада Хаара. Второй лучшей особенностью станет второй этап и так далее.
После обучения каскад Хаара состоит из ряда правил или этапов, например:
- оцените признак 1a для региона (x1;y1)-(x2;y2). Результат превышает пороговое значение z1?
(имеется в виду: левая половина этой области на определенную величину ярче, чем правая?)- если да, вернуть "не совпадает"
- если нет, выполнить следующий этап
В классическом каскаде Хаара каждое такое правило, включающее только одну особенность в одном месте с одним порогом, представляет собой стадию каскада. OpenCV на самом деле использует усиленный каскад, что означает, что каждый этап состоит из комбинации нескольких из этих простых функций.
Принцип остается неизменным: каждый этап является очень слабым классификатором, который сам по себе едва ли лучше, чем дикие догадки. Порог для каждого этапа выбирается таким образом, чтобы вероятность ложных негативов была очень низкой (поэтому этап почти никогда не будет ошибочно отклонять хорошее совпадение, но довольно часто ошибочно принимает неудачное совпадение).
Когда каскад Хаара выполняется, все этапы выполняются по порядку; только изображение, которое проходит первый И второй И третий... этап будет принят.
Во время обучения первый этап также тренируется первым. Затем второй этап тренируется только с тренировочными изображениями, которые пройдут первый этап, и так далее.