Распознавание ключевых точек как классификация?

В конце введения в это поучительное соревнование Kaggle, они заявляют, что методы, использованные в "Viola и Основополагающая статья Джонса работает достаточно хорошо». Однако в этой статье описывается система бинарного распознавания лиц, и проблема заключается в классификации ключевых точек, а не целых изображений. Мне трудно понять, как именно я буду настраивать систему Виолы/Джонса для распознавания ключевых точек.

Я предполагаю, что мне следует обучить отдельный классификатор для каждой ключевой точки, и у меня есть некоторые идеи:

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

  • вместо обучения бинарных классификаторов обучайте классификаторы с l*w возможными классами (по одному на каждый пиксель). Большая проблема с этим заключается в том, что я подозреваю, что он будет чрезмерно медленным, поскольку каждый слабый классификатор внезапно должен выполнять l*w*оригинальных операций.

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

Есть ли какая-то ценность в этих идеях, и есть ли методы, о которых я не подумал?


person mavix    schedule 22.10.2013    source источник


Ответы (2)


однако в этой статье описывается система бинарного распознавания лиц.

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

Вы можете тренировать Каскад в стиле Виолы Джонса для глаз, еще один для носа и по одному для каждой интересующей вас ключевой точки.

Затем, когда вы запустите код, вы должны (надеюсь) получить 2 глаза, 1 нос и т. д. для каждого лица.

При условии, что вы получите ожидаемое количество элементов, вы можете сказать: «Вот ключевые моменты!» Что требует больше работы, так это получение достаточного количества данных для создания хорошего детектора для каждой вещи, которую вы хотите обнаружить, и изящная обработка ложных срабатываний/отрицательных результатов.

person Raff.Edward    schedule 23.10.2013
comment
Меня не смущает тот факт, что описываемая ими система предназначена для общего распознавания объектов. Я не понимаю, как распознать объект (т. е. группу пикселей) по сравнению с расположением отдельного пикселя. - person mavix; 23.10.2013
comment
Как вы могли идентифицировать любой объект по одному пикселю? Вы не можете. Вы можете идентифицировать нос, который занимает несколько пикселей. Если вам нужна самая центральная позиция, вы можете взять центральный пиксель того, что было определено как нос. - person Raff.Edward; 24.10.2013
comment
Опять же, проблема заключается в определении местоположения пикселя, а НЕ в распознавании объектов. В чем именно проблема. - person mavix; 24.10.2013
comment
Нет, расположение пикселей не имеет значения. Нельзя сказать, что это носовой пиксель. Вы просите о том, что невозможно. Пиксель, показанный в вашей ссылке, должен быть ЦЕНТРОМ нет / глаз. Проблема в распознавании объектов. Представление, о котором вы спрашиваете, отмечает только один пиксель. - person Raff.Edward; 25.10.2013
comment
...так вы говорите, что я должен сделать первое, что я перечислил? - person mavix; 25.10.2013
comment
Для выполнения точной классификации объектов требуется больше шагов, чем вы указали. Вы должны прочитать этот материал. Это не простая задача, которую можно освоить за ночь. То, что вы описали, само по себе, вероятно, пропустит большинство объектов. - person Raff.Edward; 26.10.2013

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

http://cs.stanford.edu/people/karpathy/convnetjs/demo/mnist.html

http://deeplearning.net/tutorial/lenet.html#lenet

Я сделал следующие изменения в типичной сверточной сети:

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

  • Я выполнил n-стороннюю бинарную классификацию, при этом каждый пиксель классифицировался как ключевая точка или не ключевая точка (№ 2 в вещах, которые я перечислил в своем исходном посте). Как я и подозревал, вычислительная сложность была здесь основным препятствием. Я попытался использовать свой графический процессор для решения этих проблем, но количество параметров в нейронной сети было слишком большим, чтобы поместиться в память графического процессора, поэтому для обучения я использовал экземпляр xl amazon.

Вот репозиторий github с некоторыми моими работами: https://github.com/cowpig/deep_keypoints

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

http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/

person mavix    schedule 27.08.2015