ControlNet - это как Image2Image с суперспособностями. Он дает больше контроля и позволяет создавать изображения с помощью Txt2Img и Img2Img более точно и детально.
ControlNet - это расширение для программы Stable Diffusion версии 1.5 и моделей, обученных на базе Stable Diffusion 1.5.
Но, увы, не работает с моделями Stable Diffusion 2.x, которые доступны в настоящее время.
- Автор расширения для Auto1111 - Mikubill, его можно скачать здесь: https://github.com/Mikubill/sd-webui-controlnet
- Оригинальный репозиторий ControlNet был создан lllyasviel, его можно найти здесь: https://github.com/lllyasviel/ControlNet
Где взять расширение ControlNet?
Если вы используете пользовательский интерфейс Automatic1111, вы можете установить расширение ControlNet напрямую из вкладки Extensions. Оно может быть спрятано среди других расширений, но его можно найти, если ввести в поиск "sd-webui-controlnet".
Чтобы использовать ControlNet, вам нужно скачать несколько специальных моделей. На текущий момент, на 23 февраля 2023 года, доступно 4 различных варианта моделей.
1. Более компактные модели SafeTensor, которые подойдут почти каждому пользователю, можно найти на Huggingface (официальная ссылка от создателя расширения Mikubill): https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main
- Альтернативная ссылка Civitai (неофициальная ссылка): https://civitai.com/models/9251/controlnet-pre-trained-models
- Обратите внимание, что на официальной странице Huggingface также есть дополнительные модели с префиксом "t2iadapter_"; это экспериментальные модели и не являются основными моделями ControlNet. См. раздел "Experimental Text2Image" ниже.
2. Альтернативные модели SafeTensor с применением разности. Они получены из того же источника, что и обычные модели, но отличаются способом извлечения соответствующей информации. На текущий момент, между обычными моделями и моделями, использующими разность, практически нет разницы, кроме некоторых незначительных эстетических отличий. Просто перечисляем их здесь для полноты картины, на случай, если что-то изменится в будущем.
- Официальная ссылка на Huggingface: https://huggingface.co/kohya-ss/ControlNet-diff-modules/tree/main
- Неофициальная ссылка Civitai: https://civitai.com/models/9868/controlnet-pre-trained-difference-models
3. Экспериментальные адаптеры Text2Image с префиксом "t2iadapter_". Это более компактные версии основных обычных моделей. Сейчас, они являются экспериментальными, но работают так же, как обычная модель, но с меньшим размером файла.
4. Если вам нужны полные исходные модели (по какой-то причине), их можно найти на HuggingFace: https://huggingface.co/lllyasviel/ControlNet
Загрузите все компактные модели SafeTensor с Huggingface. Мы рассмотрим каждую из них позже. Huggingface также включает конфигурационный файл "cldm_v15.yaml". Расширение ControlNet уже должно включать этот файл, но будет не лишним скачать его снова, на всякий случай.
Как использовать ControlNet расширение в Automatic1111?
С момента написания этой статьи, 22 февраля 2023 года, существует 8 различных моделей и 3 экспериментальные модели t2iadapter:
- control_canny-fp16.safetensors
- control_depth-fp16.safetensors
- control_hed-fp16.safetensors
- control_mlsd-fp16.safetensors
- control_normal-fp16.safetensors
- control_openpose-fp16.safetensors
- control_scribble-fp16.safetensors
- control_seg-fp16.safetensors
- t2iadapter_keypose-fp16.safetensors (необязательная, экспериментальная)
- t2iadapter_seg-fp16.safetensors (необязательная, экспериментальная)
- t2iadapter_sketch-fp16.safetensors (необязательная, экспериментальная)
Эти модели необходимо разместить в папке "extensions\sd-webui-controlnet\models", где установлен Automatic1111. После того, как вы установили расширение и поместили модели в папку, перезапустите Automatic1111.
После перезапуска Automatic1111 и возвращения на вкладку Txt2Img, вы увидите новый раздел "ControlNet" внизу, который можно развернуть.
Божечки, сколько же здесь виджетов и гаджетов!
Да, так оно и есть. Я пройдусь по каждому из этих параметров детально, чтобы помочь описать их назначение (надеюсь). Чтобы соответствовать стандартам ISO для документации по Stable Diffusion, я буду использовать изображение кошко-девушки для моих примеров.
В этом руководстве вы будете загружать изображение для предварительной обработки в специальное изображение "detectmap" для выбранной модели ControlNet. Если вы являетесь опытным пользователем, вы можете непосредственно загрузить свое собственное изображение "detectmap" без необходимости предварительной обработки изображения.
- Это изображение будет использоваться для управления Stable Diffusion, чтобы он делал то, что вам нужно.
- "Detectmap" - это просто специальное изображение, которое модель использует для более точного определения композиции и структуры, чтобы управлять вашим запросом.
- Вы можете щелкнуть мышью и перетащить изображение в форму для загрузки, или для более крупных изображений нажать на маленькую кнопку "Изображение" в верхнем левом углу, чтобы выбрать файл на вашем компьютере для загрузки.
- После загрузки изображения вы увидите стандартные кнопки, такие как в Img2Img, чтобы наносить пометки на загруженном изображении.
Ниже приведены некоторые параметры, которые позволяют вам делать снимок с веб-камеры, если это позволяет оборудование и политика безопасности / конфиденциальности
Ниже приведены некоторые флажки для различных опций:
- Включить (Enable): по умолчанию расширение ControlNet отключено. Установите флажок, чтобы включить его.
- Инвертировать цвет ввода (Invert Input Color): используется для пользовательских изображений "detectmap". Препроцессоры и модели, которые используют черно-белые изображения "detectmap", ожидают белых линий на черном фоне. Однако, если у вас есть изображение "detectmap", на котором черные линии на белом фоне (обычный случай - это нарисованная вами набросочная картина), то это позволит изменить цвета на те, которые ожидаются моделями. Не нужно отмечать эту опцию, если вы используете препроцессор для создания "detectmap" из импортированного изображения.
- RGB в BGR (RGB to BGR): используется для пользовательских изображений "detectmap" типа нормальной карты, которые могут хранить информацию о цвете изображения в другом порядке, чем ожидается расширением. Не нужно отмечать эту опцию, если вы используете препроцессор для создания "detectmap" нормальной карты из импортированного изображения.
- Низкий VRAM (Low VRAM): помогает системам с менее чем 6 GiB VRAM за счет замедления обработки.
- Угадывание (Guess): экспериментальная опция, при которой вы не используете положительный и отрицательный запрос, и ControlNet попытается распознать объект на импортированном изображении с помощью текущего препроцессора.
Полезно для получения близких вариаций входного изображения.
Ползунки веса и направления определяют, насколько большое влияние ControlNet будет иметь на композицию.
Слайдер "Вес" (Weight slider): Он определяет, насколько важным является изображение ControlNet для общего запроса. Это примерно аналогично использованию круглых скобок в Automatic1111 для выделения чего-то. Например, вес "1.15" соответствует "(prompt:1.15)".
Слайдер "Сила направления" (Guidance strength slider:): Это процент от общего количества шагов, на которые будет применяться ControlNet. Это примерно аналогично редактированию запроса в Automatic1111. Например, направление "0.70" соответствует "[prompt::0.70]", где оно применяется только к первым 70% шагов, а затем не используется в последние 30% обработки.
Режим изменения размера (Resize Mode): Он определяет, как будет изменяться размер detectmap при загрузке изображения, если его размеры не совпадают с шириной и высотой настроек Txt2Img. Это не относится к слайдерам "Ширина холста" и "Высота холста" в ControlNet; они используются только для ручных пользовательских штрихов.
- Envelope (Outer Fit): Соответствие ширины и высоты Txt2Image размерам изображения ControlNet. Импортированное изображение в ControlNet будет масштабировано вверх или вниз до тех пор, пока ширина и высота настроек Txt2Img не поместятся внутри изображения ControlNet. Сохраняется соотношение сторон изображения ControlNet.
- Scale to Fit (Inner Fit): Соответствие изображения ControlNet ширине и высоте Txt2Img. Импортированное изображение в ControlNet будет масштабировано вверх или вниз до тех пор, пока оно не будет помещаться внутри ширины и высоты настроек Txt2Img. Сохраняется соотношение сторон изображения ControlNet.
- Just Resize:: Изображение ControlNet будет растянуто или сжато до соответствия ширине и высоте настроек Txt2Img.
Секция "Холст" ("Canvas") используется только при создании собственных эскизов напрямую в ControlNet, в отличие от импортирования изображения.
- "Ширина холста (Canvas Width)" и "Высота холста (Canvas Height)" предназначены только для пустого холста, созданного "Создать пустой холст (Create blank canvas)". Они не влияют на импортированные изображения.
Preview annotator result позволяет быстро увидеть, как выбранный препроцессор превратит ваше загруженное изображение или эскиз в detectmap для ControlNet.
Очень полезно для экспериментирования с разными препроцессорами.
Hide annotator result удаляет предварительный просмотр.
Prepocessor: главный инструмент ControlNet. Это то, что преобразует загруженное изображение в карту обнаружения, которую ControlNet может использовать для управления Stable Diffusion.
Prepocessor необходим только в том случае, если вы загружаете обычное изображение, которое нужно преобразовать в подходящий формат для использования в ControlNet, например в формат карты рисунков или глубины.
Сейчас существует 11 различных Prepocessor'ов:
Canny: создает простые четкие контуры пикселей в областях высокого контраста. Очень детальный, но может выбирать нежелательный шум.
Depth: создает базовую карту глубины на основе изображения. Очень часто используется, так как обеспечивает хороший контроль над композицией и пространственным положением.
Если вы не знакомы с картами глубины, то светлые области ближе к наблюдателю, а темные области находятся дальше (думайте о том, что они "убегают в тень").
Depth_lres: создает карту глубины, подобную "Depth", но обладает большим контролем над различными настройками. Эти настройки могут использоваться для создания более подробной и точной карты глубины.
Hed: создает плавные контуры вокруг объектов. Он широко используется, поскольку обеспечивает хорошую детализацию, как и "Canny", но с меньшим количеством шума и более эстетически приятными результатами. Очень полезен для стилизации и перекраски изображений.
Название означает "Целостно-вложенное обнаружение граней (Holistically-Nested Edge Detection)"
MLSD: Создает прямые линии. Очень полезно для архитектуры и других объектов, созданных человеком, с ярко выраженными прямыми контурами. Не столь хорошо работает с органическими, изогнутыми объектами.
Название означает "Мобильное обнаружение сегментов линий (Mobile Line Segment Detection)".
Normal Map: Создает базовую оценку нормалей для карты на основе изображения. Сохраняет много деталей, но может приводить к непредвиденным результатам, поскольку нормальная карта является только лучшим предположением на основе изображения, а не создается должным образом в программе 3D-моделирования.
Если вы не знакомы с нормальными картами, три цвета на изображении, красный, зеленый и синий, используются 3D-программами для определения насколько "гладким" или "шероховатым" является объект. Каждый цвет соответствует направлению, например, влево / вправо, вверх / вниз, к / от объекта.
OpenPose: Создает базовый скелет в стиле OpenPose для фигуры. Очень часто используется, поскольку несколько скелетов OpenPose могут быть составлены вместе в одном изображении и использоваться для лучшего управления Stable Diffusion, чтобы создавать несколько согласованных объектов.
Pidinet: Создает плавные контуры, что-то среднее между Scribble и Hed
Название расшифровывается как "Сеть разности пикселей".
Scribble: Используется с опцией "Create Canvas" для рисования базовой картины в ControlNet.
На самом деле не используется, так как пользовательские картины обычно загружаются непосредственно без необходимости предварительной обработки изображения в картины.
Fake scribble: Проходят по изображению, чтобы создать базовый контур картины.
Segmentation: Разделяет изображение на связанные области или сегменты, которые относительно связаны друг с другом.
Это примерно аналогично использованию маски изображения в Img2Img.
Model: применяет изображение "detectmap" к текстовому запросу при генерации нового набора изображений.
Доступные опции зависят от того, какие модели вы загрузили из вышеприведенных ссылок и поместили в папку "extensions\sd-webui-controlnet\models", где бы ни был установлен Automatic1111.
Используйте кнопку с символом круглой стрелки "🔄", чтобы обновить список моделей после добавления или удаления моделей из папки.
Каждая модель названа по типу предварительной обработки, для которой она была разработана, но это не мешает вам добавлять немного анархии и смешивать предварительно обработанные изображения с разными моделями.
Например, предварительная обработка "Depth" и "Depth_lres" предназначена для использования с моделью "control_depth-fp16".
Некоторые предварительные обработчики также имеют модель адаптера с похожим названием. Например, предварительная обработка "OpenPose" может использоваться как с моделью "control_openpose-fp16.safetensors", так и с моделью адаптера "t2iadapter_keypose-fp16.safetensors".
На текущий момент, предварительная обработка Pidinet не имеет "официальной" модели, которая бы с ней соответствовала. Модель "Scribble" работает особенно хорошо, поскольку реализация расширения Pidinet создает гладкие, сплошные линии, которые особенно подходят для набросков.