Можем ли мы предсказать родство двух людей по фотографии их лиц?
Это то, что мы попытаемся сделать в этом посте, используя набор данных Families In the Wild: Ainship Recognition Benchmark в формате опубликовано на Kaggle: https://www.kaggle.com/c/recognizing-faces-in-the-wild/data
Мы исследуем эффективность глубоких нейронных сетей и методов передачи обучения для обучения нейронной сети, которая будет предсказывать, связаны ли два человека кровными родственниками или нет изображения их лица.
Набор данных:
Мы будем использовать набор данных Families in the Wild, опубликованный на kaggle. Это самый крупномасштабный набор данных такого рода, где фотографии лиц группируются по людям, а затем люди группируются по семьям.
Помимо папок с изображениями, у нас также есть файл, в котором перечислены все случаи, когда два человека из семьи связаны кровью, что не относится ко всем членам семьи. (Как пара мать-отец, если мы не говорим о Ланнистерах 😄)
Модель:
Для решения этой задачи мы будем использовать сиамскую сеть, которая берет пару изображений и предсказывает 1, если люди на фотографиях связаны, и 0 в противном случае.
Кодировщик изображения применяется к каждому входному изображению и кодирует каждое из них в вектор фиксированной длины. Квадрат разницы между двумя векторами изображения подается на полностью связанный слой, который затем предсказывает двоичную метку родства.
Трансферное обучение:
Мы будем основывать наше решение на предварительно обученных кодировщиках изображений с двумя разными настройками:
Предварительная подготовка в ImageNet: набор данных из 14 миллионов вручную помеченных изображений, используемых для классификации по таким категориям, как собака, кошка, самолет, клубника…
Предварительное обучение на VGGFACE2: набор данных из 3,3 миллиона изображений лиц и более 9000 личностей самых разных национальностей, акцентов, профессий и возрастов.
Методы предварительного обучения полезны, потому что они позволяют нам переносить представления, полученные в исходной задаче (здесь классификация изображений или регрессия), в целевую задачу, которая в данном случае является прогнозом родства.
Это помогает уменьшить чрезмерную подгонку и достичь гораздо более быстрого скорость сходимости, особенно если исходная задача и целевая задача несколько близки.
Результаты :
Мы будем использовать точность и показатель AUC для оценки результатов каждой модели.
Тест Resnet50 Imagenet ROC AUC: 0,70
Resnet50 VGGFACE2 тест ROC AUC: 0,81
Мы можем видеть, что даже архитектура в двух разных настройках одинакова, результаты намного лучше на модели, предварительно обученной на VGGFace2, поскольку это исходная задача, которая намного ближе к целевой задаче прогнозирования родства по сравнению с Imagenet.
Вывод :
Мы показали, что можем обучить сиамскую сеть предсказывать, связаны ли два человека кровными родственниками или нет. Используя трансферное обучение, мы смогли достичь обнадеживающих результатов 0,81 в AUC ROC, особенно с учетом того, что задача предсказания родства довольно сложна даже для людей.
Код для воспроизведения результатов доступен по адресу: https://github.com/CVxTz/kinship_prediction
Не стесняйтесь комментировать, если у вас есть какие-либо вопросы.