Real-time-распознавание лиц: методы обучения быстрых и точных моделей для работы на мобильных девайсах

0944defab7ee18d54489686275e94835.jpg

Привет, Хабр! Меня зовут Вадим Селютин, я старший исследователь в компании VisionLabs. Наши решения по распознаванию лиц можно встретить в офисных центрах, московском метро и кассах самообслуживания супермаркетов. Во всех этих кейсах мы используем нейросети, которые адаптируем специально для мобильных устройств.

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

Постановка задачи

Системы распознавания лиц обычно осуществляют верификацию и идентификацию пользователей:

9025541dc09a5fee5ec04fdebd1fb259.jpg

В первом случае определяется, один ли человек представлен в паре изображений, а во втором идет поиск человека с исходного фото в базе.

Эти задачи можно разбить на два класса: closed-set и open-set. В первом случае есть фиксированная база людей, которая не может изменяться. Здесь достаточно по входной фотографии человека определить его класс из обучающей выборки.

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

Можно сказать, что closed-set — это задачи классификации, а open-set — Metric Learning:

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

Во втором случае необходимо, чтобы представления похожих объектов были близки друг к другу в пространстве эмбеддинга, а разных — далеки.

Метрики распознавания лица

Чтобы распознать лицо, нужно сначала найти его на фотографии, затем выровнять и обрезать лишние детали:

510be819723b330e03d21e6d5b451450.jpg

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

Последним шагом идет матчинг лиц, когда мы вычисляем расстояния между полученными дескрипторами и сравниваем с каким-то порогом:

1c88049e8b52a88fae409198cddcccb3.jpg

В распознавании лиц обычно используются две метрики: True Positive Rate (TPR) и False Positive Rate (FPR). TPR показывает, как хорошо модель определяет человека по фото. Это отношение числа пар фото, на которых модель правильно ответила, что представлен один человек, к числу всех пар фото с одним и тем же человеком.

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

4176cfa013f08941b6fcc92c6280f0dc.png

В качестве метрики модели обычно смотрят на значение TPR в низких значениях FPR, что соответствует крайней левой области ROC-кривой.

Чтобы построить сильную модель по распознаванию лиц, нужен баланс трех вещей: функции потерь, архитектуры и данных.

Функция потерь (лосс)

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

В ходе обучения модели для распознавания лиц решается задача классификации, а во время продуктового использования уже идет сравнение эмбеддингов лиц между собой:

4e9795b906f4fd3dffe26fba500a9964.png

Возникает сложность: модель должна не только научиться относить эмбеддинг к нужному классу, но еще и учитывать расстояние между эмбеддингами. В этом помогает лосс-функция:

7821bcfc72ef858aaa7fafb6ee146f0a.jpg

На скрине выше представлена формула типичного лосса для задачи классификации — кросс-энтропии. Здесь:

  • хi — эмбеддинг лица i-изображения;

  • W — матрица весов последнего классификационного линейного слоя архитектуры;

  • b — bias слоя;

  • yi — номер класса этого изображения в соответствии с разметкой.

Теперь спроецируем эмбеддинги X на гиперсферу фиксированного радиуса S. Тогда мы сможем сравнивать расстояния между векторами в терминах углов между ними. Для этого распишем формулу над экспонентой как скалярное произведение векторов. Далее нормализуем матрицу W и эмбеддинг хi, а bias занулим. Тогда от формулы останется только косинус:

Проецируем  дескрипторы на гиперсферу фиксированного радиуса

Проецируем  дескрипторы на гиперсферу фиксированного радиуса

Можно усложнить задачу во время обучения и ввести в лосс дополнительные гиперпараметры m1, m2 и m3, которые называются марджинами:

Увеличим расстояние дескриптора до своего центра класса при помощи добавления марджинов

Увеличим расстояние дескриптора до своего центра класса
при помощи добавления марджинов

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

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

Если нормализовать векторы и перейти в пространство гиперсферы, внутриклассовые расстояния между точками уменьшатся:

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

Если еще дополнительно ввести марджины для усложнения задачи, то межклассовые расстояния заметно увеличатся. Этого мы и добивались:

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]

Первыми статьями, где были описаны такие способы добавления марджинов, были SphereFace, ArcFace и CosFace:

Применение марджинов увеличивает разделимость классов[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017][CosFace: Large Margin Cosine Loss for Deep Face Recognition, Wang et al, 2018][ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]  

Применение марджинов увеличивает разделимость классов
[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017]
[CosFace: Large Margin Cosine Loss for Deep Face Recognition, Wang et al, 2018]
[ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]  

В целом можно делать лосс с их комбинациями. Современные лоссы для распознавания лиц вводят различные адаптивные стратегии обучения, которые основаны на качестве изображения или его сложности для распознавания:

Современные лосс-функции распознавания лицВводят адаптивные стратегии обучения, основанные на сложности лица или качестве фото[CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition, Huang et al, 2020][MagFace: A Universal Representation for Face Recognition and Quality Assessment, Meng et al, 2021][AdaFace: Quality Adaptive Margin for Face Recognition, Kim et al, 2022]  

Современные лосс-функции распознавания лиц
Вводят адаптивные стратегии обучения, основанные на сложности лица или качестве фото
[CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition, Huang et al, 2020]
[MagFace: A Universal Representation for Face Recognition and Quality Assessment, Meng et al, 2021]
[AdaFace: Quality Adaptive Margin for Face Recognition, Kim et al, 2022]  

Мобильные архитектуры для распознавания лиц

MobileNet

Основной компонент мобильных архитектур — depthwise-свертка. В отличие от обычной свертки, в ней каждый канал обрабатывается отдельно, а результаты конкатенируются и затем агрегируются сверткой с ядром размера 1×1:

[Xception: Deep Learning with Depthwise Separable Convolutions, Chollet, 2017][Google’s MobileNets on the iPhone, Hollemans, 2017] 

[Xception: Deep Learning with Depthwise Separable Convolutions, Chollet, 2017]
[Google«s MobileNets on the iPhone, Hollemans, 2017] 

Такая идея была успешно использована в MobileNet. Эта архитектура была предложена в 2017 году и на тот момент получила 70% точности на тесте ImageNet:

Успешный кейс применения depthwise separable-свертки[MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, Howard et al, 2017] 

Успешный кейс применения depthwise separable-свертки
[MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, Howard et al, 2017] 

Стоит отметить, что depthwise-свертка является частным случаем групповой свертки, в которой каналы входной feature map разбиваются на группы, обрабатываются отдельно независимыми свертками, а результаты конкатенируются:

Depthwise-свертка – частный случай групповой свертки[CondenseNet: An Efficient DenseNet using Learned Group Convolutions, Huang et al, 2018] 

Depthwise-свертка — частный случай групповой свертки
[CondenseNet: An Efficient DenseNet using Learned Group Convolutions, Huang et al, 2018] 

Далее вышла статья про MobileNet V2, где авторы заменили обычный residual-блок на inverted residual:

Нововведение относительно MobileNetV1 – inverted residual-блок[MobileNetV2: Inverted Residuals and Linear Bottlenecks, Sandler et al, 2018] 

Нововведение относительно MobileNetV1 — inverted residual-блок
[MobileNetV2: Inverted Residuals and Linear Bottlenecks, Sandler et al, 2018] 

В нем число каналов входной Feature Map сначала увеличивается, затем применяется depthwise-свертка, после чего число каналов уменьшается к исходному значению.

В третьей версии MobileNet авторы добавили Squeeze-and-Excite-модуль к блоку V2, который адаптивно перевзвешивает каналы Feature Map, исходя из их важности:

Нововведения относительно MobileNetV2: Блок MobileNetV3 = блок MobileNetV2 + модуль Squeeze-and-Excite (SE) для адаптивного перевзвешивания каналов[Searching for MobileNetV3, Howard et al, 2019] 

Нововведения относительно MobileNetV2: Блок MobileNetV3 = блок MobileNetV2 + модуль Squeeze-and-Excite (SE) для адаптивного перевзвешивания каналов
[Searching for MobileNetV3, Howard et al, 2019] 

Другим нововведением была нелинейность h-swish, которая хорошо зарекомендовала себя в мобильных архитектурах:

[Searching for MobileNetV3, Howard et al, 2019]

[Searching for MobileNetV3, Howard et al, 2019]

Третья версия MobileNet смогла превзойти вторую, оставаясь в рамках той же вычислительной сложности.

RegNet

Эта архитектура была предложена в 2020 году. Ее авторы взяли за основу семейство архитектур, похожее на ResNet, и модифицировали ее, получив более точные множества архитектур:

Создание модели:1) семейство архитектур, похожее на ResNet, в качестве основы: (A)2) итеративное улучшение семейства путем выбора самых сильных модификаций: (B, C)[Designing Network Design Spaces, Radosavovic et al, 2020] 

Создание модели:
1) семейство архитектур, похожее на ResNet, в качестве основы: (A)
2) итеративное улучшение семейства путем выбора самых сильных модификаций: (B, C)
[Designing Network Design Spaces, Radosavovic et al, 2020] 

Результат их работы — блоки RegNet-X и RegNet-Y. RegNet-Y отличается от RegNet-X добавлением Squeeze-and-Excite-модуля:

Создание модели:3) Получение архитектур RegNet-X и RegNet-YБлок RegNet-Y = блок RegNet-X + модуль Squeeze-and-Excite[Designing Network Design Spaces, Radosavovic et al, 2020] 

Создание модели:
3) Получение архитектур RegNet-X и RegNet-YБлок RegNet-Y = блок RegNet-X + модуль Squeeze-and-Excite
[Designing Network Design Spaces, Radosavovic et al, 2020] 

В этой статье были представлены разные размеры архитектур. Дальше я буду рассматривать мобильные.

GhostNet

В этой архитектуре применяется трюк, очень похожий на идею из статьи ShuffleNet. На Feature Map применяется depthwise-свертка, а результат конкатенируется с самой исходной Feature Map:

Нововведения архитектуры:Ghost-модуль (предложен в GhostNetV1): применение отдельных линейных операций на каналах входа и конкатенация результата со входом[GhostNet: More Features from Cheap Operations, Han et al, 2020][GhostNetV2: Enhance Cheap Operation with Long-Range Attention, Tang et al, 2020] 

Нововведения архитектуры:
Ghost-модуль (предложен в GhostNetV1): применение отдельных линейных операций на каналах входа и конкатенация результата со входом
[GhostNet: More Features from Cheap Operations, Han et al, 2020]
[GhostNetV2: Enhance Cheap Operation with Long-Range Attention, Tang et al, 2020] 

В статье GhostNet V2 авторы добавили в блок GhostNet еще дополнительный модуль, имитирующий механизм внимания на изображении:

DFC-модуль (предложен в GhostNetV2) имитирует механизм внимания на картинке по X- и Y-осям.[GhostNet: More Features from Cheap Operations, Han et al, 2020][GhostNetV2: Enhance Cheap Operation with Long-Range Attention, Tang et al, 2020] 

DFC-модуль (предложен в GhostNetV2) имитирует механизм внимания на картинке по X- и Y-осям.
[GhostNet: More Features from Cheap Operations, Han et al, 2020]
[GhostNetV2: Enhance Cheap Operation with Long-Range Attention, Tang et al, 2020] 

Такие модификации позволили архитектуре превзойти MobileNet V3 на тесте ImageNet.

ConvNeXt

В 2022 году вышла статья про архитектуру ConvNeXt. Авторы добавили в модель ResNet различные трюки из архитектуры трансформера Swin. Например, LayerNorm-нормализации или большие ядра размера 7×7:

[A ConvNet for the 2020s, Liu et al, 2022][Swin Transformer: Hierarchical Vision Transformer using Shifted Windows, Liu et al, 2021]

[A ConvNet for the 2020s, Liu et al, 2022]
[Swin Transformer: Hierarchical Vision Transformer using Shifted Windows, Liu et al, 2021]

В этой статье были представлены довольно крупные модели, Поэтому мы обратили внимание на библиотеку Pytorch Image Models с моделями ConvNeXt мобильного размера.

Сравнение архитектур

На скриншоте ниже представлены результаты нашей команды при работе с этими архитектурами:

Здесь вторая колонка — это число параметров модели, третья — ее вычислительная сложность, четвертая — результаты на нашем внутреннем тесте верификации, пятая и шестая — на тесте IJB-C. Чем больше значение, тем лучше

Здесь вторая колонка — это число параметров модели, третья — ее вычислительная сложность, четвертая — результаты на нашем внутреннем тесте верификации, пятая и шестая — на тесте IJB-C. Чем больше значение, тем лучше

Важно заметить, что это исторические максимумы, которые мы получали для этих архитектур. Каждая модель обучалась со своими гиперпараметрами. Лучшие результаты показывает GhostNet, но у нее больше параметров, чем у остальных моделей. Самые слабые показатели у MobileNet-архитектур. Хороший баланс параметров и результатов тестов показала RegNet-X.

Мы провели замеры скорости выполнения этих моделей:

Замеры были проведены на платформах:- CPU (batch size = 1): Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz- GPU (batch size = 4): NVIDIA RTX A4500 

Замеры были проведены на платформах:
— CPU (batch size = 1): Intel® Xeon® Gold 6150 CPU @ 2.70GHz
— GPU (batch size = 4): NVIDIA RTX A4500 

Заметно, что GhostNet и ConvNeXt медленнее, чем MobileNet и RegNet на CPU, а на GPU они сопоставимы по скорости между собой.

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

Обучение распознаванию лиц на больших данных

При обучении модели по распознаванию лиц сама природа данных является трудностью:

Каждый id человека является отдельным классом во время обучения модели.В датасетах содержатся фото от тысяч до миллионов разных людей.[WebFace260M: A Benchmark Unveiling the Power of Million-Scale Deep Face Recognition, Zhu et al, 2021] 

Каждый id человека является отдельным классом во время обучения модели.
В датасетах содержатся фото от тысяч до миллионов разных людей.
[WebFace260M: A Benchmark Unveiling the Power of Million-Scale Deep Face Recognition, Zhu et al, 2021] 

Отдельным классом в обучающей выборке являются фотографии одного и того же человека. А в типичных датасетах содержатся изображения тысяч или даже миллионов разных людей. Это приводит к тому, что в пайплайне обучения модели матрица весов классификационного слоя будет иметь очень большие размеры:

1a5bba51928ddd913424fe32498d00f7.png

Соответственно, растет нагрузка на видеокарту:

Например, если в датасете 2 млн id, то такая матрица займет целиком память видеокарты NVIDIA 2080 Ti [An Efficient Training Approach for Very Large Scale Face Recognition, Wang et al, 2022]

Например, если в датасете 2 млн id, то такая матрица займет целиком память видеокарты NVIDIA 2080 Ti
[An Efficient Training Approach for Very Large Scale Face Recognition, Wang et al, 2022]

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

Параллельное ускорение

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

Эта идея была представлена еще в статье ArcFace

Эта идея была представлена еще в статье ArcFace

Рассмотрим, как будет происходить forward-шаг с таким разбиением. В самом начале у нас есть несколько видеокарт. На каждой карте находится своя группа колонок матрицы W.

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

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020] [ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]
[ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]

Во время backward-шага сначала считаем градиенты по локальным логитам каждого процесса. С их помощью обновляем на каждом процессе свою часть весов матрицы W и собираем вместе все локальные градиенты. Последним шагом обновляются веса backbone, копия которых лежит на каждом процессе:

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020] [ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]
[ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018]

За счет использования такого метода можно заметно сократить нагрузку на каждую видеокарту, даже на датасетах с миллионами классов:

Измерения проводились на 4 картах NVIDIA A100-SXM4-80GB

Измерения проводились на 4 картах NVIDIA A100-SXM4–80GB

Метод Partial-FC

У нас этот метод не дал хороших результатов, но поделюсь нашим опытом из-за его популярности.

Рассмотрим каждую колонку весов матрицы W — классификационного слоя модели — в качестве центра своего класса. Для какого-то эмбеддинга X позитивным классом назовем его родной класс по разметке или по лейблу, а негативным — любой другой:

Колонки классификационной матрицы W (D x N)можно рассмотреть как центры каждого из N классов[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017] 

Колонки классификационной матрицы W (D x N)можно рассмотреть как центры каждого из N классов
[SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017] 

В 2020 году был представлен метод под названием Partial-FC, который берет из матрицы W центр положительного класса как есть, а центры всех других классов сэмплирует с какой-то низкой вероятностью R:

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]

Его авторы показали, что можно существенно сократить число негативных центров классов в матрице W и практически не потерять в точности модели:

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]

[Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020]

Мы попробовали применить этот метод у себя:

Вторая колонка отвечает за процентное количество негативных центров классов, которые мы используем в обучении

Вторая колонка отвечает за процентное количество негативных центров классов, которые мы используем в обучении

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

[Dynamic Class Queue for Large Scale Face Recognition In the Wild, Li et al, 2021][Virtual Fully-Connected Layer: Training a Large-Scale Face Recognition Dataset with Limited Computational Resources, Li et al, 2021][An Efficient Training Approach for Very Large Scale Face Recognition, Wang et al, 2022] 

[Dynamic Class Queue for Large Scale Face Recognition In the Wild, Li et al, 2021]
[Virtual Fully-Connected Layer: Training a Large-Scale Face Recognition Dataset with Limited Computational Resources, Li et al, 2021]
[An Efficient Training Approach for Very Large Scale Face Recognition, Wang et al, 2022] 

Есть и другие методы для снижения нагрузки. В основном они фокусируются на введении дополнительных буферов, имитирующих хранение полной матрицы классификационного слоя.

Улучшение качества распознавания мобильной архитектуры

Представим, что мы смогли в supervised-режиме обучить очень точную, но также большую и медленную модель по распознаванию лиц, при помощи типичного лосса классификации. Назовем эту сеть «учителем»:

[Distilling the Knowledge in a Neural Network, Hinton et al, 2015]

[Distilling the Knowledge in a Neural Network, Hinton et al, 2015]

Во время обучения заморозим веса «учителя» и будем работать с маленькой сетью — «студентом»:

[Distilling the Knowledge in a Neural Network, Hinton et al, 2015]

[Distilling the Knowledge in a Neural Network, Hinton et al, 2015]

В качестве ответов используем не метки классов, а логиты от «учителя». Таким образом можно передать знания от крупной модели к более маленькой и поднять ее точность.

У нас был кейс, когда заказчики попросили сделать две совместимые модели разных размеров, чтобы матчить их дескрипторы между собой. Например, один раз извлечь дескриптор по профильному фото сотрудника с помощью медленной модели. А быструю идентификацию на системе контроля доступа производить с помощью мобильной архитектуры:

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

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

Для получения совместимости можно во время дистилляции знаний инициализировать матрицу весов классификационного слоя «студента» матрицей весов от «учителя» и заморозить ее на время обучения. Тогда «студент» выучит то же пространство дескрипторов, что и его «учитель»:

[Margin based knowledge distillation for mobile face recognition, Nekhaev et al, 2020]

[Margin based knowledge distillation for mobile face recognition, Nekhaev et al, 2020]

Этот метод дает такие результаты:

79f8329eccbae1cbf0fe9353f7fe7e2f.png

На этом скриншоте строки 1 и 2 — результаты модели «учителя» и «студента». Для получения данных в строке 3 для каждой пары фото нужно взять по одному дескриптору от каждой модели и найти расстояние между ними. Результаты такого кросс-матчинга оказывались между результатами исходных моделей, что показывает их совместимость.

Основные выводы

Здесь я кратко соберу основные идеи по распознаванию лиц на мобильных устройствах, к которым мы пришли в процессе работы:

  • лучшую скорость и качество показала мобильная модель RegNet-X;

  • разбиение матрицы весов классификационного слоя лежит в основе обучения всех современных моделей по распознаванию лиц;

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

  • с помощью дистилляции знаний можно сделать два совместимых варианта моделей: маленькую и быструю и масштабную и медленную. Каждую из них можно использовать для своих задач.

На этом у меня все, готов ответить на ваши вопросы.

Скрытый текст

  1. SphereFace: Deep Hypersphere Embedding for Face Recognition, Liu et al, 2017
    https://arxiv.org/abs/1704.08063

  2. CosFace: Large Margin Cosine Loss for Deep Face Recognition, Wang et al, 2018
    https://arxiv.org/abs/1801.09414

  3. ArcFace: Additive Angular Margin Loss for Deep Face Recognition, Deng et al, 2018
    https://arxiv.org/abs/1801.07698

  4. CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition, Huang et al, 2020
    https://arxiv.org/abs/2004.00288

  5. MagFace: A Universal Representation for Face Recognition and Quality Assessment, Meng et al, 2021
    https://arxiv.org/abs/2103.06627

  6. AdaFace: Quality Adaptive Margin for Face Recognition, Kim et al, 2022
    https://arxiv.org/abs/2204.00964

  7. Xception: Deep Learning with Depthwise Separable Convolutions, Chollet, 2017 https://arxiv.org/abs/1610.02357

  8. Google«s MobileNets on the iPhone, Hollemans, 2017
    https://machinethink.net/blog/googles-mobile-net-architecture-on-iphone/

  9. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, Howard et al, 2017
    https://arxiv.org/abs/1704.04861

  10. CondenseNet: An Efficient DenseNet using Learned Group Convolutions, Huang et al, 2018
    https://arxiv.org/abs/1711.09224

  11. MobileNetV2: Inverted Residuals and Linear Bottlenecks, Sandler et al, 2018
    https://arxiv.org/abs/1801.04381

  12. Searching for MobileNetV3, Howard et al, 2019
    https://arxiv.org/abs/1905.02244

  13. Designing Network Design Spaces, Radosavovic et al, 2020
    https://arxiv.org/abs/2003.13678

  14. GhostNet: More Features from Cheap Operations, Han et al, 2020
    https://arxiv.org/abs/1911.11907

  15. GhostNetV2: Enhance Cheap Operation with Long-Range Attention, Tang et al, 2020
    https://arxiv.org/abs/2211.12905

  16. A ConvNet for the 2020s, Liu et al, 2022
    https://arxiv.org/abs/2201.03545

  17. pytorch-image-models
    https://github.com/huggingface/pytorch-image-models

  18. WebFace260M: A Benchmark Unveiling the Power of Million-Scale Deep Face Recognition, Zhu et al, 2021
    https://arxiv.org/abs/2103.04098

  19. An Efficient Training Approach for Very Large Scale Face Recognition
    https://arxiv.org/abs/2105.10375

  20. Partial FC: Training 10 Million Identities on a Single Machine, An et al, 2020
    https://arxiv.org/abs/2010.05222

  21. Killing Two Birds with One Stone: Efficient and Robust Training of Face Recognition CNNs by Partial FC
    https://arxiv.org/abs/2203.15565

  22. Distilling the Knowledge in a Neural Network, Hinton et al, 2015
    https://arxiv.org/abs/1503.02531

  23. Margin based knowledge distillation for mobile face recognition, Nekhaev et al, 2020
    https://www.researchgate.net/publication/338959991_Margin_based_knowledge_distillation_for_mobile_face_recognition

© Habrahabr.ru