- Регистрация
- 12.04.17
- Сообщения
- 19.095
- Реакции
- 107
- Репутация
- 0

Привет Хабр! Сегодня снова поговорим про распознавание. А именно, про такую простую модель распознавателя как каскадный классификатор. Именно каскад используется в популярном методе Виолы и Джонса, про который уже так много раз писали на Хабре (например,
You must be registered for see links
,
You must be registered for see links
и
You must be registered for see links
). Грусть в том, что несмотря на обилие статей, всерьез каскадные классификаторы никто не изучал. И не только на Хабре, но и научном сообществе. Хотя каскадный классификатор кажется простым, там достаточно много подводных камней и интересных особенностей. Поэтому мы спешим поделиться с вами своими знаниями. Так что, если интересно, добро пожаловать под кат.Каскадный классификатор – очень простая модель. Он состоит из нескольких последовательных уровней, каждый из которых представим в виде бинарного классификатора. Исследуемый прецедент подается на вход первому уровню и далее «путешествует» уровень за уровнем. Если на очередном уровне классификатор признает прецедент отрицательным, то он уже не анализируется оставшимися классификаторами каскада. Такая простая модель стала популярна после публикации метода Виолы и Джонса [1], где, как заявляется, она использовалась для обеспечения высокой производительности. Но только ли для этого? Так ли просто каскадный классификатор? Давайте разбираться!
Сегодняшнюю статью на Хабре мы построим в новом для нас формате. Мы выберем несколько утверждений, которые детально раскроем и даже где-то даже опровергнем. Итак, давайте приступим!
Каскадный классификатор в методе Виолы и Джонса используется просто для ускорения работы детектора объектов
В оригинальной статье [1] на самой первой странице есть такая фраза:
The third major contribution of this paper is a method for combining successively more complex classifiers in a cascade structure which dramatically increases the speed of the detector by focussing attention on promising regions of the image.
Действительно, оригинальный метод Виолы и Джонса предназначен для поиска объектов на изображении. Причем задача детектирования решается методом скользящего окна с помощью бинарного классификатора, который прикладывается в каждой точке исследуемого изображения в разных масштабах. Несбалансированность исследуемых данных на этапе детекции («пустых» регионов без искомого объекта на каждом исследуемом изображении в миллионы и даже в миллиарды раз больше, чем регионов с объектами) побудило к использованию каскада – механизму, который позволяет быстро отсекать «пустые» регионы.
Но это было про применение уже обученного классификатора. Теперь давайте обратимся к процедуре обучения классификатора. Оказывается, здесь присутствует ровно та же самая проблема несбалансированности выборки: количество негативных примеров оказывается во много раз больше (в миллионы и даже миллиарды раз больше), чем количество положительных примеров. Но благодаря своей архитектуре каждый новый уровень каскада обучается методом AdaBoost не на всей отрицательной обучающей выборке, а только на ограниченном наборе из ошибок предыдущих уровней каскада! Это позволяет запускать машину обучения AdaBoost на сбалансированной и ограниченной выборке!
Как видите, применение каскадного классификатора в методе Виолы и Джонса выстреливает дважды:
- Позволяет легко обучить классификатор, естественным образом избегая проблемы «бесконечной» обучающей выборки;
- Обеспечивает быстрое отсечение «пустых» регионов при детекции объектов, за счет чего достигается высокая производительность в среднем.
Что же, давайте продолжим изучать классический каскад и обратимся к вопросу производительности.
С учетом вышесказанного каскадный классификатор — инструмент для ускорения
Вернемся еще раз к вопросу о предназначении каскада, но теперь с другой стороны. Если посмотреть на каскадный классификатор математически, то видно, что каскад представляет собой конъюнктивную форму сильных классификаторов (каждый из которых представим в виде линейной композиции признаков):
где
В условиях ограниченного количества доступных признаков (что на практике, при погоне за производительностью, оказывается нормальной ситуацией) конъюнктивная форма сильных классификаторов обладает большей выразительной способностью, чем одиночный линейный классификатор. Это легко понять, если представить простой пример, где пространство признаков состоит из двух элементов, а положительные и отрицательные объекты, выраженные в координатах данных признаков расположены как показано на рисунке ниже (зеленым проиллюстрированы положительные объекты, а красным – отрицательные). Понятно, что не существует такого одиночного линейного классификатора, который сможет корректно разделить данную выборку. Зато каскад из четырех уровней справился бы с этой задачей гарантировано.

Таким образом, применение каскадного классификатора, в дополнение к повышению производительности, обеспечивает также большую выразительную силу, чем одиночный линейный классификатор, в условиях ограниченного числа признаков.
Каскадный классификатор обеспечивает стабильно высокую производительность и может спокойно использоваться в системах распознавания в режиме реального времени
Как мы выше рассказали, каскадная схема позволяет добиться высокой производительности за счет быстрого отсеивания «пустых» регионов, поскольку их количество на несколько порядков превышает количество регионов, содержащих объект. Время обработки «пустого» региона отличается от времени обработки региона с объектом в несколько раз (пропорционально длине каскада – количеству уровней каскада).
Поскольку количество регионов, содержащих объект, отличается от изображения к изображению, отличается и время обработки каждого кадра. За счет того, что регионов с объектом на кадре заметно меньше регионов без объекта, различие во времени обработки измеряется не десятками раз, но десятками процентов, что, тем не менее, существенно в промышленных системах распознавания.
Таким образом, время работы каскадного классификатора на разных картинках может существенно отличаться. Отсюда, при выполнении серьезных замеров производительности классификаторов следует делать замеры времени работы в среднем и в худшем случаях. И всегда быть готовым к таким временным «непостоянностям» при использовании каскадных классификаторов.
В своей практике мы уже сталкивались с серьезными проблемами из-за существенного расхождения времени работы каскада в среднем и худшем случаях. В рамках проекта по автоматизации платных автодорог мы решали задачу распознавания типа автомобиля, где в качестве одной из основных подзадач стояла проблема подсчета колесных пар. Конечно, для детекции колес на отдельных кадрах мы использовали метод Виолы и Джонса. За счет большой вариативности колес (см. рисунок ниже) обученный каскад был достаточно длинным (20 уровней). Мы живьем наблюдали неприятные проблемы, связанные с разным временем обработки каждого кадра, что всерьез мешало нам строить систему распознавания в режиме реального времени.

Тогда мы развили идею классического каскадного классификатора до полноценного решающего дерева, разработав уникальную технологию обучения такого решающего дерева (помним, что необходимо было предложить алгоритм, который позволил бы нам избежать проблемы, связанные с «бесконечной» обучающей выборкой). Детали этого алгоритма можно найти в нашей научной работе [3]. Здесь же сообщим лишь несколько фактов:
- Самый длинный путь в обученном дереве состоит из 6 сильных классификаторов (схема обученного древовидного классификатора представлена на рисунке ниже).
- Обученный древовидный классификатор обеспечивал лучшее качество работы по сравнению с обученным ранее каскадом. Это закономерно и следует из того, что выразительная сила древовидного каскада (который представляет собой конъюнктивно-дизъюнктивной формы) выше выразительной силы каскада (конъюнктивной формы).
- Обученный древовидный классификатор серьезно обходил каскад в худшем случае, практически не проигрывая при этом в среднем.

В таблице ниже представлены численные сравнения каскадного и древовидного классификаторов.
Чувствительность | Специфичность | Время в среднем, мкс | Время в худшем, мкс |