ShurikEv 0 Report post Posted November 30, 2011 Не подскажите, в теории какими фотографиями лучше оперировать? В примерах используются полутоновые изображения лица (ч/б). Можно ли подсовывать данному алгоритму цветное фото, на котором лицо не обязательно занимает основную область фотографии (далеко расположено)? Или нужно с помощью каскадов Хара определить лицо на фото, вырезать его, преобразовать в ч/б? И уже потом с этими обработанными фотографиями работать. И насколько мелкими могут быть фотографии? Или под какой размер лучше подгонять изображения? Используя ваш код, при попытке загрузки фото размером 35х43 я получал ошибку доступа к памяти (не может быть прочитана). Есть ли смысл увеличивать изображение до нужного минимального размера? Share this post Link to post Share on other sites
JoQeR 0 Report post Posted May 20, 2012 Всем привет! Очень сложная тема и с ходу почему то не дается. Пытаюсь применить для MS Visual studio 2010 c++/cli. Может у кого-нибудь завалялись руководства или ссылки на них, был бы очень признателен) Что то вроде такого, пусть даже на английском Детектирование Лиц Каскадами Хаара Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 20, 2012 Лучшие книги по теме машинного обучения, в том числе HMM (практические, много иллюстраций и примеров): Christopher M. Bishop Pattern Recognition and Machine Learning и Richard O. Duda Pattern Classification В интернете можно найти. ЗЫ: Марковские модели - не та тема которую можно с наскока осилить Share this post Link to post Share on other sites
JoQeR 0 Report post Posted May 20, 2012 Да, все это здорово, но все это чистая математическая теория, без практической реализации на какой-либо платформе. Вы пробовали использовать программу выложенную в начале темы, со своими наборами фотографий? Или только стандартные? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 20, 2012 Пробовал, все работало хорошо, как собственно и должно быть, метод-то общий. А в чем проблема? ЗЫ: Детектор-Хаара очень простой детектор, и то вопросов по настройке параметров возникает много, а Марковские модели, штука посложнее, и если хотите пользоваться ей осознанно, то нужно осилить теорию. Вот тут статья по образцу того что Вы Выложили: http://habrahabr.ru/post/109956/ Share this post Link to post Share on other sites
JoQeR 0 Report post Posted May 21, 2012 Я так понял пример программы, который вы прикрепили в начале топика, это на C Builder? Ниразу просто с ним не работал и не встречался) Не имеется подобного проекта для Visual studio с++/cli? А по поводу статьи на хабре, очень доступно, врочем как и всегда, спасибо) Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 21, 2012 На билдер она переделана, там в архиве исходный вариант для студии есть, еще где-то на форуме помнится ссылка на еще один вариант была. Share this post Link to post Share on other sites
Flame 1 Report post Posted May 26, 2012 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 работает быстрее намного Вот пример фото 1. Нужно ли выделять лицо для алгоритма HMM ? с eigenface итак нормально работало без выделения лица. (причем если не выделять лицо HMM у меня иногда ошибки распознавания выдает) 2. Алгоритм так и должен дольше обучаться с большими фотками чем eigenfaces? или можно как то ускорить его? Хотя он даже с маленькими фотками теми что у тебя в программе дольше учиться. Поигрался с параметрами обучения пока ускорить не вышло особо. С исходным примером в архиве HMMFacesAlpha0_1.zip пока не разобрался, немогу скомпилировать его под студию, хотел посмотреть как оно там будет, но код вроде 1 в 1 3. И есть ли какие то преимущества скрытых марковских моделей перед eigenface? Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 26, 2012 1) И HMM и PCA используются обычно как алгоритмы распознавания, а не детектирования (можно обучить и на распознавание, но это отдельная тема), и намного быстрее и эффективнее будет вначале найти область с лицом при помощи алгоритма Viola Jones, а затем уже пытаться узнавать кто это. 2) А зачем ему большие фотки? Наиболее эффективно работать с фотками минимального размера на котором вы сами можете узнать человека, остальное избыточная информация, которую алгоритм должен отсеивать. Просто приводите масштаб изображений к стандартному размеру. 3) Зависит от задачи и реализации. Потенциал марковских моделей больше, но реализация и обучение сложнее. Share this post Link to post Share on other sites
Flame 1 Report post Posted May 27, 2012 Спасибо! потестировал еще и понял что с марковскими моделями меньше ошибок распознавания Share this post Link to post Share on other sites
Flame 1 Report post Posted May 27, 2012 А обьясните на пальцах как работают эти марковские модели я понял только что по изображению окно бегает, и что для каждого пикселя в этом окне строится вектор. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 27, 2012 см. пост 55, там ссылка на хабр. Share this post Link to post Share on other sites
Flame 1 Report post Posted May 27, 2012 Да читал я хабр, непойму как вектора по состояниям распределяются, и что дальше делается ) Можешь по коду пояснить? obsInfoVec[ i ] = cvCreateObsInfo( noObs, obsVecLen ); - вот это я так понял вектора создаются. а дальше чета не секу, наверное придется отладчиком до посинения смотреть че как считается ))) Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 27, 2012 Я не влезал в эти дебри пока, имею общее представление. Смысл в том, что мы при обучении марковской модели, получаем сеть состояний, соединенных между собой вероятностными связями (ребрами графа, если состояния это вершины графа). Векторы являются чем то вроде событий, при наступлении которых модель может сменить свое состояние, а может и нет, зависит от вероятности. Эти вероятности, получаются в процессе обучения. Из каждого состояния связи (ребра графа), ведут в другие состояния. Определенное состояние является конечным, и если система достигла этого состояния, значит паттерн опознан. Ну вот коротко, как я это понимаю. А вообще лучше книжки читать В книжках все написано Christopher M. Bishop Pattern Recognition and Machine Learning и Richard O. Duda Pattern Classification Share this post Link to post Share on other sites
Flame 1 Report post Posted May 28, 2012 А не подскажите можно ли построение модели маркова выполнить с использованием видеокарты? Должно ведь быстрее быть поидее Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 28, 2012 Можно. А куда спешка такая ? Share this post Link to post Share on other sites
Flame 1 Report post Posted May 28, 2012 Да у меня вот диссертация по распознаваниям лиц, нада научную новизну ну вот я и подумал про такое А еще думаю может сделать какой нибудь алгоритм подстройки входных параметров для создания марковских моделей. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 28, 2012 набирайте в Google "Hidden Markov Models gpu" и поймете, что тут все истоптано. Share this post Link to post Share on other sites
Flame 1 Report post Posted May 28, 2012 Это неважно, главное что в реальных системах про такое не сказано Ну или я не находил таких систем. в основном метод главных компонент везде используется. Share this post Link to post Share on other sites
Smorodov 579 Report post Posted May 28, 2012 Думаю эти книжки будут полезны (по крайней мере для списка литературы) 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
mrgloom 242 Report post Posted May 29, 2012 еще есть fisher faces(LDA) вроде лучше справляется с изменением освещенности. сравнение c PCA http://www.cs.columbia.edu/~belhumeur/journal/fisherface-pami97.pdf еще какие то вариации еще некоторый материал 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
Flame 1 Report post Posted May 29, 2012 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
Flame 1 Report post Posted May 29, 2012 А нет вру, вроде тоже динамические Share this post Link to post Share on other sites
ShurikEv 0 Report post Posted May 29, 2012 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