Jump to content
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) и сколько должно быть положительных примеров?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites
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 нег., распознает кучу мусора, но периодически и правильный объект (хотя может это и случайность)

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

Share this post


Link to post
Share on other sites
Картинка-основа в 1 посте.

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

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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

В чем была проблема? Вылетает с такой же ошибкой. Значения 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 и не ругался

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Нет, имеется ввиду Альфред Хаар.

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

Rapid_Object_Detection_Using_a_Boosted_Cascade_of_Simple_Features.pdf

slides12_viola_jones_face_detection.ppt

Share this post


Link to post
Share on other sites

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

Вам сюда:

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

Share this post


Link to post
Share on other sites

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

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, может быть есть еще какие-нибудь способы?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×