2010-11-29 3 views
4

для моего окончательного тезиса Я пытаюсь создать систему распознавания лиц, объединяя информацию о цвете и глубине. первый шаг, который я сделал, - перестроить головку данных на заданную модель-голова, используя итеративный алгоритм ближайшей точки. для этапа обнаружения я думал об использовании libsvm. но я не понимаю, как объединить глубину и информацию о цвете с одним векторным признаком? они зависят от информации (каждая точка состоит из цвета (RGB), информации о глубине и качества сканирования). Что вы предлагаете делать? что-то вроде взвешивания?машинное обучение - svm feature fusion techique

Редактировать: вчера вечером я прочитал статью о функциях SURF/SIFT, я бы хотел их использовать! может ли он работать? концепция будет следующей: извлечение этих функций из цветного изображения и изображения глубины (изображение диапазона), используя каждую функцию в качестве одного вектор-функции для svm?

+0

Как сказал Стив, объедините два вектора. Затем я буду выполнять PCA. – Eamorr 2010-11-29 15:03:41

ответ

1

Это звучит просто, но вы можете просто объединить два вектора в один. Многие исследователи делают это.

4

Конкатенация - это действительно возможность. Тем не менее, поскольку вы работаете над распознаванием лиц с тремя лицами, у вас должна быть какая-то стратегия относительно того, как вы это делаете. Вращение и перевод лиц будет трудно распознать с помощью «простого» подхода.

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

Кроме того, помните, что SVM являются по сути двоичными (то есть они разделяются между двумя классами). В зависимости от вашего конкретного приложения вам, скорее всего, придется использовать стратегию нескольких классов («Один против всех» или «Один против многих»).

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

0

То, что вы достигли, является важной открытой проблемой. Да, есть некоторые способы справиться с этим, как упоминалось здесь Eamorr. Например, вы можете конкатенировать и выполнить PCA (или некоторый метод non linear dimensionality reduction). Но отчасти трудно защитить практичность этого, учитывая, что PCA занимает O (n^3) раз в количестве функций. Это само по себе может быть необоснованным для данных в видении, которые могут иметь тысячи функций.

0

Как уже упоминалось, самый простой способ - просто объединить два набора функций в один.

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

Для того, чтобы это сработало, вам, очевидно, придется нормализовать все атрибуты с одинаковым масштабом (скажем, преобразовать все функции в диапазон [-1,1] или [0,1])