Назад
37

Face Image Quality Assessment. Part 2

37

Введение

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

Краткая выжимка из первой части

Давайте кратко вспомним важные моменты из первой части.

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 \) к векторам из фото этого же человека и далеким от векторов из фото других людей.

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

Рисунок 1. Фото лиц проходят через сеть, для каждого из них мы получаем эмбеддинг

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

Представим, что у нас есть:

  • обученная для распознавания лиц модель и метрика \( \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.

Рисунок 2. Определение качества фото

Пусть мы измерили расстояния во всех парах \( \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.

Рисунок 3. Примеры фото с разным WD между \( \rho_{intra} \) и \( \rho_{inter} \)
Проблема этого способа получения меток качества

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

Давайте возьмем \( 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, а это уже тема для отдельной статьи 😊

Итак, мы разобрались, как получить метку качества фото при наличии разметки на персон. Но на инференсе у нас не будет разметки. Тогда, чтобы получать метку качества для любого неразмеченного фото, обучим отдельную регрессионную модель, которая на вход получает только фото, а на выходе пытается предсказать его скор качества из предыдущего алгоритма.

Рисунок 4. Пайплайны генерации меток, обучения и инференса SDD-FIQA
ALT

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

Но на инференсе у нас будет только одно фото, не будет разметки на персоны и времени на запуск модели распознавания и сравнения векторов. Как тогда быть?

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

Рисунок 5. Сравнение SDD-FIQA со статистическими методами (мелкий пунктир) и методами на основе ручной разметки на качество (длинный пунктир)

В свое время метод был SOTA, хотя и требовал тщательного подбора параметра \( m \).

SER-FIQ: Unsupervised Estimation of Face Image Quality Based on Stochastic Embedding Robustness

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

  • обученная для распознавания лиц модель и метрика \( d \), на которой модель училась;
  • датасет из фото лиц без разметки;
  • набор векторов (способ получения описан ниже).

Как и в первом случае, основная идея здесь следующая: если фото лица хорошего качества, то персона на нем определится уверенно.

Мы все также будем смотреть на расстояние по метрике \( d \) между эмбеддингами, но в этот раз у нас будут эмбеддинги одного фото, полученные очень похожими, но разными сетями.

Рисунок 6. Схема получения меток качества SER-FIQ

Этот подход заметно проще предыдущего, поэтому давайте представим его в виде алгоритма:

  1. Делим нашу исходную сеть на \( n \) подсетей, удаляя сильным дропаутом часть параметров (Monte-Carlo Dropout).
  2. Через каждую сеть прогоняем одинаковое фото лица и получаем вектора \( x_1, …, x_n \).
  3. Измеряем все попарные расстояния \( d(x_1, x_2), d(x_1, x_3), …, d(x_1, x_n), …, d(x_n, x_n) \).
  4. Вычисляем таргет качества фото по формуле ниже, где \( \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 шага, только он будет использоваться на инференсе.

При этом можно ускорить прогон всех сетей, если применить дропаут только ближе к последнему слою. Тогда до слоя с первым дропаутом все сети будут совпадать, поэтому можно прогонять эту часть отдельно от всех подсетей и только один раз, а затем передавать результат прохода (эмбеддинг последнего слоя для дропаута) в каждую подсеть.

Рисунок 7. Сравнение SER-FIQ со статистическими методами (мелкий пунктир) и методами на основе ручной разметки на качество (длинный пунктир)

На графике выше same model — это когда метки класса получали той же моделью, которой делали распознавание лица, on-top — метки качества создавали другой моделью с той же метрикой \( d \). Сравнение со SDD-FIQA можно найти на Рисунке 5.

Заключение

Итак, давайте подведем небольшие итоги и пройдемся по основным моментам обеих статей:

  • Face Image Quality Assessment — это задача классификации фото человеческих лиц на качественные и некачественные.
  • Некачественное фото — это фото, на котором конкретная модель распознавания лиц ошибется с большей вероятностью, чем на других фото этого же человека.
  • Можно определять качество фото по ручным правилам, а еще — по “уверенности” ответов модели.
  • SDD-FIQA генерирует метки качества фото лица на основе Wasserstein Distance между распределением расстояний внутри класса (фото одного человека) и между классами (фото других людей).
  • SER-FIQ генерирует метки качества фото лица на основе расстояния между эмбеддингами, полученными из разных подсетей (а они, в свою очередь, получаются с помощью дропаута).
  • Оба метода используют для инференса отдельные нейросети, которые получают на вход только фото и по нему предсказывают качество.

Полезные ссылки

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!