Как контролировать позу и вид персонажа при генерации в нейросети

Разберёмся вместе

Как контролировать позу и вид персонажа при генерации в нейросети

Если кто-то говорит, что "нейросети заменили художников еще вчера", то этот человек ни разу не пробовал сгенерировать что-то самостоятельно. Нейросеть действительно может нарисовать что угодно, без вопросов, собирай промт и генери. Но дело в том, что генерить сетка каждый раз будет что-то совершенно новое, что не подойдет к серьезной работе. Вот вы просите нарисовать вам девушку в белой рубашке и синей юбке на фоне заката, нейросеть нарисует. Но при том же самом запросе следующая картинка будет целиком отличаться — появятся уши, хвосты, изменится поза, положение, количество пальцев и так далее. Если у вас задача генерить какой-нибудь рандомный хентай, то вопросов нет, если же хотите рисовать одного и того же персонажа каждый раз в одной и той же одежде, лишь меняя позу — вы словите геморрой, а если задумаетесь о том, чтобы рисовать двух и более персонажей, то это вообще практически сейчас нереально по многим причинам.

Как контролировать позу и вид персонажа при генерации в нейросети
Один и тот же запрос, результаты, мягко говоря, разные
Один и тот же запрос, результаты, мягко говоря, разные

Итак, сеть может нарисовать нам что угодно (ну почти), только у нас нет инструментов для этого и вообще не ясно когда появятся. Если же есть желание попробовать сделать какой-то комикс, где набор персонажей и вы готовы помучаться, то можно попробовать поискать костыли.
Первое, что приходит на ум - это собрать свою Lora или Textual Inversion, это мини-нейросеть с весами чисто под вашего персонажа. Делается это для того, чтобы сетка в какой-то момент вместо запроса "девушка" не начала рисовать "собаку". Почему? Потому что сеть может, вот почему. Lora или Ti должны стремления сетки ограничить.

Как контролировать позу и вид персонажа при генерации в нейросети
Опять же, один и тот же запрос. Нейросеть может нарисовать двух собак, вместо одной, ну вот и нарисовала, почему нет?
Опять же, один и тот же запрос. Нейросеть может нарисовать двух собак, вместо одной, ну вот и нарисовала, почему нет?

Второй момент - поза. Да, ее можно контролировать через промт, делать позу стоя (standing), на коленях (seiza) и прочие doggystyle, но еще раз, если мы делаем не порнуху, а хотим тонко контролировать положение рук-ног, пальцев, головы и так далее, просто текстового запроса может не хватить. Совсем недавно появились два полезных расширения - Control Net и T2i-adapter, которые занимаются тем, что пытаются уговорить нейросетку "пожалуйста, рисуй по тому наброску, что я тебе дал" и в виде наброска может использоваться как скелет, так и набросок, нормалмапа и карта сегментации, а так же их комбинации.

Раз нейросеть не умеет рисовать нормально руки, то поможем ей, подсунув эскиз
Раз нейросеть не умеет рисовать нормально руки, то поможем ей, подсунув эскиз

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

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

Давайте еще раз зафиксируем, что сейчас нейросети - это достаточно кривая и нестабильная вещь, совершенно не подходящая для чего-то серьезного. Потому то, что дальше будет описано - это лишь исследование и пробы с тестами, результат тоже будет абсолютно далек от идеала, но дает чуть больше контроля и может кого-то натолкнет на более умные подходы и сделает мир немного лучше. Для стабилизации персонажа и его одежды я взял Лену из Бесконечного лета, которую выложил MikuIncarnator, он же 42 на dtf (за что ему спасибо).

Как контролировать позу и вид персонажа при генерации в нейросети

Для тестов Control-net я уже давно нащупал, что если через него передать эскиз, то довольно быстро можно получить "анимешный" вид или "мультяшную" стилизацию, стоит только чуть отпустить сетку, но это чревато тем, что будут теряться детали и меняться положение. Я же все же хотел больше контроля. Один из самых нормальных вариантов - подсовывать эскиз того, что хочешь получить, с различимыми формами. То есть если вы ждете, что там будет девушка с волосами и в школьной форме, то желательно это и накидать.

Эскиз подсовывается в cainy или hed с препроцессором, значения влияния на сеть 0.4-1.0
Эскиз подсовывается в cainy или hed с препроцессором, значения влияния на сеть 0.4-1.0
Чем больше уровень влияния, тем ближе к эскизу, но меньше анимешности. Хотя зависит от эскиза, надо тестировать.
Чем больше уровень влияния, тем ближе к эскизу, но меньше анимешности. Хотя зависит от эскиза, надо тестировать.

После недель мучений, очень приятно было видеть, как сетка разбирает то, что на эскизе и заполняет почти правильно (под почти правильно считается вероятность выше 10%). Но не будешь же каждый раз рисовать руками в 2д эскиз, хотелось бы это дело упростить и тут подходит уже 3д редактор. Достаточно отмоделить в очень простом лоу-поли то, что хотим получить, разделяя на зоны и части, заригать и двигать - и тогда после рендера будет получаться вполне неплохо.

Как контролировать позу и вид персонажа при генерации в нейросети
Как контролировать позу и вид персонажа при генерации в нейросети

Следующая проблема - с таким подходом некоторые части тела могут пересекаться и нейросеть не будет их понимать. Тут на помощь подойдет карта глубины, в control-net может поставить два обработчика и он будет подсказывать, что "это кисть и она ближе к камере, чем нога", что поможет нарисовать верно, а не положить кисть на бедро, например.

z-depth из 3д редактора
z-depth из 3д редактора

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

Сгенерировать такое чистым запросом будет очень тяжело.
Сгенерировать такое чистым запросом будет очень тяжело.
Лена подросла и почти рада вас видеть
Лена подросла и почти рада вас видеть

При этом никуда не теряется возможность освещать персонажа через img2img с использованием промта. Само собой, что и выражение лица можно контролировать текстом, тут рисовать что-то с нуля особо смысла не вижу.

Как контролировать позу и вид персонажа при генерации в нейросети
Как контролировать позу и вид персонажа при генерации в нейросети

Так же вариация этого метода дает возможность принудительно подсунуть нейросетке модель кистей рук и стоп, что так же поможет рисовать их верно.

Как контролировать позу и вид персонажа при генерации в нейросети

Обнаружилась и забавная особенность. Сетка Лены была натренирована на рубашку с юбкой, отчего чтобы ее "раздеть", пришлось принудительно писать теги "nude, completly nude". Без них даже нарисованная без одежды рисовалась одежда, что полезно на самом деле.

Как контролировать позу и вид персонажа при генерации в нейросети
Как контролировать позу и вид персонажа при генерации в нейросети

Что же мы получаем в итоге? Всего лишь возможность крутить персонажа и двигать его части тела так, как мы хотим, чего не добиться при просто использовании промта или костей cnet. Именно связка эскиза и карты глубины дает хоть какую-то степень контроля.

Как контролировать позу и вид персонажа при генерации в нейросети

Очевидно, что нейросетка достаточно мощная вещь, но инструментов для работы с ней пока что нет и не скоро будут. Что-то получить выходит лишь через адские костыли. Но потенциал виден, как пример, тут сетка прекрасно понимает, что волосы - это волосы и рисует их как надо, в итоге получается Лена Славявна.

Как контролировать позу и вид персонажа при генерации в нейросети

Для тех, кто не умеет рисовать и моделировать, тоже есть вариант - взять vroid, там создается довольно грубая 3д модель, а потом через нейросеть обработать с огрублением параметров. Отдельно расскажу, если кому-то это будет нужно. Тот же Cnet, но через img2img с Denoize в районе 0.4-0.8.

Как контролировать позу и вид персонажа при генерации в нейросети

Надеюсь, это окажется кому-то полезным. Всем всего хорошего.

Лена говорит вам "пока".
Лена говорит вам "пока".

Скрины sd и Cnet, если у кого-то остались вопросы.
upd: подумалось, что вместо hed при использовании цветной модели можно использовать seg обработку, при этом будет несколько плюсов. Первый - нет препроцесса и быстрее запустится, с cnet это проблема. Далее, можно разукрасить разным цветом разные руки, локоны и так далее, при повороте это меньше будет сливаться в кашу. Попробуйте, может лучше подойдет.

Как контролировать позу и вид персонажа при генерации в нейросети
Как контролировать позу и вид персонажа при генерации в нейросети
Как контролировать позу и вид персонажа при генерации в нейросети
8181
123 комментария

Ты хотя бы на свой бусти не зовёшь в конце поста лол

6
Ответить

я бедный нищщастный, у меня нет бусти, я просто хочу спать

9
Ответить

Комментарий недоступен

3
Ответить

Однажды нейронки научат рисовать анимации, а не картинки. И тогда изменится эпоха...

6
Ответить

так уже умеют, пока не так хорошо, но уверен к концу года будет уже лучше
https://imagen.research.google/video/

5
Ответить

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

Ответить

Нвидиа уже работает над этим;)

1
Ответить