Pull to refresh

Comments 29

А вы заказы принимаете? ) моя девушка наверняка захочет такое)

Пытался, но так и не смог продвинуть эту услугу среди населения :) Если интересно, то TG в профиле есть, можем обсудить.

ReActor, если нужно просто лицо девушки на генерацию воткнуть.
Автор статьи пишет больше об обучении лоры на примере делающем определенное лицо, но использовать лору для лица смысла не то, что бы много, когда есть более простой способ - реактор. Лора мощный инструмент, когда нужно сделать то, что не понимает модель (ну типо если модель не видела никогда как выглядит яблоко, то она нарисует его примерно так же странно, как в страдающем средневековье рисовали заморских животных чисто по описанию словесному, никогда их не видев).
Я лично лору использую, например, когда надо сделать какие то детали. Ну допустим модель понятия не имеет как выглядят порезы, синяки, ссадины, или как выглядит порванная одежда, разбитые машины и т.д. Тогда берется и делается лора, и модель начинает понимать, как оно выглядит.
Автор написал что "лора встраивается межу слоями", но это не совсем так. Лора фактически добавляет к модели немного дополнительных изображений с описанием что это, что бы модель увидела то, чего никогда не видела.

ReActor, если нужно просто лицо девушки на генерацию воткнуть.

Можно ссылочку? А то гугл ничего не находит. Это что-то типа roop? Если да, то лора на порядок лучше результаты выдаёт, имхо.

Лора мощный инструмент, когда нужно сделать то, что не понимает модель

Я лично лору использую, например, когда надо сделать какие то детали

Это просто другой юз кейс. Фактически нейросеть точно так же не знает, как нужный нам человек выглядит, поэтому через лору мы эти знания ей прививаем.

Автор написал что "лора встраивается межу слоями", но это не совсем так.

Это была больше попытка втиснуть краткое техническое объяснение.

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

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

В общем, да, погуглил и нашёл. Реактор - это форк roop.

Микросравнение.

База
База
База с лорой
База с лорой
Фото для переноса лица
Фото для переноса лица
База с roop
База с roop
База с reactor
База с reactor

В общем, на текущий момент roop и его производные и близко с лорами рядом по уровню качества не стоят. И ограничений у них слишком много.

Например, вся графика уже точно отсекается. Выглядит, как какой-то прикол. Форма лица, волосы и все прочие особенности внешности никак не учитываются. В общем, если у вас там какое-то коллективное фото, где на расстоянии в 5 метров от объектива стоят 20 человек и тебе нужно заменить лицо одного из них, то roop справится. А если ты хочешь именно создавать какой-то более-менее уникальный контент с персонажем желаемой внешности, то тут только лоры.

Если мы говорим о "лицевых" лорах, то там есть сложности. Лора так или иначе не только на лицо накладывается, но и влияет на все изображение, так как мы не знаем, что из лоры берет нейросеть, только лицо, или и что то другое (и как правило и что то другое тоже). Отсюда когда мы берем лору с лицом, то часто это может сломать генерацию, особенно если мы делаем сложную сцену (регионал промптер, маски, много КонтролНета и прочее). Что бы такого не произошло и что бы все работало нормально, лору правильней вставлять в качестве дополнительного промта в АдДетайлер, а не пихать в основной промпт, и тогда при фиксе лиц (инпейнте) при помощи АдДетайлера мы получим корректный результат, не влияющий на генерацию. Но тогда это ничем по своей сути не отличается от РеАктора.
Повторюсь, что проблема лицевых лор не в том, что они не делают лицо, а в том, что они не дают сделать персонажа нужного, они делают персонажа таким, как в лоре (прическа и т.д.). Ну и у вас в примера тому пример. Вот сделайте вашу даму с лицом, но в таком фентезийном облачении, как на последнем кадре. Будет очень сложно, лора будет вмешиваться и уперто наряжать персонажа в зеленую футболку, немного стилизуя ее. И разница между "база" и "база с лорой" тому подтверждение. Персонаж утерян. Что бы получить такого персонажа вы будете вынуждены запихнуть лору в аддетайлер. А тогда это ничем не отличается от реактора по своей сути, просто чуть другой результат будет.

Вот просто пример лоры лицевой. Мне надо добавить растекшуюся тушь. Персонаж - мулатка (темненькая). Но лора обучена на белых женщинах. И в итоге при добавлении лоры я получаю мулатку с высветленным лицом, которое смотрится не естественно. Я это к тому, что лора добавляет не только то, что нужно, но и все остальное, на чем она обучена. И что бы получить мулатку с растекшейся тушью, мне надо обучать лору на мулатках. И даже так, если я попытаюсь на своего конкретного персонажа добавить растекшуюся тушь, то получиться наложение лиц (усредненное лицо из лоры с растекшейся тушью) на лицо персонажа, и получиться так себе опять же. Так что с лорами довольно сложно, в том плане, что они влияют на весь кадр, и значительно, а не только на те детали, которые нужны.

Да, ты прав, лора сильно влияет на всю сцену целиком и ограничить область её влияния сложно. Но всё же сделать нужного персонажа мы можем, правда с некоторыми ограничениями. Например, если у нас уже есть изображение с нужным персонажем, то кидаем его в ControlNet, там включаем Canny, к нему добавляем Tile по желанию. В зависимости от весов обоих моделей получится что-то подобное тому, что ниже (я взял базу из картинок выше). По-моему, вполне аутентично: соответствует как изначальной картинке, так и внешности персонажа.

Вот сделайте вашу даму с лицом, но в таком фентезийном облачении, как на последнем кадре.

С этой задачей такое решение справилось отлично, я считаю, особенно с учётом того, что я потратил на него 30 секунд. Уверен, если чуть подольше повозиться, можно ещё сильнее поднять уровень сходства.

В общем, сложно добавить лору к уже имеющемуся изображению и не похерить его. С ControlNet сделать это всё ещё не сильно просто, но уже возможно.

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

По-моему вы как-то не так работаете с ReActor, там ведь доступна не одна модель реставрации лица, в данном случае получилась связка ReActor+GFPGAN+Inpaint (для замены лица в зоне маски и выравнивания макияжа):
Если правильно использовать reActor - то это куда быстрее и во многих случаях лучше, чем лора, особенно если идёт работа с качественной моделью

ReActor+GFPGAN+Inpaint
ReActor+GFPGAN+Inpaint

Насколько я вижу, я ровно такое же изображение в качестве примера выше и привёл, разве нет? Лично меня абсолютно не устраивает такой результат, и он ни в какое сравнение не идёт с лорами, как по мне. Заменять не на фотографиях смысла мало, да и для хорошего сходства нужно, чтобы формы лица цели и модели совпадали. А так просто получилось не пойми что.

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

Не совсем понимаю, что ты имеешь в виду под разными вариациями identity.

В случае обучения модели GUI нужен только для удобного управления параметрами, а при старте обучения под капотом запускается скрипт accelerate launch --num_cpu_threads_per_process=2 "./train_network.py" --enable_bucket --min_bucket_reso=256 --max_bucket_reso=2048 <...>, так что в целом ничего не мешает запускать его вручную или из другого скрипта.

В случае генерации изображений у AUTOMATIC 1111 есть API, если запускать его с флагом --api. Так что его в целом тоже можно дёргать из каких-то внешних скриптов.

Разный результат
На вашем примере что-то с глазами не так, с тенями вокруг них, украшения и прочие микродетали изменились из-за применения кодформера на всё изображение
В моём пример всё нормально с этим и схожесть, как по мне, хорошая
Ваша лора слишком изменила референсное изображение
Лора или должна быть обучена на весьма качественных тематических моделях, или проще использовать замену лица, можно по маске, чтобы кодформер или gfpgan не влиял на остальные детали изображение
Прическу прописать в запросе так вообще не проблема
Поза контролнетом

На вашем примере что-то с глазами не так, с тенями вокруг них, украшения и прочие микродетали изменились из-за применения кодформера на всё изображение

Вот именно, что это микродетали, лично в моём случае они не сильно сказались на общем восприятии изображения ¯_(ツ)_/¯

схожесть, как по мне, хорошая

Честно говоря, я по правой картинке в жизни бы не догадался, что это за человек, даже зная, кто это должен быть.

Ваша лора слишком изменила референсное изображение

Я в другом комменте привёл примеры, где был отлично сохранён референс, имхо.

Прическу прописать в запросе так вообще не проблема

А форму лица как в запросе прописать? Без этого сходство будет неполноценным.

проще использовать замену лица

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

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

А если ставить целью изменить внешность человека на уже существующем изображении, то и идти к этой цели нужно иными путями. И то я уже привёл беглые примеры того, как с использованием ControlNet этого можно достигнуть.

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

Десять минут просмотра его видео на удвоенной скорости дали больше, чем многочасовое изучение англоязычных гайдов по LORA/Textual Inversion. И дело не в языке, а в практическом опыте и понимании вопроса.

И если я ещё могу предположить, почему он даёт такие хорошие результаты, то вот в случае со вторым чекпойнтом у меня нет практически никаких предположений.

Скорее всего этот чекпоинт уже "знал" этот концепт, поэтому дообучить его было проще, чем обучить с нуля. Интересно было бы посмотреть на график loss в обоих случаях.

Однако повышать до упора, пока не упрётесь в предел по VRAM, нет смысла, так как в один момент наступает точка, после которой время обучения уже не падает, а потребление VRAM всё так же растёт, и если у вас много VRAM, то эта точка может наступить относительно рано.

Потому что упор идёт не только на объём VRAM, но и на количество CUDA ядер.

Ещё можно отметить такие полезные опции как Color и Flip augmentation. Color augmentation случайно меняет оттенок изображения (hue) при каждой итерации (полезно при обучении лоры на стиль или если концепт персонажа это позволяет).

Flip augmentation случайно зеркалит изображение. Некоторые искусственно увеличивают размер датасета, добавляя в него отзеркаленные копии изображений. Этот параметр позволяет избежать этого, да и даёт лучшие результаты, особенно если размер датасета небольшой.

Один нюанс — cache latents при включении этих опций работать не будет.

С CLIP Skip при обучении интересная вещь. В гайдах обычно пишут, что если обучаете лору на реалистичного персонажа, то ставьте этот параметр равный 1. Один раз случайно поставил CLIP Skip 2 и заметил это под конец обучения. Ну, думаю, ладно — посмотрю, что получится. И получил просто замечательные результаты. Причём эта лора прекрасно работала как с реалистичными моделями, так и с полу-реалистичными и с аниме моделями (CLIP Skip 2 при генерации), несмотря на то что она обучалась на базовой SD 1.5. Потом попробовал переобучить эту же лору с CLIP Skip 1 — результаты на полу-реалистичных и аниме моделях были гораздо хуже.

Скорее всего этот чекпоинт уже "знал" этот концепт, поэтому дообучить его было проще, чем обучить с нуля. Интересно было бы посмотреть на график loss в обоих случаях.

Это график loss с применением регуляризационных изображений
Это график loss с применением регуляризационных изображений
Это график loss из сравнения чекпойнтов
Это график loss из сравнения чекпойнтов

Тут loss вообще ни о чём не говорит, так что я на него и не смотрел, делая выводы. Просто было странно, что тот же Dreamshaper показал результаты хуже. Возможно, есть ещё какие-то подобные чекпойнты, которые хорошие результаты покажут, а я лишь наткнулся на один из них. Но наткнулся вполне удачно :) Потому что я раньше всегда просто на Realistic Vision 2.0 обучал и без применения регуляризации, такая модель почти все чекпойнты сразу покрывала. А если регуляризацию к такой модели подключить, то уже не на всех графических чекпойнтах красиво получается, так что тут тот второй чекпойнт очень к месту пришёлся.

Flip augmentation случайно зеркалит изображение. Некоторые искусственно увеличивают размер датасета, добавляя в него отзеркаленные копии изображений. Этот параметр позволяет избежать этого, да и даёт лучшие результаты, особенно если размер датасета небольшой.

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

С CLIP Skip при обучении интересная вещь.

У меня с Clip Skip тоже были противоречивые ситуации. В сравнениях, которые проводил в рамках гайда, существенной разницы не было, но на практике с Clip Skip 1 часто получалось хуже. Видимо, нужно было в том сравнении большую выборку чекпойнтов сделать, а не 2, как во всех остальных. Но я просто припёкся уже к некоторым настройкам, грубо говоря, так что страшно менять. С Clip Skip 2 много хороших результатов и в реализме, и в графике было, так что попытался обосновать этот выбор :)

Если у вас слабая видеокарта, то вместо локальной установки можете воспользоваться сервисами вроде Google Colab и RunPod.

А не слабая видеокарта - это какая? Несколько месяцев назад читал статьи про переобучение нейросетей генерирующих изображения, там упоминались не то 32 гигабайта, не то 100 гигабайт памяти на борту.

Комфортно работать уже можно начиная с 2060 8Гб. Хотя я знаю человека, который работает на 1060 6Гб.

Только 8 гиг мало на XL модели, а они определенно заслуживают внимания. Отсюда "комфортно" начинать с 16 гиг. А таких карт не то, что бы много. Сейчас правда нвидиа заметила что нужно рынку, и выкатывает 4060 на 16 гиг, так как стало очевидно, что все упирается не в CUDA, а в память, так что дальше будет лучше. Но до тех пор особо выбора не то, что бы много. На своем опыте, карта с 8 гигами иногда упирается в память, особенно когда начинаешь апскейлить, аутпеинтить и т.д. Это на 1.5, на XL без вариантов, XL просто не стартует. 3060 на 12 гиг полностью хватает для любой задачи на 1.5, и почти хватает на SDXL модель (иногда упирается в память все же на некоторых задачах). Но там слабовато по CUDA, на XL модели рендерит вечность картинку.

XL просто не стартует

Когда у меня была 2060 Super на 8Гб, то с SDXL никаких проблем не испытывал — и high res. fix, и апскейл, и лоры, и контролнеты. И на автоматике и на комфи. Главное чтобы в параметрах запуска стоял xfromers и medvram. И ещё я бы рекомендовал использовать sdxl_vae_fp16_fix, благодаря которому можно генерировать без использования параметра no-half-vae (из-за которого существенно падает производительность и увеличивается расход памяти).

C medvram на SDXL 3060Ti 8гб чудесно генерит 1024х1024 без каких либо трюков и почти до 2816х3584 c TiledVAE. С апскейлами, инпейнтами, контролнетами и прочим добром. А если надо еще сильнее скейлить — то там уже потайловый Ultimate SD Upscale с тайлами под 2048*2048 (с включенным tailed vae конечно) чтобы швов поменьше.

В идеале карточка минимум 20-ой серии от Nvidia, поддержка AMD есть не везде и не очень хорошая. У меня на 1080 Ti на одну модель уходило порядка 7 часов, но там ещё можно было оптимизировать часов до 4-5, я думаю. Потом перешёл на 4080, сейчас обучение модели, как в гайде, занимает 15-30 минут. Если смотрим именно на память, то, задавшись целью, можно обучить и на 6 Gb, но лучше иметь не меньше 8 Gb. Местами в гайде я приводил сравнения того, как тот или иной параметр влияет на рост потребления памяти, так что можно посмотреть.

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

Sign up to leave a comment.

Articles