Назад
372

Метрики в задаче генерации изображений

372

Введение

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

Для модели, генерирующей изображения, важны два показателя: fidelity и diversity.

Fidelity — мера реалистичности сгенерированных изображений. Сгенерированные собаки должны быть похожи на реальных собак.

Diversity — мера разнообразия каждого генерируемого класса (intra-class diversity). Если модель генерирует изображения животных, то генерации каждого класса животных должны быть разнообразными с точки зрения породы/размера/цвета и так далее.

Для вычисления рассматриваемых метрик используются (в одном из двух кейсов) предобученные модели:

  1. В качестве классификатора, который возвращает распределение вероятностей.
  2. В качестве экстрактора признаков.

Обычно это модель Inception v3, предобученная на ImageNet.

Inception Score (IS)

Первая метрика — inception score. Идея следующая:

  1. Мы имеем множество сгенерированных картинок \( p_g \);
  2. Берем классификатор;
  3. С его помощью считаем условные вероятности \( p(y|x) \) для каждого сгенерированного изображения \( x \) из \( p_g \);
  4. Агрегируем результаты для вычисления маргинального распределения \( p(y) \) (это сделано, в частности, для того, чтобы не привлекать людей к разметке изображений);
  5. Теперь хотим, чтобы \( p(y|x) \) имело низкую энтропию (каждое изображение \( x \) было однозначно отнесено с точки зрения классификатора к определенному классу) — это аналог fidelity, а \( p(y) \) имело высокую энтропию (распределение классов равномерно) — аналог diversity (только inter-class diversity). По сути мы хотим, чтобы были “различными” два распределения — \( p(y|x) \) и \( p(y) \). Мерой “различия” двух распределений является дивергенция Кульбака-Лейблера \( D_{KL}; \)
  6. Затем усредняем дивергенцию по каждому изображению \( x; \)
  7. Возводим результат в экспоненту, чтобы итоговые числа было проще сравнивать.

\( IS(G) = \exp(\mathop{\mathbb{E_{x \sim p_g}}D_{KL}(p(y|x)|| p(y))}) \)

По формуле и описанию выше видно: модели достаточно научиться реалистично генерировать какое-то подмножество объектов класса, чтобы иметь высокий IS (у такой модели будет низкий diversity).

Fréchet inception distance (FID)

Переходим к FID, самой популярной метрике среди моделей, генерирующих изображения.

В этой метрике мы не используем распределение классов после выхода модели. Вместо этого берем признаки, извлеченные с помощью модели с последнего слоя пулинга, или “coding layer”. Таким образом, каждая картинка \( x \) представлена в качестве вектора размерности \( 2048 \).

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

\( d_F(\mathcal{N}(\mu, \Sigma), \mathcal{N}(\mu’, \Sigma’))^2 = ||\mu — \mu’||^2_2 + \mathcal{tr}(\Sigma + \Sigma’ — 2(\Sigma\Sigma’)^\frac{1}{2}) \)

Здесь мы хотим аппроксимировать параметры распределения сгенерированных изображений \( (\mu, \Sigma) \) к параметрам распределения реальных (мировых/world) \( (\mu^\prime, \Sigma^\prime) \) изображений, поэтому нам необходимо порядка 50,000 сгенерированных изображений.

Метрика FID:

  • лучше соотносится с мнением людей, чем IS;
  • лучше улавливает diversity.

Есть еще sFID-признаки, на которых считаются статистики. Они извлекаются ранее (до пулинга). Логичное улучшение — использовать модель, у которой фичи лучше, чем у Inception v3. Это модель Dinov2.

Precision/Recall

Теперь посмотрим на Precision и Recall в контексте задачи генерации изображений.

Рисунок 1. Визуализация метрик Precision и Recall. \( P_g \) — распределение сгенерированных картинок. \( P_r \) — распределение реальных картинок

Precision — доля сгенерированных картинок, которые входят в реальные (fidelity). Чем больше сгенерированных картинок вошло в реальные, тем более реалистичные картинки генерирует модель. Про diversity здесь сказать нечего: модель может генерировать однотипные объекты.

Recall — доля реальных картинок, которые входят в сгенерированные (diversity). Чем больше реальных картинок вошло в сгенерированные, тем выше diversity (конечно, нужно убедиться, что реальные данные тоже diverse).

Доли считаются попарно с использованием расстояния до (k+1)-го ближайшего соседа в собственном множестве.

Алгоритм вычисления Precision и Recall:

  1. Извлекаем признаки из двух множеств данных, получаем множества признаков \( A \) и \( B \);
  2. Вычисляем попарные расстояния до \( k+1 \) ближайшего соседа на множестве признаков \( A \) для каждого элемента \( a \). Один дополнительный сосед необходим, чтобы исключить самого себя как соседа, поэтому количество соседей для каждого вектора равно \( k \);
  3. Для каждого элемента \( b \) из множества признаков \( B \) смотрим на расстояние до каждого элемента \( a \) из множества \( A \). Если \( b \) входит в \( k \) ближайших соседей для какого-либо \( a \), то увеличиваем счетчик \( n \);
  4. Возвращаем долю: n/[количество элементов в множестве \( B \)].
Рисунок 2. Алгоритм вычисления Precision и Recall

Например, если \( A \) — это сгенерированные картинки, а \( B \) — реальные, то по алгоритму выше вычисляется precision. Если поменять местами \( A \) и \( B \) в аргументах функции — вычисляется уже recall.

Заключение

В статье мы рассмотрели понятия, связанные с оценкой моделей генерации изображений (fidelity и diversity), а также разобрали ключевые метрики для решения этой задачи.

В следующих статьях мы углубимся в диффузионные модели: в частности, разберем статью Diffusion Models Beat GANs on Image Synthesis. Продолжение следует 😊

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

DeepSchool

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

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

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

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