Нахожу в тесте вопросы, которые в принципе не освещаются в лекции. Нужно гуглить на других ресурсах, чтобы решить тест, или же он всё же должен испытывать знания, полученные в ходе лекции? |
Детектирование пешеходов
2. Некоторые алгоритмы детектирования пешеходов на изображениях и их программные реализации в библиотеке OpenCV
2.1. Задача детектирования пешеходов и подходы к ее решению
Задача детектирования объектов на изображениях заключается в поиске положения всех объектов заданного класса на изображении. Положение объекта можно понимать по-разному, например, как множество пикселей, соответствующих объекту, или, как координаты прямоугольника, окаймляющего объект. В данной работе рассматривается второй подход, т.е. на выходе алгоритма детектирования требуется получить множество окаймляющих прямоугольников.
В связи с актуальностью и сложностью задачи детектирования пешеходов на настоящий момент существует множество разнообразных подходов к ее решению. Так, предпринимались попытки осуществить детектирование путем сравнения предобработанных изображений с некоторыми эталонами (шаблонами) с помощью специальной метрики [1]; использования детекторов и дескрипторов особых точек [2]; применения сегментации изображения [3] и т.д. Одним из наиболее популярных и перспективных на настоящий момент подходов к детектированию объектов на изображении является, так называемый, метод бегущего окна. Данный метод основан на осуществлении экстенсивного поиска объектов определенного размера в пикселях : последовательно рассматриваются области изображения заданного размера, им ставится в соответствие признаковое описание, на основе которого с помощью алгоритма классификации принимается решение, содержит ли данная область объект или нет. Более подробно данный подход и особенности его реализации рассматриваются ниже, здесь же, отметим, что ключевыми компонентами системы детектирования, основанной на таком подходе, являются алгоритмы получения признакового описания изображения и его классификации. Одним из наиболее популярных признаковых описаний, является HOG-дескриптор (Histogram of Oriented Gradients, гистограмма ориентированных градиентов), изначально разработанный для решения задачи детектирования пешеходов [4] и на настоящий момент в том или ином виде использующийся в большинстве современных детекторов.
2.2. HOG-признаки
Основная идея, лежащая в основе HOG, заключается в том, что внешний вид и форма части объекта могут быть достаточно хорошо описаны распределением градиентов интенсивности пикселей, соответствующих данной части, без точной информации о градиентах в каждой точке. Под градиентом здесь понимается аппроксимация градиента функции интенсивности (яркости), которая предполагается дифференцируемой, но известной лишь в узлах равномерной сетки – пикселях, в заданной точке с помощью некоторой разностной схемы. Алгоритм вычисления HOG-признаков за исключением некоторых моментов идентичен алгоритму вычисления SIFT-дескриптора, описанному в лекционной части курса. Основным отличием HOG от SIFT является то, что SIFT-описание составляется для окрестности ключевой точки, в то время как HOG-признаки покрывают все изображение (более того, с перекрытием).
Базовой единицей HOG-дескриптора является блок (block) – прямоугольная область пикселей изображения заданных размеров. Блок состоит из ячеек (cells), в свою очередь состоящих из пикселей. Каждой ячейке ставится в соответствие гистограмма ориентаций (углов наклона относительно горизонтали) градиентов из заданного количества полос (bins), при этом направление считается "беззнаковым", т.е. наклон в и считаются эквивалентными. Подобно SIFT-дескриптору магнитуда градиента в некотором пикселе дает вклад в полосы гистограммы ячейки, которой принадлежит данный пиксель, а также в гистограммы соседних ячеек. При этом используется линейная интерполяция по углу наклона (полосам одной гистограммы), и билинейная по пространственному расположению (по гистограммам соседних ячеек). Также возможно взвешивание магнитуд градиентов с помощью гауссиана с центром, совпадающим с центром блока. После вычисления гистограмм в каждой ячейке блока, они конкатенируются, тем самым образуя вектор признаков блока. Полученный вектор подвергается нормализации. Такие признаковые описания вычисляются для всех блоков, не выходящих за пределы изображения, с координатами левого верхнего пикселя кратными заданным шагам по вертикали и горизонтали. Причем данные шаги, как правило, задаются так, что блоки перекрываются, т.е. градиент пикселя учитывается при вычислении признаковых описаний нескольких блоков. HOG-описание изображения получается путем конкатенации векторов признаков всех блоков.
В библиотеке OpenCV алгоритм вычисления HOG-признаков реализован в классе HOGDescriptor, входящем в состав модуля objdetect. Указать параметры HOG-дескриптора можно либо при создании объекта данного класса с помощью конструктора:
HOGDescriptor(Size winSize, Size blockSize, Size blockStride, Size cellSize, int nbins, int derivAperture=1, double winSigma=-1, int histogramNormType=HOGDescriptor::L2Hys, double L2HysThreshold=0.2, bool gammaCorrection=false, int nlevels=HOGDescriptor::DEFAULT_NLEVELS)
либо напрямую изменяя поля данного класса:
Size winSize; Size blockSize; Size blockStride; Size cellSize; int nbins; int derivAperture; double winSigma; int histogramNormType; double L2HysThreshold; bool gammaCorrection; int nlevels;
Рассмотрим данные параметры:
- winSize – размер изображения, для которого требуется вычислить HOG-описание. В терминах детектора объектов это размеры бегущего окна (описание HOG-детектора, основанного на методе бегущего окна, см. ниже).
- blockSize – размер блока в пикселях.
- blockStride – шаг сетки блоков.
- cellSize – размер ячейки в пикселях. Размер блока должен быть кратен размеру ячейки.
- nbins – количество полос в гистограмме ориентации градиентов, соответствующей одной ячейке.
- derivAperture – в текущей версии OpenCV реализация HOG не использует данный параметр.
- winSigma – величина стандартного отклонения, определяющая гауссиан для взвешивания вкладов магнитуд градиентов в гистограммы: градиенты в пикселях, находящихся ближе к центру блока дают больший вклад. Заданное по умолчанию значение winSigma=-1 означает, что данное стандартное отклонение будет вычислено как (blockSize.width + blockSize.height)/8.
- histogramNormType – определяет каким образом осуществляется нормализация вектора признаков блока. В настоящий момент поддерживается только алгоритм HOGDescriptor::L2Hys, который заключается в нормализации вектора по -метрике, замене компонент полученного вектора, превышающих L2HysThreshold, на данное пороговое значение, и повторной нормализации по -метрике.
- L2HysThreshold – пороговое значение, используемое при нормализации HOG-описания блока.
- gammaCorrection – определяет будет ли выполнена гамма- коррекция изображения перед вычислением признаков. В случае, если gammaCorrection=true, интенсивность каждого пикселя обработанного изображения будет равняться корню из его исходной интенсивности.
- nlevels – максимальное количество масштабов изображения, используемых при осуществлении детектирования объектов различных размеров.