Jump to content
Compvision.ru
ProgerX

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

Recommended Posts

Спасибо.

Еще такой вопрос: возможна ли такая ситуация, что обучение каскада утилитой haartraining "зайдет в тупик" (например, заданы недостижимые вероятности для данного набора изображений или что-то вроде этого :) )? И, если такое возможно, сообщит ли программа об этом?

Просто обучение вот с такими параметрами


opencv_haartraining \

  -data classifier2\

  -vec vecfile\

  -bg negatives.txt\

  -npos 2032\

  -nneg 7650\

  -nstages 12\

  -nsplits 2\

  -mem 4096\

  -nonsym\

  -minhitrate 0.999900\

  -maxfalsealarm 0.300000\

  -weighttrimming 0.950000\

  -mode ALL\

  -w 12\

  -h 24

выполняется уже порядка недели на достаточно мощной машине, а этап обучения не меняется. Подозреваю, что 0,3 - слишком мало. При этом процессор загружен на 100%, т.е. программа видимо что-то делает.

Share this post


Link to post
Share on other sites

Пытаюсь обучить каскад хаара с помощью данной утилиты.

В качестве исходных данных используется набор картинок с выделенными пешеходами (вручную).

По полученным данных создаю info.dat для генерации положительных примеров.

Вот его содержимое (кусочек):

e:\PedestriansPics\frame00001.bmp 2 248 60 15 30 241 40 9 19

e:\PedestriansPics\frame00002.bmp 2 249 60 14 28 241 41 9 19

e:\PedestriansPics\frame00003.bmp 2 247 61 13 27 240 39 12 25

e:\PedestriansPics\frame00004.bmp 2 249 61 14 28 240 39 13 26

e:\PedestriansPics\frame00005.bmp 2 250 62 14 28 238 40 9 18

с помощью утилиты createsamples.exe создаю файл positives.vec - пока все успешно.

В исходных картинках закрашиваю пешеходов черными прямоугольниками и делаю их список - файл с отрицательными примерами.

Запускаю обучение каскада Хаара:

haartraining.exe -vec positives.vec -bg bg.txt -npos 7000 -nneg 3000

он начинает обучаться, но потом выдает ошибку:

haartraining.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.

Из-за чего такая может возникать? как исправить?

Заранее благодрана :)

Share this post


Link to post
Share on other sites

Может быть из-за прав доступа к файлам?

Запущено от имени админа?

Share this post


Link to post
Share on other sites

Да, пользователь под которым запускается утилита имеет права администратора.

И падение происходит не сразу как к файлам обращается, а уже в процессе обучения.

Вот что выдает программа в окне:

Data dir name: (NULL)

Vec file name: positives.vec

BG file name: bg.txt

Num pos: 7000

Num neg: 3000

Num stages: 14

Num splits: 1 (stump as weak classifier)

Mem: 200 MB

Symmetric: TRUE

Min hit rate: 0.995000

Max false alarm rate: 0.500000

Weight trimming: 0.950000

Equal weights: FALSE

Mode: BASIC

Width: 24

Height: 24

Max num of precalculated features: 3495

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.10352e-005

Stage 0 loaded

Stage 1 loaded

Stage 2 loaded

Stage 3 loaded

Stage 4 loaded

Stage 5 loaded

Stage 6 loaded

Stage 7 loaded

Stage 8 loaded

Tree Classifier

Stage

+---+---+---+---+---+---+---+---+---+

| 0| 1| 2| 3| 4| 5| 6| 7| 8|

+---+---+---+---+---+---+---+---+---+

0---1---2---3---4---5---6---7---8

Number of features used : 85848

Parent node: 8

*** 1 cluster ***

POS: 964 1000 0.964000

NEG: 413 0.0128624

BACKGROUND PROCESSING TIME: 0.09

..................................

Precalculation time: 0.19

+----+----+-+---------+---------+---------+---------+

| N |%SMP|F| ST.THR | HR | FA | EXP. ERR|

+----+----+-+---------+---------+---------+---------+

| 1|100%|-|-0.205523| 1.000000| 1.000000| 0.458243|

+----+----+-+---------+---------+---------+---------+

| 2|100%|+|-0.283935| 1.000000| 1.000000| 0.342774|

+----+----+-+---------+---------+---------+---------+

| 3| 88%|-|-0.625260| 1.000000| 1.000000| 0.245461|

+----+----+-+---------+---------+---------+---------+

| 4| 90%|+|-0.805312| 1.000000| 1.000000| 0.245461|

+----+----+-+---------+---------+---------+---------+

| 5| 82%|-|-0.946783| 1.000000| 1.000000| 0.228758|

+----+----+-+---------+---------+---------+---------+

| 6| 81%|+|-0.892359| 1.000000| 0.973366| 0.228758|

+----+----+-+---------+---------+---------+---------+

| 7| 80%|-|-1.087639| 1.000000| 0.973366| 0.214234|

+----+----+-+---------+---------+---------+---------+

| 8| 78%|+|-1.152422| 0.996888| 0.963680| 0.203341|

+----+----+-+---------+---------+---------+---------+

| 9| 78%|-|-1.293953| 0.995851| 0.869249| 0.196805|

+----+----+-+---------+---------+---------+---------+

| 10| 77%|+|-1.325108| 0.995851| 0.866828| 0.195352|

+----+----+-+---------+---------+---------+---------+

| 11| 77%|-|-1.181903| 0.997925| 0.656174| 0.186638|

+----+----+-+---------+---------+---------+---------+

| 12| 77%|+|-1.386390| 0.995851| 0.702179| 0.148874|

+----+----+-+---------+---------+---------+---------+

| 13| 75%|-|-1.439945| 0.995851| 0.687651| 0.145243|

+----+----+-+---------+---------+---------+---------+

| 14| 76%|+|-1.304697| 0.995851| 0.636804| 0.124909|

+----+----+-+---------+---------+---------+---------+

| 15| 76%|-|-1.408380| 0.995851| 0.658596| 0.102397|

+----+----+-+---------+---------+---------+---------+

| 16| 74%|+|-1.347601| 0.995851| 0.605327| 0.111111|

+----+----+-+---------+---------+---------+---------+

| 17| 74%|-|-1.324087| 0.995851| 0.552058| 0.099492|

+----+----+-+---------+---------+---------+---------+

| 18| 73%|+|-1.258324| 0.995851| 0.508475| 0.095134|

+----+----+-+---------+---------+---------+---------+

Share this post


Link to post
Share on other sites

Сложно сказать, что ему не нравится.

Попробуйте все по шагам как здесь написано сделать:

http://note.sonots.com/SciSoftware/haartraining.html

Вроде у всех получалось по этому руководству.

Share this post


Link to post
Share on other sites

Min hit rate: 0.995000

Max false alarm rate: 0.5000 чует моё сердце проблема в этих строчках.

Можешь забить на падение и сделать каскад из 8 стадий. Думаю результат и так будет приемлемым.

Share this post


Link to post
Share on other sites

Благодарю за советы. Разобралась в чем была проблема. Я по наивности посчитала, что при создании примеров и обучении если не задать размер, то будет задан какой-то по умолчанию, но в этом была проблема. Когда явно написала размер каскад обучился.

Share this post


Link to post
Share on other sites

Есть рабочий каскад. Пытаюсь оценить его работоспособность в процентном соотношении. Не могу разобраться с синтаксисом утилиты performance.


C:\Users\Login>D:\OpenCV2.1\bin\opencv_performance.exe -data D:\img\den2000.xml

-info D:\img\den2000.vec -ni

+================================+======+======+======+

|            File Name           | Hits |Missed| False|

+================================+======+======+======+

|                           Total|     0|     0|     0|

+================================+======+======+======+

Number of stages: 12

Number of weak classifiers: 61

Total time: 0.000000

12

        0       0       -1.#IND00       -1.#IND00

        0       0       -1.#IND00       -1.#IND00

        0       0       -1.#IND00       -1.#IND00

        0       0       -1.#IND00       -1.#IND00

.......................................................

        0       0       -1.#IND00       -1.#IND00

префиксом -info D:\img\den2000.vec я даю адрес выходного файла, который был получен createsamples.

Share this post


Link to post
Share on other sites

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

Хотелось бы уточнить,что является результатом запуска программы haartraining.Если верить данному сайту ,то результатом является xml файл

The haartraing generates a xml file when the process is completely finished (from OpenCV beta5).

У меня же результатом работы является папка с txt файлами под каждый уровень классификатора.

Share this post


Link to post
Share on other sites

Я подозреваю что версия OpenCv у Вас старая (OpenCV beta5 (0.9.7)). Последняя версия 2.2

Share this post


Link to post
Share on other sites

Не уверен что проблема именно в этом.Я поставил последнюю версию но эффект тот же.На некоторый момент обучение застопорилось

qZJXIdP.jpg

и xml файл не сгенерировалсяюНе подскажете,в чем на ваш взгляд у меня проблема и в каком направлении копать для ее решения?

Share this post


Link to post
Share on other sites

Не уверен что проблема именно в этом.Я поставил последнюю версию но эффект тот же.На некоторый момент обучение застопорилось

qZJXIdP.jpg

и xml файл не сгенерировалсяюНе подскажете,в чем на ваш взгляд у меня проблема и в каком направлении копать для ее решения?

На сайте:

http://note.sonots.com/SciSoftware/haartraining.html#n43ec47f

есть пункт:

Generate a XML File

Там написано:

По окончании обучения должен сформироваться XML файл.

Чтобы получить XML из промежуточных файлов нужно скомпилировать OpenCV/samples/c/convert_cascade.c

и при помощи этой программы сформировать XML файл.

convert_cascade --size="<sample_width>x<sampe_height>" <haartraining_ouput_dir> <ouput_file>
пример: convert_cascade --size="20x20" haarcascade haarcascade.xml
[/code]

Share this post


Link to post
Share on other sites

Если обучение не закончено, а застопорилось, то xml файл не будет создан. Можно, конечно, его создать, но я не уверена корректно ли будет счить его обученным.

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Может из за ключиков симметрии?

- sym (default),
- nonsym
[/code] Определяет, обладает ли целевой объект вертикальной осевой симметрией (по умолчанию - да), наличие симметрии ускоряет процесс обучения. Например, фронтальные изображения лиц обладают осевой симметрией. Или набора используемых элементов
[code]- mode <BASIC (default) | CORE | ALL>
Определяет набор элементов хаара которые будут использоваться при обучении.
BASIC - это только верхне-правые,
ALL - полные набор верхне правых и повернутых на 45 градусов элементов.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

В обучении я ставила ключик -nonsym и использовала ALL...

Кстати попробовала отразить картинки и поискать левым классификатором - все равно ничего не находит, наверно надо что-то делать с самими картинками лиц

Share this post


Link to post
Share on other sites

Лично у меня обучение завершается само, если с ошибкой, тогда пишет с какой. При большом количестве файлов, обучение может работать ооочень долго и возникает подозрение, что оно виснет.

Share this post


Link to post
Share on other sites

Нашла проблему - попробовала изменять параметры -nstages -nsplits, Раньше было 20 и 2, при 3 и 3 находятся лица с правым поворотом, только работает в таком варианте распознаватель гораздо медленнее. Наверно можно еще поиследовать эти параметры и выбрать наилучший вариант...

А есть какие-нибудь правила по выбору этих параметров в зависимости от сложности данных и объема выборки, ну и с учетом желаемой скорости работы?

Share this post


Link to post
Share on other sites

Долго-понятие растяжимое...проблема в том,что обучение похоже зависает на подгрузке позитивных(или возможно негативных) изображений и дальше обучение не идет...В порядке эксперимента продержал обучение в таком состоянии(как изображено на картинке) больше суток-ничего не изменилось.И это при том,что до этого уровня обучение заняло от 4 до 6 часов.В обучении я использовал 9000 позитивных и 5000 негативных примеров.Сталкивался ли кто с аналогичной проблемой?

Share this post


Link to post
Share on other sites
Тут говорят нормальное время обучения до 3-7 суток так что 1 день - это очень мало.

Share this post


Link to post
Share on other sites

В архиве файл утилита с пояснениями и командным файлом для тренировки каскадов. В архиве есть исходники. Нужно только немного поправить и перекомпилировать для использования последней версии opencv. Там присутствуют exe-шнки, но они хотят cv.dll, это очень ранняя версия, я не нашел.

Может быть позже сделаю перевод документации к ней и допишу пояснения.

Взято с: http://inflomatik.com/

PDF - ка к программе: http://inflomatik.com/opencv/2003_05_OpenCV_ObjectDetection_HowTo.pdf

OpenCV_ObjectDetection_Demo.rar

Share this post


Link to post
Share on other sites

Тут говорят нормальное время обучения до 3-7 суток так что 1 день - это очень мало.

Это мало для полного обучения каскада, но для хотя бы одной итерации обучения одной секции, суток более чем достаточно, как мне кажется.

У меня обучение также стопорилось без каких-либо дополнительных сообщений (и висело так около недели на 3GHz). Я не понял в чём конкретно проблема, обходил увеличением базы изображений, изменением количества секций обучаемого каскада, изменением -minhitrate и -maxfalsealarm. Да, это накладно по времени dry.gif

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

А может кто-нибудь подскажет, что означает EXP. ERR в выводе haartraining? Вот в этом документе даётся такое пояснение:




+----+----+-+---------+---------+---------+---------+

|  N |%SMP|F|  ST.THR |    HR   |    FA   | EXP. ERR|

+----+----+-+---------+---------+---------+---------+

|   1|100%|-|-0.857040| 1.000000| 1.000000| 0.082075|

+----+----+-+---------+---------+---------+---------+

|   2|100%|+|-1.702127| 1.000000| 1.000000| 0.102168|

+----+----+-+---------+---------+---------+---------+

N	The iteration number of feature selection training.

%SMP	The percentage of original samples left.  

F	+ indicates the feature is flipped. Related to -sym (default) option.  

ST.THR	Stage threshold

HR	Hit rate

FA	False alarm rate. FYI: (HR, FA) = (1.0, 1.0) means the detector simply alarms every time for everything.

EXP.ERR 	Expected (misclassification) error.

Если имеется в виду частота ошибок второго рода, то почему это число не совпадает с (1 - HR)? Если это какие-то другие ошибки, то какие? Поискал там и тут, не получается найти еще какие-нибудь пояснения.

Share this post


Link to post
Share on other sites

Приветствую всех! Хочу попросить небольшой совет! :)

Требуется находить такое изображение:

i1ep6CQn.jpg

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

На мой взгляд, это правильно ввиду того, что эталонное изображение часто встречается в рукотворном мире.

2) Позитивные генерятся из единственного эталона с параметрами -w 77 -h 25 -maxxangle 0 -maxyangle 0 -maxzangle 0.175.

3) Обучение использует параметры: -nstages 14 -mode ALL -w 77 -h 25 -nonsym -minhitrate 0.9 -maxfalsealarm 0.5 -mem 1024

Соотношение pos:neg = 1:2

Good enough proportion is positive:negative = 1:2
.

Загвоздка в том, что даже при количестве 25 к 50 процесс стопорится не дойдя до 8 этапа. Ошибок не выдаёт. Комп Core2Duo 2.4 + 4 Гб.

Скажите, очень прошу, в чём изъян моего подхода?

post-4538-0-27025900-1314346937_thumb.jp

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.

×