Изучаем возможности Stable Diffusion, часть 2

Лонг для тех, кому интересны продвинутые возможности работы с нейросетью

Работа <a href="https://www.reddit.com/user/Gavmakes/" rel="nofollow noreferrer noopener" target="_blank">Gavmakes</a>. Запрос для генерации указан у пользователя на странице<br />
713713 показа
177K177K открытий
2323 репоста

Благодаря твоему гайду я уже неделю не могу оторваться от SD! Это какой-то наркотик для меня, по ряду причин, которые я быть может озвучу в своих статьях... Но возникли вопросы, которые я с ходу нагуглить не могу, может быть ты шаришь?
1) Почему при добавлении скобок и прочих знаков форматирования текста, результат может кардинально измениться в отрисовке? На что это влияет? Это какой-то способ выбрать стиль рисовки или что? Читал, что скобки влияют на вес сущности , но не смог найти этому визуального подтверждения. В моем случае на отображение влияет количество {{}}}} —-- )))(((( знаков, добавление всяких © ‘€ и т.п. Вот попробуй простой запрос "man sitting" - в обычном случае он рисует сидящего человека в разных вариациях при разных SEED. Выдели один из Сидов и добавь к запросу всякие знаки - результат будет разный. Почему? ?? Хотелось знать конкретнее, на что это влияет.
2) Есть статья или инструкция о том, как вообще ОНО понимает текст? Понимает ли контекст? Для меня момент не очевиден, ибо иногда оно рисует до ужаса логичное изображение, точно по описанию, а иногда ну полная хрень, где даже отсутствуют описываемые детали. Так как же конкретно оно видит описание? Надо ли описывать всё "по-человечески", типа "Человек сидит перед старым телеком и смотрит межгалактическое порно" или можно упростить "Человек, телек, порно" и результаты будут те же.
3) В сети вижу всякие гифки с анимированной работой нейронки.... Но я не нашел сборки ,которая могла бы перерендерить видео. Это получается они дробят анимацию на отдельные кадры и каждый кадр отдельно прогоняют?
4) Я не смог создать НИ ОДНОЙ нормальной генерации по запросу "Стрельба из лука", "Лучник", "Лук и стрелы" и прочие комбо. Такая же проблема наблюдается при описании работы с иными "бытовыми" предметами, будь то ножи или лопаты - всё рисуется максимально всрато. Как победить эту проблему? Надо обучать самому на миллионах изображений ножей и прочего?

Ответить

1) У Automatic1111 скобки реально влияют на то, как отрисовывается. Зафиксируй seed, а в запросе меняй только веса отдельных элементов, увидишь разницу. Чем больше скобок () - тем больше веротяность того, что элемент будет на изображении/этих элементов будет больше. Если [] - наоборот. Но можно просто писать конструкции типа "натюрморт, (яблоко:1.5), ,(банан:0.5) ", вместо "натюрморт, (((((яблоко))))), [[[[[банан]]]]]"

2) и 4) На русском есть статья на хабре, но из нее я почти ничего понять не могу (https://habr.com/ru/post/693298/) .
Если своими словами - был датасет LAION5B - 5 миллиардов изображений всякой всячины с подписями. Посмотреть, что в нем как подписано - можешь вот тут https://rom1504.github.io/clip-retrieval/?back=https%3A%2F%2Fknn5.laion.ai&index=laion5B&useMclip=false. Подписи частенько не совпадают с тем. что изображено и в этом большая проблема.

На этом датасете учится CLIP - штука, которая сопоставляет изображение с текстом. Потом отдельно училась сама нейросеть Stable diffusion -, которая пытается так сделать четче случайный цветовой шум так, чтобы проявилось то изображение, которое распознает CLIP. Она пытается на каждом шаге делать так, что б CLIPу "нравился" результат все больше и больше. Но поскольку у CLIP представления о цели заданы небольшим набором изображений, которые еще и противоречить друг-другу могут, часто получается фигня.
Может просто так быть, что изображения c нужными тебе лучниками не попали в датасет и тогда придется дообучать через Textual Inversion|Hypernetworks|Dreambooth. Глянь, например, что выходит на archery - https://rom1504.github.io/clip-retrieval/?back=https%3A%2F%2Fknn5.laion.ai&index=laion5B&useMclip=false&query=Archery
Если ничего в похожего на твои хотелки нет - придется учить, да. Но там не миллионы изображений нужны для обучения. 20-50 достаточно.

В добавок к первому вопросу - в исходном датасете есть разметка под разные символы (смайлики, например). Включишь их в свой запрос - он постарается их учесть вне зависимости от сборки stable diffusion- https://rom1504.github.io/clip-retrieval/?back=https%3A%2F%2Fknn5.laion.ai&index=laion5B&useMclip=false&query=%E2%98%BA

3) Есть отдельно скачивыемые скрипты для такого https://github.com/deforum-art/deforum-for-automatic1111-webui . Сам не пользовался еще

Ответить