Метрики в задаче генерации изображений
Введение
В этой статье мы расскажем про основные показатели, с помощью которых измеряют качество генеративных моделей, а также рассмотрим примеры метрик, описывающих эти показатели. Представьте: у вас есть два генератора изображений. Как оценить, какой из них лучше?
Для модели, генерирующей изображения, важны два показателя: fidelity и diversity.
Fidelity — мера реалистичности сгенерированных изображений. Сгенерированные собаки должны быть похожи на реальных собак.
Diversity — мера разнообразия каждого генерируемого класса (intra-class diversity). Если модель генерирует изображения животных, то генерации каждого класса животных должны быть разнообразными с точки зрения породы/размера/цвета и так далее.
Для вычисления рассматриваемых метрик используются (в одном из двух кейсов) предобученные модели:
- В качестве классификатора, который возвращает распределение вероятностей.
- В качестве экстрактора признаков.
Обычно это модель Inception v3, предобученная на ImageNet.
Inception Score (IS)
Первая метрика — inception score. Идея следующая:
- Мы имеем множество сгенерированных картинок
\( p_g \) ; - Берем классификатор;
- С его помощью считаем условные вероятности \( p(y|x) \) для каждого сгенерированного изображения \( x \) из \( p_g \);
- Агрегируем результаты для вычисления маргинального распределения \( p(y) \) (это сделано, в частности, для того, чтобы не привлекать людей к разметке изображений);
- Теперь хотим, чтобы \( p(y|x) \) имело низкую энтропию (каждое изображение \( x \) было однозначно отнесено с точки зрения классификатора к определенному классу) — это аналог fidelity, а \( p(y) \) имело высокую энтропию (распределение классов равномерно) — аналог diversity (только inter-class diversity). По сути мы хотим, чтобы были “различными” два распределения — \( p(y|x) \) и \( p(y) \). Мерой “различия” двух распределений является дивергенция Кульбака-Лейблера \( D_{KL}; \)
- Затем усредняем дивергенцию по каждому изображению \( x; \)
- Возводим результат в экспоненту, чтобы итоговые числа было проще сравнивать.
\( 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 в контексте задачи генерации изображений.
Precision — доля сгенерированных картинок, которые входят в реальные (fidelity). Чем больше сгенерированных картинок вошло в реальные, тем более реалистичные картинки генерирует модель. Про diversity здесь сказать нечего: модель может генерировать однотипные объекты.
Recall — доля реальных картинок, которые входят в сгенерированные (diversity). Чем больше реальных картинок вошло в сгенерированные, тем выше diversity (конечно, нужно убедиться, что реальные данные тоже diverse).
Доли считаются попарно с использованием расстояния до (k+1)-го ближайшего соседа в собственном множестве.
Алгоритм вычисления Precision и Recall:
- Извлекаем признаки из двух множеств данных, получаем множества признаков \( A \) и \( B \);
- Вычисляем попарные расстояния до \( k+1 \) ближайшего соседа на множестве признаков \( A \) для каждого элемента \( a \). Один дополнительный сосед необходим, чтобы исключить самого себя как соседа, поэтому количество соседей для каждого вектора равно \( k \);
- Для каждого элемента \( b \) из множества признаков \( B \) смотрим на расстояние до каждого элемента \( a \) из множества \( A \). Если \( b \) входит в \( k \) ближайших соседей для какого-либо \( a \), то увеличиваем счетчик \( n \);
- Возвращаем долю: n/[количество элементов в множестве \( B \)].
Например, если \( A \) — это сгенерированные картинки, а \( B \) — реальные, то по алгоритму выше вычисляется precision. Если поменять местами \( A \) и \( B \) в аргументах функции — вычисляется уже recall.
Заключение
В статье мы рассмотрели понятия, связанные с оценкой моделей генерации изображений (fidelity и diversity), а также разобрали ключевые метрики для решения этой задачи.
В следующих статьях мы углубимся в диффузионные модели: в частности, разберем статью Diffusion Models Beat GANs on Image Synthesis. Продолжение следует 😊