Краткие выводы
Идеального, универсального рецепта не существует, т.к. спектр задач слишком широк, однако есть пункты на которых следует заострить внимание:
- Подсказка как и негатив должны быть грамотно составлены, акцент должен быть на тех вещах, где нейросеть может сфилонить и накосячить. Нейросеть сама по себе ленивая тварь, если её не заставить думать - она будет лепить "на отшибись". В основной подсказке следует прописывать не что-то абстрактное по типу HDR или high quality, а что-то более конкретное и делать акцент на тех моментах где могут быть ошибки генерации. В целом придерживайтесь правила не писать общими словами не отражающими суть эффекта который Вам необходим, но при этом перечислить важные элементы композиции, особенно лицо, руки, ноги и пальцы. Тем не менее, следует учитывать, что общий токен для лица, beautiful face на самом деле не является общим, он явно был задействован при обучении модели и поэтому служит не только для акцента на лице, делает его ближе к камере, а следовательно более проработанным, но и действительно более привлекательным. С акцентом внимания на лице как основной части композиции так же следует расписать все элементы лица, начиная от формы глаз и заканчивая эмоцией. Следует иметь ввиду, что разные модели по разному слушаются токенов и универсального рецепта не существует. Чуть ниже я дам свой вариант негатива нацеленного на общее повышение качества и устранение самых проблемных мест генераций человека, его следует корректировать дополняя в каждом конкретном случае, это лишь базис негатива.
- Обратите внимание на то, что Текстовые инверсии и Lora весьма эффективны в некоторых сценариях. Например когда нам нужно добавить то, что нейросеть не знает, наложить или убрать некий эффект, изменить стиль, вид или детализацию. И естественно, с помощью них можно избавиться от некоторых ошибок генерации.
- Применяйте ADetailer с небольшим описанием для более качественной автоматической обработки косячных лиц или глаз. А вот для итак хороших лиц применять нецелесообразно, есть шанс потерять стиль или приобрести стандартное лицо от модели.
- Используя маску в Inpaint можно перегенерировать только нужную область с максимальным контролем всех изменений и заметным улучшением деталей. При удалении объектов мы должны выделять объект полностью, параметры указаны в соответствующем разделе.
А вот рецепт "счастья" лучше разбирать на конкретных примерах, об этом далее.
Мой универсальный базис негатива
(worst quality:2), (low quality:2), (normal quality:2), dot, mole, lowres, cropped, jpeg artifacts, ugly, duplicate, morbid, mutilated, out of frame, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck
Исходники для быстрого доступа
Prompt девушка
A beautiful face,
(full-length image:1.6), LONG SHOT, full body,
((Summer Smith from Rick and Morty)), sitting on the couch and watching TV, (cartoon style), anime, wearing in a pink t-shirt, (big eyes), smile,
(muscular:1.3),
(shows a palm with five fingers:1.4),
long ponytail orange red hair,
Atey Ghailan, by Jeremy Mann, Greg Manchess, Antonio Moro, trending on ArtStation, trending on CGSociety, Intricate, High Detail, Sharp focus, dramatic, photorealistic painting art by midjourney and greg rutkowski, bokeh on background
Negative prompt: portrait, deformed, bad anatomy, disfigured, poorly drawn face, mutation, mutated, extra limb, urly, disgusting, poorly drawnhands, missing limb, floating limb, disconected limb, malformed hands, blurry, ((((mutated hands and fingers)))), watermark, watermarked, oversaturated, censores, distorted hands, amputation, missing hands, doubled face, obese, doubled hands
Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 10, Seed: 4, Size: 512x768, Model hash: 9aba26abdf, Model: deliberate_v2, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.7.0
Prompt мужчина
street, man drinks coffee, portrait of a bearded man with glasses and with a cigarette in his teeth
Steps: 24, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 27042016, Size: 768x1024, Model hash: ec41bd2a82, Model: photon_v1, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.7.0
Исходники должны быть в разных жанрах и обязательно содержать косяки для экспериментов с исправлением.
Для удобства можете перекинуть как саму картинку в SD, так и скопировать prompt
Варианты исправления
Существует несколько способов исправления недочётов, в том числе: лиц, пальцев, лишних конечностей и прочего, перечислим варианты начиная от простого но важного:
- Грамотное описание. Даже банальное перечисление элементов лица - даёт нейросети понять что мы нацелены приглядываться к этим частям и следовательно их нужно не лениться сделать как следует. А если грамотно подобрать токены - то будет вообще шикардос, одним из таких токенов является beautiful face - который сразу делает акцент на лице, если одновременно с ним прописать форму глаз, выражение лица, причёску, то результат выйдет ещё лучше.
- Хороший негатив, делает опять акцент на нужных нам частях и ненужных в них элементах или эффектах.
- Применение надстроек типа Textual Inversion, Lora и их аналогов направленных на устранение недочётов или добавления некоего эффекта.
- Применение специализированных расширений по типу ADetailer и Controlnet.
- "полуручная" правка с последующей перерисовкой на вкладке img2img.
Имейте ввиду, многое зависит от самой модели и настроек генерации. Иногда хороший результат получить несложно, просто сгенерировав несколько изображений на разных Seed. Однако это не путь самурая который гласит: "контроль и ещё раз контроль позволяют добиться внутреннего равновесия и единения с самим собой". А если проще - контроль позволяет сохранить композицию, а следовательно повысит уровень вашего Кунг-фу.
Необходимые Расширения
Для правки лица нам понадобятся ADetailer - расширение позволяющее в автоматическом режиме распознать части тела (лицо, руки, глаза) и применить к ним исправления с акцентом на введённое описание и негатив. Имеет кучу настроек, в том числе подключение отдельных моделей для перерисовки. Так же нам понадобится маска в режиме inpaint и всемогущий Controlnet.
В данном материале не рассматриваем замену лица, для этого есть отдельный материал.
Добавляем. Изменяем. Правим. Удаляем любые элементы
ADetailer
ADetailer
Adetailer - относительно хорошо справляется с исправлением лиц и глаз в автоматическом режиме, подробно об этом расширении рассказано в соответствующем МАТЕРИАЛЕ. С руками всё сложнее, но так же можно попытаться использовать данное расширение, но уже придётся крутить настройки.
Inpaint - исправление в маске (пример исправления глаз)
inpaint
Данный способ подходит не только для лица, а для всего на свете, например так можно сделать более чёткое вписывание наложенного на картину объекта или шлифануть криворукую генерацию. Для этого закидываем исходную картинку на вкладку Inpaint. выделяем маской нужную область и пишем описание заменяемой области. Настройки:
- Mask mode=Inpaint masked (рисовать в маске)
- Masked content = original (акцент при перерисовке на оригинал)
- Denoising strength = 0,75 (степень допустимого внесения изменений в оригинал). Если оригинал кривожопый - ставьте 0.75 иначе уменьшайте.
- inpaint area = only masked (увеличивает область рисования маски до указанного ниже разрешения, что позволяет детально проработать все мелочи)
- устанавливаем разрешение до которого увеличить область под маской, прежде чем его обрабатывать. Для SD1.5= 512х512 или 768х768. Для XL =1024х1024
Если выделенная область физически не похожа на элементы описанные в подсказке - то нужно использовать inpaint модель для генерации, либо на одной из вкладок ControlNet включить inpaint.
Жмём генерировать, в подсказку и негатив ничего не пишем. Сразу оговорюсь, что результат целиком и полностью зависит от Seed и ваших настроек - может выйти как лучше, так и хуже. Выделенная область перерисовывается исходя из силы с которой разрешено отступить от оригинала с помощью параметра Denoising strenght
.
Prompt
beautiful green eyes, long eyelashes, no makeup, looking at the camera
Negative prompt:
Steps: 24, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 4, Size: 768x768, Model hash: 9aba26abdf, Model: deliberate_v2, Denoising strength: 0.75, Mask blur: 4, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Version: v1.7.0
Удаляем лишнее
inpaint
Иногда требуется не перерисовать, а именно удалить объект или его часть. Рассмотрим пример на косячном человеке. Для удаления нам понадобится выпонить пункты и настройки:
- Закидываем картинку в img2img на вкладку inpaint
- Маской выделяем ненужные детали, деталь должна входить в зону маски полностью, вместе с тенями.
- из подсказки и негатива всё удаляем, если что-то там было
Настройки важные:
- Mask mode=Inpaint masked (рисовать в маске)
- Masked content=fill (допускает больше погрешностей с точностью маски, более органично вписывая оригинал в итоговый результат)
- Inpaint area=Whole picture (дабы лучше вписать оставшуюся часть под маской в общую картину).
- Проверяем соответствие разрешения, нажимаем на треугольник рядом с этими параметрами
- Denoising strength=1 (максимальная сила допустимых изменений)
- Включаем Cotrolnet и выбираем inpaint. Preprocessor=inpaint_only+lama, Model=control_v11p_sd15_inpaint (она одна единственная была на 02.2024)
Если всё же нам понадобится удалить только часть объекта в ущерб согласованности, то Masked content=original и Inpaint area=Only masked, а Controlnet будет брать больше роль inpaint модели для перерисовки, нежели модели которая удаляет объект.
Накладываем маску на вкладке inpaint. Учитываем что у объекта есть тени, поэтому берём с запасом.
Жмём генерировать, подсказка пустая. Пример маски и готовый вариант.
При удалении сложных объектов, нам как раз и пригодятся настройки Masked content=fill и Inpaint area=Whole picture. Благодаря этим параметрам у нас не просто удаляется объект, а согласованно перерисовывается та часть, которая была так же выделена, но не вошла в объект удаления. Объект удаления должен входить целиком.
Inpaint - полностью изменяем/добавляем (пример с генерацией новой причёски)
inpaint
Данный способ так же подходит не только для лица. Состоит из двух этапов: замена или добавление элемента, и второй этап включает в себя исправление косяков типа окантовки возле нового элемента. Для первого этапа закидываем исходную картинку на вкладку Inpaint. выделяем маской нужную область и пишем описание заменяемой области. Настройки:
- Mask mode=Inpaint masked (рисовать в маске)
- Masked content =fill (акцент на описании) или original (акцент при перерисовке на оригинал)
- inpaint area = only masked (увеличивает область рисования маски до указанного ниже разрешения, что позволяет детально проработать все мелочи) или Whole picture (обработка в том же разрешении что и основная картина - даёт больше согласованности, не так заметно что некая часть была заменена)
- Если выбран параметр inpaint area=only masked, то устанавливаем разрешение до которого увеличить область под маской, прежде чем его обрабатывать. Для SD1.5= 512х512 или 768х768, а для XL=1024х1024. А если выбран параметр inpaint area=Whole picture, то выбираем разрешение такое же как у оригинала.
- Denoising strength = 1 (чем ближе к единице, тем сильнее перерисовывает оригинал).
Если выделенная область физически не похожа на элементы описанные в подсказке - то нужно использовать inpaint модель для генерации, либо более простой вариант - на одной из вкладок ControlNet включить inpaint.
Накладываем маску на вкладке inpaint. Маска должна охватывать возможную область в которой будет размещаться новый объект.
Параметр Only masked padding, pixels = 64 (область в px за которую разрешено "заходить" в случае необходимости. Например локон волос может проходить вне маски, но в пределах допустимой области или размытие области стыка кожи будет происходить в указанных пределах создавая плавный переход)
В Controlnet желательно выставить Control Mode=My prompt is more important (приоритет на подсказку) - с этим параметром меньше ореола.
В подсказку пишем что хотим видеть в пределах маски. Например, я добавил "mullet hair" в подсказку. Полученный результат может иметь ореол вокруг вставки или другой косячок, что смотрится неестественно. Можно сделать ещё парочку генераций на других Seed, или можно перекинуть результат в главное окно inpaint, делаем более аккуратную маску по косячному месту, тут желательно делать поточнее. Из описания всё удаляем! Controlnet в режиме inpaint c Preprocessor = inpaint_global_harmonious, остальные настройки по умолчанию.
В сравнении оригинал и результат. Как видно, задник немного отличается от оригинала - но это тесты, один из сотни, стараться на каждом конкретном случае выводить маску и крутить Seed - не вариант. В боевом режиме, естественно и подсказка используется более качественная чем пару слов, и маска поточнее, и вариант выбирается из кучи генераций на разных Seed, что естественно скажется на улучшении качества.
img2img - исправляем руки
img2img
Полностью исправить руки во всех возможных вариантах - невозможно, пока невозможно на начало 2024г. Однако уже сейчас можно заметно улучшить результат генерации.
Если использовать вкладку img2img. то обязательно нам понадобится оригинальная подсказка и исходная модель генерации. Т.е. сразу после получения косяка с руками, мы перенаправляем изображение на вкладку img2img вместе с prompt (жмякаем специальной кнопку под сгенерированной картинкой). Включаем Controlnet, выбираем Depth с Preprocessor=depth_hand_refiner и Model=control_v11f1p_sd15_depth. Внимание на параметр Denoising strength=0,75 значение по умолчанию в данном конкретном случае подошло.
Важно что бы Controlnet распознал руки - при генерации рядом с "правленой" картинкой была картинка с маской рук.
Следующий способ позволяет лучше сохранить композицию и цвета, а так же нам НЕ понадобится оригинальный Prompt, однако придётся рисовать маску, в подсказке описывать руки и поправить пару моментов после генерации. Для этого необходимо закинуть картинку в inpaint, сделать маску на косяк местах, а в подсказку внести описание для замены, например "coffee mug in the hand". Настройки:
- Mask mode=Inpaint masked (рисовать в маске)
- Inpaint masked=fill (акцент при генерации на описании)
- Inpaint area=Whole picture (вписывает описание в маску с учётом всей картины, а не только того что находится под маской)
- Denoising strength=0,75 (по умолчанию, допустимая сила с которой перерисовывается область под маской), можно подкрутить в небольших пределах.
Небольшой косячок в области плеча можно легко исправить выделив маской, удалив из описания всё, отключив Controlnet и нажав генерировать.
Lora
lora
Lora (LYCORIS) - надстройка SD позволяющая встраиваться в основную модель генерации и изменять итоговое изображение, добавляя, удаляя, изменяя определённые элементы или всю картину. Lora делятся по версиям, для SD1.5, XL, Turbo и т.д. Подробнее про Lora в соответствующем материале по Lora.
Если рассмотреть на конкретном примере, то в данном случае результат очевиден, но есть нюанс - всё зависит от конкретного стечения обстоятельств, без гарантий на успех. Если сделать на других Seed, то мы получим и по 3 и по 6 пальцев, а так же вариант с тремя руками вместо двух.
Prompt
street, man drinks coffee, portrait of a bearded man with glasses and with a cigarette in his teeth, <lora:1.5_perfect hands:1>
Perfect Hands
Steps: 24, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 27042016, Size: 768x1024, Model hash: ec41bd2a82, Model: photon_v1, Hypertile U-Net: True, Hypertile VAE: True, Style Selector Enabled: True, Style Selector Randomize: False, Style Selector Style: base, Lora hashes: "1.5_perfect hands: 0b7bcde1eea9", Version: v1.7.0