ControlNet
controlnet — управление композицией через карту-подсказку
ControlNet — техника управления композицией в диффузионных моделях через зрительную подсказку: скелет позы (OpenPose), контур (Canny), карту глубины (Depth), набросок (Lineart). Промпт задаёт «что нарисовать», ControlNet — «где и в какой позе». Это помогает повторять композицию, но не копирует картинку точно и не сохраняет лицо само по себе. Модель ControlNet подключается отдельно и должна быть совместима с базовой моделью.
Коротко
Коротко. ControlNet даёт диффузионной модели зрительное условие: позу, карту глубины, набросок или границы. Оно помогает удерживать композицию и геометрию, но не гарантирует точного совпадения и работает только с совместимой архитектурой.
Что это такое
Допустим, вам нужен человек с поднятой рукой, причём кисть должна оказаться рядом с верхним краем кадра. Текстом это описать можно, но модель не обязана расположить всё именно так. Карта позы делает пожелание наглядным: на ней уже показаны плечо, локоть и кисть.
ControlNet добавляет к генерации такое зрительное условие. Промпт описывает сцену, а карта помогает расположить её части. При этом оба условия влияют на результат: они могут поддерживать друг друга или спорить.
В исходной архитектуре ControlNet базовую модель замораживают, то есть не меняют её веса при обучении управляющей ветки. Эта ветка учится передавать сведения о карте в основную сеть. Подробности описаны в оригинальной работе.
Типовые карты — это разные способы упростить картинку до структуры:
- OpenPose — скелет человека с точками-суставами (плечи, локти, бёдра, голова, пальцы).
- Canny — контуры объекта, найденные по перепадам яркости.
- Depth — карта глубины: что ближе к камере, что дальше.
- Lineart — чистый контурный рисунок (как раскраска).
- Scribble — грубый набросок от руки, для быстрых эскизов.
- Tile — контроль по изображению, полезный для восстановления и уточнения деталей, в том числе при увеличении. Сам ControlNet не обязательно разбивает изображение на плитки.
- Inpaint — управляемое перерисовывание выделенной области.
Карту можно получить из фотографии препроцессором — отдельным инструментом, который выделяет контуры, оценивает глубину или находит суставы. Названия и набор таких инструментов зависят от интерфейса. Готовую карту обычно передают без повторной обработки: иначе препроцессор попытается заново распознать уже нарисованный скелет или контур.
Есть и ручной путь: поставить суставы в редакторе поз, нарисовать набросок или вывести глубину из 3D-сцены. Главное, чтобы формат карты подходил выбранной управляющей модели.
Как это работает
В исходном ControlNet для Stable Diffusion обучаемая ветка использует копию блоков энкодера и среднего блока U-Net. Связи с нулевой инициализацией позволяют начать обучение без резкого вмешательства в поведение базы. У реализаций для других архитектур устройство может отличаться.
Во время генерации происходит следующее:
- Управляющая ветка получает карту, текущее зашумлённое представление и условия, предусмотренные её архитектурой.
- Она вычисляет дополнительные признаки на нескольких уровнях.
- Эти признаки добавляются во внутренние вычисления основной модели на выбранных шагах генерации.
- Основная модель использует их вместе с текстовым условием для построения изображения.
Параметр Control Strength, или вес контроля, масштабирует это влияние. Значение 1.0 обычно означает стандартный множитель, а не стопроцентное совпадение с картой. Это также не обязательно верхняя граница настройки. Более высокий вес может лучше удержать позу, но усилить ошибки карты или сделать изображение неестественным.
Параметры Starting Step и Ending Step позволяют ограничить участок генерации, где действует ControlNet. Раннее влияние сильнее задаёт общую структуру, а позднее может удерживать детали. Подходящий интервал зависит от модели и карты, поэтому его сравнивают на одном seed.
ControlNet обычно поставляется отдельными весами и загружается рядом с базовой моделью. Размер зависит от архитектуры и способа упаковки.
Пример на практике
Представим серию иллюстраций: один человек стоит с поднятой рукой, а стиль меняется от акварели к карандашному рисунку. Здесь полезно разделить две задачи: повторить позу и сохранить внешность. Карта позы помогает с первой, но сама не решает вторую.
Рабочая последовательность может быть такой:
- Выбрать референс с хорошо видимыми суставами и нужным ракурсом.
- Получить карту позы и осмотреть её: не перепутаны ли руки, не пропали ли кисти.
- Загрузить совместимый ControlNet и использовать одну карту для всей серии.
- Сравнить несколько значений веса при неизменных остальных настройках.
- Менять описание стиля, затем проверить позу на каждом изображении.
Если нужен один и тот же персонаж, можно добавить подходящую LoRA или адаптер идентичности. Но и тогда сходство придётся оценить по всей серии, а не по одному удачному портрету.
Другой пример — эскиз здания. Контурная карта помогает удержать положение окон и силуэт, пока промпт меняет материалы и освещение. Получившееся изображение годится для обсуждения идеи, но не заменяет чертёж: число окон, прямые линии и размеры могут измениться.
С чем часто путают
- ControlNet и img2img — img2img берёт исходную картинку целиком и переделывает её с заданной силой денойза. ControlNet добавляет отдельное зрительное условие; это может быть структурная карта или изображение другого типа, предусмотренного моделью. Его можно использовать вместе с img2img. img2img — «перерисуй с поправкой», ControlNet — «следуй этой композиции, остальное на твой выбор».
- ControlNet и LoRA — оба настраивают результат, но по-разному. LoRA меняет «что модель умеет» (стиль, объекты, лица). ControlNet меняет «как модель строит сцену» (композиция, поза, геометрия). Их часто используют вместе: LoRA на персонажа + ControlNet на позу.
- ControlNet и IP-Adapter — оба добавляют визуальную подсказку к промпту. ControlNet — структурную (карта). IP-Adapter — образную («рисуй в духе этого изображения»). Можно их сочетать: ControlNet задаёт позу, IP-Adapter — стиль.
- Карта позы и внешность — карта хранит ключевые точки, а не фотографическое сходство. Набор точек зависит от детектора и режима: OpenPose поддерживает тело, лицо и кисти. Но наличие точек пальцев ещё не гарантирует правильные руки в результате.
Частые ошибки и заблуждения
- ControlNet делает картинку точной копией карты. Нет. ControlNet говорит модели, где что находится, а не как это должно выглядеть. Стиль, цвет, детали — всё ещё на модели. Низкая сила перерисовки в img2img помогает остаться ближе к исходнику, но тоже не обещает точной копии.
- Один ControlNet работает на всех моделях. Не работает. ControlNet тренируется под конкретную базу. SDXL ControlNet не подходит для SD 1.5. Flux ControlNet — отдельная история. На CivitAI и в Hugging Face модели подписаны по базе.
- «Сила 1.0 — лучший выбор». Это множитель влияния карты, а не процент точности и не обязательный максимум. Он может быть полезен для точной геометрии и мешать там, где нужны живые детали.
- Можно без последствий объединить сколько угодно ControlNet. Каждый дополнительный контроль расходует память и вычисления, а карты могут спорить друг с другом. Число модулей ограничивают возможностями реализации и проверяют по отдельности, прежде чем соединять.
- Карту нужно нарисовать руками. Чаще наоборот — её извлекают автоматически из исходного фото препроцессором. Ручная карта удобна, когда нужного референса нет или позу хочется изменить до генерации.
Связанные термины
- OpenPose, Canny, Depth, Lineart, Scribble — конкретные типы карт-подсказок.
- Preprocessor / Annotator — модуль, превращающий фото в карту.
- LoRA — параллельная техника настройки модели; ControlNet и LoRA часто используются вместе.
- img2img — другой способ работать с исходной картинкой, без структурного контроля.
- IP-Adapter — техника передачи стиля через образ, а не через карту.
Частые вопросы
Нужно ли качать ControlNet-модель отдельно? Да. В большинстве интерфейсов это отдельный файл весов. Каталог зависит от сборки, а совместимость определяется архитектурой базовой модели: похожие названия не делают разные ControlNet взаимозаменяемыми.
Что выбрать новичку — OpenPose или Canny? Зависит от задачи. Для людей в кадре — OpenPose: чисто, прицельно, не давит на детали. Для архитектуры, объектов, абстрактных композиций — Canny или Lineart: они держат контуры.
Почему лицо плывёт даже при ControlNet OpenPose? Даже подробная карта лица описывает расположение точек, а не всю внешность: форму кожи, цвет глаз, возраст и другие признаки. Для сходства можно добавить обученную на персонаже LoRA или подходящий адаптер идентичности, а затем проверить результат.
Можно ли подать частичную карту? Да, если выбранная модель поддерживает такую подсказку. Например, карта верхней части тела оставляет больше свободы для остальной сцены. Но отсутствие точек не гарантирует ни появления ног, ни их правильного положения: на это влияют промпт и кадрирование.
Что лучше для видео — менять карты или фиксировать одну? Зависит от задачи. Для анимации «персонаж двигается» — менять (на каждом кадре своя поза). Для «персонаж в одной позе, меняется стиль» — фиксировать карту. В первом случае часто помогает специальный пайплайн AnimateDiff + ControlNet.
Главное
ControlNet добавляет к текстовому условию структурную карту: позу, глубину, контуры или сегментацию. Он помогает переносить композицию и повторять геометрию, но точность зависит от препроцессора, совместимой control-модели и силы условия. Надёжный диапазон находят коротким сравнением на одном seed.