на главную ] 

О задаче поиска объекта на изображении.
Часть 2: Применение методов машинного обучения.

Евгений Борисов

понедельник, 24 июля 2017 г.

Эта статья является продолжением обзора методов решения задачи поиска объекта на изображении.

1. Введение

В первой части статьи мы рассмотрели простые способы поиска объекта на изображении. Однако, область их применения ограничена по той причине, что все они имеют плохую обобщающую способность. Это значит, что модель описывает один конкретный объект или очень узкий класс объектов. Например, автомобиль может выглядеть по-разному, в зависимость от марки, положения наблюдателя и др. Для того, чтобы успешно распознавать не один объект но большие и разнообразные классы объектов, можно применять методы машинного обучения.

Если рассматривать задачу поиска объектов на видео, то её можно разделить на три подзадачи - обнаружение, распознавание и сопровождение.

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

Классификатор изображений состоит из двух частей: метод извлечения признаков (feature extractor) и собственно классификатор.

Далее мы рассмотрим различные способы построения классификатора изображений с помощью методов извлечения признаков HOG, BoW и др.

2. Гистограммы направленных градиентов (HOG)

Гистограмма направленных градиентов (Histogram of Oriented Gradients, HOG) [1] - метод извлечения признаков из изображений, который очень похож на метод вычисления дескрипторов SIFT [2] для особых точек, только вычисляем его не для окрестности особой точки, но для всего изображения. Общая схема вычисления HOG выглядит следующим образом. Картинка разделяется на части (ячейки), для каждой ячейки строим гистограмму направлений градиента яркости, далее гистограммы ячеек нормируются по контрасту и объединяются. Подробней про HOG можно послушать лекцию [3]. Пример использования HOG мы разберём ниже - в разделе о задаче локазизации объектов на изображении.

3. Мешок слов (BoW)

Мешок слов ( Bag of visual Words, BoW ) [4] - метод извлечения признаков из изображений, который является адаптацией для изображений метода частотного анализа текстов (TF, term frequency) [5].

Применение методов машинного обучения для распознавания объектов на изображении предполагает наличие учебного набора, состоящего из двух (как минимум) частей (классов):

  1. набор изображений содержащих объект (позитивные примеры),
  2. набор изображений объект не содержащих (негативные примеры).
Аналогично методу TF, для того, чтобы использовать метод BoW, первое что нужно сделать это собрать словарь. Сделать это можно следующим образом.
  1. выбираем метод выявления особых точек и метод вычисления для них дескрипторов
  2. для каждого изображения, входящего в учебный набор, определяем особые точки и вычисляем для них дескрипторы
  3. объединяем похожие дескрипторы в группы, т.е. выполняем кластеризацию [6] множества полученных дескрипторов
Полученные кластеры дескрипторов будут играть роль визуальных слов и составлять словарь для частотного анализа изображения. Признаки BoW извлекаются из изображения следующим образом.
  1. выбранным на этапе составления словаря методом, определяем особые точки на изображении и вычисляем для них дескрипторы
  2. разбираем найденные дескрипторы по кластерам словаря
  3. для каждого кластера словаря считаем количество найденных дескрипторов
Таким образом, вектор BoW-признаков это количество найденных дескрипторов в каждом кластере словаря.

4. Признаки Хаара

Признак Хаара (Haar-like features) [8] вычисляется следующим образом.
  1. Выбираем прямоугольную область на изображении,
  2. разбиваем её на несколько смежных прямоугольных частей,
  3. в каждой части суммируем яркость точек,
  4. после чего вычисляем разность между этими суммами.
Эта разность и будет значением признака.

haar-like features
Рис.1: признаки Хаара

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

viola-jones features
Рис.2: признаки Хаара в методе Виолы-Джонса

На основе признаков Хаара построен метод Виолы-Джонса[9], который часто используют для локализации изображения лиц на фотографиях. Он объединяет в себе признаки Хаара, классификатор AdaBoost [10] и метод скользящего окна для разделения картинки на части, о котором мы поговорим ниже.

viola-jones face detector
Рис.3: результат работы детектора лиц Виолы-Джонса

Исходный код примера c детектором лиц можно скачать [ здесь].

5. Свёрточная сеть

Далее рассмотрим модель классификатора изображений под названием свёрточная искусственная нейронная сеть(convolutional neural network, CNN). Особенностью этой модели классификатора есть встроенный механизм извлечения признаков из изображения. Он является частью сети и "самонастраивается" в процессе обучения сети. Подробнее о свёрточной нейронной сети можно почитать в статье [11].

6. Локализация объектов

В этом разделе мы поговорим о задаче локализации объектов на изображении, которую можно неформально сформулировать в виде двух вопросов: есть ли объект на изображений и какую область изображения он занимает ?

Эту задачу можно решать с помощью метода скользящего окна (sliding window) [12], схема которого выглядит следующим образом.

  1. определить размер $w$ окна (исследуемой области изображения)
  2. собрать учебный набор $L$ из позитивных (на картинке есть объект) и негативных (на картинке нет объекта) примеров, размер учебных картинок должен соответствовать размеру $w$ окна
  3. обучить классификатор $c$ на полученном наборе $L$
  4. получить изображение для исследования,
    выбрать шаг сдвига окна $d$ (по горизонтали и вертикали)
    и коэффициент масштабирования изображения $s$
  5. разместить окно $w$ в крайнем положении (левый верхний угол) на исследуемом изображении
  6. выполнить классификацию текущего окна,
    если классификатор $c$ определил наличие объекта в текущем окне,
    то поместить параметры окна (текущее положение окна, масштаб изображения и значение выданное классификатором) в список результатов $R$
  7. если окно не достигло конечного положения (правый нижний угол),
    то сдвигаем окно на шаг $d$ и переходим на предыдущий пункт
    иначе переходим на следующий пункт
  8. если размер изображения превышает размер $w$ окна
    то масштабируем изображение с коэффициентом $s$ и переходим на п.5
    иначе конец работы
Результатом работы алгоритма является список $R$, который состоит из позиции окна, соответствующих ему значения масштаба изображения и значения выхода классификатора. Далее необходимо выполнить обработку результатов, которая сводится к приведению координат окон к единому масштабу и удаления лишних (дубликатов) окон.

sliding window detector preresult
Рис.4: неочищенный результат работы детектора

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

sliding window detector result
Рис.5: очищенный результат работы детектора

OpenCV  3.2.0
[i] собираем данные ...
	    data/pgm/train/pos/pos-435.pgm
	    data/pgm/train/pos/pos-329.pgm 
	    ....
	    data/pgm/train/neg/neg-453.pgm
	размер: (450,)
	учебных: 840
	контрольных: 0
	тестовых: 210
[i] обучаем классификатор ...
[i] тестируем классификатор ...
	количество ошибок на тестовом наборе: 2 из 210

   1/108: data/pgm/detector-test/2/test-54.pgm            
   2/108: data/pgm/detector-test/2/test-52.pgm
   .....
   108/108: data/pgm/detector-test/2/test-37.pgm 
Листинг 1:работа детектора объектов

Исходный код примера c детектором (HOG+SVM) можно скачать [ здесь].

Учебный и тестовый набор данных (The University of Illinois, Car Data Set): http://l2r.cs.uiuc.edu/~cogcomp/Data/Car/CarData.tar.gz

Литература

  1. Wikipedia: Histogram of oriented gradients
    - http://en.wikipedia.org/wiki/Histogram_of_oriented_gradients
  2. Wikipedia: Scale-invariant feature transform
    - http://en.wikipedia.org/wiki/Scale-invariant_feature_transform
  3. Антон Конушин Компьютерное зрение (2011). Лекция 8. Поиск и локализация объектов.
    - http://www.youtube.com/watch?v=I1AiFF6ZkaE
  4. MathWorks: Image Classification with Bag of Visual Words
    - http://www.mathworks.com/help/vision/ug/image-classification-with-bag-of-visual-words.html
  5. Борисов Е.C. Автоматизированная обработка текстов на естественном языке.
    - http://mechanoid.kiev.ua/ml-text-proc.html
  6. Борисов Е.C. Кластеризатор на основе алгоритма k-means.
    - http://mechanoid.kiev.ua/ml-k-means.html
  7. Е.С.Борисов Классификатор на основе машины опорных векторов.
    - http://mechanoid.kiev.ua/ml-svm.html
  8. Wikipedia: Haar-like features
    - http://en.wikipedia.org/wiki/Haar-like_features
  9. P.Viola,M.Jones Robust Real-Time Face Detection
    - http://www.vision.caltech.edu/html-files/EE148-2005-Spring/pprs/viola04ijcv.pdf
  10. Е.С.Борисов Бустинг - композиции классификаторов
    - http://mechanoid.kiev.ua/ml-adaboost.html
  11. Е.С.Борисов Классификатор изображений на основе свёрточной сети.
    - http://mechanoid.kiev.ua/ml-lenet.html
  12. Joseph Howse, Joe Minichino Learning OpenCV 3 Computer Vision with Python - Second Edition, Packt Publishing, September 2015, Packt Publishing, ISBN: 9781785289774
При использовании материалов этого сайта, пожалуйста вставляйте в свой текст ссылку на мою статью.