/u/ - Университет

Имя
Email
Тема
Комментарий
Файл
Пaроль (Для удаления файлов.)

File: 1697567129841.jpg (354,25 KB, 1600x787, 1695745079090.jpg)

 No.215

Здесь будут выдержки из вопрос-ответов в треде ИИ-картинок из /b, чтобы не слились.
В основном буду писать по ComfyUI, но никто не мешает записывать по другим инструментам.

Новая (не такая уж и новая) плюшка для експлуатации нейросеток: ComfyUI
https://github.com/comfyanonymous/ComfyUI
Особый цимес, что совершенно не требует установки и пердолинга на Win10/11 + NVidia/CPU. Модели просто накидываются в папки, но можно указать пути, отличные от дефолтных.
Цимес 2: Воркфлоу записывается в EXIF файлов, так что вы всегда сможете слямзить настройки генерации или поделиться своими.
Цимес 3: Очень экономна к памяти, если генерация идет по сложной схеме.
Антицимес: В этом макаронном монстре черт ногу сломит.

ОЧень простой и доходчивый быстрый старт:
https://3dnews.ru/1092347/comfyui-v-dva-schyota-ili-priruchenie-makaronnogo-monstra

Плагины:
Плюс можно поставить плагины-костыли, например https://github.com/LucianoCirino/efficiency-nodes-comfyui

Разве что, я бы сразу менеджер добавил https://github.com/ltdrdata/ComfyUI-Manager
костылей любимых им поставил:
Efficiency Nodes - чтобы проще модели грузить
ControlNet Auxiliary Preprocessors - препроцессоры для контролнетов (это те которые из картинок делают наброски или openpose-человечков. Их можно сохранять и использовать потом вторично, а можно сразу на вход подавать)
ComfyUI-Custom-Scripts - по желанию, добавляет всякие удобности типа информации о лоре, сохранения workflow,
и модели TAESD Decoder, TAESD Encoder (для SD1.5), TAESDXL Decoder, TAESDXL Encoder (если XL использовать будешь) - это для быстрого предпросмотра во время генерации,
ControlNet - те которыми пользоваться будешь, если будешь (на SDXL свои контролнеты, что важно)
там ещё есть модельки разные, vae, sdxl и его рефайнер - можно что-то скачать не отходя от кассы.
Можно переименовать extra_model_paths.yaml.example в extra_model_paths.yaml и в нём указать пути до автоматика и его моделей, чтобы не разводить бардак на диске.

Напоминаю, что без моделей (те самые *.safetensors) нихрена не работает.
Модели брать тут:
>Склад моделек, где все навалено как попало, но зато удобно смотреть и много картиночек:
https://civitai.com

Еще бардачнее, и без картинок:
https://huggingface.co/

 No.216

File: 1697567294180-0.webp (141,91 KB, 1800x1433, workflow1.webp)

File: 1697567294180-1.webp (313,76 KB, 3193x1635, workflow3.webp)

File: 1697567294180-2.webp (145,25 KB, 2772x951, workflow4.webp)

File: 1697567294180-3.webp (339,15 KB, 2700x1670, workflow2.webp)

Обычное же использование довольно простое. Установка - скачал, распаковал… профит. Разве что, я бы сразу менеджер добавил https://github.com/ltdrdata/ComfyUI-Manager и костылей любимых им поставил:
Efficiency Nodes - чтобы проще модели грузить
ControlNet Auxiliary Preprocessors - препроцессоры для контролнетов (это те которые из картинок делают наброски или openpose-человечков. Их можно сохранять и использовать потом вторично, а можно сразу на вход подавать)
ComfyUI-Custom-Scripts - по желанию, добавляет всякие удобности типа информации о лоре, сохранения workflow,
и модели TAESD Decoder, TAESD Encoder (для SD1.5), TAESDXL Decoder, TAESDXL Encoder (если XL использовать будешь) - это для быстрого предпросмотра во время генерации,
ControlNet - те которыми пользоваться будешь, если будешь (на SDXL свои контролнеты, что важно)
там ещё есть модельки разные, vae, sdxl и его рефайнер - можно что-то скачать не отходя от кассы.
Можно переименовать extra_model_paths.yaml.example в extra_model_paths.yaml и в нём указать пути до автоматика и его моделей, чтобы не разводить бардак на диске.
В общем-то готово, можно брать и генерировать. Есть шаблон по умолчанию чтобы генерировать картинку по промпту.
На самом деле, чтобы пользоваться нормально, надо понимать что latent - это внутреннее представление картинки для модели, vae - это сетка которая превращает пиксельную картинку в latent и наоброт - latent в пиксели, clip - это та часть, которая строит соответствие текст-картинка. Ну и вроде понятно становится что происходит там - грузится модель, из неё в clip подгружаются слова промпта и всё это добро идет в семплер. В него же подаётся пустое latent-изображение - фактические - просто шум, из которого семплер за step шагов модель делает картинку, пока всё ещё latent. Дальше VAE превращает её в бутылку на экране.
И тут надо заметить, что если есть Efficiency Nodes, то можно сделать ещё проще и лаконичнее - как на первом пике. С ним же можно легко подгрузить лоры и контролнеты. Я дальше с ним буду делать, но можно и обычными нодами соединять.
А можно этот latent растянуть через ноду LatenUpscaleBy и подать на вход следующему семплеру вместо пустой шума. Тут важно снизить denoise примерно до 0,5 - это то насколько сильно убирается "шум" из входящей картинки. Если там будет 1, то он сгенерирует новую картинку, если 0 - получится растянутый вариант предыдущей. Значение подбирается опытным путём, но как правило между 0,4 и 0,6. Можно ещё раз подать, пока не надоест. Так получается разрешение картинки больше и деталей добавляется. Думаю что примерно так hires-fix в автоматике работает.
Работа с латентами позаоляет "клеить" рисунки друг на друга чтобы задавать композицию. Тут написано как https://comfyanonymous.github.io/ComfyUI_examples/noisy_latent_composition/
Опять же, каждую картинку можно генерировать своей моделью, своим промптом и лепить результат. Пример на третьей картинке. Тут разве что надо обратить внимание на то что тут уже adv. sampler, в нём делается только 3 первых шага и остаётся шум (return with leftover noise), а в последнем наоборот - начинается с 3 шага и шум не добавляется (add noise).
А ещё можно подгрузить вывод из одной модели в другую, например. А можно в апскейле задать число меньше единицы и будет уменьшение объекта. Например, маленький НЛО на горизонте - добиться его промптом сложно, а вот сгенерировать большой, уменьшить и вставить - уже проще.
Ну и загружать лоры и контролнеты вроде просто - подцепляем стак лор и в нём выбираем нужные лоры и их силу. С контролнетами так же - делаем стак, цепляем контролнет, цепляем картинку. Не забываем загрузить нужный контролнет - те которые рисуют по наброску не будут рисовать по openpose-манекенам.
Ну вот, для вката кажется достаточно. Дальше это надо потыкать и осознать, желательно не бездумно копипастя с рисунка. Ну а дальше можно уже всякие штуки наворачивать, типа допила рук и лиц, региональных семплеров когда когда обычных промптом уже недостаточно - таким вкатунов только пугать.

 No.217

File: 1697567405132-0.webp (154,67 KB, 1024x1024, xl_base.webp)

File: 1697567405132-1.webp (153,73 KB, 1024x1024, detailer.webp)

File: 1697567405132-2.webp (153,91 KB, 1024x1024, detailer_refiner.webp)

File: 1697567405132-3.webp (247,72 KB, 3542x2437, detailer_workflow.webp)

Вкину ещё своих невероятно важных и никому не нужных изысканий. В SDXL прикрутили отдельную модель рефайнер. Использовать её или нет каждый решает сам, я покажу как я её применяю на лица и что из этого получается. Заодно и у себя в голове уложу окончательно.
Для работы понадобится плагин ComfyUI Impact Pack - он устанавливается через менеджер.
Сначала подгружаем базовую модель, пишем промпт и запихиваем в ToBasicPipe (это просто контейнер, в который складываются модель, промпты, clip и vae, чтобы не перетаскивать их отдельно) и генерируем картинку, пока не понравится композиция. Как устраивает - переводим control after generate в fixed, чтобы не менять сид и получать одно и то же.
Потом аналогично подгружаем модель-рефайнер, засовываем всё в ToBasicPipe.
Дальше создаём ноду DetailerDebug (SEGS/Pipe) - можно и простой Detailer, но я предпочитаю контролировать что он там определил. На 4 картинке это большие красная и зеленая ноды (на самом деле, достаточно зелёной, красная там для сравнения - это детализация без рефайнера). К DetailerDebug подключаем basic_pipe от базовой SDXL и refiner_basic_pipe_ot от рефайнера; в image - картинку, которую рефайню, в segs - детектор - я предпочитаю Ultralitics, по-моему он лучше всего определяет. В самой ноде DetailerDebug можно настроить семплер и что важнее - refiner_ratio - какую часть от общего количества итераций будет работать рефайнер. Впрочем, на стандартных 0,2 обычно получается неплохо. Можно смотреть в процессе cropped и cropped_refined чтобы убедиться, что определилось то, что надо.
Пример первого попавшегося мужика прикладываю, вроде разница лиц заметна.

Можно похожим образом (другими моделями, но суть та же) крутить руки, но там приходится грузить больше моделей и с SDXL всё это бодро съедает оперативку, в 1.5 с этим лучше. С SD1.5 можно, кстати, делать то же самое без рефайнера, например чтобы косоглазие лечить.

 No.218

File: 1697567564242-0.webp (46,34 KB, 2097x904, nomod.webp)

File: 1697567564242-1.webp (67,36 KB, 1592x884, efficient.webp)

File: 1697567564242-2.webp (39,85 KB, 1457x636, impact.webp)

Q: Как в comfyui смешать две (и более) лоры? Чтобы они обе применялись на один рисунок?

A:
Если у тебя без плагинов то последовательно подключаешь как на 1 картинке. С плагинами, так тоже можно, кстати, выглядит разве что менее аккуратно.
Если установил Efficiency Nodes то как на второй - подключаешь LoRA Stacker и в него накидываешь нужные лоры.
Если устанавливал Impact Pack, то в нём есть ImpactWildcardEncode, в нём можно как в автоматике wildcard писать, включая всякие <lora:MyLora:0.5:2.0> на самом деле даже чуть больше, можно для каждого слоя лоры указывать вес - указываешь какие надо и он подгрузит их. Пример - на третьей картинке.
Я обычно вторым пользуюсь - мне удобно когда лоры отдельно и можно их регулировать не прикасаясь к промпту.

 No.219

File: 1697567784268-0.webp (850,21 KB, 7103x3294, upscale plugin.webp)

File: 1697567784268-1.webp (336,01 KB, 4284x2361, latent_upscale_by.webp)

Q:
Алсо вот такой вопрос: как в комфае улучшать изображение. Вот он нагенерил, вобщем мне нравится, но надо подправить и разрешение повыше. Как это сделать?
A:
Самое простое это через UpscaleLatenBy (или UpscaleLatent - но обычный апскейл растягивает до указанного тобой размера и могут пропорции поехать). Это работает из коробки. Так как места у него станет больше (условно говоря, было 1024x1024 пикселей, а стало 1536x1536), то заполнить их он может большим количеством деталей. Увеличиваешь размер в полтора раза и скармливаешь это семплеру снова, при этом обрати внимание на denoise. Если не вдаваться в подробности, это то, насколько сильно опираться на рисунок из предыдущего шага: 1 - это будет полностью новый рисунок, 0 - просто растянутый старый; по моему опыту, для увеличения в 1,5 раза как раз denoise 0,5 хорошо подходит, как минимум как начальное значение. Если чуть позанудствовать, то вся картинка из первого этапа представляется в виде "шума" который проходит через "фильтр" step раз. А denoise это то, насколько активно этот "фильтр" превращает "шум" в картинку по твоему запросу. Если надо - можно ещё раз провернуть подобную процедуру. Сильно увеличивать за раз не рекомендую - получился плохо и некрасиво. Пример как это работает - на первой картинке.
Но накидывать однообразные UpscaleLatent скучновато, особенно если хочешь сильно увеличить разрешение. Например 512x512 из SD1.5 модели хочешь растянуть на 1024x1024 (или 1024х1024 в 2048х2048). Да и вообще однообразно накидывать ноды неспортивно как-то, поэтому удобнее использовать апскейл из Impact Pack. Тут сначала почти всё то же самое - выбираешь модель, пишешь текст, запихиваешь в семплер. После этого получившийся latent подаешь на вход ноде Iterative Upscale (Latent). В этой ноде указываешь насколько хочешь растянуть картинку в итоге и за сколько шагов. В неё же подаешь PixelSampleUpscaleProviderPipe в котором задаешь параметры семплера для каждого шага. Из важного - там задаётся тот самый denoise.
Можно вместо Iterative Upscale (Latent) поставить Iterative Upscale (Image) - это подходит для случаев, если ты хочешь чужую картинку растянуть - чужого latent у тебя нет, тут декодер его получит из пиксельной картинки.
Примерно так это и работает, если без особых тонкостей.

 No.220

File: 1697567850481.png (12,95 KB, 1024x425, 1689244406095.png)

> как компьютер реагирует на странные слова?

A:
Как я это понимаю, у каждой рисовательной модельки внутрях есть текстовая моделька, которая преобразует текст промпта в те данные, которые уже непосредственно нейросеть работает. То есть она преобразует любые слова в цифры и по ним нарисуется что-то. Насколько оно "адекватно" преобразуется, зависит от того как обучалась моделька. Вангую, в ответ на "странные" слова которых не было в обучении моделька среагирует тем, что у нее есть по ближайшим "схожим" буквосочетаниям.
Если действительно интересно, вот статейка которая показалась мне довольно доходчивой, попробуй ознакомиться. Она про СД1.5, но в СДХЛ качественно то же самое с некоторыми нюансами, как я понимаю.
https://stable-diffusion-art.com/how-stable-diffusion-work/

 No.223

File: 1697716384049-0.webp (84,36 KB, 1844x706, 1.webp)

File: 1697716384049-1.webp (247,53 KB, 2814x1977, 2.webp)

File: 1697716384049-2.webp (238,3 KB, 2812x1970, 3.webp)

File: 1697716384049-3.webp (121,53 KB, 1536x1024, res.webp)

Ну и ну, вот уж где не ждал.
Региональный семплер, как из названия можно догадаться из названия рисует заданными моделями в заданной маской области. Зачем это нужно, когда уже придуман региональный промпт? Региональный промпт ограничивает действие слов в указанной области. Региональный семплер же, позволяет задать параметры генерации в нужном регионе. То есть с ним можно указать не только слова, но и применять к области лоры, контролнеты, выбирать модели с нужной стилизацией.

Для примера, я совмещу реалистичную модель с анимешной. Обе модели на SD1.5, но для SDXL разницы не будет особой.
Для начала просто сгененрирую на реалистичной модели женщину на фоне города. Это не обязательный этап, но, во-первых, здесь создаётся картинка нужного размера (в моём случае 768*1024), во-вторых позволяет не лажануть с пропорциями, когда будешь обводить маской. Бонусом попробуем эту самую женщину заанимешить.

Картинка готова. Переносим её в новый LoadImage, замазываем нашу подругу в MaskEditor'е. После этого грузим модели - одну для города, вторую для персонажа. Запихиваем всё нужное в BasicPipe и оттуда - в KSamplerAdvancedProvider. Из них в TwoAdvancedSamplersForMask - не перепутай с TwoSamplersForMask.
Обычный TwoSamplersForMask рисует по очереди, то есть сначала сгенерирует город, потом по маске будет генерировать персонажа. Из-за этого возможны проблемы на границах маски. TwoAdvancedSamplersForMask рисует обе картинки последовательно каждый шаг генерации. Благодаря этому одно в другое вписывается достаточно незаметно.
Итак, модели в TwoAdvancedSamplersForMask загружены, маска тоже, пустой latent нужного размера (такого же как маска) тоже. Overlap_factor это насколько модели будут пересекаться, значение по умолчанию обычно работает неплохо. Декодируем, смотрим на результат.

Ну и тот самый бонус. Допустим, хочется применить к исходной картинке другие модели. Для этого на вход latent надо подать не пустое изображение, а уже готовое - можно через VAE Encode кодировать ту картинку, в которой маску рисовали, а можно - взять из выхода KSampler, в котором исходную картинку генерировали. Снижаем denoise до нужного значения и генерируем. Можно заметить, что хоть я и обвёл не очень аккуратно (например, пропустил прядь волос) сгенерировалась картинка довольно цельно.



[Назад][Наверх] Catalog [Post a Reply]
удалить пост [ ]