Перейти к содержимому
Compvision.ru
ProgerX

Тренировка каскадов Хаара

Recommended Posts

Пытаюсь делать все по инструкции http://www.compvision.ru/index.php/Обучение_каскадов_Хаара очень не хватает живого пошагового примера.

Цель - нахождение в кадре ладони.

1. Генерирую положительные образы из картинки (hand1.jpg), файлы фона - файлы пустой стены.

post-725-1286742595_thumb.jpg

f:\programming\OpenCV2.1\bin\opencv_createsamples.exe -vec f:\programming\opencv\handimg\myhand -img f:\programming\opencv\handimg\hand1.jpg -bg f:\programming\opencv\handimg\bg.txt -num 1000 -bgcolor 255 -maxxangle 1 -m axyangle 1 -maxzangle 1 -show -w 120 -h 120

2. Пытаюсь скормить это программе тренировки,

F:\programming\OpenCV2.1\bin\opencv_haartraining.exe -data f:\programming\opencv\handimg\classif\ -vec f:\programming\opencv\handimg\myhand -bg f:\programming\opencv\handimg\bg.txt -npos 1000 -nneg 300 -nstages 3 -mem 900 -nonsym 1 -w 120 -h 120 -weighttrimming 0.9 -maxfalsealarm 400 minhitrate 300

Вот что на это говорит программа и через некоторое время вылетает с ошибкой

Data dir name: f:\programming\opencv\handimg\classif\

Vec file name: f:\programming\opencv\handimg\myhand

BG file name: f:\programming\opencv\handimg\bg.txt, is a vecfile: no

Num pos: 1000

Num neg: 300

Num stages: 3

Num splits: 1 (stump as weak classifier)

Mem: 900 MB

Symmetric: FALSE

Min hit rate: 0.995000

Max false alarm rate: 400.000000

Weight trimming: 0.900000

Equal weights: FALSE

Mode: BASIC

Width: 120

Height: 120

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: 6.4e+007

Tree Classifier

Stage

+---+

| 0|

+---+

OpenCV Error: Insufficient memory (Failed to allocate 65408 bytes) in unknown fu

nction, file ..\..\..\..\ocv\opencv\src\cxcore\cxalloc.cpp, line 52

This application has requested the Runtime to terminate it in an unusual way.

Please contact the application's support team for more information.

Что я делаю не так?

Пробовал с opencv_haartraining из 2.0 и из 2.1, ошибка одинаковая.

В принципе какие должны быть размеры картинок для обоих утилит (параметры -w -h) и сколько должно быть положительных примеров?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вроде всё правильно. Отлаживать надо. Если есть желание, конечно.

Положительных и отрицательных примеров в выборке должно быть по несколько тысяч.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
-mem 900

Может быть памяти слишком много выделено?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

какие должны быть значения параметров -minhitrate и -maxfalsealarm? С -mem много экспериментировал, результат все тот же, даже с значением по умолчанию (200), физически свободно 1.5 гб оперативки + столько же виртуальной памяти. Пробовал уменьшать количество положительных образов (вместо тысячи - 200), размер уменьшился с 28 до 5 мб, все равно вылетает с той же ошибкой.

Отрицательные образы - просто несколько тысяч случайных картинок, на которых нет ладони? Какие должны быть размеры у картинок (генерируемых (-h -w) и исходных)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

спасибо, разобрался +к тому мануалу есть вот этот http://www.bernardotti.it/portal/showthread.php?t=6843

А сколько времени занимало генерирование? Просто у меня при 7000 позитивных и 3000 негативных и -mode ALL я так и не дождался когда это закончиться (~5 часов)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
спасибо, разобрался +к тому мануалу есть вот этот http://www.bernardotti.it/portal/showthread.php?t=6843

А сколько времени занимало генерирование? Просто у меня при 7000 позитивных и 3000 негативных и -mode ALL я так и не дождался когда это закончиться (~5 часов)

обучение может идти несколько дней и даже недель :( . там, кстати, есть возможность прервать процесс с последующим возобновлением обучения с прерванной стадии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
обучение может идти несколько дней и даже недель :( . там, кстати, есть возможность прервать процесс с последующим возобновлением обучения с прерванной стадии.

кстати, как генерировали позитивные образцы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
f:\programming\OpenCV2.1\bin\opencv_createsamples.exe -vec f:\programming\opencv\handimg\myhand -img f:\programming\opencv\handimg\hand1.jpg -bg f:\programming\opencv\handimg\bg.txt -num 7000 -bgcolor 255 -maxxangle 1 -m axyangle 1 -maxzangle 1 -show -w 20 -h 20

Картинка-основа в 1 посте.

Кстати вопрос, 20 на 20 это нормально? Я пробовал распознавать, дождавшись обучения только при 1000 поз. и 300 нег., распознает кучу мусора, но периодически и правильный объект (хотя может это и случайность)

А как возобновить процесс?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Картинка-основа в 1 посте.

Кстати вопрос, 20 на 20 это нормально? Я пробовал распознавать, дождавшись обучения только при 1000 поз. и 300 нег., распознает кучу мусора, но периодически и правильный объект (хотя может это и случайность)

А как возобновить процесс?

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

Позитивный образец - просто копировал 1000 раз или видоизменял?

Поделиться сообщением


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

Позитивный образец - просто копировал 1000 раз или видоизменял?

да, там еще на каждой стадии ошибки первого и второго рода выводятся - вот они тебе и скажут, насколько хорошо обучена модель

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

opencv_createsamples.exe как раз и занимается видоизменением (поворот, искажение, изменение цветов)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В чем была проблема? Вылетает с такой же ошибкой. Значения minhitrate и -maxfalsealarm оставил по умолчанию

C:\Users\Login>D:\OpenCV2.1\bin\opencv_haartraining.exe -data D:\img\ -vec D:\im

g\sat.vec -bg D:\bg.txt -npos 500 -nneg 5 -nstages 20 -nsplits 2 -mem 500 -nonsym -w 60 -h 60

Data dir name: D:\img\

Vec file name: D:\img\sat.vec

BG file name: D:\bg.txt, is a vecfile: no

Num pos: 100

Num neg: 5

Num stages: 20

Num splits: 2 (tree as weak classifier)

Mem: 1500 MB

Symmetric: FALSE

Min hit rate: 0.995000

Max false alarm rate: 0.500000

Weight trimming: 0.950000

Equal weights: FALSE

Mode: BASIC

Width: 60

Height: 60

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: 9.53674e-007

Tree Classifier

Stage

+---+

| 0|

+---+

OpenCV Error: Insufficient memory (Failed to allocate 926983220 bytes) in unknow

n function, file ..\..\..\..\ocv\opencv\src\cxcore\cxalloc.cpp, line 52

This application has requested the Runtime to terminate it in an unusual way.

Please contact the application's support team for more information.

Добавлено:

Ошибка была в bg.txt хотя createsamples и не ругался

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня такое было когда были завышены параметры -width и -height . Посмотри в диспетчере задач сколько отжирает памяти процесс.

А вообще у меня вопрос по параметрам haartraining -npos -nneg.

Что они означают? Кол-во положительных/отрицательных образцов которые уже сгенерировали createsamples ?

А вслучае с -nneg кол-во записей в background_file_name.

Так почему тогда программа проглатывает заведомо завышенные значения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что такое Каскад Хаара и для чего он нужен?

Пытался найти информации , но ни гугл ни википедия(там про вивлет какой то написано . Это оно?) толком не знают. Зато нашел статью как его обучить. Но мне пока просто понять что это такое и как с ним работать.

речь про этого Хоара?

http://ru.wikipedia.org/wiki/%D0%A5%D0%BE%...%B0%D1%80%D0%B4

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет, имеется ввиду Альфред Хаар.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Нет, имеется ввиду Альфред Хаар.

вот материальчик в тему:

Rapid_Object_Detection_Using_a_Boosted_Cascade_of_Simple_Features.pdf

slides12_viola_jones_face_detection.ppt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите как создать XML(каскад) и как его обучить роспознавать лица ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите как создать XML(каскад) и как его обучить роспознавать лица ?

Вам сюда:

http://www.compvision.ru/forum/index.php?showtopic=344

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

opencv_createsamples.exe -img overview.jpg -num 75 -bg negatives.dat -vec samples.vec -maxxangle 0 -maxyangle 0 -maxzangle 0 -maxidev 20 -bgcolor 0 -bgthresh 10 -w 1024 -h 768 -show

overview.jpg - 66х17 пикселей

negatives.dat - содержит названия 75 картинок размерами 1280х1024 и 1024х768.

В результате позитивное изображение (66х16 пикселей) растянуто по изображению фона(негативному) размером (1024х768)(overview.jpg получается примерно 1024х240 и помещено поверх картинок фона, и изменяется только интенсивность пикселей от картинки к картинке, а не положение).

Как я понимаю, позитивное изображение не должно растягиваться на весь размер фона,как получаеться у меня, а должно быть просто размещено в разных координатах на фоне, а не по центру. Я пробовал применять углы поворота -мах(хуz)... они работают. Получается повернутое рястанутое позитивное изображение по центру фона.

Помогите пожалуйста разобраться.

П.С. вообще, мне нужно находить эталонное изображение 66х17 пикселей на изображении 1280х1024 - 1024х768, может быть есть еще какие-нибудь способы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

cvMatchTemplate тебе нужен. Каскады Хаара для такой задачи - это даже не пуша, а ядерная бомба по воробьям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

cvMatchTemplate тебе нужен. Каскады Хаара для такой задачи - это даже не пуша, а ядерная бомба по воробьям.

Спасибо за ответ!

Буквально через час после поста, я это понял, но хотел посмотреть что здесь напишут, значит я не ошибся =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Господа, никто не поделится ссылкой на материал, где можно было бы поподробнее ознакомится с алгоритмом самого обучения каскада? Хочу понять что делает haartrainig с картинками, которые мы ей даем.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там используется "метод усиления слабых классификаторов" или boosting. Вектор признаков формируется из значений вейвлетов Хаара.

Читать надо начинать именно про boosting.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

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

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×