ControlNet: A Complete Guide¶
Первоисточник
Эта статья представляет собой перевод данного англоязычного руководства редакции от 16 марта 2024 года:
ControlNet - это нейросеть, которая контролирует генерацию картинок в Stable Diffusion, добавляя дополнительные условия. Подробности можно найти в статье Adding Conditional Control to Text-to-Image Diffusion Models от Lvmin Zhang и его коллег.
ControlNet полностью меняет правила игры. С его помощью можно, например:
- Задавать позы людей.
- Копировать композиции с других картинок.
- Генерировать похожее картинки.
- Превращать каракули в профессиональные изображение.
В этой статье ты узнаешь всё, что нужно, про ControlNet.
- Что такое ControlNet и как он работает.
- Как поставить ControlNet на Windows, Mac и Google Colab.
- Как пользоваться ControlNet.
- Объяснение всех моделей ControlNet.
- Несколько примеров использования.
Этот гайд про ControlNet для Stable Diffusion v1.5. Для ControlNet с SDXL смотри отдельный гайд.
Что такое ControlNet?¶
ControlNet - это нейросетевая модель для управления моделями Stable Diffusion. Вы можете использовать ControlNet с любыми вариантами моделей Stable Diffusion.
Основной способ использования моделей Stable Diffusion - это text-to-image (txt2img). Он использует текстовые промпты в качестве условия (conditioning) для управления генерацией изображений, чтобы вы могли создавать изображения, соответствующие текстовому описанию.
ControlNet добавляет еще одно условие в дополнение к текстовому промпту. Это дополнительное условие может принимать различные формы в ControlNet.
Позвольте мне показать вам два примера того, что может делать ControlNet: Управление генерацией изображений с помощью (1) обнаружения краев и (2) обнаружения позы человека.
Пример обнаружения краев¶
Как показано ниже, ControlNet принимает дополнительное входное изображение и обнаруживает его контуры с помощью детектора краев Canny. Затем изображение, содержащее обнаруженные края, сохраняется как карта управления (control map). Она подается в модель ControlNet в качестве дополнительного условия к текстовому промпту.
Процесс извлечения определенной информации (в данном случае краев) из входного изображения называется аннотацией (в исследовательской статье) или препроцессингом (в расширении ControlNet).
Пример обнаружения позы человека¶
Обнаружение краев - не единственный способ предварительной обработки изображения. Openpose - это быстрая модель обнаружения ключевых точек человека, которая может извлекать позы человека, такие как положения рук, ног и головы. См. пример ниже.
Ниже представлен рабочий процесс ControlNet с использованием OpenPose. Ключевые точки извлекаются из входного изображения с помощью OpenPose и сохраняются в виде карты управления, содержащей положение ключевых точек. Затем она подается в Stable Diffusion в качестве дополнительного условия вместе с текстовым промптом. Изображения генерируются на основе этих двух условий.
В чем разница между использованием детектора краев Canny и Openpose? Детектор краев Canny извлекает края объекта и фона в равной степени. Он стремится более точно передать сцену. Вы можете увидеть, что танцующий мужчина превратился в женщину, но контур и прическа сохранились.
OpenPose обнаруживает только ключевые точки человека, такие как положение головы, рук и т.д. Генерация изображения более свободна, но следует исходной позе.
Приведенный выше пример сгенерировал женщину, прыгающую вверх, с левой ступней, указывающей в сторону, в отличие от исходного изображения и изображения в примере с Canny Edge. Причина в том, что обнаружение ключевых точек OpenPose не определяет ориентацию ступней.
Установка Stable Diffusion ControlNet¶
(Инструкции обновлены для ControlNet v1.1)
Давайте пройдем через процесс установки ControlNet в AUTOMATIC1111, популярном и полнофункциональном (и бесплатном!) графическом интерфейсе Stable Diffusion. Мы будем использовать это расширение, которое является стандартом де-факто для использования ControlNet.
Если у вас уже установлен ControlNet, вы можете перейти к следующему разделу, чтобы узнать, как его использовать.
Установка ControlNet в Google Colab¶
Примечание от переводчика
Данное руководство предлагает запускать коллаб для AUTO111, но эта возможность, в настоящий момент, блокируется гуглом.
Использовать ControlNet с блокнотом Stable Diffusion Colab в одно нажатие из нашего руководства по быстрому старту очень просто.
В разделе Extensions блокнота Colab поставьте галочку напротив ControlNet.
Нажмите кнопку Play, чтобы запустить AUTOMATIC1111. Вот и все!
Установка ControlNet на Windows PC или Mac¶
Вы можете использовать ControlNet с AUTOMATIC1111 на Windows PC или Mac. Следуйте инструкциям в этих статьях, чтобы установить AUTOMATIC1111, если вы еще этого не сделали.
Если у вас уже установлен AUTOMATIC1111, убедитесь, что он обновлён до последней версии.
Установка расширения ControlNet (Windows/Mac)¶
-
Перейдите на страницу Extensions.
-
Выберите вкладку Install from URL.
-
Вставьте следующий URL в поле URL for extension's repository.
https://github.com/Mikubill/sd-webui-controlnet
-
Нажмите кнопку Install.
-
Дождитесь сообщения о подтверждении установки расширения.
-
Перезапустите AUTOMATIC1111.
-
Посетите страницу моделей ControlNet.
-
Загрузите все файлы моделей (имя файла заканчивается на .pth).
(Если вы не хотите загружать их все, можете пока загрузить модели openpose и canny, которые используются чаще всего.)
-
Поместите файл(ы) моделей в каталог models расширения ControlNet.
stable-diffusion-webui\extensions\sd-webui-controlnet\models
-
Перезапустите webui AUTOMATIC1111.
Если расширение успешно установлено, вы увидите новый сворачиваемый раздел на вкладке txt2img под названием ControlNet. Он должен находиться прямо над выпадающим меню Script.
Это указывает на успешную установку расширения.
Установка T2I-Adapters¶
T2I адаптеры - это нейросетевые модели для обеспечения дополнительного управления генерацией изображений диффузионных моделей. Они концептуально похожи на ControlNet, но имеют другой дизайн.
Расширение A1111 ControlNet может использовать T2I адаптеры. Вам нужно будет загрузить модели здесь. Возьмите те, имена файлов которых имеют вид t2iadapter_XXXXX.pth
Их функциональность во многом пересекается с моделями ControlNet. Я буду рассматривать только следующие две:
Поместите их в папку моделей ControlNet.
stable-diffusion-webui\extensions\sd-webui-controlnet\models
Обновление расширения ControlNet¶
ControlNet - это расширение, которое быстро развивается. Нередко обнаруживается, что ваша копия ControlNet устарела.
Обновление требуется только в том случае, если вы запускаете AUTOMATIC1111 локально на Windows или Mac. Блокнот Colab на сайте всегда использует последнюю версию расширения ControlNet.
Чтобы определить, является ли ваша версия ControlNet актуальной, сравните номер версии в разделе ControlNet на странице txt2img с номером последней версии.
Вариант 1: Обновление из Web-UI¶
Самый простой способ обновить расширение ControlNet - использовать графический интерфейс AUTOMATIC1111.
- Перейдите на страницу Extensions.
- На вкладке Installed нажмите Check for updates.
- Дождитесь сообщения о подтверждении.
- Полностью закройте и перезапустите AUTOMATIC1111 Web-UI.
Вариант 2: Командная строка¶
Если вы хорошо знакомы с командной строкой, вы можете использовать этот вариант для обновления ControlNet, который дает вам уверенность в том, что Web-UI не делает чего-го лишнего.
Шаг 1: Откройте приложение Terminal App (Mac) или приложение PowerShell (Windows).
Шаг 2: Перейдите в папку расширения ControlNet. (Измените соответствующим образом, если вы установили в другом месте)
cd stable-diffusion-webui/extensions/sd-webui-controlnet
git pull
Использование ControlNet - простой пример¶
Теперь, когда у вас установлен ControlNet, давайте рассмотрим простой пример его использования! Позже вы увидите подробное объяснение каждой настройки.
Чтобы вы могли следовать нижеприведённому руководству, у вас должно быть установлено расширение ControlNet. Вы можете убедиться в этом, найдя секцию ControlNet в нижней части интерфейса.
Нажмите на каретку справа, чтобы развернуть панель ControlNet. Она покажет все настройки и холст для загрузки изображений.
Я буду использовать следующее изображение, чтобы показать вам, как использовать ControlNet. Вы можете скачать его, чтобы следовать данному руководству:
Настройки Text-to-Image¶
ControlNet будет использован восместно с моделью Stable Diffusion. В выпадающем меню Stable Diffusion checkpoint выберите модель, которую вы хотите использовать с ControlNet. Например, выберите v1-5-pruned-emaonly.ckpt, чтобы использовать базовую модель v1.5.
На вкладке txt2img напишите промпт и, при желании, негативный промпт, которые будут использоваться ControlNet. Я буду использовать промпты ниже.
Промпт:
full-body, a young female, highlights in hair, dancing outside a restaurant, brown eyes, wearing jeans
Негативный промпт:
disfigured, ugly, bad, immature
Установите размер изображения для генерации. Я буду использовать ширину 512 и высоту 776 для моего демонстрационного изображения. Обратите внимание, что размер изображения устанавливается в разделе txt2img, а НЕ в разделе ControlNet.
Интерфейс должен выглядеть так:
Настройки ControlNet¶
Теперь давайте перейдем к панели ControlNet.
Во-первых, загрузите изображение на холст.
Поставьте галочку Enable.
Вам нужно будет выбрать препроцессор и модель. Препроцессор - это просто другое название для аннотатора, упомянутого ранее, такого как детектор ключевых точек OpenPose. Давайте выберем openpose в качестве препроцессора.
Выбранная модель ControlNet должна соответствовать препроцессору. Для OpenPose вы должны выбрать control_openpose-fp16 в качестве модели.
Панель ControlNet должна выглядеть так:
Это все. Теперь нажмите Generate, чтобы начать генерировать изображения с помощью ControlNet.
Вы должны увидеть, что поза в сгенерированных изображениях такая же как и во входном изображении. Последнее изображение - это результат этапа предобработки. В данном случае это обнаруженные ключевые точки.
Когда закончите, снимите галочку Enable, чтобы отключить расширение ControlNet.
Это основы использования ControlNet!
Осталось понять:
- Какие препроцессоры доступны (а их действительно много!)
- Какие у ControlNet есть настройки
Препроцессоры и модели¶
Первый шаг использования ControlNet - выбрать препроцессор. Полезно включить предварительный просмотр, чтобы вы знали, что делает препроцессор. После завершения препроцессинга исходное изображение больше не используется, и только выданное препроцессором изображение будет использоваться для ControlNet.
Чтобы включить предварительный просмотр:
- Отметьте галочку Allow Preview.
- Опционально так же можете отметить Pixel Perfect. ControlNet будет использовать заданную вами высоту и ширину изображения в text-to-image для генерации предварительно обработанного изображения.
- Нажмите на значок взрыва рядом с выпадающим меню Preprocessor.
Некоторые модели ControlNet могут слишком сильно влиять на изображение. Уменьшите Control Weight, если вы видите проблемы с цветом или другие артефакты.
Выбор правильной модели¶
После выбора препроцессора вы должны выбрать правильную модель.
Для моделей серии v1.1 легко определить, какую модель нужно использовать. Все, что вам нужно сделать, это выбрать модель с тем же ключевым словом, что и у препроцессора.
Например:
Препроцессор | Модель |
---|---|
depth_xxxx | control_xxxx_depth |
lineart_xxxx | control_xxxx_lineart |
openpose_xxxx | control_xxxx_openpose |
OpenPose¶
Для OpenPose есть несколько вариантов препроцессоров.
OpenPose обнаруживает ключевые точки человека, такие как положение головы, плеч, рук и т.д. Он полезен для копирования человеческих поз без копирования других деталей, таких как одежда, прически и фон.
Все препроцессоры openpose должны использоваться с моделью openpose в выпадающем меню Model ControlNet.
Препроцессоры OpenPose:
- OpenPose: глаза, нос, шея, плечи, локти, запястья, колени и лодыжки.
- OpenPose_face: OpenPose + детали лица
- OpenPose_hand: OpenPose + руки и пальцы
- OpenPose_faceonly: только детали лица
- OpenPose_full: Все вышеперечисленное
- dw_openPose_full: Улучшенная версия OpenPose_full
Совет: Используйте Dw OpenPose чтобы извлечь все детали.
OpenPose¶
OpenPose - это базовый препроцессор OpenPose, который обнаруживает положение глаз, носа, шеи, плеч, локтей, запястий, коленей и лодыжек.
OpenPose_face¶
OpenPose_face делает все то же самое, что и препроцессор OpenPose, но обнаруживает дополнительные детали лица.
Он полезен для копирования выражения лица.
Пример изображений:
OpenPose_faceonly¶
OpenPose face only обнаруживает только лицо, но не другие ключевые точки. Это полезно для копирования только лица, но не других ключевых точек.
Примеры text-to-image приведены ниже. Обратите внимание, что положение тела не задаётся.
OpenPose_hand¶
OpenPose_hand обнаруживает ключевые точки, как OpenPose, а также руки и пальцы.
Пример изображений:
OpenPose_full¶
OpenPose full обнаруживает все, что openPose face и openPose hand делают суммарно.
Пример изображений:
dw_openpose_full¶
DWPose - это новый алгоритм обнаружения позы, основанный на исследовательской статье Effective Whole-body Pose Estimation with Two-stages Distillation. Он выполняет ту же задачу, что и OpenPose Full, но справляется лучше. Я советую вам использовать dw_openpose_full вместо openpose_full.
Обновите ControlNet, если не видите dw_openpose_full в меню препроцессора.
Tile resample¶
Модель Tile resample используется для добавления деталей к изображению. Часто используется с апскейлером для одновременного увеличения изображения.
См. метод ControlNet Tile Upscaling.
Reference¶
Reference - это набор препроцессоров, которые позволяют генерировать изображения, похожие на референсное изображение. Модель Stable Diffusion и промпт по-прежнему будут влиять на изображения.
Препроцессоры Reference НЕ используют отдельную модель. Вам нужно только выбрать препроцессор. (После выбора препроцессора reference выпадающее меню модели будет скрыто.)
Есть 3 препроцессора reference.
- Reference adain: Перенос стиля через Adaptive Instance Normalization. (статья)
- Reference only: Прямая связь референсного изображения с attention-слоями.
- Reference adain+attn: Комбинация вышеперечисленного.
Вы можете использовать любой из этих препроцессоров.
Пример ниже.
Используем CLIP interrogator для составления промпта.
a woman with pink hair and a robot suit on, with a sci – fi, Artgerm, cyberpunk style, cyberpunk art, retrofuturism
disfigured, ugly, bad, immature
Reference adain¶
Reference only¶
Reference adain+attn¶
Если бы вы спросили меня, я бы сказал, что reference-only работает лучше всего.
Все изображения выше получены в режиме balance. Я не вижу большой разницы при изменении параметра style fidelity.
Image Prompt adapter (IP-adapter)¶
Image Prompt adapter (IP-adapter) - это модель ControlNet, которая позволяет использовать изображение в качестве промпта. Подробности можно найти в статье IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models авторства He Ye и соавторов, а также на их странице Github.
Установка IP-adapter моделей¶
Перед использованием IP адаптеров в ControlNet загрузите IP-adapter модели для v1.5.
Поместите их в папку моделей ControlNet.
stable-diffusion-webui > extensions > sd-webui-controlnet > models
Использование IP-adapter¶
IP-adapter позволяет использовать изображение в качестве промпта, поэтому вам нужно будет предоставить референсное изображение. Давайте используем следующее изображение.
Сперва загрузите данное изображение в разделе ControlNet.
Вот остальные настройки ControlNet для использования IP-adapter
- Enable: Да
- Pixel Perfect: Да
- Control Type: IP-Adapter
- Preprocessor: ip-adapter_clip_sd15
- Model: ip-adapter_sd15
Ниже приведены изображения с IP-адаптерами и без них.
Обратите внимание, как особенности референсного изображения, такие как цветы и более темные цвета, переносятся на сгенерированное изображение!
Модель IP-Adapter SD 1.5 Plus делает нечто похожее, но оказывает более сильный эффект.
Модель SD1.5 Plus очень сильная. Она почти копирует референсное изображение. Вы можете уменьшить Control Weight, чтобы ослабить эффект.
Canny¶
Детектор краев Canny - это очень старый универсальный детектор краев. Он извлекает контуры изображения. Он полезен для сохранения композиции исходного изображения.
Выберите canny как в меню Preprocessor, так и в меню Model, чтобы его использовать.
Сгенерированные изображения будут следовать контурам.
Depth¶
Препроцессор depth пытается угадать информацию о глубине на основе референсного изображения.
- Depth Midas: Классический оценщик глубины. Также используется в официальной модели depth-to-image v2.
- Depth Leres: Больше деталей, но также склонен к отрисовке фона.
- Depth Leres++: Еще больше деталей.
- Zoe: Уровень детализации между Midas и Leres.
- Depth Anything: Более новая и улучшенная модель глубины.
- Depth Hand Refiner: Для исправления рук при inpainting.
Референсное изображение:
Карты глубины:
Промпт и негативный промпт:
a woman retrofuturism
disfigured, ugly, bad, immature
Вы можете видеть, что сгенерированное изображение следует карте глубины (Zoe).
Сравните с более детализированным Leres++:
Line Art¶
Line Art отрисовывает контур изображения. Он пытается преобразовать его в простой рисунок.
Есть несколько препроцессоров line art.
- Line art anime: Линии в стиле аниме
- Line art anime denoise: Линии в стиле аниме с меньшим количеством деталей.
- Line art realistic: Реалистичные линии.
- Line art coarse: Реалистичные более толстые линии.
Используйте с lineart моделью.
Изображения ниже сгенерированы с параметром Control Weight, установленным на 0.7.
Line Art Anime¶
Line Art Anime Denoise¶
Line Art Realistic¶
Line Art Coarse¶
MLSD¶
M-LSD (Mobile Line Segment Detection) - это детектор прямых линий. Он полезен для извлечения контуров с прямыми краями, такими как дизайн интерьера, здания, уличные сцены, рамки для картин и края бумаги.
Кривые будут проигнорированы.
Normal maps¶
Карта нормалей указывает ориентацию поверхности. Для ControlNet это изображение, которое указывает направление поверхности в каждом пикселе. Вместо значений цвета пиксели изображения представляют направление, в котором обращена поверхность.
Использование карт нормалей аналогично картам глубины. Они используются для передачи 3D-композиции референсного изображения.
Препроцессоры карт нормалей:
- Normal Midas: Оценка карты нормалей из карты глубины Midas.
- Normal Bae: Оценка карты нормалей с использованием метода неопределенности нормалей, названная в честь автора (Gwangbin Bae).
Normal Midas¶
Подобно карте глубины Midas, карта нормалей Midas хороша для отделения основного объекта от фона.
Normal Bae¶
Карта нормалей Bae, как правило, отображает детали как на переднем, так и на заднем плане.
Scribbles¶
Препроцессоры Scribble превращают изображение в каракули, похожие на нарисованные от руки.
- Scribble HED: Holistically-Nested Edge Detection (HED) - это детектор краев, хорошо подходящий для создания контуров, похожих на нарисованные человеком. По словам авторов ControlNet, HED подходит для перекрашивания и изменения стиля изображения.
- Scribble Pidinet: Pixel Difference network (Pidinet) обнаруживает кривые и прямые края. Ее результат похож на HED, но обычно дает более чистые линии с меньшим количеством деталей.
- Scribble xdog: EXtended Difference of Gaussian (XDoG) - ещё один метод обнаружения краев. Важно настроить порог (threshold) xDoG и наблюдать за результатом работы препроцессора.
Все эти препроцессоры должны использоваться с моделью управления scribble.
Scribble HED¶
HED создает грубые линии каракулей.
Scribble Pidinet¶
Pidinet, как правило, создает грубые линии с небольшим количеством деталей. Он хорош для копирования общего контура без мелких деталей.
Scribble xDoG¶
Уровень детализации регулируется настройкой порога XDoG, что делает xDoG универсальным препроцессором для создания каракулей.
Segmentation¶
Препроцессоры сегментации помечают, какие объекты находятся на референсном изображении.
Ниже показан препроцессор сегментации в действии.
Здания, небо, деревья, люди и тротуары помечены разными предопределенными цветами.
Вы можете найти категории объектов и цвета в цветовой карте здесь для ufade20k и ofade20k.
Есть несколько вариантов сегментации:
- ufade20k: Сегментация UniFormer (uf), обученная на наборе данных ADE20K.
- ofade20k: Сегментация OneFormer (of), обученная на наборе данных ADE20k.
- ofcoco: Сегментация OnFormer, обученная на наборе данных COCO.
Обратите внимание, что цветовые карты сегментаций ADE20k и COCO различаются.
Вы можете использовать препроцессоры сегментации для переноса расположения и формы объектов.
Ниже приведены результаты использования этих препроцессоров с одинаковым промптом и сидом.
Futuristic city, tree, buildings, cyberpunk
UniFormer ADE20k (ufade20k)¶
Uniformer точно размечает все в этом примере.
OneFormer ADE20k (ofade20k)¶
OneFormer в данном случае немного более зашумлен, но это не влияет на конечное изображение.
OneFormer COCO (ofcoco)¶
OneFormer COCO работает аналогично, с некоторыми ошибками в маркировке.
Сегментация - мощная техника. Вы можете манипулировать картой сегментации, чтобы размещать объекты в конкретных местах. Используйте цветовую карту для ADE20k.
Shuffle¶
Препроцессор Shuffle перемешивает входное изображение. Давайте посмотрим на Shuffle в действии.
Вместе с ControlNet-моделью Shuffle, препроцессор Shuffle можно использовать для переноса цветовой схемы референсного изображения.
Входное изображение:
Препроцессор Shuffle:
В отличие от других препроцессоров, препроцессор Shuffle рандомизирован. На него будет влиять выбранное значение сида.
Используйте препроцессор Shuffle с ControlNet-моделью Shuffle. ControlNet-модель Shuffle можно использовать с препроцессором Shuffle или без него.
Изображение ниже получено с помощью препроцессора ControlNet Shuffle и модели Shuffle (тот же промпт, что и в прошлой секции). Цветовая схема примерно соответствует референсному изображению.
Изображение ниже получено только с моделью ControlNet Shuffle (Препроцессор: None). Композиция изображения ближе к оригиналу, но цветовая схема перемешана.
Для сравнения, изображение ниже получено с тем же промптом без ControlNet. Цветовая схема кардинально отличается.
Color grid T2I adapter¶
Препроцессор Color grid T2i adapter уменьшает референсное изображение в 64 раза, а затем расширяет его обратно до исходного размера. Итоговый эффект - сетка с усреднёнными цветами в виде заплаток.
Исходное референсное изображение:
Предобработано с помощью t2ia_color_grid:
Затем предобработанное изображение можно использовать с ControlNet-моделью T2I color adapter (t2iadapter_color).
Генерация изображения будет примерно следовать цветовой схеме пространственно.
A modern living room
Увеличьте вес ControlNet, чтобы он следовал более точно.
Вы также можете использовать препроцессор None для этой T2I модели.
На мой взгляд, это довольно похоже на image-to-image (img2img).
Clip vision style T2I adapter¶
t2ia_style_clipvision преобразует референсное изображение в эмбеддинг CLIP vision. Этот эмбеддинг содержит информацию о содержании и стиле изображения.
Вам нужно будет использовать модель управления t2iadapter_style_XXXX.
Посмотрите на этот удивительный перенос стиля в действии:
Референсное изображение:
T2I adapter – CLIP vision:
sci-fi girl
Ниже то, что этот промпт сгенерирует, если вы отключите ControlNet.
Функция довольно схожа с Reference ControlNet, но я бы оценил T2IA CLIP vision выше.
ControlNet Inpainting¶
ControlNet inpainting позволяет использовать высокий денойз (denoising strength) при инпеинте для генерации множества вариаций изображения без нарушения общей согласованности.
Например, я использовал промпт для реалистичных людей.
Модель: HenmixReal v4
photo of young woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores
Негативный промпт
disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w
У меня есть такая картинка, и я хочу поменять лицо при помощи инпеинта.
Если я буду инпейнтить лицо с высоким денойзом (> 0.4), результат, вероятно, будет глобально несогласованным. Ниже приведены изображения после инпеинта с денойзом выставленным в 1.
ControlNet Inpainting - это то, что вам нужно.
Чтобы использовать ControlNet inpainting:
-
Лучше всего использовать ту же модель, на которой было сгенерировано изображение. После генерации изображения на странице txt2img нажмите Send to Inpaint, чтобы отправить изображение на вкладку Inpaint на странице Img2img.
-
Используйте кисть, чтобы создать маску над областью, которую вы хотите перегенерировать. Если вы не знакомы с инпеинтом, то см. руководство для начинающих по инпеинту.
-
Установите Inpaint area в Only masked. (Whole picture также будет работать)
-
Установите силу денойза в 1. (Обычно вы не будете устанавливать ее так высоко без ControlNet.)
-
Установите следующие параметры в разделе ControlNet. Вам не нужно загружать референсное изображение.
Enable: Да
Preprocessor: Inpaint_global_harmonious
Model: control_v11p_sd15_inpaint
-
Нажмите Generate, чтобы начать инпейнтинг.
Теперь я получаю новые лица, согласованные с глобальным изображением, даже при максимальном денойзе (1)!
В настоящее время есть 3 препроцессора для инпеинта:
- Inpaint_global_harmonious: Улучшает глобальную согласованность и позволяет использовать высокий денойз.
- Inpaint_only: Не изменяет немаскированную область. Он аналогичен Inpaint_global_harmonious в AUTOMATIC1111.
- Inpaint_only+lama: Обрабатывает изображение моделью lama. Как правило, дает более чистые результаты и хорошо подходит для удаления объектов.
Копирование лиц с помощью ControlNet¶
Вы можете использовать специальную модель IP-adapter face для генерации согласованных лиц на нескольких изображениях.
Установка модели IP-adapter plus face¶
-
Убедитесь, что ваш A1111 WebUI и расширение ControlNet обновлены.
-
Загрузите ip-adapter-plus-face_sd15.bin и поместите файл в stable-diffusion-webui > models > ControlNet.
-
Переименуйте расширение файла с .bin на .pth. (т.е. имя файла должно быть ip-adapter-plus-face_sd15.pth)
Использование модели IP-adapter plus face¶
Чтобы использовать модель IP adapter face для копирования лица, перейдите в раздел ControlNet и загрузите изображение головы.
Важные настройки:
- Enable: Да
- Preprocessor: ip-adapter_clip_sd15
- Model: ip-adapter-plus-face_sd15
Control weight должен быть около 1. Вы можете использовать несколько IP-адаптеров для лица ControlNets одновременно. Обязательно отрегулируйте Control weights соответствующим образом, чтобы их сумма составляла 1.
Промпт:
A woman sitting outside of a restaurant in casual dress
Негативный промпт:
ugly, deformed, nsfw, disfigured
Объяснение ВСЕХ настроек ControlNet¶
Когда впервые используешь ControlNet, можно немного испугаться от количества настроек! Но давай-ка пройдемся по ним не спеша, разберем на пальцах.
Будет глубокое погружение в тему. Если думаешь, что тебе нужен перерыв, то сделай его сейчас...
Входное изображение¶
Холст с изображением: Сюда можно перетащить картинку. Или кликнуть по холсту и выбрать файл через браузер. Входное изображение будет обработано выбранным препроцессором из выпадающего меню Preprocessor. На выходе получится карта управления (control map).
Иконка с карандашом: Создает новый белый холст вместо загрузки референсного изображения. Для рисования набросков прям на нем.
Иконка с камерой: Делает фото с твоей камеры и использует ее как входное изображение. Нужно будет дать браузеру доступ к камере.
Выбор модели¶
Enable: Включает/выключает ControlNet.
Low VRAM: Для видеокарт с меньше 8 гигамбайт памяти. Экспериментальная фича. Включай, если не хватает видеопамяти или если хочешь увеличить количество обрабатываемых картинок.
Allow Preview: Включает окно превью рядом с референсным изображением. Я бы советовал включить. Нажми на значок взрыва рядом с меню Preprocessor, чтобы увидеть, как работает препроцессор.
Preprocessor: Препроцессор (в исследовательской статье его называют аннотатором) для обработки входного изображения - определения краев, глубины, карт нормалей и т.д. None использует входную картинку как есть, без обработки.
Model: Модель ControlNet. Если выбрал препроцессор, обычно выбирают соответствующую ему модель. Модель ControlNet будет использована совместе с моделью Stable Diffusion, выбранной вверху интерфейса AUTOMATIC1111.
Control Weight¶
Под меню с препроцессором и моделью находятся три слайдера для настройки силы эффекта: Control Weight, Starting и Ending Control Steps.
Я буду использовать вот эту картинку, чтобы показать влияние параметра Control Weight. На ней девушка сидит.
Но в промпте я попрошу сгенеровать стоящую девушку.
full body, a young female, highlights in hair, standing outside restaurant, blue eyes, wearing a dress, side light
Weight: Насколько сильно карта управления влияет на результат по сравнению с текстовым промптом. Похоже на вес ключевых слов в промпте, но применяется к карте управления.
Следующие картинки сгенерены с препроцессором OpenPose и соответствующей моделью.
Как видно, Control Weight определяет, насколько сильно карта управления влияет на результат относительно промпта. Чем меньше вес, тем меньше ControlNet требует от картинки следовать карте управления.
Starting ControlNet step: Шаг, с которого ControlNet начинает применяться. 0 означает самый первый шаг.
Ending ControlNet step: Шаг, на котором ControlNet заканчивает работу. 1 означает последний шаг.
Давайте зафиксируем начальный шаг на 0 и будем менять конечный, посмотрим, что получится.
Поскольку начальные шаги определяют общую композицию (семплер убирает максимум шума на каждом шаге, начиная со случайного тензора в скрытом пространстве), поза задается, даже если применять ControlNet всего на 20% первых шагов семплирования.
В то же время изменение конечного шага ControlNet влияет не так сильно, потому что глобальная композиция задается в самом начале.
Control Mode¶
Balanced: ControlNet применяется и при conditioning, и при unconditioning на этапе семплирования. Это стандартный режим работы.
My prompt is more important: Эффект ControlNet постепенно уменьшается в процессе инъекций в U-Net (их 13 штук на один шаг семплирования). По сути это значит, что ваш промпт влияет сильнее, чем ControlNet.
ControlNet is more important: Выключает ControlNet на unconditioning. По факту параметр CFG scale также работает как множитель для эффекта ControlNet.
Не переживай, если не до конца понял, как это работает в деталях. Названия опций точно описывают результат.
Resize mode¶
Resize mode определяет, что делать, когда размер входного изображения или карты управления отличается от размера генерируемых картинок. Можно не заморачиваться с этими настройками, если соотношение сторон одинаковое.
Продемонстрирую эффект режимов ресайза, выставив генерацию горизонтальной картинки при вертикальном входном изображении/карте управления.
Just Resize: Независимо масштабирует ширину и высоту карты управления, чтобы вписать ее в холст. Меняет соотношение сторон карты.
Девушке приходится наклониться вперед, чтобы остаться в кадре. С этим режимом можно создавать интересные эффекты.
Crop and Resize: Вписывает холст внутрь карты. Обрезает карту, чтобы она совпадала по размеру с холстом.
Поскольку карта обрезается сверху и снизу, то же происходит и с девушкой.
Resize and fill: Вписывает всю карту в холст. Дополняет карту пустым пространством, чтобы размер совпадал с холстом.
По сравнению с исходным изображением, по бокам добавляется больше пространства.
Ну всё, теперь (надеюсь) ты знаешь все настройки. Давай подумаем, как можно использовать ControlNet.
Несколько ControlNet¶
Для генерации картинки можно использовать ControlNet несколько раз. Давай разберем на примере.
Модель: Protogen v2.2
Промпт:
An astronaut sitting, alien planet
Негативный промпт:
disfigured, deformed, ugly
С таким промптом получаются картинки с разной композицией.
Допустим, я хочу независимо контролировать композицию астронавта и фона. Для этого можно использовать несколько (в данном случае 2) ControlNet'а.
Для фиксации позы астронавта я использую вот такой референс.
Настройки для ControlNet 0:
- Enable: Да
- Preprocessor: OpenPose
- Model: control_xxxx_openpose
- Resize mode: Resize and Fill (Так как мой исходный референс вертикальный)
Для фона я использую следующий референс.
Модели глубины идеально подходят для этой цели. Вы наверняка захотите поэкспериментировать, какая модель и настройки дадут нужную вам карту глубины.
Настройки для ControlNet 1:
- Enable: Да
- Control Weight: 0.45
- Preprocessor: depth_zeo
- Model: control_XXXX_depth
- Resize mode: Crop and resize
Теперь я могу независимо контролировать композицию объекта и фона:
Советы:
- Поиграйся с весами ControlNet, если какой-то из них не делает свою работу.
- Следи за Resize mode, если размер референсов и финальной картинки не совпадает.
Несколько идей для использования ControlNet¶
Копирование позы¶
Наверное, самое распространенное применение ControlNet - копирование человеческих поз. Обычно контролировать позы сложно... но теперь это в прошлом! Входным изображением может быть картинка, сгенерированная Stable Diffusion, или фотография с реальной камеры.
Модель OpenPose¶
Чтобы использовать ControlNet для переноса человеческих поз, следуй инструкциям по включению ControlNet в AUTOMATIC1111, описанным выше. Выставь следующие настройки:
- Enable: Да
- Preprocessor: openpose
- Model: control_…._openpose
Вот пара примеров.
Пример 1: Копирование позы с картинки¶
Для начала давай скопируем позу с этой фотографии, где девушка любуется листьями.
Используя различные модели и промпты, можно полностью изменить изображение, но сохранить позу.
Пример 2: Ремикс сцены из фильма¶
Можно переделать культовую танцевальную сцену из "Криминального чтива" в йога-сессию в парке.
Тут использован ControlNet с моделью DreamShaper.
Промпт:
photo of women doing yoga, outside in a park.
Негативный промпт:
disfigured, ugly, bad, immature
Тот же промпт, что и для модели Inkpunk Diffusion. (Вам нужно будет добавить в промпт фразу nvinkpunk):
Стилизация изображений с ControlNet¶
Используя промпт¶
Ниже результаты с моделью v1.5, но с разными промптами для достижения разных стилей. Использован ControlNet с разными препроцессорами. Лучше всего поэкспериментировать и посмотреть, что работает лучше.
Используя модели¶
Можно также использовать модели для стилизации изображений. Ниже сгенерированы картинки с промптом "Painting of Beethoven" на моделях Anythingv3, DreamShaper и OpenJourney.
Контроль поз при помощи Magic Pose¶
Иногда бывает сложно найти картинку с нужной позой. Можно создать свою позу с помощью таких инструментов, как Magic Poser (доп. инфа).
Шаг 1: Зайди на сайт Magic Poser.
Шаг 2: Подвигай ключевые точки модели, чтобы настроить позу.
Шаг 3: Нажми на Preview. Сделай скриншот результата. Должна получиться картинка типа такой:
Шаг 4: Используй модель OpenPose в ControlNet. Выбери модель и промпт на свой вкус для генерации картинок.
Ниже несколько картинок, сгенерированных на модели 1.5 и DreamShaper. Поза хорошо скопировалась во всех случаях.
Идеи для дизайна интерьеров¶
Можно использовать детектор прямых линий MLSD в Stable Diffusion ControlNet для генерации идей дизайна интерьеров. Вот настройки ControlNet:
- Preprocessor: mlsd
- Model: mlsd
Начнём с фотографий готовых интерьеров. Возьмем для примера вот эту:
Промпт:
award winning living room
Модель: Stable Diffusion v1.5
Вот несколько сгенерированных идей дизайна:
Также можно использовать depth-модель. Вместо прямых линий она будет делать упор на сохранение информации о глубине.
- Preprocessor: Depth Midas
- Model: Depth
Сгенерированные картинки:
Разница между моделью глубины Stable Diffusion и ControlNet¶
Примечание от переводчика
Модель depth-to-image работает только с Stable Diffusion 2, которая не получила широкого распространения. Так что ценность информации из данного раздела сомнительна.
Stability AI, создатели Stable Diffusion, выпустили модель depth-to-image. У нее много общего с ControlNet, но есть и важные различия.
Давай сначала о том, что похоже.
- Обе модели - это модели Stable Diffusion...
- Обе используют два conditions (результат работы препроцессора для картинки и текстовый промпт).
- Обе используют MiDAS для оценки карты глубины.
А вот различия:
- Модель depth-to-image - это v2 модель. ControlNet можно использовать с любыми v1 или v2 моделями. Это важный момент, поскольку v2 модели, как известно, сложнее в использовании. Людям сложно генерировать на них хорошие картинки. То, что ControlNet может использовать любую v1 модель, открыло возможность делать conditioning по глубине не только для базовой модели v1.5, но и для тысяч специализированных моделей, выпущенных сообществом.
- ControlNet более универсальный. Помимо глубины, он может делать условия по границам, позам и всё такое.
- У ControlNet карта глубины более высокого разрешения, чем у depth-to-image.
Как работает ControlNet?¶
Статья будет неполной без объяснения, как ControlNet работает под капотом.
ControlNet "прикрепляет" обучаемые сетевые модули к различным частям U-Net (предсказателя шума) модели Stable Diffusion. Веса модели Stable Diffusion заблокированы, чтобы они не менялись во время обучения. Только прикрепленные модули меняются в процессе тренировки.
Диаграмма модели из исследовательской статьи хорошо это иллюстрирует. Изначально веса прикрепленного модуля равны нулю, что позволяет новой модели использовать преимущества обученной и заблокированной модели.
Во время обучения вместе с каждой тренировочной картинкой подаются два condition'а. (1) Текстовый промпт и (2) карта управления (control map), типа ключевых точек OpenPose или границ Canny. ControlNet учится генерировать картинки на основе этих двух входных данных.
Каждая ControlNet-модель обучается независимо.
Почитать еще¶
- Картинки, сгенерированные при помощи Magic Poser и OpenPose.
- Научная статья: Adding Conditional Control to Text-to-Image Diffusion Models (10 февраля 2023)
- ControlNet v1.0 на Github
- ControlNet v1.1 Файлы моделей (HuggingFace)
- ControlNet v1.1 на Github
- ControlNet расширение для AUTOMATIC1111 Web-UI