Jump to content
Compvision.ru
Smorodov

Распознавание лиц HMM (Скрытые марковские модели)

Recommended Posts

Не подскажите, в теории какими фотографиями лучше оперировать? В примерах используются полутоновые изображения лица (ч/б). Можно ли подсовывать данному алгоритму цветное фото, на котором лицо не обязательно занимает основную область фотографии (далеко расположено)? Или нужно с помощью каскадов Хара определить лицо на фото, вырезать его, преобразовать в ч/б? И уже потом с этими обработанными фотографиями работать.

И насколько мелкими могут быть фотографии? Или под какой размер лучше подгонять изображения? Используя ваш код, при попытке загрузки фото размером 35х43 я получал ошибку доступа к памяти (не может быть прочитана). Есть ли смысл увеличивать изображение до нужного минимального размера?

Share this post


Link to post
Share on other sites

Всем привет! Очень сложная тема и с ходу почему то не дается. Пытаюсь применить для MS Visual studio 2010 c++/cli. Может у кого-нибудь завалялись руководства или ссылки на них, был бы очень признателен) Что то вроде такого, пусть даже на английском Детектирование Лиц Каскадами Хаара

Share this post


Link to post
Share on other sites

Лучшие книги по теме машинного обучения, в том числе HMM (практические, много иллюстраций и примеров):

Christopher M. Bishop

Pattern Recognition and

Machine Learning

и

Richard O. Duda

Pattern Classification

В интернете можно найти.

ЗЫ: Марковские модели - не та тема которую можно с наскока осилить :)

Share this post


Link to post
Share on other sites

Да, все это здорово, но все это чистая математическая теория, без практической реализации на какой-либо платформе. Вы пробовали использовать программу выложенную в начале темы, со своими наборами фотографий? Или только стандартные?

Share this post


Link to post
Share on other sites

Пробовал, все работало хорошо, как собственно и должно быть, метод-то общий. А в чем проблема?

ЗЫ: Детектор-Хаара очень простой детектор, и то вопросов по настройке параметров возникает много, а Марковские модели, штука посложнее, и если хотите пользоваться ей осознанно, то нужно осилить теорию.

Вот тут статья по образцу того что Вы Выложили: http://habrahabr.ru/post/109956/

Share this post


Link to post
Share on other sites

Я так понял пример программы, который вы прикрепили в начале топика, это на C Builder? Ниразу просто с ним не работал и не встречался) Не имеется подобного проекта для Visual studio с++/cli? А по поводу статьи на хабре, очень доступно, врочем как и всегда, спасибо)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Smorodov, Привет!

Подскажи, вот там есть в алгоритме такой код с подавлением первого коэффициента: (это у меня под си шарп переделано уже, но суть не в этом)


if( SUPPRESS_INTESITY )

                {

                    float[] observations = new float[noObs.height * noObs.width * ( obsVecLen + 1 ) ];


		    hmm.cvlib.cvImgToObs_DCT(iplImg, observations, dctSize, noDCTCoeff, stepSize);


                    ExtractDCT(observations, obsInfoVec[i].obs, noObs.height * noObs.width, obsVecLen);  // Подавляем первый коэффициент ДКП


                    // Очистка

			        if (observations != null)

			        {

                                    observations = null;

			        } 

                }

Вобщем функция cvImgToObs_DCT работает долго если загрузить фотки хотябы 640 на 480 к примеру, потому как массив float[] observations становится очень большим.

Тот же eigenface работает быстрее намного :)

Вот пример фото IWXTV68p.jpg

1. Нужно ли выделять лицо для алгоритма HMM ? с eigenface итак нормально работало без выделения лица. (причем если не выделять лицо HMM у меня иногда ошибки распознавания выдает)

2. Алгоритм так и должен дольше обучаться с большими фотками чем eigenfaces? или можно как то ускорить его? Хотя он даже с маленькими фотками теми что у тебя в программе дольше учиться. Поигрался с параметрами обучения пока ускорить не вышло особо.

С исходным примером в архиве HMMFacesAlpha0_1.zip пока не разобрался, немогу скомпилировать его под студию, хотел посмотреть как оно там будет, но код вроде 1 в 1

3. И есть ли какие то преимущества скрытых марковских моделей перед eigenface?

Share this post


Link to post
Share on other sites

1) И HMM и PCA используются обычно как алгоритмы распознавания, а не детектирования (можно обучить и на распознавание, но это отдельная тема), и намного быстрее и эффективнее будет вначале найти область с лицом при помощи алгоритма Viola Jones, а затем уже пытаться узнавать кто это.

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

3) Зависит от задачи и реализации. Потенциал марковских моделей больше, но реализация и обучение сложнее.

Share this post


Link to post
Share on other sites

Спасибо! потестировал еще и понял что с марковскими моделями меньше ошибок распознавания

Share this post


Link to post
Share on other sites

А обьясните на пальцах как работают эти марковские модели :) я понял только что по изображению окно бегает, и что для каждого пикселя в этом окне строится вектор.

Share this post


Link to post
Share on other sites

см. пост 55, там ссылка на хабр.

Share this post


Link to post
Share on other sites

Да читал я хабр, непойму как вектора по состояниям распределяются, и что дальше делается )

Можешь по коду пояснить?

obsInfoVec[ i ] = cvCreateObsInfo( noObs, obsVecLen ); - вот это я так понял вектора создаются.

а дальше чета не секу, наверное придется отладчиком до посинения смотреть че как считается )))

Share this post


Link to post
Share on other sites

Я не влезал в эти дебри пока, имею общее представление.

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

Определенное состояние является конечным, и если система достигла этого состояния, значит паттерн опознан. Ну вот коротко, как я это понимаю. А вообще лучше книжки читать :)

В книжках все написано :)

Christopher M. Bishop

Pattern Recognition and

Machine Learning

и

Richard O. Duda

Pattern Classification

Share this post


Link to post
Share on other sites

А не подскажите можно ли построение модели маркова выполнить с использованием видеокарты?

Должно ведь быстрее быть поидее

Share this post


Link to post
Share on other sites

Можно. А куда спешка такая ?

Share this post


Link to post
Share on other sites

Да у меня вот диссертация по распознаваниям лиц, нада научную новизну ну вот я и подумал про такое :)

А еще думаю может сделать какой нибудь алгоритм подстройки входных параметров для создания марковских моделей.

Share this post


Link to post
Share on other sites

набирайте в Google "Hidden Markov Models gpu" :)

и поймете, что тут все истоптано.

Share this post


Link to post
Share on other sites

Это неважно, главное что в реальных системах про такое не сказано:) Ну или я не находил таких систем. в основном метод главных компонент везде используется.

Share this post


Link to post
Share on other sites

Думаю эти книжки будут полезны (по крайней мере для списка литературы)

Wechsler H. Reliable Face Recognition Methods

и

Li S.Z., Jain A.K. Handbook of Face Recognition

Весь полезный набор можно посмотреть здесь: http://www.amazon.com/tag/face%20recognition?ref_=tag_dpp_cust_itdp_t&store=1

Share this post


Link to post
Share on other sites

еще есть fisher faces(LDA) вроде лучше справляется с изменением освещенности.

сравнение c PCA http://www.cs.columbia.edu/~belhumeur/journal/fisherface-pami97.pdf

еще какие то вариации

1-s2.0-S0950705112000548-gr2.jpg

еще некоторый материал

http://www.stat.ucla.edu/~sczhu/Courses/UCLA/Stat_231/Stat_231.html

http://kingpotter1990.bol.ucla.edu/papers/EigenFace.pdf

Share this post


Link to post
Share on other sites

Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы.

А дома комп гораздо быстрее :) что то тут не то :) попробую дома скомпилить под C++ в студии.

Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI.

Неужели сишный код настолько быстрее :)

может еще дело в том что на винде используются динамические библиотеки а в линухе статические :) или может то что я под линухом сам библиотеку собрал а в винде уже собраные использую, но это врятли так то

Share this post


Link to post
Share on other sites

Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы.

А дома комп гораздо быстрее :) что то тут не то :) попробую дома скомпилить под C++ в студии.

Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI.

Неужели сишный код настолько быстрее :)

может еще дело в том что на винде используются динамические библиотеки а в линухе статические :) или может то что я под линухом сам библиотеку собрал а в винде уже собраные использую, но это врятли так то

Я в итоге реализовал на С++, а на С# написал враппер на некоторые функции. На плюсах действительно все быстрее работает, главное избегать утечек памяти

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.

×