Введение
отOpenFaceПример процесса реализации распознавания лиц в алгоритме.Этот процесс можно рассматривать как базовую основу для использования глубоких сверточных сетей для решения проблем лиц.Структура показана на рисунке ниже.
Из рисунка выше видно, что проект по распознаванию лиц можно разделить на 5 основных этапов:
1. Сначала введите фотографию 2. Обнаружьте лицо на фотографии и классифицируйте, является ли это живым телом 3. Выровняйте и обрежьте обнаруженное живое лицо 4. Выделите лицо после выравнивания и обрезки Извлеките, охарактеризуйте как код функции ; 5, сравните парные коды признаков после характеристики.
Подробное введение
1. Входное изображение -> Обнаружить
Вход: Исходное изображение, которое может содержать человеческое лицо.
Выходные данные: ограничивающая рамка положения живого лица.
Этот шаг называется «Обнаружение лиц».В OpenFace используются существующие методы обнаружения лиц dlib и OpenCV. Этот метод не имеет ничего общего с глубоким обучением, а используемые функции — это методы традиционного компьютерного зрения (обычно Hog, Haar и т. д.).
Если вам интересен этот этап распознавания лиц, вы можете обратиться к следующим материалам:
Реализация dlib:blog.spree.net/2014/02/инди…
Реализация openCV:Face Detection using Haar Cascades
Некоторые из последних алгоритмов также начали использовать алгоритмы обнаружения целей с глубоким обучением для обнаружения лиц, такие как MTCNN.
Для обнаруженного лица также необходимо определить, является ли оно неживым лицом, таким как фотография или видео, и обнаруженное лицо необходимо ввести в сеть классификации живых тел, чтобы отсеять живое лицо.
2. Обнаружить -> Преобразовать -> Обрезать
Вход: исходное изображение + ограничительная рамка положения лица
Вывод: «калиброванное» изображение, содержащее только лица.
Для входного исходного изображения + ограничительной рамки на этом этапе нужно определить ключевые точки лица, а затем выровнять и откалибровать лицо в соответствии с этими ключевыми точками. Так называемые ключевые точки — это зеленые точки, показанные на рисунке ниже, которые обычно являются положением уголков глаз, положением носа, контурными точками лица и так далее. С помощью этих ключевых точек мы можем «откалибровать» или «выровнять» лицо. Объясняется это тем, что исходное лицо может быть кривым.Здесь, согласно ключевым моментам, используется аффинное преобразование, чтобы «выпрямить» лицо равномерно, и попытаться устранить ошибки, вызванные разными позами. Этот шаг обычно называется выравниванием лица.
В OpenFace на этом этапе также используется традиционный метод, который характеризуется относительной быстротой.
PDF-файл 78 нет / 6 ах 5 нет 0 из .semantic Scholar.org/…
3. Обрезка -> Представление
Вход: откалиброванное изображение одного лица.
Выход: векторное представление.
Этот шаг заключается в использовании глубокой сверточной сети для преобразования входного изображения лица в векторное представление. Вектор, используемый в OpenFace, имеет размер 128x1, то есть 128-мерный вектор.
VGG16 — относительно простая базовая модель глубокого обучения. Входом в нейронную сеть является изображение, и после серии сверток полносвязная классификация получает вероятность класса.
В обычных приложениях для работы с изображениями мы можем удалить полносвязный слой и использовать вычисленные признаки (обычно последний слой сверточного слоя, например, conv5_3 на рисунке) в качестве извлеченных признаков для вычислений. Однако, если этот метод также использовать для задачи распознавания лиц, то есть использовать последний слой сверточного слоя в качестве «векторного представления» лица, эффект на самом деле не очень хороший. Как улучшить? Мы поговорим об этом позже, а здесь мы поговорим о том, какими свойствами мы хотим, чтобы обладало это «векторное представление» лица.
Мы надеемся, что в идеальной ситуации расстояние между «векторными представлениями» может напрямую отражать сходство лиц:
Для изображения лица одного и того же человека евклидово расстояние соответствующего вектора должно быть относительно небольшим.
Для изображений лиц разных людей евклидово расстояние между соответствующими векторами должно быть относительно большим.
Это представление на самом деле можно рассматривать как своего рода «вложение». В исходной модели VGG16 мы использовали softmax loss без требований к расстоянию между векторными представлениями каждого класса. Следовательно, его нельзя напрямую использовать в качестве представления лица.
Например, используя CNN для классификации MNIST, мы проектируем специальную сверточную сеть, чтобы сделать вектор последнего слоя двумерным, В это время можно нарисовать соответствующее двумерное векторное представление каждой категории (рис. Один цвет соответствует одной категории):
Приведенное выше изображение является результатом нашего прямого использования обучения softmax, которое не соответствует характеристикам, которые мы хотим, чтобы эта функция имела:
Мы хотим, чтобы векторные представления, соответствующие одному и тому же классу, были как можно ближе. Но здесь один и тот же класс (например, фиолетовый) может иметь большое межклассовое расстояние.
Мы хотим, чтобы векторы, соответствующие разным классам, находились как можно дальше друг от друга. Но в центре картины расстояния каждой категории очень близки.
Итак, какова правильная поза для тренировки репрезентации черт лица? На самом деле есть много способов. Один из способов - использовать «центральную потерю». Потеря центрора на самом деле добавляет еще одну потерю к потере softmax. Эта потеря определяет «центральную» точку для каждого класса. Особенности каждого класса должны быть относительно близки к этой центральной точке, а центральные точки разных классов далеки друг от друга. др. Относительно далеко. После добавления потерь в центре обученные функции выглядят примерно так:
Это представление функции больше соответствует нашим требованиям. Оригинальная статья о центральных потерях находится здесь:Хинди. GitHub.IO/papers/wen E…. Приведенные выше две фотографии также взяты из этой статьи.
Кстати, кроме потери центра. Есть много способов научиться репрезентации черт лица, например, потеря триплетов (адрес статьи:A Unified Embedding for Face Recognition and Clustering). потеря триплетов напрямую обучает сеть с тройками (изображение 1 A, изображение 2 A и изображение B). Последний слой классификации удаляется, заставляя нейронную сеть установить унифицированное представление для одного и того же изображения лица (тот же человек А в тройке).
4. Практическое применение
Вход: векторное представление человеческого лица.
С векторным представлением лица остальная часть проблемы очень проста. Потому что это представление имеет такие характеристики, что расстояние между векторами, соответствующими одному и тому же человеку, мало, а расстояние между векторами, соответствующими разным людям, велико. Следующие общие приложения таковы:
Идентификация лица. Это нужно для того, чтобы определить, принадлежат ли А и Б одному и тому же человеку. Необходимо только рассчитать расстояние между векторами и установить соответствующий порог срабатывания сигнализации (threshold).
Распознавание лица. Это приложение больше всего по заданному изображению обнаруживает самое похожее лицо в базе данных. Очевидно, что ее можно преобразовать в задачу о ближайших соседях на расстоянии.
Кластеризация лица. Для кластеризации лиц в базе данных можно напрямую использовать K-Means.