Перейти к содержимому
Compvision.ru

Recommended Posts

В оригинальном пейпере Histograms of Oriented Gradients for Human Detection описывается большей частью только сам дескриптор HOG, а подробности тренировки классификатора нет.

Во-первых после вырезания positive(pedestrians) и  negative(background) примеров мы получаем так называемый unbalanced dataset, который SVM не любит и если мы тупо туда всё запихнем то получим неплохой accuracy score(но на самом деле это будет означать, что мы все классифицируем как background, а так как у нас background'а большинство, то и accuracy score у нас получается большой, но это никак нам не помогает детектировать пешеходов)

Тут обзор как с этим бороться, самый простой метод это undersample и oversample

http://www.slideshare.net/dalpozz/racing-for-unbalanced-methods-selection

пример как введение весов для несбалансированных классов смещает гиперплоскость.

http://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html

Потом как управлять пропорцией: True positive \ False positive \ False negative \ True negative ? т.е. допустим лучше всё таки найти пешехода и что то лишнее, чем не найти ничего.

 

 

Был ли прогон алгоритмов opencv на стандартных датасетах для pedestrian detection (INRIA person dataset, Caltech Pedestrian Dataset, etc.)?

Там показаны графики average miss-rate %

http://rodrigob.github.io/are_we_there_yet/build/

 

 

Изменено пользователем mrgloom

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А почему вы исопльзуете линейный SVM, а не adaBoost например? Вроде как все крутые чуваки, типа Родриго Бененсона например, исопльзуют именно его для тренировки модели.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SVM - это классика для HOG. И он достаточно быстрый.

 

Родриго использует лес маленьких каскадов, обученных AdaBoost: всего 2000 каскадов, каждый из которых состоит всего из двух уровней. Почему выбор был именно таким? Потому что он ориентировался на выполнение кода на видеокартах NVidia. Очевидно, что лес из кучи маленьких деревьев очень легко распараллелится на видеокарте. А на процессоре мы наблюдаем жутчайшие тормоза. И именно CUDA код является эталонным, а CPU версии подтягиваются следом и иногда отличаются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

SVM - это классика для HOG. И он достаточно быстрый.

 

Родриго использует лес маленьких каскадов, обученных AdaBoost: всего 2000 каскадов, каждый из которых состоит всего из двух уровней. Почему выбор был именно таким? Потому что он ориентировался на выполнение кода на видеокартах NVidia. Очевидно, что лес из кучи маленьких деревьев очень легко распараллелится на видеокарте. А на процессоре мы наблюдаем жутчайшие тормоза. И именно CUDA код является эталонным, а CPU версии подтягиваются следом и иногда отличаются.

 

И Бененсом вроде как еще не использует HOG, вместо этого он в своих последних статьях использует Channel features.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да. Насколько я помню, у него там 10 channel features: 1 лаплассиан, гистограммы градиентов с 6-ю бинами и 3 канала цветового пространства Luv.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да, чтобы справиться с unbalanced dataset можно использовать ensemble of classifers.

получается примерно так: у каждого классификатора одни и те же положительные примеры и разные отрицательные.

 

надо попробовать

http://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще вопрос про hard negatives mining

cлайд 5-6

http://home.isr.uc.pt/~henriques/beyond/henriques_iccv2013_slides.pdf

хотя там в итоге метод получше предлагают

 

Допустим мы имеем  кол-во позитивных примеров npos=1000, рэндомом генерим nneg=1000 примеров, тренируем классификатор, потом генерим еще M(сколько генерить?) негативов и проходимся по ним классификатором, берем hard negatives и как написано в презентации "Re-train using false-positives as additional samples", т.е. в итоге то мы получаем unbalanced dataset и если мы хотим провести еще несколько итераций этой процедуры то наш датасет для обучения всё растет и растёт.

 

Вообщем это получается лучше чем просто рэндомно генерить негативы, но возможно на каком то шаге может стать хуже из-за того что svm не поддерживаем unbalanced dataset?

В презентации использовали 3 раунда, возможно потом нет никаких улучшений, либо потом точность становиться лучше их метода.

 

p.s. SVM в некоторых реализациях поддерживает class weight

тут еще немного информации по VJ vs SVM HOG

http://answers.opencv.org/question/26818/svm-bias-on-weights-of-positives-and-negatives/

 

пример mining hard negatives

http://cs.brown.edu/courses/cs143/2011/results/proj4/psastras/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже когда делаем hard negatives mining, то надо брать сэмплы которые  ближе всего к разделяющей гиперплоскости.

 

И еще вопрос, когда тестируется классификатор в бенчмарках то считается, что True positive \ False positive \ False negative \ True negative  мы считаем для всех найденных окон? т.е. меряем как работает классификатор на фичах или же мы меряем как работает детектор, т.е. производиться постпроцессинг окон(т.е. если у нас нашлось много окон в какой либо области мы сливаем их в одно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×