2011-12-29 5 views
1

Я очень новичок в обработке изображений, и мое первое задание - создать рабочую программу, которая может распознавать лица и их имена. До сих пор я успешно создавал проект для обнаружения, обрезки обнаруженного изображения, создания его для привязки и перевода его в массив float. Но я очень смущен, как реализовать Backpropagation MLP, чтобы узнать изображение, чтобы он мог распознать правильное имя для обнаруженного лица.Распознавание лиц с использованием Backpropagation Neural Network?

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

+0

так, в чем ваша проблема: извлечение функции, реализация MLP, распознавание лиц? – moooeeeep

+1

то, что вы просите, очень специфично для деталей алгоритма. Наилучший подход - поиск в Интернете материалов, связанных с обратным распространением. – blueskin

+0

@moooeeeep: моя проблема заключается в вставке массива float, который я извлечил из изображения sobel, которое нужно обработать с помощью backpropagation, поэтому backpropagation может узнать мое изображение и распознать его с правильным именем. – anarchy99

ответ

0

Вы пробовали писать свои векторы признаков к arff файл и кормить их weka, просто чтобы увидеть, если ваш подход может работать на всех? В Weka есть много интегрированных классификаторов, включая MLP. Как я понял до сих пор, я подозреваю, что функции и классификатор, которые вы выбрали, не работают.

К вашему оригинальному вопросу: предприняли ли вы какие-либо попытки реализовать нейронную сеть самостоятельно? Если да, то где вы застряли? Обратите внимание, что это не место, чтобы запросить полную рабочую реализацию от аудитории.

Чтобы дать общий ответ на общий вопрос: Обычно у вас есть узлы в MLP. В частности, входные узлы, выходные узлы и скрытые узлы. Эти узлы строго организованы в слои. Входной слой внизу, выходной слой сверху, скрытые слои между ними. Узлы соединены простым способом подачи (выходные соединения допускаются только к следующему более высокому уровню). Затем вы подключаетесь к каждому из своих float к одному входному узлу и подаете векторы объектов в свою сеть. Для вашего backpropagation вам нужно указать сигнал ошибки, который вы укажете для выходных узлов. Поэтому, если у вас есть имена n, которые можно отличить, вы можете использовать выходные узлы n (т. Е. Один для каждого имени). Сделайте их, например, возвратом 1 в случае матча и 0 еще. Вы могли бы очень хорошо использовать один выходной узел и позволить ему возвращать n разные значения для имен. Вероятно, было бы лучше всего использовать n совершенно разные персептроны, т. Е. По одному для каждого имени, чтобы избежать побочных эффектов (катастрофические помехи).

Обратите внимание, что выход каждого узла является числом, а не именем. Поэтому вам нужно использовать какие-то пороги, чтобы получить отношение number-name. Также обратите внимание, что вам нужно много учебных данных для обучения большой сети (то есть подчиняться curse of dimensionality). Было бы интересно узнать размер вашего массива float. Действительно, для сложного решения вам может потребоваться большее количество скрытых узлов или даже скрытых слоев. Обратите внимание, что вам может потребоваться большая оценка (т. Е. cross validation), чтобы найти оптимальную конфигурацию (количество слоев, количество узлов на слой) или найти любую рабочую конфигурацию.

Удачи, любым способом!

+0

Большое спасибо за ваше объяснение. Сначала я попробую мой проект с функцией arff и weka, чтобы убедиться, что он будет работать. Возможно, я просто сосредоточен на поиске способов распознавания, используя обратное распространение, не изучая обратную прослойку с более простыми данными. Сроки делают меня больной. Кстати, я очень благодарен за ваше усилие, помогающее мне. Извините за мою плохую грамматику. – anarchy99

1

Это стандартный алгоритм машинного обучения. У вас есть несколько массивов поплавков (экземпляры ML или наблюдения в терминах статистики) и соответствующие им имена (метки, теги классов), по одному на массив. Этого достаточно для использования в большинстве алгоритмов ML. В частности, в ANN элементы вашего массива (то есть функции) являются входами в сеть, а метки (имена) являются его выходами.

Если вы ищете теоретическое описание backpropagation, посмотрите на Stanford's ml-class lectures (раздел ANN). Если вам нужна готовая реализация, прочитайте this question.

Вы не указали, какие элементы ваших массивов. Если вы используете только пиксели исходного изображения, это должно работать, но не очень хорошо. Если вам нужна система уровня производства (хотя и с использованием ANN), попробуйте извлечь более высокоуровневые функции (например, Haar-like features, что OpenCV использует сам).

+0

Вау, спасибо, готовая реализация - это то, что мне действительно нужно для дальнейшей работы. Большое спасибо. – anarchy99

Смежные вопросы