Ключевые точки лица актуальны для множества задач, таких как фильтры лица, распознавание эмоций, распознавание позы и т. Д. Так что, если вы занимаетесь этими проектами, продолжайте читать!

В этом проекте ключевые точки лица (также называемые лицевыми ориентирами) представляют собой маленькие пурпурные точки, показанные на каждом из лиц на изображении ниже. В каждом обучающем и тестовом изображении есть одно лицо и 68 ключевых точек с координатами (x, y) для этого лица. Эти ключевые точки отмечают важные области лица: глаза, уголки рта, нос и т. д.

Используемый набор данных:
Мы будем использовать YouTube Faces Dataset, который включает видео людей в видео YouTube. Этот набор данных по ключевым точкам лица состоит из 5770 цветных изображений. Все эти изображения разделены на обучающий или тестовый набор данных.

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

Теперь возникает вопрос: «Входные изображения никогда не бывают одинакового размера, так как же нейронная сеть будет работать с ними?»

Поскольку нейронные сети часто ожидают стандартизованных изображений; фиксированного размера с нормализованным диапазоном для диапазонов цветов и координат и (для PyTorch) преобразованными из numpy списков и массивов в Tensors. Поэтому нам потребуется выполнить некоторую предварительную обработку.
Для этого вы можете:

  1. Нормализовать: преобразовать цветное изображение в значения оттенков серого с диапазоном [0,1] и нормализовать ключевые точки, чтобы они находились в диапазоне примерно [-1, 1].
  2. Изменить масштаб: масштабировать изображение до желаемого размера.
  3. RandomCrop: для произвольной обрезки изображения.
  4. ToTensor: для преобразования множества изображений в изображения факелов.

Теперь давайте определим нашу собственную сверточную нейронную сеть, которая может учиться на этих данных!

Вам необходимо выполнить следующие шаги:

  • Определите CNN с изображениями в качестве входных и ключевых точек в качестве выходных:
    Размер входного изображения составляет 224 * 224 пикселей (размер, полученный при преобразовании ранее), а баллы выходного класса должны быть 136, т. е. 136/2 = 68 (наши желаемые 68 ключевых точек)

Вы можете добавить регуляризацию по своему усмотрению, но если вам все еще нужна помощь, то вот -

  • Создайте преобразованный FaceKeypointsDataset, как и раньше

  • Обучите CNN на тренировочных данных, отслеживание потерь

  • Посмотрите, как обученная модель работает с тестовыми данными

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

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

При необходимости измените структуру CNN и гиперпараметры модели, чтобы она работала хорошо.
Найдя хорошую модель, не забудьте сохранить ее! Чтобы вы могли загрузить и использовать его позже!

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

  • Обнаружение всех лиц на изображении с помощью детектора лиц (в этом проекте я использовал детектор Каскада Хаара).

Выход:

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

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

Хотите подробнее узнать, как выполнить этот код?
Посмотрите этот проект на моем github: Обнаружение ключевых точек лица