Ключевые точки лица актуальны для множества задач, таких как фильтры лица, распознавание эмоций, распознавание позы и т. Д. Так что, если вы занимаетесь этими проектами, продолжайте читать!
В этом проекте ключевые точки лица (также называемые лицевыми ориентирами) представляют собой маленькие пурпурные точки, показанные на каждом из лиц на изображении ниже. В каждом обучающем и тестовом изображении есть одно лицо и 68 ключевых точек с координатами (x, y) для этого лица. Эти ключевые точки отмечают важные области лица: глаза, уголки рта, нос и т. д.
Используемый набор данных:
Мы будем использовать YouTube Faces Dataset, который включает видео людей в видео YouTube. Этот набор данных по ключевым точкам лица состоит из 5770 цветных изображений. Все эти изображения разделены на обучающий или тестовый набор данных.
- 3462 из этих изображений являются обучающими изображениями, которые вы можете использовать при создании модели для прогнозирования ключевых точек.
- 2308 - это тестовые изображения, которые будут использоваться для проверки точности вашей модели.
Теперь возникает вопрос: «Входные изображения никогда не бывают одинакового размера, так как же нейронная сеть будет работать с ними?»
Поскольку нейронные сети часто ожидают стандартизованных изображений; фиксированного размера с нормализованным диапазоном для диапазонов цветов и координат и (для PyTorch) преобразованными из numpy списков и массивов в Tensors. Поэтому нам потребуется выполнить некоторую предварительную обработку.
Для этого вы можете:
- Нормализовать: преобразовать цветное изображение в значения оттенков серого с диапазоном [0,1] и нормализовать ключевые точки, чтобы они находились в диапазоне примерно [-1, 1].
- Изменить масштаб: масштабировать изображение до желаемого размера.
- RandomCrop: для произвольной обрезки изображения.
- ToTensor: для преобразования множества изображений в изображения факелов.
Теперь давайте определим нашу собственную сверточную нейронную сеть, которая может учиться на этих данных!
Вам необходимо выполнить следующие шаги:
- Определите CNN с изображениями в качестве входных и ключевых точек в качестве выходных:
Размер входного изображения составляет 224 * 224 пикселей (размер, полученный при преобразовании ранее), а баллы выходного класса должны быть 136, т. е. 136/2 = 68 (наши желаемые 68 ключевых точек)
Вы можете добавить регуляризацию по своему усмотрению, но если вам все еще нужна помощь, то вот -
- Создайте преобразованный FaceKeypointsDataset, как и раньше
- Обучите CNN на тренировочных данных, отслеживание потерь
- Посмотрите, как обученная модель работает с тестовыми данными
Чтобы быстро наблюдать, как обучается ваша модель, и решить, следует ли вам изменять ее структуру или гиперпараметры, начните с одной или двух эпох. Во время тренировки обратите внимание на то, как потери вашей модели ведут себя с течением времени: сначала они быстро уменьшаются, а затем замедляются?
Используйте эти начальные наблюдения, чтобы внести изменения в вашу модель и выбрать лучшую архитектуру, прежде чем вы будете тренироваться в течение многих эпох и создавать окончательную модель.
При необходимости измените структуру CNN и гиперпараметры модели, чтобы она работала хорошо.
Найдя хорошую модель, не забудьте сохранить ее! Чтобы вы могли загрузить и использовать его позже!
После того, как вы обучили нейронную сеть обнаруживать ключевые точки лица, вы можете применить эту сеть к любому изображению, которое включает лица.
- Обнаружение всех лиц на изображении с помощью детектора лиц (в этом проекте я использовал детектор Каскада Хаара).
Выход:
- Предварительно обработайте эти изображения лиц, чтобы они были полутоновыми, и преобразуйте их в тензор входного размера, который ожидает ваша сеть. Этот шаг будет аналогичен предыдущей предварительной обработке.
- Используйте свою обученную модель, чтобы определить ключевые точки лица на изображении.
Хотите подробнее узнать, как выполнить этот код?
Посмотрите этот проект на моем github: Обнаружение ключевых точек лица