2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Распознавание лиц (проблема с многомерной оптимизацией)
Сообщение04.10.2008, 20:18 


08/04/07
12
МГТУ им. Н.Э. Баумана
В рамках курсового проекта предлагается написать программу (в MatLAB'е) распознавания человеческих лиц. Реализуется задача с помощью нейронных сетей. Для настройки (обучения) нейронной сети требуется решать задачу минимизации. Количество параметров функции ~10^5. Каким образом можно произвести минимизацию? Встроенные функции MatLAB (такие как fminsearch и пр.), на сколько я понял, работают в пространстве с меньшей размерностью... Посоветуйте, как можно решить проблему?

 Профиль  
                  
 
 
Сообщение04.10.2008, 20:58 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Абсолютно бессмысленное занятие. С таким количеством параметров можно выучить все обучающие примеры, если конечно туда не засунуть все население Москвы. Ошибку на обучающем наборе можно сделать нулевой, но обобщающая способность будет аж никакая.

 Профиль  
                  
 
 
Сообщение04.10.2008, 23:44 


11/11/07
80
А чем Вас не устраивает хотя бы градиентный метод ... помоему работает вполне прилично. Долго, но учитывая количество параметров вполне приемлимо.

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

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

 Профиль  
                  
 
 
Сообщение05.10.2008, 09:10 


08/04/07
12
МГТУ им. Н.Э. Баумана
К сожалению, я только начинаю заниматься данной тематикой и раньше ничего не знал об нейронных сетях и распознавании изображений вообще. Возможно, я что-то делаю не так или заблуждаюсь вообще. Позвольте немного объяснить суть проблемы.

Как правильно заметил zuj, входной вектор нейронной сети представляет собой вектор пикселей фотографии размером 23\cdot28=644 (pix). Соответственно в случае с полносвязной нейронной сетью даже при 3-х слоях (вход, 1 скрытый слой и выход) получается такое (>10^5) количество параметров.

Что Вы, PAV, имели в виду, признаться я не совсем понял. Скорее всего я действительно делаю что-то не так и в качестве входного вектора для нейронной сети надо брать не сами фотографии, а некие вектора гораздо меньшей размерности по которым можно однозначно судить о принадлежности конкретного объекта к определённому классу, т.е. вектора признаков. С построением признакового пространства тоже возникли проблемы, поэтому и решил в качестве входа брать сами фотографии.

Цитата:
А чем Вас не устраивает хотя бы градиентный метод

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

Цитата:
Можно к примеру брать через один.

На сколько я понимаю, сути дела это не изменит. Параметров станет немногим (~ в 4 раза) меньше.

 Профиль  
                  
 
 
Сообщение05.10.2008, 09:28 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Сколько примеров в обучающей выборке?

Сколько классов (людей, которых Вы планируете распознать)? Правильно ли я понимаю, что планировалось иметь по одному выходному нейрону на каждый класс?

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

 Профиль  
                  
 
 
Сообщение05.10.2008, 09:37 


08/04/07
12
МГТУ им. Н.Э. Баумана
Цитата:
Сколько примеров в обучающей выборке?

Порядка 10.
Цитата:
Сколько классов (людей, которых Вы планируете распознать)?

5-10
Цитата:
Правильно ли я понимаю, что планировалось иметь по одному выходному нейрону на каждый класс?

Да, верно. Предполагается, что значение i-го выходного нейрона будет +1 если объект принадлежит i-му классу, в противном случае -1.
Цитата:
...и явно по сложности сильно выходит за рамки курсового проекта.

Каким образом возможно упростить задачу, чтобы её можно было решить?

 Профиль  
                  
 
 
Сообщение05.10.2008, 10:25 


11/11/07
80
@Hgpeu писал(а):
Цитата:
А чем Вас не устраивает хотя бы градиентный метод

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


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

P.S: Да и если проблема состоит в классификации, то могу посоветовать почитать про так называемые сети Кохонена. Они насколько я знаю как раз и созданы специально для проблемы классификации.

 Профиль  
                  
 
 
Сообщение05.10.2008, 10:31 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Т.е. имеется порядка двух фотографий на каждого человека?

Добавлено спустя 1 минуту 41 секунду:

И какова глубина цвета? Сколько бит на пиксель?

 Профиль  
                  
 
 
Сообщение05.10.2008, 10:40 


08/04/07
12
МГТУ им. Н.Э. Баумана
zuj, спасибо большое, буду разбираться.

PAV, я не правильно выразился, ~10 фотографий на каждого человека, итого обучающая выборка состоит из 50-100 фотографий.
Вообще, сама задача не конкретизирована и все эти параметры обсуждаемы.

Добавлено спустя 3 минуты 32 секунды:

Цитата:
И какова глубина цвета? Сколько бит на пиксель?

Опять же, конкретики пока никакой нет. Скорее всего фотографии будут в градациях серого, [0, 255].
Научный руководитель пока поставил задачу только в общем. Предполагая решать вопросы с параметрами задачи по мере реализации...

 Профиль  
                  
 
 
Сообщение05.10.2008, 11:13 


11/11/07
80
Да как заметил господин PAV цвет это тоже один из параметров который можно варьировать. Можете еще попробовать в тонах красного, зеленого и голубого. Но как показывают опыты они должны дать приблизительно одинаковый результат.

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

 Профиль  
                  
 
 
Сообщение05.10.2008, 15:47 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Смотрите, почему "просто так" делать совершенно бессмысленно. Представим себе для простоты, что фотография черно-белая. Допустим, мы хотим отличать фотографии персоны А от всех остальных. Возьмите какой-нибудь набор из 16 случайных пикселей на картинке, этот набор принимает одно из $2^{16}=65536$ значений. У Вас примерно 10 фотографий А и, скажем, 90 фотографий всех остальных. Вполне вероятна ситуация, при которой значения данных пикселей на всех фотографиях А не повторяются на остальных. Поэтому сеть может просто запомнить этот набор и принимать решение относительно А только по нему. Не подойдет этот набор - можно попробовать другой. Выбор большой, количество наборов $C_{644}^{16}$ огромно.

Ясно, что правила подобного рода бессмысленны, однако при такой постановке задачи сеть придет именно к чему-то подобному. Это вызвано и маленьким объемом данных, и огромной размерностью задачи, и тем, что Вы сами даете сети в качестве входных данных именно отдельные пиксели, а не более содержательные признаки. Вот она на отдельные пиксели и будет смотреть.

Добавлено спустя 10 минут 10 секунд:

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

 Профиль  
                  
 
 
Сообщение05.10.2008, 15:54 


08/04/07
12
МГТУ им. Н.Э. Баумана
Спасибо за разъяснения. Быть может Вы тогда сможете подсказать литературу или ресурсы Интернет где можно прочитать про задачи данного рода, а самое главное про методы построения пространства признаков? Именно про то, как строить вектора признаков по отдельной фотографии увы мне пока найти нигде не удалось... Видимо плохо ищу...
P.S. Извиняюсь, что развожу оффтоп...

 Профиль  
                  
 
 
Сообщение05.10.2008, 18:33 


11/11/07
80
Ок. Напишу здесь свои мысли с чего бы я начинал решать эту задачу.

Начнем с того, что размер фотографий $23\times28$, тогда входной вектор будет размерностью $644\times1$. (Если Вы хотите использовать цветные фотографии, то вектор входных данных увеличивается в 3 раза в RGB системе). Количество нейронов на скрытом слое можно установить в ходе экспериментов, так как не существует четкого правила сколько их может потребоваться для решения той или иной задачи.

Теперь об эталоне. Пусть мы тренируем нейронную сеть для распознования изображения какого-то конкретного человека(Ч1). Для полноты эксперимента можно взять в качестве входных данных фотографии всех "подопытных", так как она должна знать как данный индивидуум выглядеть не может :wink:. Тогда во время тренировки, если входные данные принадлежат этому человеку, то эталон пусть будет равен 1, а если нет то 0. Таким образом нейронная сеть научиться определять: на показанной фотографии Ч1 или кто-то другой.
Таким образом можно натренировать 10 нейронных сетей для распознавания всех 10 "подопытных" и показывая поочереди каждой сети данную фотографию можно найту ту которой это изображение "придется по душе" или соответственно не придется.

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

P.S. Мне кажется, что такой размерности $23\times28$ будет маловато для качественного распознования. Не уверен, что количества данных хватит.

 Профиль  
                  
 
 
Сообщение05.10.2008, 19:14 


08/04/07
12
МГТУ им. Н.Э. Баумана
Во-первых, как я понял надо снижать размерность вектора признаков (входного вектора), выделяя самое существенное. Нельзя передавать всю фотографию целиком, как объяснил господин PAV (по крайней мере я так понял, и в принципе согласен).

Во-вторых, нейронная сеть строится, как я понимаю, одна. Одна для всех объектов. И настраивается по полной обучающей выборке (всем фотографиям всех людей, которых система предполагается будет распознавать).
Минимизироваться будет функция, представляющая сумму квадратов разностей, то, что выдает нам система в качестве ответа и действительный ответ для объекта i-го класса (j-номер фотографии). Т.е.
z(\nu)=\sum\limits_{i,j}{\big(y_{i,j}-\tilde{y}_{i,j}\big)^{2}},
где \nu - вектор параметров нейронной сети.
В общих чертах это все понятно.
Программу на MatLAB вроде как я уже написал. Проблемы, как я написал ранее, возникли при настройке сети, т.е. при минимизации функции z(\nu) и определении этих самых оптимальных \nu.
Соответственно сейчас вопрос состоит в том, "как можно уменьшить размерность пространства признаков" и "как это самое пространство можно построить"?

 Профиль  
                  
 
 
Сообщение05.10.2008, 19:27 


11/11/07
80
Про пространство признаков ничего Вам сказать не могу, так как не совсем понимаю, что подразумевает под этим господин PAV. Думаю он Вам объяснит, а за одно и мне :lol:.

Я бы на Вашем месте не начинал с обобщенной сети. Во-первых на инициализацию и тренировку такой сети у Вас уйдет не один день. А во-вторых особой разницы между такой сетью или 10 для каждого в отдельности быть не должно. Попробуйте вначале распознать лицо какого-то конкретного человека из предложенных фотографий.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group