Содержание
Каскад Хаара
- Допустим, у нас есть один миллион изображений: полмиллиона изборажений мотоциклов и полмиллиона изображений не-мотоциклов (это называется обучающая выборка). В реальности, кстати, такая чудная ситуация (доля мотоциклов равно доле не-мотоциклов) бывает чрезвычайно редко.
- Мы хотим научить компьютер отличать изображения мотоциклов от изображений не-мотоциклов. Для этого мы проводим обучение. Сначала мы «рассказываем» компьютеру, что является мотоциклом, а что не является. Это называется обучение с учителем, если компьютер неким образом сам смог бы научиться распознавать мотоциклы от не-мотоциклов без внешней помощи, то это было бы обучение без учителя: подробнее смотри статью: ...
- После обучения бы даём компьютеру миллионпервое изображение, а комьютер выдаёт 1 («ДА», «ИСТИНА», «это мотоцикл»), если это изображение мотоцикла, и 0 («НЕТ», «ЛОЖЬ», «это не-мотоцикл»), если это изображение не-мотоцикла. В реальной практике мы даём не одно изображение, а, допустим, сто тысяч (эти сто тысяч называются тестовой выборкой). По тому, как компьютер научился разделять мотоциклы от не-мотоциклов, мы судим о качестве нашего обучения. Для этого чаще всего используются следующие показатели:
- доля верно определённых мотоциклов (на изображении мотоцикл, компьютер определил его как мотоцикл: TP — True Positive),
- доля верно определённых не-мотциклов (на изображении не-мотоцикл, компьютер определел его не-мотоцикл: TN — True Negative),
- доля неверно определённых мотоциклов (на изображении не-мотоцикл, компьютер его определил как мотоцикл: FP — False Positive),
- доля неверно определённых не-мотоциклов (на изображении мотоцикл, компьютер его определил как не-мотоцикл: FN — False Negative).
- Таким образом, компьютер проводит разделение поступающего множество на два класса, или, говоря иначе, выполняет задачу классификации.
Формально говоря, каскад Хаара выполняет задачу классификации ‒ разделения множества объектов на классы. В нашем случае объекты - это входные изображения. А класса всего два: искомый объект и все остальное. Говоря проще, каскад Хаара принимает на вход изображение и выдает один из двух ответов: "да" и "нет".
Что бы каскад Хаара определял, есть ли искомый объект на входном изображении, его нужно обучить. То есть, задать ему такую структуру, что бы он выдавал положительный результат для изображений с искомым объектом, и отрицательный в другом случае. В данном случае используется обучение с учителем, т.е. имеется обучающая выборка (набор разных изображений) и данные, указывающие, какие из этих изображений содержат искомый объект. Обучение может занимать очень много времени: иногда даже по несколько дней.
- «В данном случае используется обучение с учителем»: читатель вообще может не понимать, что такое обучение с учителем (и не знать, чем оно отличается от обучения без учителя). В одном научном журнале по точных наукам мне на фразу «это алгоритм обучения без учителя» мне ответили: «Мы не публикуем статьи по педагогике». -- АтрашкевичАндрей
Правильно обученный каскад Хаара может достаточно быстро классифицировать изображения и имеет неплохую устойчивость к шумам и другим отклонениям.
- «имеет неплохую устойчивость к шумам и другим отклонениям»: неплохую по отношению к чему? что есть шум? что за отклонения? -- АтрашкевичАндрей
Признаки Хаара.
Признак Хаара является набором прямоугольных областей изображения, примыкающих друг к другу и разделенных на две группы. Возможных признаков Хаара огромное множество (разнообразные комбинации областей разной ширины и высоты с разными позициями на изображении). Первоначальный набор признаков зависит от реализации и конкретной задачи: обычно используют такие комбинации прямоугольных областей:
Чтобы вычислить значение конкретного признака Хаара для какого-либо изображения, надо сложить яркости пикселей изображения в первой и второй группах прямоугольных областей по отдельности, а затем вычесть из первой полученной суммы вторую. Полученная разность и есть значение конкретного признака Хаара для данного изображения.
К примеру, на изображении белые прямоугольники ‒ это первая группа группа областей, а черные ‒ вторая. Значение признака Хаара ‒ это разность сумм яркостей пикселей первой и второй группы. В математической форме это будет выглядеть так:
где ‒ яркость пискеля изображения с координатами , ‒ сумма яркостей пикселей в -й области первой группы, ‒ сумма яркостей пикселей в -й области второй группы, ‒ значение признака Хаара для этого изображения, ‒ высота -й области первой группы, ‒ ширина -й области первой группы, ‒ высота -й области второй группы, ‒ ширина -й области второй группы, ‒ количество областей первой группы, ‒ количество областей второй группы, а ‒ значение признака Хаара для этого изображения.
Интегральная форма представления изображения.
Вычисление значения каждого признака Хаара для изображения требует много операций сложения. Однако, если использовать интегральную форму изображения, количество вычислений можно сильно уменьшить.
В интегральной форме изображения значение каждого пикселя является суммой яркостей этого пикселя и всех пикселей, что находятся выше и левее него (если пиксель с координатами находится в верхнем левом углу изображения):
где ‒ значение пикселя интегральной формы изображения с координатами , а ‒ значение пикселя исходного изображения с координатами .
Переведя изображение в интегральную форму, можно вычислять значения признаков Хаара для него, не выполняя суммирование всех требуемых значений яркостей каждый раз по новой. Достаточно посчитать сумму яркостей для каждой прямоугольной области, используя свойства интегральной формы изображения:
где ‒ значение пикселя интегральной формы изображения. Далее можно вычислить значение признака Хаара как обычно:
Пример: для того, что бы вычислить сумму значений пикселей в прямоугольнике , изображенном на рисунке можно использовать интегральную форму изображения: в ней точка будет являться суммой значений пикселей в прямоугольнике , точка ‒ суммой значений пикселей в прямоугольниках и , точка ‒ суммой значений пикселей в прямоугольниках и , а точка ‒ суммой значений пикселей в прямоугольниках , , и . Тогда сумма значений пикселей в прямоугольнике будет равна .
Алгоритм AdaBoost.
Для выбора признаков, лучше всего классифицирующих изображения используется алгоритм AdaBoost (adaptive boosting). Этот алгоритм построен на идее, что из большого числа простых способов классификации (называемых слабыми классификаторами) можно составить, новый способ, выполняющий эту задачу намного эффективнее.
В данном случае слабый классификатор ‒ это функция, которая принимает на вход изображение, вычисляет значение соответствующего ей признака Хаара для этого изображения и сравнивет это значение с порогом, возвращая либо , либо .
где ‒ порог, ‒ входное изображение, ‒ результат вычисления значения соотвествующего признака Хаара для изображения , ‒ направление знака неравенства, а ‒ слабый классификатор.
принимает одно из двух значений: или . Если оно равно , ничего не меняется, если же оно равно , знак неравенства начинает работать в обратную сторону. Такая запись используется, из-за своей краткости, а так же потому, что при реализации на некоторых архитектурах, операция умножения работает намного быстрее, чем условные операторы.
Данный алгоритм перебирает все возможные слабые классификаторы (как уже говорилось, возможных признаков Хаара огромное количество, что не лучшим образом влияет на скорость обучения) и выбирает те, которые допускают меньше всего ошибок. Важная особенность алгоритма в том, что каждому изображению из обучающей выборки соответсвует определенный вес, и после выбора очередного слабого классификатора веса перераспределяется так, что неверно классифицированные изображения начинают сильнее влиять на значение ошибки. Ниже приведен полный алгоритм:
Входные данные:
- ‒ -й слабый классификатор
- ‒ -й обучающий пример.
- ‒ , если -й обучающий пример отрицательный, и , если -й обучающий пример положительный.
- ‒ количество обучающих примеров.
Переменные:
- ‒ вес, соответствующий -му обучающему примеру.
- ‒ число отрицательных примеров.
- ‒ число положительных примеров.
- ‒ ошибка -го слабого классификатора.
- ‒ слабый классификатор, выбранный на -й итерации.
- ‒ минимальное значение ошибки слабого классификатора на текущей итерации.
- ‒ минимальное значение ошибки слабого классификатора на -й итерации, представленное в другой форме (для оптимизации вычислений и экономии места).
Алгоритм:
- Инициализировать веса обучающих примеров:
- Для :
- Нормализовать веса обучающих примеров:
- Вычислить значение ошибки для каждого слабого классификатора:
- Hайти классификатор с минимальной ошибкой:
- Обновить веса обучающих примеров:
- Итоговый конечный классификатор:
Каскад классификаторов.
КатегорияМашинноеОбучение