Объяснение алгоритмов AdaBoost нетехническим людям - PullRequest
10 голосов
/ 17 декабря 2009

Я пытался понять алгоритм AdaBoost без особого успеха. Я изо всех сил пытаюсь понять в качестве примера статью Виолы Джонса по распознаванию лиц .

Можете ли вы объяснить AdaBoost с точки зрения непрофессионалов и привести хорошие примеры его использования?

Ответы [ 3 ]

12 голосов
/ 19 февраля 2010

Adaboost - это алгоритм, который объединяет классификаторы с низкой производительностью, то есть со слабыми учениками, в более крупный классификатор с гораздо более высокой производительностью.

Как это работает? Очень упрощенно:

  1. Тренируйте слабого ученика.
  2. Добавьте это к группе слабых учеников, обученных до сих пор (с оптимальным весом)
  3. Повышение важности образцов, которые все еще не классифицированы.
  4. Перейти к 1.

За кулисами существует широкая и подробная теория, но интуиция такова: пусть каждый «тупой» классификатор сосредоточится на ошибках, которые предыдущие не смогли исправить.

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

В Альте и Джонсе каждый тип слабого ученика связан с одной из 4 или 5 различных функций Хаара, которые вы можете иметь.

9 голосов
/ 23 декабря 2009

AdaBoost использует несколько обучающих образцов изображений (таких как лица), чтобы выбрать ряд хороших «функций» / «классификаторов». Для распознавания лиц классификаторы обычно представляют собой просто прямоугольник пикселей, который имеет определенное среднее значение цвета и относительный размер. AdaBoost рассмотрит ряд классификаторов и выяснит, какой из них является лучшим предиктором лица, на основе образцов изображений. После того, как он выбрал лучший классификатор, он продолжит поиск другого и другого, пока не будет достигнут некоторый порог, и эти классификаторы, объединенные вместе, дадут конечный результат.

Этой частью вы, возможно, не захотите делиться с нетехническими людьми :), но она все равно интересна. Есть несколько математических приемов, которые делают AdaBoost быстрым для распознавания лиц, например, возможность сложить все значения цвета изображения и сохранить их в двумерном массиве, так что значение в любой позиции будет суммой всех пикселей вверх и слева от этой позиции. Этот массив может быть использован для очень быстрого вычисления среднего значения цвета любого прямоугольника в изображении путем вычитания значения, найденного в верхнем левом углу, из значения, найденного в нижнем правом углу, и деления на количество пикселей в прямоугольнике. Используя этот прием, вы можете быстро сканировать все изображение в поисках прямоугольников разных относительных размеров, которые соответствуют или близки к определенному цвету.

Надеюсь, это поможет.

3 голосов
/ 11 декабря 2012

Это понятно. Большинство статей, которые вы можете найти в Интернете, содержат документы Viola-Jones и Freund-Shapire, которые являются основой AdaBoost, применяемые для распознавания лиц в OpenCV. И они в основном состоят из сложных формул и алгоритмов из нескольких математических областей вместе взятых. Вот что может вам помочь (достаточно коротко) -

1 - используется в объектах и, в основном, в распознавании лиц. Самая популярная и неплохая библиотека C ++ - это OpenCV от Intel. В качестве примера я использую функцию распознавания лиц в OpenCV.

2 - Во-первых, каскад повышенных классификаторов , работающий с выборочными прямоугольниками («особенности»), обучается на выборке изображений с лицами (называемыми положительными) и без лица (негатив).

Из какой-то бумаги с гуглом:

"· Повышение относится к общему и доказуемо эффективному методу получения очень точного классификатора путем объединения грубых и умеренно неточных правил.

· Это основано на наблюдении, что найти много грубых эмпирических правил может быть намного проще, чем найти один, очень точный классификатор.

· Для начала мы определим алгоритм нахождения эмпирических правил, который мы называем слабым учеником.

· Алгоритм повышения постоянно называет этого слабого ученика, каждый раз предоставляя ему различное распределение данных обучения (в AdaBoost).

· Каждый вызов генерирует слабый классификатор, и мы должны объединить все это в один классификатор, который, как мы надеемся, гораздо более точен, чем любое из правил. "

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

Это может занять неделю, и в результате получается файл XML, который содержит усвоенную информацию о том, как быстро обнаружить человеческое лицо, скажем, во фронтальной позиции на любом изображении (в любом случае это может быть любой объект).

3 - После этого вы передаете этот файл в программу распознавания лиц OpenCV, которая работает довольно быстро с положительной скоростью до 99% (в зависимости от условий). Как уже упоминалось, скорость сканирования может быть значительно увеличена с помощью техники, известной как «встроенное изображение».

И, наконец, это полезные источники - Обнаружение объектов в OpenCV и Обнаружение общих объектов с использованием AdaBoost от Калифорнийского университета, 2008.

...