Как стать автором
Поиск
Написать публикацию
Обновить

Flux Kontext проигрывает ControlNET: уроки новичкам

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.1K
Обложка статьи: Flux Kontext проигрывает ControlNET: уроки новичкам
Обложка статьи: Flux Kontext проигрывает ControlNET: уроки новичкам

В первой части мы уже баловали Flux Kontext «девушками и котиками». Сегодня усложним задачу и проверим, как модель справляется с контурными подсказками, заменой цвета/фона и текстурированием 3D‑объектов в интерфейсе Forge WebUI — а заодно сравним результаты с классическим ControlNet (ControlNET для SD 1.5 и SDXL и FluxTools-V2 для Flux) и с ChatGPT.

В рамках этой статьи мы рассмотрим:

  1. Генерацию замка по контуру, с дальнейшей заменой кирпича на розовый цвет;

  2. Генерацию ювелирных часов, с дальнейшей заменой фона на чёрный цвет;

  3. Генерация текстур (битое стекло, лёд, хвоя, шерсть, морская пена) для 3D-текста "DMITRII DAK" (мой никнейм в сети);

  4. Сравнение Flux Kontext с ControlNET для SD 1.5 и SDXL и ChatGPT.

По ходу покажу метрики времени и VRAM, а в финале подведу итоги: где Flux Kontext выигрывает, а где ControlNet остаётся незаменимым. Так же по стандарту проверим генерацию по плану на ChatGPT и с помощью FluxTools-V2.

Все тесты будут проводиться на: системный блок с: RTX 3060 12 GB VRAM / 64 GB DDR4 / Intel i5‑7600K @ 4.2 GHz / NVMe SSD; Windows 10 Home, WebUI Forge последняя версия, Python 3.10.6, CUDA 12.1.

Для вашего удобства я записал видеоролик, где показал, как проводятся все генерации и сравнения. Таким образом, часть статьи вы можете как прочитать, так и просмотреть: https://youtu.be/eRvNjAFZjuM?si=iPTwOBJQNimIDEQn\

Начнём экспериментировать) Сгенерируем замок по контуру

Замок будем генерировать по данному изображению. Промт для контура: Hand-drawn fairy-tale fantasy palace, black contour lines on a white background

Настройки: Steps: 18, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 784686931, Size: 1024x1024

Замок сгенерированный по промту: Hand-drawn fairy-tale fantasy palace, black contour lines on a white background
Замок сгенерированный по промту: Hand-drawn fairy-tale fantasy palace, black contour lines on a white background

Для генерации будем использовать flux1-kontext-dev FP16.

Напишем промт: Generate a realistic castle in the style of realistic photography based on a black and white sketch и настройки Steps: 24, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 3412026121, Size: 720x1504, First Block Cache, bc_threshold: 0.12:

Замок: Generate a realistic castle in the style of realistic photography based on a black and white sketch
Замок: Generate a realistic castle in the style of realistic photography based on a black and white sketch

Теперь сравним исходное изображение (рисунок) и получившееся:

Сравнение рисунка и генерации по этому рисунку
Сравнение рисунка и генерации по этому рисунку

Несмотря на разницу размеров двух изображений, у flux1-kontext-dev FP16 получилось достаточно неплохо заполнить контуры. Ошибки встречаются лишь у основания главной башенки – в создании окон - на том месте, где их быть не должно.

Рассмотрим приближенно отдельные участки изображения:

1) Здесь видна главная ошибка генерации (изображение ниже):

Главная ошибка генерации: окна в главной башне
Главная ошибка генерации: окна в главной башне

2) В изображении ниже – кровля замка и основания башенок поменьше - ошибок не наблюдается:

Кровля замка и основания башенок поменьше
Кровля замка и основания башенок поменьше

3) Обращаю ваше внимание на узор двери и стен – у модели получилось практически безошибочно повторить все части изображения:

Узор двери и стен замка
Узор двери и стен замка

Теперь произведём генерацию замка с розовым кирпичом:

Промт и настройки: Create a realistic pink brick castle in the style of realistic photography based on a black and white sketch

Steps: 24, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 1645587105, Size: 720x1504.

Генерация замка с розовым кирпичом
Генерация замка с розовым кирпичом

С изображением случился некоторый морфинг – удлинилась лестница, но в целом все детали были сохранены и главное, покрашен именно кирпич, а не двери или кровля.

Рассмотрим поближе:

Кровля замка и основания башенок поменьше (цветное изображение)
Кровля замка и основания башенок поменьше (цветное изображение)
Узор двери и стен замка (цветное изображение)
Узор двери и стен замка (цветное изображение)

Как видно на 1 и на 2-й увеличенной части изображения сохраняются все детали.

Теперь перейдём к предметам...

Генерация ювелирных часов и замена фона

Генерировать будем по контуру, как и в 1 случае:

Ювелирные часы, изображение 1024x1024
Ювелирные часы, изображение 1024x1024

Напишем промт и настройки для генерации цветного изображения: Generate a realistic gold watch, photorealistic style, 4k

Steps: 18, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 507702987, Size: 1024x1024

Контур часов и цветное изображение
Контур часов и цветное изображение

И замены фона изображения: replace the white background with black, photorealistic style, 4k

Steps: 24, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 507702987, Size: 1024x1024

В расширении Forge FluxKontext замена фона выглядит так (рисунок ниже):

Forge FluxKontext замена фона часов
Forge FluxKontext замена фона часов

Сравним изображения между собой – отличия минимальны и касаются только текста на циферблате, данную ошибку можно легко доработать в Photoshop или GIMP.

Сравнение генераций часов (контур, светлый фон, тёмный фон)
Сравнение генераций часов (контур, светлый фон, тёмный фон)

И поближе:

Циферблат часов крупно
Циферблат часов крупно

Генерация текстур для 3D-текста

Для теста возьмём 3D-текст, созданный мной ранее в Blender 3D (текст специально срендерен без текстур и буквы специально наклонены под определёнными углами).

Справится ли Forge FluxKontext с тем, с чем с лёгкостью справлялся ControlNET в режиме мультиконтролнет ещё с версии 1.5 c моделями Depth и IP-Adapter?

Ответ – нет, не справится – либо теряются буквы, либо их угол наклона и глубина кадра, либо текстуры.

Исходное изображение 3D-текста (мой никнейм на YouTube)
Исходное изображение 3D-текста (мой никнейм на YouTube)

Напишем промт - Generate 3D letters in the style of broken glass,

Настройки: Steps: 24, Sampler: Euler, Schedule type: Simple, CFG scale: 1, Distilled CFG Scale: 3.5, Seed: 1950121403, Size: 896x576

Генерация текстур для 3D-текста, Forge FluxKontext
Генерация текстур для 3D-текста, Forge FluxKontext
Изображение увеличенно и настройки по промту: Generate 3D letters in the style of broken glass
Изображение увеличенно и настройки по промту: Generate 3D letters in the style of broken glass
Консоль (параметры, время генерации и загрузки VRAM)
Консоль (параметры, время генерации и загрузки VRAM)

После генерации видно, что модель может понимать текстуру «разбитое стекло» и даже правильно генерировать текст, но в данном случае оценивается не просто генерация текста или генерация текстур на текст или другой объект, а комплексная генерация – глубина + текст + текстура.

Оставим все настройки без изменений и добавим в промт «Generate 3D letters «DMITRII DAK» in the style of broken glass» и проверим сколько времени займёт генерация исходя из увеличения количества токенов на вход.

Уточнение промта добавило ускорение генерации почти на 20 секунд. Однако текстура уже не напоминает стекло, а скорее бетон или белый мрамор:

Изображение увеличенно и настройки по промту: Generate 3D letters «DMITRII DAK» in the style of broken glass
Изображение увеличенно и настройки по промту: Generate 3D letters «DMITRII DAK» in the style of broken glass
Консоль с характеристиками загруженности памяти
Консоль с характеристиками загруженности памяти

Добавим текстуру битого стекла во второе окно расширения Forge FluxKontext и нажмём кнопку генерации:

Forge FluxKontext - добавление текстуры битого стекла
Forge FluxKontext - добавление текстуры битого стекла
Итоговое изображение по промту: Generate 3D letters «DMITRII DAK» in the style of broken glass + изображение битого стекла
Итоговое изображение по промту: Generate 3D letters «DMITRII DAK» in the style of broken glass + изображение битого стекла

Наклон и угол букв сохранился, а также все буквы правильно написаны, но текстура опять потерялась. По времени, как видно на скриншоте, теперь 2 минуты и 13 секунд.

Поставим Batch count на 10 и добавим Random Seed и проверим сколько генераций из 10 будут верными по всем 3-м пунктам: правильные буквы в слове + правильность наклона букв + правильные текстуры.

Batch count = 10, Forge FluxKontext, генерация по промту + изображение битого стекла
Batch count = 10, Forge FluxKontext, генерация по промту + изображение битого стекла
10 изображений сгенерированных в Forge FluxKontext по промту + изображение битого стекла
10 изображений сгенерированных в Forge FluxKontext по промту + изображение битого стекла

Итог теста не дал все «+3» верных пункта ни в одной из 10 генераций. Можно поставить генерацию Batch count на 100 или даже 1000, но уже сейчас понятно, что Forge FluxKontext не даёт 100% контроль в генерации текстуры и формы.

Сравнение Flux Kontext с ControlNET для SD 1.5 и SDXL и ChatGPT

ChatGPT (модель o3) тоже не смог справиться с данным тестом и в конце предложил мне воспользоваться ControlNET в режиме мульти ControlNET или наложить текстуру в том же Blender 3D)) - вот лентяй)

ChatGPT (модель o3): создание текстур битого стекла по промту + изображение текста + изображение битого стекла
ChatGPT (модель o3): создание текстур битого стекла по промту + изображение текста + изображение битого стекла

Теперь попробуем повторить этот же опыт с ControlNET SD1.5 и SDXL (Depth + IP-Adapter или IP-Adapter Plus) и Flux1Tools-V2 (Depth и Redux) и сравним результаты по точности генерации по 3м пунктам, данным выше:

В начале воспользуемся ControlNET SD1.5, модель старая, по сравнению с Flux, но весьма действенная, если работа касается 100% контроля результата.

Будет использоваться модель dreamshaper_8, промт сокращён до 3D letters in the style of broken glass, настройки были изменены на: Steps: 44, Sampler: DPM++ 2M, Schedule type: Simple, CFG scale: 7, Seed: 4168764373, Size: 896x576 и добавлена настройка Hires. Fix для точности и чёткости итоговой генерации: Hires Module 1: Use same choices, Hires CFG Scale: 7, Hires upscale: 2, Hires steps: 30, Hires upscaler: R-ESRGAN 4x+

Настройки генерации и итог (1), ControlNET SD1.5, модель Depth
Настройки генерации и итог (1), ControlNET SD1.5, модель Depth
Настройки генерации и итог (2), ControlNET SD1.5, модель IP-Adapter Plus
Настройки генерации и итог (2), ControlNET SD1.5, модель IP-Adapter Plus

Как видно из скриншотов интерфейса итоговая генерация имеет все +3 правильных пункта из описанных выше: буквы, наклон + угол и текстура:

Генерация по промту + буквы + изображение битого стекла в ControlNET SD1.5
Генерация по промту + буквы + изображение битого стекла в ControlNET SD1.5

Время генерации, конечно, увеличилось до - Time taken: 1 min. 40.6 sec и стал сравним с FluxKontext, однако в данном случае, наконец, был получен тот результат, какой и был изначально задуман.

Хоть здесь представлены именно буквы, но можно перенести представленный процесс на создание стилизованных логотипов в 3D, рекламных макетов, презентаций, product visualization или UI/UX и motion-дизайн.

Похожего результата получилось добиться и на SDXL, были немного изменены настройки в количестве семплов:

Настройки генерации и итог (2), ControlNET SDXL
Настройки генерации и итог (2), ControlNET SDXL
Генерация по промту + буквы + изображение битого стекла в ControlNET SDXL
Генерация по промту + буквы + изображение битого стекла в ControlNET SDXL

Теперь проведём эксперимент на Flux1Tools-V2 - это ControlNET для Flux 1-Dev.

При работе с Flux1Tools-V2 мы сразу сталкиваемся с ограничением точности обработки глубины.

Если в ControlNet для SD1.5 или SDXL самой надёжной моделью для Depth является depth_anything_v2, то в Flux1Tools-V2 её выбрать невозможно. Более того, загрузить собственные модели глубины вручную также не представляется возможным: в папке webui\extensions\sd-forge-fluxtools-v2 отсутствуют как модели, так и отдельный каталог для их размещения. Аналогичная ситуация и в webui\models. Из доступных вариантов наиболее точной считается depth_leres++, однако на практике её качество оставляет желать лучшего.

Процессор depth_leres++, Flux1Tools-V2
Процессор depth_leres++, Flux1Tools-V2

Кроме того, расширение имеет ещё одно ограничение: оно работает только с одним глобальным Checkpoint, что исключает возможность одновременного использования двух функций — например, Depth и Redux. Поэтому мы будем тестировать каждую модель по отдельности для генерации 3D-букв с текстурой «broken glass».

Глобальным Checkpoint flux1-Depth-Dev_FP8
Глобальным Checkpoint flux1-Depth-Dev_FP8

Проведём тест на Flux1Tools-V2, flux1-Depth-Dev_FP8, модель Depth, процессор depth_leres++

Настройки генерации и итог, Flux1Tools-V2, flux1-Depth-Dev_FP8
Настройки генерации и итог, Flux1Tools-V2, flux1-Depth-Dev_FP8
Итог генерация по промту + буквы в Flux1Tools-V2, модель Depth
Итог генерация по промту + буквы в Flux1Tools-V2, модель Depth

Результат оказался неудовлетворительным: заметно низкое качество и отсутствие точности в воспроизведении текста и углов наклона букв. Основная причина — слабая модель глубины по сравнению с решениями ControlNet для SD1.5 или SDXL.

Проведём тест на Flux1Tools-V2, flux1-Dev_FP8, модель Redux

Настройки генерации и итог, Flux1Tools-V2, flux1-Redux-Dev_FP8
Настройки генерации и итог, Flux1Tools-V2, flux1-Redux-Dev_FP8

Результат также оказался далеким от точности.

Сравнение всех способов создания текстур для 3D-текста
Сравнение всех способов создания текстур для 3D-текста

Итог

В ходе тестирования стало очевидно, что ControlNet Depth в связке с IP-Adapter для SD 1.5 или SDXL значительно превосходит Flux Kontext Dev и Flux1Tools-V2 по ряду ключевых параметров:

  • Сохранение формы и пропорций объектов. При работе с 3D-текстом ControlNet корректно передал все буквы, сохранил их расположение, угол наклона и размер. Flux, напротив, деформировал текст, добавляя лишние элементы или удаляя буквы.

  • Точность передачи глубины. Модель depth_anything_v2, доступная в ControlNet, обеспечивает более детализированное восприятие глубины, что критически важно для задач с перспективой и наклоном. Flux ограничен менее точной моделью (depth_leres++), что негативно сказывается на результате.

  • Гибкость и комбинации моделей. ControlNet позволяет одновременно применять Depth и IP-Adapter, добиваясь максимальной точности и стилизации. В Flux1Tools-V2 это невозможно: расширение работает с одним глобальным Checkpoint, исключая комбинированные сценарии (например, Depth + Redux).

Для задач, где критична геометрическая точность (3D-текст, сложные ракурсы, интеграция в дизайн с сохранением исходной структуры), ControlNet Depth + IP-Adapter SD 1.5 или SDXL на сегодняшний день остаётся более надёжным и профессиональным инструментом, чем Flux Kontext Dev и тем более Flux1Tools-V2.

Более подробно генерация описана в моей книге «Stable Diffusion: 22 урока для начинающих»: https://bhv.ru/product/stable-diffusion-22-uroka-dlya-nachinayushhih/

Актуальную информацию в сфере AI, 3D и графики смотрите в Telegram‑канале (видеоуроки): https://t.me/photoudzen

Теги:
Хабы:
+9
Комментарии0

Публикации

Ближайшие события