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

Тренировка (haar cascade training)

Recommended Posts

Всем привет!
Вот и закончились праздники.
Пока они были - успел заинтересоваться возможностями openCV.
Прошу не кидаться камнями, ибо относительно недавно занялся изучением, и могу делать глупые ошибки.
В общем, поигрался с мануалами (детектирование лица на видео, котики на фото).
Захотел попробовать натренировать свою xml (haar cascade training) для определения, есть ли на видео рыбки (аквариумные).
Правильно ли я вижу процесс тренировки? : 
1. Я должен подготовить две выборки фотографий (позитивные и негативны) c (например) ~1000 и 3000 примеров соответственно ;
2. Разложить их по папкам good и bad; на уровне корня создать два файла: good.dat и bad.dat
3. Привожу к общему формату положительные : opencv_createsamples.exe -info something\Good.dat -vec samples.vec -w 20 -h 20
4. Создаю финальный каскад xml: opencv_traincascade.exe -data haarcascade -vec samples.vec -bg something\Bad.dat -numStages 16 -minhitrate 0.999 -maxFalseAlarmRate 0.4 -numPos 200 -numNeg 500 -w 20 -h 20 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

на втором пункте у меня возникают некоторые вопросы:
 - какого размера должны быть good и bad фотографии? Нужно делать их на профессиональный фотоаппарат, или хватит камеры телефона? Должен ли быть у них одинаковый размер?
 - если в файле bad.dat, согласно статьи с хабра,  должно быть просто перечисление фотографий, то в файле good.dat, цитирую "Кроме пути должно быть указанно положение рассматриваемого объекта и его размер.".
если я сделаю несколько фотографий рыбки в аквариуме, мне нужно будет потом эти фотографии в ручную обрезать, найти у каждой фотографии координаты рыбки и указать?


Пока больше вопросов нет. Искал по форуму ответы - не смог найти. 
Заранее спасибо!)

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


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

1. количество примером чем больше тем лучше. Количество положительных и отрицательных должно быть примерно равным. 

2. Положительный пример - это фотография где есть искомый объект. Т.е. это целая фотография, в которой указывается область где есть объект. Обрезать ничего не нужено.  Сам размер области и всей фотографии не важен. Но каскад у вас 20 на 20, т.е. квадрат и область желательно делать тоже квадратной. И да надо будет руками отмечать области.

3. Отрицательный пример - это фонография где нет искомого объекта. ЕЕ размер тоже не важен.

4. Качество телефона вполне хватит.

 

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
В 13.01.2018 at 10:07, iskees сказал:

1. количество примером чем больше тем лучше. Количество положительных и отрицательных должно быть примерно равным. 

2. Положительный пример - это фотография где есть искомый объект. Т.е. это целая фотография, в которой указывается область где есть объект. Обрезать ничего не нужено.  Сам размер области и всей фотографии не важен. Но каскад у вас 20 на 20, т.е. квадрат и область желательно делать тоже квадратной. И да надо будет руками отмечать области.

3. Отрицательный пример - это фонография где нет искомого объекта. ЕЕ размер тоже не важен.

4. Качество телефона вполне хватит.

 

спасибо за ответы. возникли ещё пара вопросов:

5. Отрицательные примеры должны быть чёрно-белые, и цветные?

6. Положительные примеры должны быть чёрно-белыми, или цветными ?

 

на некоторых ресурсах встречал обучение именно на чёрно-белых картинках, чему был удивлён

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


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

Всё чёрно-белое (grayscale). Можно подавать и цветное, но цвет не используется.

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
В 18.01.2018 at 14:22, Nuzhny сказал:

Всё чёрно-белое (grayscale). Можно подавать и цветное, но цвет не используется.

спасибо. 

и ещё возникшие вопросы) 

пытался научить находить пачку молока на фотографии. Как положительные - использовал такие фотографии, как прикреплённая; как отрицательные - примерно такая же фото, только пачка молока на ней отсутствует. Всего 800 положительных и 2300 отрицательных фотографий.

при создании файла vec с помощью opencv_createsamples задавал параметры -w 10 -h 30

при самой тренировке с помощью opencv_traincascade использовал следующие параметры: 

 -numStages 16 -minhitrate 0.999 -maxFalseAlarmRate 0.4 -numPos 700 -numNeg 2300 -w 10 -h 30 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

после окончания обучения (обучение длилось ~15 часов), при использовании получившегося каскада коробка с молоком всё равно не распознавалась. 
 

Верно ли я задавал параметры и сделал фотографии, или что-то я сделал не так ?

 

Snapshot_20180121_2461 — копия.JPG

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


Ссылка на сообщение
Поделиться на других сайтах
4 minutes ago, dmitryctc said:

пытался научить находить пачку молока на фотографии. Как положительные - использовал такие фотографии, как прикреплённая; как отрицательные - примерно такая же фото, только пачка молока на ней отсутствует. Всего 800 положительных и 2300 отрицательных фотографий.

при создании файла vec с помощью opencv_createsamples задавал параметры -w 10 -h 30

Данных маловато, конечно. Рекомендуется несколько тысяч - несколько десятков тысяч только положительных примеров. Отрицательных примерно также, но классификатор нарежет их сам. Если база такая маленькая, то лучше попробовать HOG.

И... почему такие маленькие размеры? 10 на 30! Лучше раза в два или четыре больше. И ты уверен, что пропорции верные?

Время обучения несколько часов или несколько суток - это нормально.

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


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

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

http://blog.dlib.net/2014/02/dlib-186-released-make-your-own-object.html

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

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


Ссылка на сообщение
Поделиться на других сайтах
17 minutes ago, Smorodov said:

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

Кстати да. Тот же детектор автомобильных номеров на классификаторе из dlib (продвинутый HOG, насколько я понял что-то типа DPM) работает намного лучше, чем детектор из OpenCV на основе каскадов Хаара (data/haarcascades/haarcascade_russian_plate_number.xml).

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


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

> детектор автомобильных номеров на классификаторе из dlib

А из коробки есть?

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


Ссылка на сообщение
Поделиться на других сайтах
52 minutes ago, mrgloom said:

> детектор автомобильных номеров на классификаторе из dlib

А из коробки есть?

Нет, но тренируется элементарно по датасету с Хабра. Что показательно, как раз на этом датасете и сделан приведённый выше каскад Хаара. Эти ребята в OpenCV его и добавили. Что очень здорово - можно сравнить.

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


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

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

В 22.01.2018 at 14:43, Nuzhny сказал:

Данных маловато, конечно. Рекомендуется несколько тысяч - несколько десятков тысяч только положительных примеров. Отрицательных примерно также, но классификатор нарежет их сам. Если база такая маленькая, то лучше попробовать HOG.

 

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

В 22.01.2018 at 14:43, Nuzhny сказал:

И... почему такие маленькие размеры? 10 на 30! Лучше раза в два или четыре больше. И ты уверен, что пропорции верные?

где-то прочитал, что для автомобильных номеров используется 30 ширина и 10 высота. Прикинул - ведь, если перевернуть коробку, выйдет примерно то же самое, вот и решил использовать те же пропорции (3 к 1) и размеры. Полагаю, что с размерами ошибся. Как их лучше правильно высчитать?

В 22.01.2018 at 14:57, Smorodov сказал:

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

 

спасибо, вечером изучу, что это за зверь. Изначально везде попадался opencv, вот и решил сразу использовать его)

 

Вопрос по негативным изображениям - мне нужно использовать как негативные изображения фон без объекта, или я могу просто набрать разных картинок, загрузить их в папку, сделать описание и больше не волноваться по поводу того, какие картинки там лежат? 

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×