Создание каскада Хаара из изображений показывает ошибку - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу создать свой собственный haarcascade для номерных знаков. Я нашел GUI под названием Cascade-Trainer-GUI, который делает это. Я использую Windows 10. Вы можете скачать графический интерфейс здесь:

http://amin -ahmadi.com / cascade-trainer-gui /

У меня есть две папкис положительными и отрицательными изображениями. Имеется около 650 положительных и 570 отрицательных изображений.

Когда я запускаю программу, она завершается через пару секунд, но я не получаю файл cascade.xml. Я получаю TXT-файл, и в конце этого TXT-файла написано:

OpenCV Error: Insufficient memory (Failed to allocate 1357715212 bytes) in cv::OutOfMemoryError, file D:\cv\opencv_3.2.0\sources_withTextModule\modules\core\src\alloc.cpp, line 52

Я ознакомился с документацией и посмотрел несколько видео на YouTube, но не знаю, что я делаю неправильно.

Это производительность моего ПК, когда я пытаюсь обучить свой каскад:

enter image description here

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

Я попытался уменьшить размер буфера с 1024 до 256. В этом случае он начинает работать, но после 5-6 сэмплов (10 минут) показывает ошибку Insufficient Count of Samples, я пытался уменьшить число параметров макс. Функций с 100% до 70%, но я получаю ту же ошибку через то же время.

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

https://www.sendspace.com/file/uo18pu

Знаете ли вы, что я делаю неправильно, что я должен сделать, чтобы это исправить? Какие параметры я должен выбрать в этом графическом интерфейсе?

Кроме того, есть ли какое-то приложение, которое создает каскад хаара в Интернете?

1 Ответ

0 голосов
/ 08 ноября 2019

Я считаю, что ваша проблема связана с размером изображения патчей, используемых для обучения. В оригинальной бумаге Violaj-Jones использовались заплатки размером 20x20 пикселей, что привело к более чем 180 000 функций. Чтобы найти наилучший набор признаков на каждом этапе каскада, алгоритм повышения должен находить наилучшую комбинацию признак / порог (слабый классификатор - персептрон) в каждой итерации. Это включает в себя вычисление энтропии для N признаков с M возможными пороговыми значениями, где M совпадает с количеством обучающих изображений. Тогда требуется MxN памяти в каждой бустерной итерации. Если предположить, что внутренне эта программа использует плавающую точность, то вам потребуется MxNx4 байта памяти приблизительно для каждой итерации повышения. В вашем случае для исправлений изображений размером 20x20 это только 180000x (119 + 114) x4 = 167 760 000 байт, то есть приблизительно 0,16 ГБ, но это число может быть намного больше, если размер обучающих исправлений больше или если наборбазовые функции, которые вы используете, больше, чем оригинальная бумага Виолая-Джонса (в этой статье набор базовых функций равен 4, но есть еще один набор, называемый haar-like). Затем я считаю, что вам необходимо настроить размер изображения патчей для обучения.

...