Объяснение алгоритмов AdaBoost нетехническим людям

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

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

3 ответов


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

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

надеюсь, что это помогает.


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

Как это работает? В очень упрощенном виде:

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

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

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

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


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

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

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

из какой-то бумаги в Гугле:

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

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

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

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

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

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

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

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

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