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

Поиск лица по фотографии

Recommended Posts

Поиск лица по фотографии

Доброго времени суток перерыл весь форум и гугл но ничего нормального не нашел. Задача такова, имеются около 100.000 фотографий (фото 1 (все они черно белые)) необходима программа которая будет производить поиск по задаваемой фотографии, т.е. грубо говоря программе указываете фотографию с лицом человека (указываемая фотография будет из паспорта но черно-белая с нормальным разрешением) далее указываем программе папку где искать и программа производит поиск по лицу. Программы на подобии Duplicate Photo не подходят.

post-6088-0-66790400-1352234665_thumb.jp

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


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

вы что в паспортном столе работаете?)

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

можно заюзать Picasa, но это неполноценно и неудобно.

самое простое, то что можно сделать на коленке это детектор лиц через Хаара + распознавание через PCA.

только тут как я вижу проблема в том, что придётся проецировать все 100к лиц ,а я не уверен что есть готовая библиотека которая умеет с такими объемами работать и сколько это времени займёт тоже неясно.

(если не прав то поправьте)

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

интересно было бы узнать как всё это вообще делать на таких объемах.

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

и опять же это если у нас 1 человек-1 фото, а что если 1 человек = набор фото? хотя тут опять же можно все со всми сравнить и просто просто проссумировать веса.

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


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

вот кстати лица выделяют из видео

http://www.vocord.ru/241/

но я кстати какую то другую программу видел.

п.с. габитоскопический на английский как то переводится?

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


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

кстати еще вопрос если производить разметку вручную, то возможно ли определить какую либо функцию деформации по этим точкам?

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


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

а хотя мы наверно опять возвращаемся к морфометрии

http://www.mathworks.com/help/stats/procrustes.html

но это полезно если только у нас есть точки.

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


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

кстати еще вопрос если производить разметку вручную, то возможно ли определить какую либо функцию деформации по этим точкам?

Может RBF подойдет?

http://www.compvision.ru/forum/index.php?showtopic=1032

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


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

а причём тут интерполятор?

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

опять же разметка по точкам очень зависит от viewpoint'a и выражения лица.(хотя не думаю что это проблема)

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

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


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

В таком случае получается ASM или AAM.

Просто брать в качестве значений признаков проекции масок на собственный базис.

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

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


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

Просто брать в качестве значений признаков проекции масок на собственный базис.

не понял.

мы должны добавлять изображения из 100к в наш "базис" до тех пор пока средняя модель не будет менятся? или должны построить из всех 100к сэмплов нашу среднюю модель?

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

это вообще не понял.

тут вот http://graphics.stanford.edu/courses/cs164-09-spring/Handouts/paper_shape_spaces_imm403.pdf пишут про метрику

Often used shape metrics include the Hausdorff distance [14], the strain energy [18] and the

Procrustes distance [8, 7, 1, 5]. Where the two former compare shapes with unequal amount of

points, the latter requires corresponding point sets.

еще кое-что

http://www.jdl.ac.cn/user/rpwang/research.htm

http://www.slideshare.net/pateheo/manifold-learning

http://www.slideshare.net/zukun/nonlinear-manifolds-in-computer-vision

код для GPA

http://www.maths.nottingham.ac.uk/personal/pmzspp/shape.php

разные рутины для матлаба

http://www.cad.zju.edu.cn/home/dengcai/Data/data.html

что то типа CBIR только для лиц

http://research.microsoft.com/pubs/155719/face-pami.pdf

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


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

Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов.

Дальше вычисляем собственные векторы матрицы ковариации этого множества.

Проецируем эти 100к масок на базис собственных векторов.

KD-дерево для ускорения поиска.

При поступлении нового лица, проецируем его на базис собственных векторов.

Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания.

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


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

Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов.

Дальше вычисляем собственные векторы этого множества.

Проецируем эти 100к масок на базис собственных векторов.

KD-дерево для ускорения поиска.

При поступлении нового лица, проецируем его на базис собственных векторов.

Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания.

извините, Smorodov? а что значит усредняем? по какой характеристике?

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


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

Например если маска состоит из 22 характерных точек, то мы ищем 22 средних по выборке точки.

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

Получаем среднюю модель.

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

Суммируем все изображения и делим на их количество.

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

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

Для каждого лица будет свой такой вектор. Дальше с ними и работаем как с векторами.

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


Ссылка на сообщение
Поделиться на других сайтах
Мы усредняем наши 100к масок, получаем среднюю модель. Она нужна для вычисления собственных векторов.

Дальше вычисляем собственные векторы этого множества.

Проецируем эти 100к масок на базис собственных векторов.

KD-дерево для ускорения поиска.

При поступлении нового лица, проецируем его на базис собственных векторов.

Измеряем расстояние от каждой из 100к масок до новой, только что поступившей для опознания.

Вы это какой алгоритм описали?

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

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

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

еще вопрос, в ААМ у нас точки вроде как соеденены? (это имеет отношение к графам?в каком-то документе видел что то типа star(из одной точки лучи) архитектуры графа, т.е. без циклов)

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

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


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

кстати говоря получается что у нас нет эталона, значит надо взять среднюю модель по популяции и смотреть отклонение от неё, но возможно так нельзя делать если в популяции сильная вариация и стоит кластеризовать сэмплы на группы и смотреть отклонение от средних моделей кластеров?

т.е. какая то более сложная модель с точки зрения матстата.

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


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

Чаще всего смесь гауссианов для таких целей используют. Не знаю только, насколько это применимо к распознаванию лиц.

Ну или более сложные классификаторы.

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


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

вообще если подумать, то у нас есть тупо вектор фич(полученый каким либо способом) для каждого из 100к сэмплов и мы просто выполняем k-nearest neighbor search по какому либо из алгоритмов.

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


Ссылка на сообщение
Поделиться на других сайтах
я не очень понимаю "физический\качественный" смысл собсвенных векторов, но получается что то похожее на PCA, если взять просто координаты точек и использовать PCA будет хуже?

Я, собственно, и описал PCA.

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


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

кстати про связь SVD и PCA

http://math.stackexchange.com/questions/3869/what-is-the-intuitive-relationship-between-svd-and-pca

и более подробное описанеи PCA

http://www.snl.salk.edu/~shlens/pca.pdf

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


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

еще раз про модель типа как в ASM.

допустим отмечаем на 2-х изображениях точки руками, потом хотим сравнить их.

можем посчитать центры тяжести, посчитать оси элипса вписанного\описано\ по мнк и совместить, можем посчитать описанный прямоугольник и отскейлить по нему.

но такое ощущение, что всё это не то, а надо какую то нелинейную функцию морфинга из одного экземпляра модели в другой.

я вообще так понимаю, что задача близка к задаче face transfer.

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


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

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

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

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

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

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

Войти

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

Войти сейчас


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

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

×