Можем ли мы предсказать родство двух людей по фотографии их лиц?
Это то, что мы попытаемся сделать в этом посте, используя набор данных 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

Не стесняйтесь комментировать, если у вас есть какие-либо вопросы.