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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

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

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

Из некоторой бумаги в Google:

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

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

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

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

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

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

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

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

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