Эффективная управляемая генерация для SDXL с T2I-адаптерами
Управляемая генерация для SDXL с T2I-адаптерами
T2I-Адаптер – это эффективная модель “подключи и используй”, которая обеспечивает дополнительное руководство моделям текст-изображение, замораживая оригинальные большие модели текст-изображение. T2I-Адаптер выравнивает внутренние знания в моделях T2I с внешними управляющими сигналами. Мы можем обучать различные адаптеры в соответствии с различными условиями и достигать богатого управления и редактирования.
Как современная работа, ControlNet имеет аналогичную функцию и широко используется. Однако его выполнение может быть вычислительно затратным. Это связано с тем, что во время каждого шага очистки процесса обратной диффузии необходимо выполнять и ControlNet, и UNet. Кроме того, ControlNet подчеркивает важность копирования кодировщика UNet в качестве управляющей модели, что приводит к увеличению числа параметров. Таким образом, генерация замедляется размером ControlNet (чем больше, тем медленнее процесс).
В этом вопросе T2I-Адаптеры предоставляют конкурентное преимущество перед ControlNet. T2I-Адаптеры имеют меньший размер и, в отличие от ControlNet, T2I-Адаптеры выполняются только один раз на протяжении всего процесса очистки.
- Как создать чат-бот LLaMa 2 с использованием Gradio и Hugging Face в бесплатной среде Colab.
- Время 100 ИИ Самые влиятельные?
- Понимание алгоритмического предвзятости типы, причины и примеры случаев
За последние несколько недель команда Diffusers и авторы T2I-Адаптера сотрудничали для поддержки T2I-Адаптеров для Stable Diffusion XL (SDXL) в diffusers
. В этой статье мы поделимся нашими результатами обучения T2I-Адаптеров на SDXL с нуля, некоторыми привлекательными результатами и, конечно же, контрольными точками T2I-Адаптеров при различных условиях (эскиз, canny, lineart, depth и openpose)!
По сравнению с предыдущими версиями T2I-Адаптера (SD-1.4/1.5), T2I-Адаптер-SDXL по-прежнему использует исходный рецепт, приводящий 2,6B SDXL с 79M Адаптером! T2I-Адаптер-SDXL сохраняет мощные возможности управления, одновременно наследуя высококачественную генерацию SDXL!
Обучение T2I-Адаптера-SDXL с помощью diffusers
Мы создали наш скрипт обучения на этом официальном примере, предоставленном diffusers
.
Большинство моделей T2I-Адаптеров, о которых мы упоминаем в этой статье, были обучены на 3M пар изображений и текста высокого разрешения из LAION-Aesthetics V2 с использованием следующих настроек:
- Шаги обучения: 20000-35000
- Размер пакета: Data parallel с размером пакета одного GPU равным 16 для общего размера пакета 128.
- Скорость обучения: Постоянная скорость обучения 1e-5.
- Смешанная точность: fp16
Мы призываем сообщество использовать наши скрипты для обучения пользовательских и мощных T2I-Адаптеров, достигая конкурентного баланса между скоростью, памятью и качеством.
Использование T2I-Адаптера-SDXL в diffusers
Здесь мы возьмем условие “lineart” в качестве примера, чтобы продемонстрировать использование T2I-Адаптера-SDXL. Чтобы начать, сначала установите необходимые зависимости:
pip install -U git+https://github.com/huggingface/diffusers.git
pip install -U controlnet_aux==0.0.7 # для моделей условий и детекторов
pip install transformers accelerate
Процесс генерации T2I-Адаптера-SDXL в основном состоит из следующих двух шагов:
- Изображения условий сначала подготавливаются в соответствующий формат управляющего изображения.
- Управляющее изображение и подсказка передаются в
StableDiffusionXLAdapterPipeline
.
Давайте рассмотрим простой пример с использованием Адаптера Lineart. Мы начинаем с инициализации конвейера T2I-Адаптера для SDXL и детектора lineart.
import torch
from controlnet_aux.lineart import LineartDetector
from diffusers import (AutoencoderKL, EulerAncestralDiscreteScheduler,
StableDiffusionXLAdapterPipeline, T2IAdapter)
from diffusers.utils import load_image, make_image_grid
# загрузка адаптера
adapter = T2IAdapter.from_pretrained(
"TencentARC/t2i-adapter-lineart-sdxl-1.0", torch_dtype=torch.float16, varient="fp16"
).to("cuda")
# загрузка конвейера
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
euler_a = EulerAncestralDiscreteScheduler.from_pretrained(
model_id, subfolder="scheduler"
)
vae = AutoencoderKL.from_pretrained(
"madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
model_id,
vae=vae,
adapter=adapter,
scheduler=euler_a,
torch_dtype=torch.float16,
variant="fp16",
).to("cuda")
# загрузка детектора lineart
line_detector = LineartDetector.from_pretrained("lllyasviel/Annotators").to("cuda")
Затем загрузите изображение для обнаружения линейного рисунка:
url = "https://huggingface.co/Adapter/t2iadapter/resolve/main/figs_SDXLV1.0/org_lin.jpg"
image = load_image(url)
image = line_detector(image, detect_resolution=384, image_resolution=1024)
Затем мы генерируем:
prompt = "Рев ледяного дракона, фото 4k"
negative_prompt = "аниме, мультфильм, графика, текст, живопись, карандаш, графит, абстракция, глюк, деформированный, мутировавший, уродливый, искалеченный"
gen_images = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
image=image,
num_inference_steps=30,
adapter_conditioning_scale=0.8,
guidance_scale=7.5,
).images[0]
gen_images.save("out_lin.png")
Есть два важных аргумента, которые помогают контролировать количество условий.
-
adapter_conditioning_scale
Этот аргумент контролирует, насколько условие должно влиять на ввод. Высокие значения означают больший эффект условия, и наоборот.
-
adapter_conditioning_factor
Этот аргумент контролирует, сколько начальных шагов генерации должно использовать условие. Значение должно быть установлено между 0 и 1 (по умолчанию 1). Значение
adapter_conditioning_factor=1
означает, что адаптер должен применяться ко всем временным шагам, в то время какadapter_conditioning_factor=0.5
означает, что он будет применяться только для первых 50% шагов.
Для получения более подробной информации мы приглашаем вас ознакомиться с официальной документацией.
Попробуйте демо-версию
Вы можете легко опробовать T2I-Adapter-SDXL в этом пространстве или во встроенной площадке:
Больше результатов
Ниже представлены результаты, полученные при использовании разных видов условий. Мы также дополнили результаты ссылками на соответствующие предварительно обученные контрольные точки. В их модельных картах содержится более подробная информация о том, как они были обучены, а также пример использования.
С управляемым линейным рисунком
Модель от
TencentARC/t2i-adapter-lineart-sdxl-1.0
С управляемым наброском
Модель от
TencentARC/t2i-adapter-sketch-sdxl-1.0
С управляемым Canny-фильтром
Модель от
TencentARC/t2i-adapter-canny-sdxl-1.0
С управляемым глубинным эффектом
Модели с управляемым глубинным эффектом от
TencentARC/t2i-adapter-depth-midas-sdxl-1.0
и TencentARC/t2i-adapter-depth-zoe-sdxl-1.0
соответственно
С управляемым OpenPose
Модель от
TencentARC/t2i-adapter-openpose-sdxl-1.0
Благодарности: Огромное спасибо Вильяму Берману за помощь в обучении моделей и за дележку своих идей.