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

Находим в кадре лица, человеческие фигуры, и т.д. и т.п

Recommended Posts

Есть для VS именно выделение частей лица, меня интересуют глаза, брови, рот, вообщем то что больше остального влияет на мимику?

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


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

кстати вопрос по поводу разных viewpoint'ов

It appears that a monolithic

approach, where a single classifier is trained to detect all

poses of a face, is unlearnable with existing classifiers. Our

informal experiments lend support to this conclusion, since

a classifier trained on all poses appears to be hopelessly inaccurate.

из пейпера Fast multi-view face detection

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

определение угла поворота лица, есть код на матлабе.

http://web4.cs.ucl.ac.uk/research/vis/pvl/index.php?option=com_content&view=article&id=50:jania-aghajanian-phd-student&catid=36:students&Itemid=59/

возможно есть что то такое и на основе симметрии лица, т.е. обучать не надо.

а вообще это звучит как pose estimation вроде задача

но даже если мы определим угол поворота и худо бедно выделим лицо(опять же не решен вопрос какие границы выделения), то сразу же становится более сложный вопрос как мы потом будем сравнивать\объединять в одну модель всё это.

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


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

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

тем более что не очевиден выбор почему скейлится изображение, а не рамка классификатора?

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

вообще складывается неприятное впечатление, что всё это долго считается и параметры надо настраивать.

есть еще подход искать точки и объединять их в модель типа ASM/AAM, вроде как в таком случае мы всё равно при детекторе точек имеем проблему со скейлом, а вот уже модель получается инвариантна к масштабу(если брать голый граф-отношение между точками, а не текстуры у которых опять проблема с разрешением будет).

так вот как сравниваются найденные лица через ASM/AAM? "критерий похожести".

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


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

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

Что касается ASM/AAM, то там есть вектор, представляющий среднее лицо и вектор отклонений. Распознавание можно производить после приведения к фиксированному масштабу. На классификатор подается вектор отклонения от средней формы/текстуры.

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


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

вот еще интересный вопрос, а существуют ли не рамочные детекторы объектов?

https://sites.google.com/site/leeplus/publications/facedetectionusingsurfcascade

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


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

Bag Of Words вроде как не рамочный, хотя здесь зависит от того что мы понимаем под "рамочный".

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


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

не очень понятно как BoW нам поможет в детектировании объекта, ибо он по-моему для классификации используется.

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


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

На обратном проходе можно получить что то вроде распределения вероятности.

Если на прямом проходе классифицировали объект, то на обратном проходе каждому признаку присваивается (известная, т.к. мы при обучении классификатора собрали статистику) вероятность принадлежности этого признака этому объекту.

Далее с изображения берем фрагменты-признаки, и суммируем вероятности.

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
можно конечно их рамкой обвести, но по-моему это не то

Или построить модель распределения вероятности,например в виде смеси гауссианов .

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


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

У меня вопрос:

При запуске FaceDetect.rar выдаётся ошибкаб отсутствует фаил VCL60.BPL. СПАСИБО

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


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

Это библиотеки 6 билдера.

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


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

Всем доброго времени суток! кто-нибудь компилировал код (facedetect.cpp) из папки opencv\samples ? У меня при компиляции выходит ошибки

error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall cv::CascadeClassifier::~CascadeClassifier(void)" (??1CascadeClassifier@cv@@UAE@XZ) в функции _main;

error LNK2019: ссылка на неразрешенный внешний символ "public: bool __thiscall cv::CascadeClassifier::load(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?load@CascadeClassifier@cv@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) в функции _main;

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall cv::CascadeClassifier::CascadeClassifier(void)" (??0CascadeClassifier@cv@@QAE@XZ) в функции _main.

Кто-нибудь сталкивался с такой проблемой? заранее благодарю

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


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

Не подключена библиотека с этими функциями. Думаю что opencv_objdetect249.lib, уточнять лень .

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


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

Не подключена библиотека с этими функциями. Думаю что opencv_objdetect249.lib, уточнять лень .

это для release?

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


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

подключил библиотеки, и скомпилировалось без ошибок. при отладки требуются pdb файлы. соответствующие dll - ки у меня есть. эти pdb сккачивать нужно или можно их как-то получить из dll?

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


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

Не знаю, из dll вряд ли можно получить, у меня .pdb получаются при компиляции бинарников opencv.

Я обычно готовые не скачиваю.

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


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

Не знаю, из dll вряд ли можно получить, у меня .pdb получаются при компиляции бинарников opencv.

Я обычно готовые не скачиваю.

может ли быть ошибка в VS или opencv?

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


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

Почему ошибка? не вложили в архив и все.

А Вы собираетесь код библиотеки отлаживать? что они понадобились.

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


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

Почему ошибка? не вложили в архив и все.

А Вы собираетесь код библиотеки отлаживать? что они понадобились.

да, делаю отладку - VS не может найти PDB файлы

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


Ссылка на сообщение
Поделиться на других сайтах
first change parameters, tools->option->debugging->symbol->server,yes thenCtrl+F5,then you will see amazing things.

нашел здесь:

http://stackoverflow.com/questions/4813975/why-is-visual-studio-2010-not-able-to-find-open-pdb-files

Не проверял, т.к. с подобной проблемой не сталкивался.

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


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

тут интересный вывод

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

The created detectors outperformed the opencv default xml in terms of synthesized test samples created from training samples. This shows that the training was successfully performed. However, the detector did not work well in general test samples. This might mean that the detector was over-trained or over-fitted to the specific training samples. I still don't know good parameters or training samples to generalize detectors well.

False alarm rates of all of my generated detectors were pretty low compared with the opencv default detector. I don't know which parameters are especially different. I set false alarm rate with 0.5 and this makes sense theoretically. I don't know.

Training illumination varying faces in one detector resulted in pretty poor. The generated detector became sensitive to illumination rather than robust to illumination. This detector does not detect non-illuminated normal frontal faces. This makes sense because normal frontal faces did not exist in training sets so many. Training multi-view faces in one time resulted in the same thing.

We should train different detectors for each face pose or illumination state to construct a multi-view or illumination varied face detector as Fast Multi-view Face Detection. Viola and Jones extended their work for multi-view by training 12 separated face poses detectors. To achieve rapidness, they further constructed a pose estimator by C4.5 decision tree re-using the haar-like features, they further cascaded the pose estimator and face detector (Of course, this means that if pose estimation fails, the face detection also fails).

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

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

+не страдает ли тем же самым метод PCA?(теоретически его тоже можно было бы использовать как детектор(не в риал тайме) вместо, N хаар детекторов) т.е. мерить расстояние по какой либо метрике в пространстве признаков.

тут еще информация по обучению

http://answers.opencv.org/question/1070/improve-object-detection-quality/

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


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

"Сильная" - здесь, вероятно, подразумевается что дисперсия признака внутри класса сопоставима с дисперсией по всей выборке. В таком случае, ни один метод не обучится нормально.

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

Можно привести пример (крайний случай, когда области классов совпадают полностью):

Например по цвету:

объект класса "А". В выборке 50 объектов класса "А" имеют синий цвет и

объект класса "Б". В выборке 50 объектов класса "Б" имеют синий цвет.

Вам сказали что у цвет объекта синий, как определить какого класса объект?

Никак, только гадать.

Другой пример, когда признаки хорошо разделяют классы:

объект "А" все квадратные и

объект "Б" все круглые.

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

Здесь все просто.

Остальные варианты, которые обычно и встречаются, лежат между этими крайними случаями.

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

Вот картинка:

post-1-0-55872900-1359390365_thumb.png

Черные круги, это дисперсия внутри класса, зеленые дисперсия по всей выборке.

X1 и X2 - признаки. Красные и синие точки это объекты класса "А" и "Б".

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


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

поясните на примере

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

ну так сначала надо разделить на классы, и как потом искать эти признаки?

насчёт картинки, там имеется ввиду что мы хотим разделить 2 множества точек какой либо кривой?

что если у нас например внутри синей области 2 красные области не соединённые между собой, это реально?

кстати тот же knn(который вроде как плохо работает, относительно остальных классификаторов(кстати почему? ему "не хватает примеров"?т.е. он как бы не генерализует все данные?) и результат которого зависит еще и от К) как раз работает как бы по прецедентам(т.е. на поле красный-синий мы как бы обрисовываем группы точек)+ еще я так понимаю от кол-ва сэмплов будет зависеть и скорость поиска.

еще там вроде в этот же класс алгоритмов входит Instance-Based Learning

http://www.mathworks.com/help/stats/classification-using-nearest-neighbors.html

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

+ еще идея искать отдельно левую и правую половину лица, мне кажется так будет более устойчиво к повороту.

+ еще интересно искать глаза+ рот и вырезать вокруг них область возможно будет надёжнее, чем искать сразу лицо.

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


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

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

Все множество точек состоит из красных и синих.

Если искать дисперсию по точкам обоих цветов, то получим разброс значения признака по всей выборке.

Дисперсия внутри классов, это разброс признака для заданного цвета.

По поводу второго вопроса, я подумал что мы имеем дело с обучением с учителем (ссылка на Хаара).

насчёт картинки, там имеется ввиду что мы хотим разделить 2 множества точек какой либо кривой?

да

что если у нас например внутри синей области 2 красные области не соединённые между собой, это реально?

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

кстати тот же knn(который вроде как плохо работает, относительно остальных классификаторов(кстати почему? ему "не хватает примеров"?т.е. он как бы не генерализует все данные?) и результат которого зависит еще и от К) как раз работает как бы по прецедентам(т.е. на поле красный-синий мы как бы обрисовываем группы точек)+ еще я так понимаю от кол-ва сэмплов будет зависеть и скорость поиска.

Да, knn при увеличении размерности пространства требует существенного увеличения плотности точек.

Скорость поиска зависит от количества данных, но если использовать деревья, то зависимость логарифмическая.

Детектор Хаара работает не так уж и плохо, на фоне других детекторов, вопрос, я думаю здесь еще в качестве обучающих данных, если бы мы могли использовать область не 24 на 24, а 240 на 240, может результат был бы и лучше. А так, люди ведь тоже видят фигуры в облаках :)

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×