ShurikEv 0 Жалоба Опубликовано November 30, 2011 Не подскажите, в теории какими фотографиями лучше оперировать? В примерах используются полутоновые изображения лица (ч/б). Можно ли подсовывать данному алгоритму цветное фото, на котором лицо не обязательно занимает основную область фотографии (далеко расположено)? Или нужно с помощью каскадов Хара определить лицо на фото, вырезать его, преобразовать в ч/б? И уже потом с этими обработанными фотографиями работать. И насколько мелкими могут быть фотографии? Или под какой размер лучше подгонять изображения? Используя ваш код, при попытке загрузки фото размером 35х43 я получал ошибку доступа к памяти (не может быть прочитана). Есть ли смысл увеличивать изображение до нужного минимального размера? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано May 20, 2012 Всем привет! Очень сложная тема и с ходу почему то не дается. Пытаюсь применить для MS Visual studio 2010 c++/cli. Может у кого-нибудь завалялись руководства или ссылки на них, был бы очень признателен) Что то вроде такого, пусть даже на английском Детектирование Лиц Каскадами Хаара Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 20, 2012 Лучшие книги по теме машинного обучения, в том числе HMM (практические, много иллюстраций и примеров): Christopher M. Bishop Pattern Recognition and Machine Learning и Richard O. Duda Pattern Classification В интернете можно найти. ЗЫ: Марковские модели - не та тема которую можно с наскока осилить Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано May 20, 2012 Да, все это здорово, но все это чистая математическая теория, без практической реализации на какой-либо платформе. Вы пробовали использовать программу выложенную в начале темы, со своими наборами фотографий? Или только стандартные? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 20, 2012 Пробовал, все работало хорошо, как собственно и должно быть, метод-то общий. А в чем проблема? ЗЫ: Детектор-Хаара очень простой детектор, и то вопросов по настройке параметров возникает много, а Марковские модели, штука посложнее, и если хотите пользоваться ей осознанно, то нужно осилить теорию. Вот тут статья по образцу того что Вы Выложили: http://habrahabr.ru/post/109956/ Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JoQeR 0 Жалоба Опубликовано May 21, 2012 Я так понял пример программы, который вы прикрепили в начале топика, это на C Builder? Ниразу просто с ним не работал и не встречался) Не имеется подобного проекта для Visual studio с++/cli? А по поводу статьи на хабре, очень доступно, врочем как и всегда, спасибо) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 21, 2012 На билдер она переделана, там в архиве исходный вариант для студии есть, еще где-то на форуме помнится ссылка на еще один вариант была. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано 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? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 26, 2012 1) И HMM и PCA используются обычно как алгоритмы распознавания, а не детектирования (можно обучить и на распознавание, но это отдельная тема), и намного быстрее и эффективнее будет вначале найти область с лицом при помощи алгоритма Viola Jones, а затем уже пытаться узнавать кто это. 2) А зачем ему большие фотки? Наиболее эффективно работать с фотками минимального размера на котором вы сами можете узнать человека, остальное избыточная информация, которую алгоритм должен отсеивать. Просто приводите масштаб изображений к стандартному размеру. 3) Зависит от задачи и реализации. Потенциал марковских моделей больше, но реализация и обучение сложнее. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 27, 2012 Спасибо! потестировал еще и понял что с марковскими моделями меньше ошибок распознавания Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 27, 2012 А обьясните на пальцах как работают эти марковские модели я понял только что по изображению окно бегает, и что для каждого пикселя в этом окне строится вектор. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 27, 2012 см. пост 55, там ссылка на хабр. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 27, 2012 Да читал я хабр, непойму как вектора по состояниям распределяются, и что дальше делается ) Можешь по коду пояснить? obsInfoVec[ i ] = cvCreateObsInfo( noObs, obsVecLen ); - вот это я так понял вектора создаются. а дальше чета не секу, наверное придется отладчиком до посинения смотреть че как считается ))) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 27, 2012 Я не влезал в эти дебри пока, имею общее представление. Смысл в том, что мы при обучении марковской модели, получаем сеть состояний, соединенных между собой вероятностными связями (ребрами графа, если состояния это вершины графа). Векторы являются чем то вроде событий, при наступлении которых модель может сменить свое состояние, а может и нет, зависит от вероятности. Эти вероятности, получаются в процессе обучения. Из каждого состояния связи (ребра графа), ведут в другие состояния. Определенное состояние является конечным, и если система достигла этого состояния, значит паттерн опознан. Ну вот коротко, как я это понимаю. А вообще лучше книжки читать В книжках все написано Christopher M. Bishop Pattern Recognition and Machine Learning и Richard O. Duda Pattern Classification Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 28, 2012 А не подскажите можно ли построение модели маркова выполнить с использованием видеокарты? Должно ведь быстрее быть поидее Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 28, 2012 Можно. А куда спешка такая ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 28, 2012 Да у меня вот диссертация по распознаваниям лиц, нада научную новизну ну вот я и подумал про такое А еще думаю может сделать какой нибудь алгоритм подстройки входных параметров для создания марковских моделей. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано May 28, 2012 набирайте в Google "Hidden Markov Models gpu" и поймете, что тут все истоптано. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 28, 2012 Это неважно, главное что в реальных системах про такое не сказано Ну или я не находил таких систем. в основном метод главных компонент везде используется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 28, 2012 Спасибо! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано 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 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 29, 2012 Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы. А дома комп гораздо быстрее что то тут не то попробую дома скомпилить под C++ в студии. Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI. Неужели сишный код настолько быстрее может еще дело в том что на винде используются динамические библиотеки а в линухе статические или может то что я под линухом сам библиотеку собрал а в винде уже собраные использую, но это врятли так то Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Flame 1 Жалоба Опубликовано May 29, 2012 А нет вру, вроде тоже динамические Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ShurikEv 0 Жалоба Опубликовано May 29, 2012 Smorodov, щас ваш проект билдеровский скомпилировал под рабочим компом с линуксом (opensuse 12.1 kde 4.8)в консольном QT проекте на чистом C++, и что то оно гораздо быстрее работает с теми же самыми выборками, чем у меня дома в винде на си шарпе с использованием того враппера что ShurikEV предлагал. Прям в разы. А дома комп гораздо быстрее что то тут не то попробую дома скомпилить под C++ в студии. Правда под линем библиотека 2.4 а дома 2.3.1, и и на лине консольный проект а дома виндовый под GUI. Неужели сишный код настолько быстрее может еще дело в том что на винде используются динамические библиотеки а в линухе статические или может то что я под линухом сам библиотеку собрал а в винде уже собраные использую, но это врятли так то Я в итоге реализовал на С++, а на С# написал враппер на некоторые функции. На плюсах действительно все быстрее работает, главное избегать утечек памяти Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах