Это моя первая попытка использовать механизм каскадного обучения opencv. Я пытаюсь это на основе небольшого набора изображений из одного положительного и 3 отрицательных изображений. Я следовал за инструкции официальной документации opencv.
На негативные изображения ссылается файл описания bg.txt
:
Negative/t1.jpg
Negative/t2.jpg
Negative/t3.jpg
Негативные изображения имеют разные размеры (все в диапазоне пикселей «1920 x что-то»).
Положительное изображение было использовано для создания векторного файла с
opencv_createsamples.exe -img Positive/p1.jpg -num 5000 -w 100 -h 60 -show -vec vecFile.vec
Пока все работает без ошибок. Я думаю, это нормально, что векторный файл vecFile.vec
не читается, так как хранит 5000 изображений.
Когда я теперь хочу применить каскадное обучение с помощью
opencv_traincascade.exe -data TrainData/ -vec vecFile.vec -bg bg.txt -w 100 -h 60 -npos 10 -nneg 10
Программа вылетает без вывода («программа перестала работать»). Есть идеи, почему это происходит? Я забыл некоторые важные параметры?
Я использую Windows 10 и OpenCV 3.
Когда в прошлом году я пытался тренировать каскад, у меня была такая же проблема. Я обнаружил, что он очень требователен к памяти, поэтому, если вы использовали 5000 изображений, сэмплированных с размерами, которые вы написали (-w 100 -h 60), ваш компьютер, вероятно, исчерпал память (или другие вещи, например, ограничение размера кучи) , Мне кажется, что traincascade помещает все образцы данных в оперативную память для обучения.
Вам, вероятно, придется попробовать гораздо меньшие размеры, такие как пример документации, которую вы упомянули, -w 24 -h 24, и увеличивать в небольших количествах, пока вы не получите хороший размер, но без сбоев.
Других решений пока нет …