mrgloom 242 Жалоба Опубликовано April 29, 2015 (изменено) В оригинальном пейпере Histograms of Oriented Gradients for Human Detection описывается большей частью только сам дескриптор HOG, а подробности тренировки классификатора нет.Во-первых после вырезания positive(pedestrians) и negative(background) примеров мы получаем так называемый unbalanced dataset, который SVM не любит и если мы тупо туда всё запихнем то получим неплохой accuracy score(но на самом деле это будет означать, что мы все классифицируем как background, а так как у нас background'а большинство, то и accuracy score у нас получается большой, но это никак нам не помогает детектировать пешеходов)Тут обзор как с этим бороться, самый простой метод это undersample и oversamplehttp://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/ Изменено July 28, 2015 пользователем mrgloom Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано April 29, 2015 А почему вы исопльзуете линейный SVM, а не adaBoost например? Вроде как все крутые чуваки, типа Родриго Бененсона например, исопльзуют именно его для тренировки модели. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 29, 2015 SVM - это классика для HOG. И он достаточно быстрый. Родриго использует лес маленьких каскадов, обученных AdaBoost: всего 2000 каскадов, каждый из которых состоит всего из двух уровней. Почему выбор был именно таким? Потому что он ориентировался на выполнение кода на видеокартах NVidia. Очевидно, что лес из кучи маленьких деревьев очень легко распараллелится на видеокарте. А на процессоре мы наблюдаем жутчайшие тормоза. И именно CUDA код является эталонным, а CPU версии подтягиваются следом и иногда отличаются. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано April 29, 2015 SVM - это классика для HOG. И он достаточно быстрый. Родриго использует лес маленьких каскадов, обученных AdaBoost: всего 2000 каскадов, каждый из которых состоит всего из двух уровней. Почему выбор был именно таким? Потому что он ориентировался на выполнение кода на видеокартах NVidia. Очевидно, что лес из кучи маленьких деревьев очень легко распараллелится на видеокарте. А на процессоре мы наблюдаем жутчайшие тормоза. И именно CUDA код является эталонным, а CPU версии подтягиваются следом и иногда отличаются. И Бененсом вроде как еще не использует HOG, вместо этого он в своих последних статьях использует Channel features. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано April 29, 2015 Да. Насколько я помню, у него там 10 channel features: 1 лаплассиан, гистограммы градиентов с 6-ю бинами и 3 канала цветового пространства Luv. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано April 29, 2015 да, чтобы справиться с unbalanced dataset можно использовать ensemble of classifers. получается примерно так: у каждого классификатора одни и те же положительные примеры и разные отрицательные. надо попробовать http://scikit-learn.org/stable/auto_examples/ensemble/plot_adaboost_twoclass.html Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано May 8, 2015 Еще вопрос про 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/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано June 5, 2015 Похоже когда делаем hard negatives mining, то надо брать сэмплы которые ближе всего к разделяющей гиперплоскости. И еще вопрос, когда тестируется классификатор в бенчмарках то считается, что True positive \ False positive \ False negative \ True negative мы считаем для всех найденных окон? т.е. меряем как работает классификатор на фичах или же мы меряем как работает детектор, т.е. производиться постпроцессинг окон(т.е. если у нас нашлось много окон в какой либо области мы сливаем их в одно). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах