Вопрос по c++ – Тренировка haar Утверждение OpenCV не удалось

6

Я пытаюсь обучить подобного хау классификатора для пешеходов в OpenCV, используя 3340 положительных изображений и 1224 отрицательных изображения. (в файле .txt я сохраняю имена негативных изображений, т.е. негативы (1) .bmp, а в файле txt я сохраняю позитивы, т.е. picture (1) .bmp 1 0 0 64 128. На самом деле положительными примерами являются уже обрезанные изображения пешеходов, поэтому мне нужно указать только один положительный образец на изображение).

В какой-то момент во время тренировочного процесса он останавливается и говорит:

"Opencv Error: Assertion failed (elements_read==1)in unknown function, file c:\path\cvhaartraining.cpp, line 1858"

Любые идеи относительно того, что вызывает это?

Привет, я использую opencv 2.4 с предварительно обрезанными изображениями 64X128. благодарю вас valentin
пока что необычно то, что у меня есть несколько повторяющихся изображений (не много, только 6) в положительных выборках valentin
Можете ли вы выяснить, является ли это причиной только одна конкретная картина, или же ни одна из них не работает? Если это одно конкретное изображение, вы можете увидеть, что hwat отличается на этом изображении. Если все они не работают, мы можем взглянуть на сами изображения. diip_thomas
Какую версию OpenCV вы используете? Возможно, следующее утверждение не выполнено:assert( img->rows * img->cols == ((CvVecFile*) userdata)->vecsize );  Это означает, что строки и столбцы не соответствуют размеру вектора. Но я не знаю, что могло вызвать это. diip_thomas

Ваш Ответ

1   ответ
11

на эту проблему ответил создатель утилиты на сайте OpenCV DevZoneв июне 2012 года.

Процитирую Марию:

The problem is that your vec-file has exactly the same samples count that you passed in command line -numPos 979. Training application used all samples from the vec-file to train 0-stage and it can not get new positive samples for the next stage training because vec-file is over. The bug of traincascade is that it had assert() in such cases, but it has to throw an exception with error message for a user. It was fixed in r8913. -numPose is a samples count that is used to train each stage. Some already used samples can be filtered by each previous stage (ie recognized as background), but no more than (1 - minHitRate) * numPose on each stage. So vec-file has to contain >= (numPose + (numStages-1) * (1 - minHitRate) * numPose) + S, where S is a count of samples from vec-file that can be recognized as background right away. I hope it can help you to create vec-file of correct size and chose right numPos value.

Это сработало для меня. У меня тоже была такая же проблема, я следил зазнаменитый учебник по обучению HAAR но хотел попробовать более новую обучающую утилиту с -npos 7000 -nneg 2973

поэтому я сделал следующие вычисления:

vec-файл должен содержать & gt; = (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S

7000 >= (numPos + (20-1) * (1 - 0.999) * numPos) + 2973

(7000 - 2973)/(1 + 19*0.001) >= numPos

numPos <= 4027/1.019

numPos <= 3951 ~~ 3950

и использовал:

-npos 3950 -nneg 2973

Оно работает. Я также заметил, что другие также добились успеха в сокращении numPos:Вот

Error: User Rate Limit Exceededdocs.opencv.org/doc/user_guide/…Error: User Rate Limit Exceeded

Похожие вопросы