Как сохранить черты лица в генерации: параметры, структуры промтов и рабочие формулы

Промт — это только руль. Удержание личности делают веса, контроль и сиды

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

Параметры сэмплера ControlNet / IP-Adapter Готовые шаблоны

Почему лицо «плывёт» даже при точном описании

В латентном пространстве модели не хранится «фото конкретного человека». Хранится статистическое распределение признаков: форма глаз, расстояние между зрачками, изгиб губ. Когда вы пишете «женщина 30 лет, карие глаза», сэмплер берёт центр этого кластера — усреднённый облик.

Промт словами («очень похожа на фото», «identical face») работает слабо, потому что текстовый энкодер (CLIP, T5) сжимает описание в вектор, где детали лица теряют приоритет на фоне композиции, света, стиля.

Суть проблемы: Текст управляет семантикой, а не пиксельной точностью. Для жесткого фиксирования геометрии нужны инструменты, говорящие с моделью на языке тензоров — ControlNet, IP-Adapter, ReNoise, фиксированные сиды.
Условная схема: дрифт вектора лица в латентном пространстве без якоря

Пять рычагов, которые реально работают

CFG Scale (Guidance)

Низкий CFG (2–4) даёт свободу, лицо «расплывается». Высокий (7–12) заставляет следовать промту, но порождает артефакты. Для лиц: 5–7 — баланс подчиненности и естественности.

Denoising Strength

В img2img / Inpaint. 0.25–0.45 — меняет детали, сохраняет структуру черепа. >0.6 — перерисовывает лицо целиком. Для «только прическа/одежда» ставьте 0.15–0.25.

ControlNet (Canny / Depth)

Жесткий контур. Canny — для сохранения точной овалики и линий профиля. Depth — для объёма, если ракурс меняется. Weight 0.8–1.0, End Step 0.8–1.0.

IP-Adapter / FaceID

Семантический якорь. Передаёт эмбеддинг лица (InsightFace) в cross-attention. Работает без ControlNet. Weight 0.6–0.9. FaceID Plus v2 — текущий стандарт для SDXL/SD1.5.

Seed + ReNoise

Фиксированный Seed даёт детерминизм. ReNoise (в ComfyUI / Automatic1111) позволяет менять композицию/свет, сохраняя низкочастотные частоты (структуру лица) от исходного шума.

Алгоритм сборки промта для идентичности

Порядок токенов важен: модели (SDXL, Flux, Midjourney v6) читают начало промта с большим вниманием. Структурируйте описание от «жёстких» биометрических маркеров к «мягким» стилистике.

  1. Якорь личности: референс через IP-Adapter / —cref / FaceID. Это не текст, это входной тензор.
  2. Жесткая геометрия (ControlNet): Canny/Depth из референса. В промте это фиксируется фразой exact facial structure, fixed bone structure.
  3. Биометрические маркеры: interpupillary distance 64mm, nasal index 70, philtrum width, mandibular angle 125° — термины, понятные CLIP/T5 из датасетов антропометрии.
  4. Уникальные дефекты/признаки: asymmetric left eyebrow, mole right cheek 3mm under eye, slight overbite — ломают симметрию «идеального лица».
  5. Стиль/Свет/Окружение: только в конце. cinematic lighting, 85mm lens, f/1.8, kodak portra 400.
# SDXL / Pony / RealVis Template Positive: [IP-Adapter Embed:1.0], [ControlNet-Canny:0.9], photo of target_identity, exact facial geometry, fixed bone structure, interpupillary distance 63mm, nasal index 68, asymmetric left eyebrow, mole right cheek, [style tokens: cinematic, 85mm, f/1.8, golden hour] Negative: deformed face, asymmetric eyes (unwanted), mutated hands, blurry, lowres, generic face, average face, plastic skin, airbrush, doll-like, different person, identity shift

Сравнение подходов: слова vs структура

Только текстовый промт

Ввод: «portrait of a specific woman, identical face, same moles, same eyes, photorealistic»

Result: High similarity in vibe (lighting, color), but eye shape, nose bridge, jawline drift to dataset mean. Moles appear/disappear randomly. Seed changes = different person.
  • ❌ Нет детерминизма
  • ❌ CLIP теряет мелкие признаки
  • ✅ Быстро для черновиков
IP-Adapter + ControlNet + Biometrics

Ввод: Референс в IP-Adapter (weight 0.8) + Canny ControlNet (weight 0.9) + Промт с антропометрией.

Result: Mole position stable ±1px. Eye asymmetry preserved. Jawline matches skull structure. Changing seed alters only hair micro-detail / fabric texture. Identity locked.
  • ✅ Идентичность > 95% (L2 distance)
  • ✅ Контроль ракурса через Depth
  • ⚙️ Требует ComfyUI / WebUI extensions

Когда промта недостаточно: LoRA и DreamBooth

Если нужно генерировать одного персонажа в сотнях ракурсов, освещений и выражениях — IP-Adapter даёт дрожание (jitter). Обучение LoRA (Low-Rank Adaptation) на 15–25 качественных фото закатывает идентичность в веса модели.

Правило: LoRA обучается на вариативных фото (разный свет, ракурс, эмоции), но одном человеке. Регуляризационные изображения (class images) предотвращают переобучение стиля за счёт лица.

Rank 32 / Alpha 32 LR 1e-4 (AdamW8bit) 1500–2500 steps Trigger: ohwx person
Условная схема: влияние LoRA на латентное пространство

Чек-лист: диагностика потери лица

Глаза разного размера / асимметрия зрачков
Причина: нет ControlNet Canny или слабый IP-Adapter weight. Лечение: вкл. Canny (w=1.0), добавьте в негатив asymmetric pupils, uneven eyes.
Нос «плывёт» — меняется длина/ширина крыльев
Причина: Denoising > 0.5 без ControlNet Depth. Лечение: Depth ControlNet (w=0.8) или снизьте denoising до 0.3.
Родинки/шрамы исчезают или появляются новые
Причина: текстура кожи не зафиксирована. Лечение: IP-Adapter FaceID Plus v2 (high fidelity), добавьте маркеры в промт: mole at [coord].
Лицо «пластиковое», без пор и текстуры
Причина: слишком высокий CFG (>10) или aggressive smoothing в VAE. Лечение: CFG 5–6, VAE decoder tilt, negative: airbrush, plastic skin, smooth skin.

Промт указывает направление. Архитектура пайплайна — гарантирует 도착ение.

Нет «волшебного промта», который заставит базовую txt2img генерацию копировать лицо пиксель-в-пиксель. Идентичность — это инженерная задача: правильный стек (IP-Adapter + ControlNet), калиброванные веса, зафиксированный сид и понимание того, где заканчивается влияние текста и начинается влияние тензоров.

Соберите пайплайн → Зафиксируйте сид → Итерируйте промт только по стилю