Публикую метод как ставить нейронкой персонажей в приличные позы
Wan 2.2 Pose Control
Я уже некоторое время пытаюсь решить задачу позирования персонажей с помощью открытых моделей. Моя предыдущая попытка с Flux.2 Klein дала неплохие результаты, но страдала от "стилевого сдвига" и оригинальные пропорции персонажа вообще не соблюдала (например, соотношение головы и тела). Так то сохранять дизайн и стиль персонажей (это ещё называют "согласованность") по-прежнему остаётся слабым местом моделей редактирования изображений (особенно когда это касается стилизованных персонажей), но есть одно исключение: Wan2.2 I2V Video. И тут ничего удивительного - от видеомодели ожидается что персонаж на одном кадре будет похож сам на себя на последующих кадрах.
Короче, после длительных экспериментов с моделью Wan 2.2 я обнаружил определённую технику промптинга, которая позволяет "поместить персонажа из image_1 в позу из image_2".
Ссылка на воркфлоу для нетерпеливых.
Итак, наша задача звучит так: "Возьми персонажа слева и заставь её скопировать позу справа"
Это можно сделать двумя способами с использованием локальных открытых моделей:
- Воркфлоу замены персонажа Flux.2 Klein
- Воркфлоу Wan 2.2 Pose Control (об этом и пойдёт речь в данной статье)
Сразу показываю как выглядит результат каждого из методов:
Давайте также сравним результаты с закрытыми моделями. Дизайн персонажа они, конечно, воспроизвести в состоянии, но не стиль. Похоже, даже большие мультимодальные модели редактирования изображений не способны достичь истинной согласованности у персонажей - тогда как для видеомоделей это буквально "врождённое" свойство.
Ладно, идея вот в чём: попросить Wan сгенерировать последовательность из 80 кадров в режиме First-Frame-Last-Frame. Эта последовательность будет состоять из 4 частей:
- Персонаж просто стоит
- Персонаж двигается, копируя позу из референса
- Персонаж трансформируется в персонажа из изображения-референса позы
- Персонаж из референса позы находится в кадре
Наша цель — получить единственный кадр, в котором наш персонаж стоит/сидит/лежит в позе из референса, но ещё не успел трансформироваться в персонажа из этого референса. Для этого необходимо структурировать текстовый промпт таким образом, чтобы переход от первого кадра к последнему был максимально плавным, ага. Таким образом, информация о персонаже (дизайн и стиль) и информация о позе встречаются в середине последовательности кадров и дают нам желаемый результат (если повезёт).
Как писать структурированный промпт
Вот два промпта, использованных в примере выше:
Женщина с серебрянными волосами
Мужик с чёрной бородой
Описание персонажа повторяется, чтобы его можно было извлечь с помощью Apply Text Template из расширения comfy-mtb:
Можно извлечь описание персонажа и получить такой шаблон:
Женщина с серебрянными волосами
Мужик с чёрной бородой
Разберём 4 части этого промпта.
0s — Начальное описание
Здесь вы описываете первый кадр. В большинстве случаев достаточно 'is standing', но можно также указать начальную позу персонажа.
1s — Собственно позирование
Здесь вы указываете движения, которые персонаж должен совершить, чтобы перейти из начальной позы в целевую. Лучше всего работают простые движения (turns left, sits down, crouches, raises hand), перечисленные через запятую. Также можно добавить 'Camera follows his movement', если целевая поза требует другого угла камеры.
2s — Пауза перед переходом сцены
Всегда одинаковая: he/she keeps his pose frozen in place. Scene transitions into another scene. Часть 'Scene transitions into another scene' здесь наиболее важна — Wan 2.2 уважает эту границу (что удивительно, на самом деле).
3s — Привязка последнего кадра
Выглядит так: body transforms into another character <описание персонажа в последнем кадре>. Мы хотим, чтобы Wan 2.2 понял, что персонаж в начале видео отличается от персонажа в конце.
Практический пример
Отработаем полученные знания на практике. Вот наш персонаж и изображение с позой:
1. Начинаем с описания персонажа. Ничего сложного:
2. Следующий шаг - описание движений:
1. И наконец, пишем переход к последнему кадру:
К сожалению, это не срабатывает:
Главная причина в том, что тёмная одежда на целевом изображении не даёт модели "считать" позу. К счастью, это можно исправить в Flux.2:
Снова запускаем воркфлоу Pose Control, но уже с обновлённым промптом:
На этот раз результат значительно лучше:
Ссылка на воркфлоу (там есть заметка о рекомендуемом файнтюне Wan 2.2)
Несколько советов:
- Весь процесс работает лучше всего, когда между первым и последним кадром есть заметный контраст: разный цвет волос, цвет кожи, фон и т.д. Можно даже заранее обработать референс позы другой моделью - превратить его в фигуру-манекен, чтобы у Wan было больше шансов считать позу.
- Если некоторые элементы дизайна персонажа исчезают (перчатки, например, имеют свойство пропадать слишком рано), добавьте их в промпт с описанием персонажа, чтобы модель помнила об этом элементе дизайна.
- Если изображение персонажа и изображение-референс позы имеют разные размеры, попробуйте добавить "Camera zooms in capturing new view" или "Camera zooms out capturing new view".
Если разобрались как установить себе ComfyUI и Wan 2.2 посмотрите гайды типа этого:
Вот так.