Обнаружение объектов

Сайт курса:
http://cvbeginner.blogspot.com/

                                  1
Из прошлой лекции…
• Локальные особенности
• Дескрипторы
• Гистограмма градиентов
• Инвариантность




                           2
Задача: найти положение объекта по
описанию




                      Slide credit: Виктор Лемпицкий

                                                 3
Поиск пешеходов




                  Slide credit: Виктор Лемпицкий

                                             4
Поиск лиц




            5
Схожие задачи
• Нахождение
  конкретных
  объектов
• Семантическая
  сегментация
• Оценка
  конфигурации

                  Sadeghi и др. CVPR 2011



                                            6
План лекции
• Сопоставление по особенностям
  гомография и RANSAC
• SVM
• Мешки слов, распознавание
  объекта
• Метод Виола-Джонс, Бустинг
• Метод Далала-Тригса

                                  7
План лекции
• Общие идеи и принципы
• Минимум математики
• Пропущено очень много
  интересных и важных направлений




                                    8
Поиск плоских объектов




                         9
Проблема
• Много выбросов
• Точек не соответствующих модели




                                    10
RANSAC




         11
RANSAC
На вход алгоритма поступает:
• набор исходных данных X
• функция M, позволяющая вычислить
  параметры θ модели P по набору данных из n
  точек
• функция оценки E соответствия точек
  полученной модели
• порог t для функции оценки
• Количество итерация k



                                               12
RANSAC
• Первый этап — выбор точек и подсчѐт модели.
   – Из множества исходных точек X случайным образом
     выбираются n различных точек.
   – На основе выбранных точек вычисляются параметры θ
     модели P с помощью функции M, построенную модель
     принято называть гипотезой.
• Второй этап — проверка гипотезы.
   – Для каждой точки проверяется еѐ соответствие данной
     гипотезе с помощью функции оценки E и порога t
   – Каждая точка помечается инлаером или выбросом
   – После проверки всех точек, проверяется, является ли
     гипотеза лучшей на данный момент, и если является, то она
     замещает предыдущую лучшую гипотезу.
• В конце работы цикла оставляется последняя лучшая гипотеза.


                                                                 13
Пример




         14
Параметры RANSAC
Размер выборки s
• Обычно, минимальное количество, достаточное для
оценки параметров
Порог T
• Выбираем T так, чтобы вероятность инлаера (inlier) была
p (пр. 0.95)
• Обычно гауссова модель шума с нулевым матожиданием и
σ: t2=3.84σ2
Количество выборок N
• Выбираем N так, чтобы вероятность выбрать хотя бы одну
   выборку без выбросов была не ниже заданной (например,0.99)
• Зависит от доли выбросов в данных (доля выбросов: e)



                                                                15
Гомография




 • Перспективное преобразование плоскости
 • Переводит четырехугольник в другой произвольный
 четырехугольник
                                                     16
Гомография




             17
Гомография




Вопрос: сколько точек надо чтобы оценить гомографию?

                                                   18
RANSAC + модель гомографии




Mat H = cv::findHomography( obj, scene, CV_RANSAC );

                                                       19
Пример использования гомографии




                                  20
Машинное обучение
• Имеется участок изображения
• Мы хотим ответить на вопрос есть
  ли там объект или нет




                                     21
Линейная SVM




http://opencv.itseez.com/doc/tutorials/ml/table_of_content_ml/table_of_content_ml.html

                                                                                   22
Линейная SVM




               23
Линейная SVM (реализация)
// Set up training data
float labels[4] = {1.0, -1.0, -1.0, -1.0};
Mat labelsMat(3, 1, CV_32FC1, labels);
float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
Mat trainingDataMat(3, 2, CV_32FC1, trainingData);
// Set up SVM's parameters
CvSVMParams params; params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
// Train the SVM
CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);
float response = SVM.predict(sampleMat);
Вопрос: как должна выглядеть sampleMat?



                                                                              24
Линейно не разделимые данные



Cortes&Vapnik, ML’93




                               25
Линейно не разделимые данные




                               26
Линейно не разделимые данные




                               27
Обобщенная схема классификации
изображений




                                 28
Визуальные слова (Visual Words)
• Что в нашем случае «слово» и «словарь»?
• «Визуальное слово» – часто повторяющийся фрагмент
  изображения («visual word»)
• В изображении визуальное слово может встречаться
  только один раз, может ни разу, может много раз




                                     Slide credit: Антон Конушин

                                                            29
Словарь
• Словарь – набор фрагментов, часто
повторяющихся в коллекции изображений




                                        30
Построение словаря




                     31
Пример словаря




                 32
Мешок слов (Bag of words)




                            33
«Скормив» мешок слов SVM на какой
вопрос мы смоем ответить?




                     Slide credit: Виктор Лемпицкий

                                               34
Поиск расположения




                     35
Перерыв
• Вопросы?




             36
Детектор Viola-Jones
• P. Viola and M. Jones. Robust real-time face detection. IJCV
  57(2), 2004
Основополагающий метод для поиска объектов на
  изображении в реальном времени
Обучение очень медленное, но поиск очень быстр
Основные идеи:
• Интегральные изображения для быстрого
  вычисления признаков
• Бустинг для выбора признаков
• Каскад (Attentional cascade) для быстрой
  отбраковки окон без лица


                                                                 37
Изображение представляется комбинаторным числом
              бинарных признаков




 Value =Σ (pixels in white area) –Σ (pixels in black area)

                                                             38
Пример




         Slide credit: Антон Конушин

                                39
Интегральные изображения
• Как быстро считать прямоугольные
  суммы?




                       Slide credit: Антон Конушин

                                              40
Выбор признаков
• Для окна поиска 24x24 пиксела, число
  возможных прямоугольных признаков
  достигает ~160,000!
• Хороший классификатор должен использовать
  лишь маленькое подмножество всевозможных
  признаков




                              Slide credit: Антон Конушин

                                                     41
Бустинг
•   Y. Freund and R. Schapire, A short introduction to boosting, Journal of
    Japanese Society for Artificial Intelligence, 14(5):771-780, September,
    1999.
• Бустинг – схема классификации, основанная на
  комбинировании слабых классификаторов в более точный
  комитетный
      Слабый классификатор должен быть лучше монетки
• Обучение состоит из нескольких этапов усиления
• На каждом этапе выбираем слабый классификатор, который
  лучше всех сработал на примерах, оказавшихся трудными для
  предыдущих классификаторов
• «Трудность» записывается с помощью весов, приписанных
  примерам из обучающей выборки
• Составляем общий классификатор как линейную комбинацию
  слабых классификаторов

                                                                              42
AdaBoost
Начальные условия




Строим линейный классификатор минимизирующий ошибку


Обновляем веса у всех образцов, таким образом, чтобы у
Правильно классифицированных веса уменьшались, у неправильно
Классифицированных увеличивались




 Демо по презентации
                                                               43
Бустинг для поиска лиц




                 Slide credit: Антон Конушин

                                        44
Каскадное представление




               Slide credit: Виктор Лемпицкий

                                         45
Каскадное представление




               Slide credit: Виктор Лемпицкий

                                         46
Тренировочная выборка
5000 лиц
• Все фронтальные,
  уменьшенные до 24x24
  пикселей
• Все нормированы
300М отрицательных примеров
• 9500 изображений без лиц
• Большая изменчивость
• Разные люди
• Освещение
• Поза лица



                              Slide credit: Антон Конушин

                                                     47
Реализация
CascadeClassifier face_cascade;
face_cascade.load(―haarcascade_frontalface_alt.xml‖);
cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2,
   0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );




                                                            48
Примеры




          49
Viola-Jones
• Прямоугольные признаки
• Интегральные изображения для
  быстрого вычисления признаков
• Бустинг для выбора признаков
• Каскад классификаторов для быстрого
  выбраковки отрицательных окон




                                        50
Гистограммы Ориентированных Градиентов (HOG)




                                  Slide credit: Виктор Лемпицкий

                                                            51
Метод Далала-Тригса




Линейный SVM + HOG   Slide credit: Виктор Лемпицкий

                                               52
HOG-фильтр




             Slide credit: Виктор Лемпицкий

                                       53
Реализация OpenCV
HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
// run the detector with default parameters. to get a higher hit-rate
// (and more false alarms, respectively), decrease the hitThreshold and
vector<Rect> found;
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);




                                                                          54
Далал-Тригс vs. Виола-Джонс
• Для лиц Виола-Джонс работает почти идеально
• Для пешеходов Далал-Тригс аккуратнее (но медленнее)
• [Dollar et al. BMVC’09]: Виола-Джонс на правильных
  каналах не хуже Далала-Тригса




                                   Slide credit: Виктор Лемпицкий

                                                             55
Проверить свои силы
• PASCAL Visual Object Classes (VOC)
  Dataset and Challenge




                                       56
Что осталось «за бортом»
• Локализация объектов и Хаф-леса
  [Juergen Gall & Victor Lempitsky,
  Class-Specific Hough Forests for
  Object Detection, CVPR 2009]
• Неявная модель формы [Leibe,
  Leonardis & Schiele IJCV’08]
• Обобщенное преобразование Хафа


                                      57
Вопросы




          58

L06 detection