Обучение классификатору Haarcascade

Я пытаюсь создать файл xml, используя образцы, которые я сделал с моей камерой. Это пробный запуск, когда я подношу камеру к окну и некоторое время позволяю ей делать снимки проезжающих машин каждые 30 секунд. У меня сейчас около 200 картинок (просто для небольшого теста), но дальше не могу.

Я сделал инструмент выбора, чтобы выбирать автомобили на изображениях (ограничивающие рамки) и помечать изображения как негативы, если их нет. Вот 2 примера того, как выглядит приложение:

введите здесь описание изображениявведите здесь описание изображения

Затем приложение сохраняет отмеченные объекты в файле positive.txt следующим образом, пропуская неотмеченные изображения или изображения, помеченные как негативные:

/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...

Негативные изображения просто сохраняются в файл negative.txt следующим образом:

/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...

Наконец, я пытаюсь запустить алгоритм обучения Хаара с помощью /usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL.

Не обращайте внимания на настройки, мне просто нужно, чтобы это работало, прежде чем я буду использовать гораздо более мощный компьютер для фактического обучения на реальных данных с гораздо большим количеством изображений.

Для этого я получаю следующий вывод и ошибку:

Data dir name: samples
Vec file name: positive.txt
BG  file name: negative.txt, is a vecfile: no
Num pos: 99
Num neg: 20
Num stages: 5
Num splits: 1 (stump as weak classifier)
Mem: 128 MB
Symmetric: FALSE
Min hit rate: 0.999000
Max false alarm rate: 0.500000
Weight trimming: 0.950000
Equal weights: FALSE
Mode: ALL
Width: 24
Height: 24
Applied boosting algorithm: GAB
Error (valid only for Discrete and Real AdaBoost): misclass
Max number of splits in tree cascade: 0
Min number of positive samples per cluster: 500
Required leaf false alarm rate: 0.03125

Tree Classifier
Stage
+---+
|  0|
+---+



Number of features used : 261600

Parent node: NULL

*** 1 cluster ***
OpenCV Error: Unspecified error (Vec file sample size mismatch) in icvGetHaarTrainingDataFromVec, file /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp, line 1930
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp:1930: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec

Aborted

Кто-нибудь знает, что это значит? Почему возникает ошибка с размером выборки, что бы это ни было... Я также пытался заменить относительные пути абсолютными путями, но получил ту же ошибку. Это то, что я пытаюсь сделать на самом деле правильно, я не нашел явных примеров того, как создать классификатор из существующих и отмеченных изображений.


person Solenoid    schedule 29.04.2014    source источник
comment
Привет, не могли бы вы поделиться своими плюсами, минусами и командами Sheel, пожалуйста? Я использовал следующую команду: rm * .vec find ./negatives_images -iname * jpg›negatives.txt opencv_createsamples -vec puma.vec puma.jpg -img -bg негативы.txt -num 1500 -bgcolor 50 -bgthresh 50 -maxxangle - maxyangle 0 0 0 -maxzangle -w 80 -h 80 opencv_haartraining -vec puma.vec -bg негативы.txt -npos 1 -nneg 1418 -mem 4096 -w 80 -h 80 -данные. Каталог ls: негативы.txt puma.jpg негативы_изображения/положительные 1.bp.blogspot.com/-H2IZ7yyNjTg/UEZnPmSEwAI/AAAAAAAAAAkI/ Спасибо.   -  person Rui Martins    schedule 03.10.2014


Ответы (1)


Оказывается, файл .vec — это не просто файл positive.txt, он должен быть сгенерирован с помощью opencv_createsamples.

Итак, сначала я создал файл training_24-24.vec (это не просто текстовый файл), используя следующую команду:

/usr/bin/opencv_createsamples -vec training_24-24.vec -info positive.txt -bg negative.txt -w 24 -h 24 -num 100

который создал файл training_24-24.vec. По сравнению с моим первоначальным вопросом я переделал файл positive.txt с квадратным выделением. Затем я запустил обучение классификатора с помощью

/usr/bin/opencv_haartraining -data samples -vec training_24-24.vec -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL

На данный момент производительность просто ужасна, он распознает все, кроме автомобилей. В этой статье говорится, что нужно что-то использовать например, 1000 позитивных и 2000 негативных изображений, чтобы начать иметь что-то приемлемое. Также это говорит для опции -nstages:

Бесполезно устанавливать много стадий, если у вас мало положительных и отрицательных образцов.

person Solenoid    schedule 30.04.2014