Face Image Quality Assessment. Part 2
Введение
Мы продолжаем говорить о распознавании качества фото лица. В первой части мы уже определили метрики и саму задачу, а также рассказали о простых методах ее решения.
Краткая выжимка из первой части
Давайте кратко вспомним важные моменты из первой части.
Face Image Quality Assessment — это задача классификации фото человеческих лиц на качественные и некачественные. Некачественное фото — это фото, на котором конкретная модель распознавания лиц ошибется с большей вероятностью, чем на других фото этого же человека.
При этом есть два разных вида ошибок: False Match (приняли двух разных человек за одного) и False Non-Match (приняли одного человека за двух разных). Из этих ошибок мы получаем две метрики:
- FMR — долю принятых за одну персону пар фото с разными персонами среди всех пар фото с разными персонами, то есть \( FMR = \frac{FM}{not\ matched} \) ;
- False Non-Match Rate (FNMR) — долю отклоненных пар фото с одинаковой персоной среди всех пар с одинаковой персоной, то есть \( FNMR = \frac{FNM}{realy\ matched} \).
Можно зафиксировать максимально допустимую ошибку по одной из этих метрик и сравнить модели определения качества только по второй. Например, зафиксируем FMR и будем сравнивать модели по FNMR при FMR = 0.01. Это записывается как FNMR@FMR=0.01.
А сегодня мы разберемся с двумя подходами к решению этой задачи — SDD-FIQA и SER-FIQ.
SDD-FIQA: Unsupervised Face Image Quality Assessment with Similarity Distribution Distance
В задаче распознавания лиц доминирует сети, обученные через metric learning. Они преобразуют входящее изображение лица в некоторый вектор. Он должен быть близким по выбранной метрике \( \rho \) к векторам из фото этого же человека и далеким от векторов из фото других людей.
На рисунке ниже мы видим похожих людей рядом — это происходит за счет обучения в пространстве эмбеддингов, выходящих из сети. То есть сеть выучивает какие-то дескрипторы лиц, позволяющие отличать людей друг от друга.
Из первой части статьи мы помним, что хорошее фото в рамках задачи — фото, которое мы уверенно определим как фото именно этого человека. Как можно проверить уверенность сети в своем предсказании, если на выходе мы получаем только вектор?
Представим, что у нас есть:
- обученная для распознавания лиц модель и метрика
\( \rho \) , которой мы измеряли расстояние между векторами при обучении (обычно косинусное расстояние); - датасет из фото лиц, где каждому человеку соответствует уникальный id и несколько фото;
- вектор \( v \)из фото лица, для которого мы определяем качество;
- набор векторов \( \hat{v} = v_1, v_2, …, v_n \), полученный из других фото этого же человека;
- набор векторов \( \hat{w} = w_1, w_2, …, w_m \), полученный из фото других людей той же моделью.
Если \( v \) — вектор качественного фото, и большинство других фото этого человека тоже качественные (что обычно правда), тогда по метрике \( \rho \) вектор \( v \) должен быть близок к \( \hat{v} \) и далек от \( \hat{w} \). Но если фото некачественное, то \( v \) может быть близок к векторам других некачественных фото или фото других людей с похожей внешностью, которых теперь тяжелее различить из-за потери информации на фото.
При этом разные “дефекты” фото по-разному влияют на качество. Например, если наша модель хорошо справляется с распознаванием лиц в медицинских масках и плохо справляется с поворотом головы на \( 90^{\circ} \), то второе условие будет сильнее увеличивать расстояние от остальных фото внутри класса и уменьшать расстояние до соседнего класса. Это именно то, что мы хотим — учесть особенности распознавания конкретной моделью, которой мы пользуемся.
Итак, \( v \) — вектор качественного фото, если расстояния между \( v \) и \( \hat{v} = v_1, v_2, …, v_n \) значительно меньше, чем между \( v \) и \( \hat{w} = w_1, w_2, …, w_m \). Расстояние \( \rho(v, \hat{v}) \) называют intra-class distance, а \( \rho(v, \hat{w}) \) — inter-class distance.
Пусть мы измерили расстояния во всех парах \( \rho_{intra} = \rho(v, v_1), \rho(v, v_2), …, \rho(v, v_n) \) и \( \rho_{inter} = \rho(v, w_1), \rho(v, w_2), …, \rho(v, w_m) \). Теперь нам нужно сравнить два эмпирических распределения расстояний \( \rho_{intra} \) и \( \rho_{inter} \). Для этого можно взять любое расстояние между эмпирическими распределениями. Например, просто разницу средних, KL-divergence или Wasserstein Distance. В статье выбрали WD.
Проблема этого способа получения меток качества
У такого способа вычисления расстояния есть весомая проблема. В датасетах распознавания лиц содержатся десятки тысяч персон и миллионы фото. Значит, для вычисления качества одного фото при использовании хотя бы по вектору на каждую персону нам нужны десятки тысяч сравнений векторов. А это занимает очень много времени.
Давайте возьмем \( m \approx n \) или \( m < n \), то есть вычислим inter-class distance только для части персон. Но тогда может возникнуть проблема — большинство случайных людей сетки отличаются очень легко, следовательно, почти всегда полученная WD должна быть большой и у плохих фото, и у хороших.
В статье упоминают, что алгоритм требует долгого подбора параметра \( m \). Авторы берут \( m < n \), чтобы ускорить создание меток, но компенсируют это тем, что считают WD через бутстреп — собирают \( K \) подвыборок из \( \hat{v}, \hat{w} \) по \( m \) пар, считают WD для них и усредняют. Это не решает описанной выше проблемы, так как в вектор \( \hat{w} \) все равно попадет много легко отличимых фото.
Для решения этой проблемы можно попробовать применить примеры из hard negative mining, а это уже тема для отдельной статьи 😊
Итак, мы разобрались, как получить метку качества фото при наличии разметки на персон. Но на инференсе у нас не будет разметки. Тогда, чтобы получать метку качества для любого неразмеченного фото, обучим отдельную регрессионную модель, которая на вход получает только фото, а на выходе пытается предсказать его скор качества из предыдущего алгоритма.
ALT
Таким образом, мы получаем метку качества фото на основе расстояния между распределениями расстояний внутри класса и снаружи.
Но на инференсе у нас будет только одно фото, не будет разметки на персоны и времени на запуск модели распознавания и сравнения векторов. Как тогда быть?
Давайте заведем отдельную регрессионную модель, которая на вход принимает только фото лица, а на выходе пытается предсказать полученную метку качества. Тогда на инференсе мы тоже будем подавать только фото лица. На инференсе работает исключительно регрессионная модель.
В свое время метод был SOTA, хотя и требовал тщательного подбора параметра \( m \).
SER-FIQ: Unsupervised Estimation of Face Image Quality Based on Stochastic Embedding Robustness
Теперь давайте перейдем ко второму методу. Его требования меньше, чем у первого, нам нужны только:
- обученная для распознавания лиц модель и метрика \( d \), на которой модель училась;
- датасет из фото лиц без разметки;
- набор векторов (способ получения описан ниже).
Как и в первом случае, основная идея здесь следующая: если фото лица хорошего качества, то персона на нем определится уверенно.
Мы все также будем смотреть на расстояние по метрике \( d \) между эмбеддингами, но в этот раз у нас будут эмбеддинги одного фото, полученные очень похожими, но разными сетями.
Этот подход заметно проще предыдущего, поэтому давайте представим его в виде алгоритма:
- Делим нашу исходную сеть на \( n \) подсетей, удаляя сильным дропаутом часть параметров (Monte-Carlo Dropout).
- Через каждую сеть прогоняем одинаковое фото лица и получаем вектора \( x_1, …, x_n \).
- Измеряем все попарные расстояния \( d(x_1, x_2), d(x_1, x_3), …, d(x_1, x_n), …, d(x_n, x_n) \).
- Вычисляем таргет качества фото по формуле ниже, где \( \sigma \) — сигмоида:
\( quality(Image) = 2 \cdot \sigma( -\frac{2}{n^2} \sum_{i<j} d(x_i, x_j), \ \ quality(I) \in [0, 1] \)
5. Обучаем отдельный регрессор для предсказания таргета с 4 шага, только он будет использоваться на инференсе.
При этом можно ускорить прогон всех сетей, если применить дропаут только ближе к последнему слою. Тогда до слоя с первым дропаутом все сети будут совпадать, поэтому можно прогонять эту часть отдельно от всех подсетей и только один раз, а затем передавать результат прохода (эмбеддинг последнего слоя для дропаута) в каждую подсеть.
На графике выше same model — это когда метки класса получали той же моделью, которой делали распознавание лица, on-top — метки качества создавали другой моделью с той же метрикой \( d \). Сравнение со SDD-FIQA можно найти на Рисунке 5.
Заключение
Итак, давайте подведем небольшие итоги и пройдемся по основным моментам обеих статей:
- Face Image Quality Assessment — это задача классификации фото человеческих лиц на качественные и некачественные.
- Некачественное фото — это фото, на котором конкретная модель распознавания лиц ошибется с большей вероятностью, чем на других фото этого же человека.
- Можно определять качество фото по ручным правилам, а еще — по “уверенности” ответов модели.
- SDD-FIQA генерирует метки качества фото лица на основе Wasserstein Distance между распределением расстояний внутри класса (фото одного человека) и между классами (фото других людей).
- SER-FIQ генерирует метки качества фото лица на основе расстояния между эмбеддингами, полученными из разных подсетей (а они, в свою очередь, получаются с помощью дропаута).
- Оба метода используют для инференса отдельные нейросети, которые получают на вход только фото и по нему предсказывают качество.
Полезные ссылки
- SDD-FIQA: Unsupervised Face Image Quality Assessment with Similarity Distribution Distance
- SER-FIQ: Unsupervised Estimation of Face Image Quality Based on Stochastic Embedding Robustness
- MagFace: A Universal Representation for Face Recognition and Quality Assessment — более сложный метод на основе изменения функции потерь ArcFace.