Генерация группового портрета в Stable Diffusion или Midjourney нередко заканчивается тем, что у всех персонажей на изображении оказывается одно и то же лицо — модель буквально клонирует одну внешность на всю толпу. Это не случайный глюк, а следствие того, как диффузионные модели обрабатывают повторяющиеся сущности в промпте: одно текстовое описание «woman» или «man» применяется ко всем лицам сразу, и сеть выдаёт усреднённый, статистически «наиболее вероятный» вариант.

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

Почему нейросеть рисует одинаковые лица

Основная причина кроется в архитектуре текстового энкодера. Когда вы пишете промпт вида «group of people, smiling», модель получает одно векторное представление для всех людей на изображении. У неё нет механизма, который бы по умолчанию различал «первого человека» и «второго человека» — оба токена ссылаются на одно и то же понятие.

Вторая причина — работа механизма внимания (attention). Слои cross-attention распределяют текстовые признаки по пространству изображения, и при недостаточной пространственной привязке одни и те же признаки лица «протекают» в разные области картинки. Результат — зеркальные копии одной внешности с минимальными вариациями.

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

💡

Одинаковые лица — следствие единого текстового описания для всех персонажей и особенностей механизма внимания, а не ошибка конкретной модели.