Diffusers documentation

T2I-Adapter

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

T2I-Adapter

T2I-Adapter, görüntü üretimini daha iyi kontrol etmek için ek bir koşullandırma giriş görüntüsü (hat çizimi, canny, eskiz, derinlik, poz) sağlayan hafif bir adaptör modelidir. ControlNet'e benzer, ancak ağırlıkları UNet'e kopyalayıp eğitmek yerine yalnızca içine eklediği için çok daha küçüktür (~77M parametre ve ~300MB dosya boyutu).

T2I-Adapter yalnızca Stable Diffusion XL (SDXL) modeliyle eğitim için kullanılabilir.

Bu kılavuz, train_t2i_adapter_sdxl.py eğitim betiğini inceleyerek onu tanımanıza ve kendi kullanım senaryonuza nasıl uyarlayabileceğinizi göstermek için hazırlanmıştır.

Betik çalıştırmadan önce, kütüphanenin kaynak kodundan yüklendiğinden emin olun:

git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .

Ardından, eğitim betiğini içeren örnek klasörüne gidin ve kullandığınız betik için gerekli bağımlılıkları yükleyin:

cd examples/t2i_adapter
pip install -r requirements.txt

🤗 Accelerate, birden fazla GPU/TPU ile veya karma hassasiyetle eğitim yapmanıza yardımcı olmak için tasarlanmış bir kütüphanedir. Donanımınıza ve ortamınıza göre eğitim kurulumunuzu otomatik olarak yapılandırır. Daha fazla bilgi edinmek için 🤗 Accelerate Hızlı tur sayfasına göz atın.

Bir 🤗 Accelerate ortamı başlatın:

accelerate config

Herhangi bir yapılandırma seçmeden varsayılan bir 🤗 Accelerate ortamı kurmak için:

accelerate config default

Ya da ortamınız, bir notebook gibi, etkileşimli bir kabuğu desteklemiyorsa, şunu kullanabilirsiniz:

from accelerate.utils import write_basic_config

write_basic_config()

Son olarak, kendi veri setiniz üzerinde bir model eğitmek istiyorsanız, eğitim scriptiyle uyumlu bir veri seti oluşturma yöntemini öğrenmek için Eğitim için veri seti oluşturma kılavuzuna göz atın.

Aşağıdaki bölümler, betiğin nasıl değiştirileceğini anlamak için önemli olan eğitim betiğinin kısımlarını vurgular, ancak betiğin her yönünü ayrıntılı olarak kapsamaz. Daha fazla bilgi edinmek isterseniz, betiği okumaktan çekinmeyin ve herhangi bir sorunuz veya endişeniz varsa bize bildirin.

Betik parametreleri

Eğitim betiği, eğitim çalışmanızı özelleştirmenize yardımcı olmak için birçok parametre sunar. Tüm parametreler ve açıklamaları parse_args() fonksiyonunda bulunur. Eğitim komut boyutu ve öğrenme oranı gibi her parametre için varsayılan değerler sağlar, ancak isterseniz eğitim komutunda kendi değerlerinizi de ayarlayabilirsiniz.

Örneğin, gradyan birikimini etkinleştirmek için eğitim komutuna --gradient_accumulation_steps parametresini ekleyin:

accelerate launch train_t2i_adapter_sdxl.py \
  ----gradient_accumulation_steps=4

Çok temel ve önemli parametreler Metinden görüntüye eğitim kılavuzunda anlatıldığından, bu kılavuz yalnızca ilgili T2I-Adapter parametrelerine odaklanmaktadır:

  • --pretrained_vae_model_name_or_path: önceden eğitilmiş bir VAE'nin yolu; SDXL VAE'sinin sayısal kararsızlıktan muzdarip olduğu bilinmektedir, bu nedenle bu parametre size daha iyi bir VAE belirtme imkanı tanır
  • --crops_coords_top_left_h ve --crops_coords_top_left_w: SDXL’in kırpma koordinat gömülerine dahil edilecek yükseklik ve genişlik koordinatları
  • --conditioning_image_column: veri setindeki koşullandırma görüntülerinin sütunu
  • --proportion_empty_prompts: boş dizgilerle değiştirilecek görsel istemlerin oranı

Eğitim betiği

Betik parametrelerinde olduğu gibi, eğitim betiğinin adım adım açıklaması Metinden görüntüye eğitim kılavuzunda sunulmaktadır. Bunun yerine bu kılavuz, betiğin T2I-Adapter ile ilgili bölümlerine odaklanmaktadır.

Eğitim betiği, veri setini hazırlayarak başlar. Bu, istemin tokenize edilmesini ve görüntüler ile koşullandırma görüntülerine dönüşümlerin uygulanmasını içerir.

conditioning_image_transforms = transforms.Compose(
    [
        transforms.Resize(args.resolution, interpolation=transforms.InterpolationMode.BILINEAR),
        transforms.CenterCrop(args.resolution),
        transforms.ToTensor(),
    ]
)

main() işlevi içinde T2I-Adapter, önceden eğitilmiş bir adaptörden yüklenir ya da rastgele başlatılır:

if args.adapter_model_name_or_path:
    logger.info("Loading existing adapter weights.")
    t2iadapter = T2IAdapter.from_pretrained(args.adapter_model_name_or_path)
else:
    logger.info("Initializing t2iadapter weights.")
    t2iadapter = T2IAdapter(
        in_channels=3,
        channels=(320, 640, 1280, 1280),
        num_res_blocks=2,
        downscale_factor=16,
        adapter_type="full_adapter_xl",
    )

optimizer, T2I-Adapter parametreleri için başlatılır:

params_to_optimize = t2iadapter.parameters()
optimizer = optimizer_class(
    params_to_optimize,
    lr=args.learning_rate,
    betas=(args.adam_beta1, args.adam_beta2),
    weight_decay=args.adam_weight_decay,
    eps=args.adam_epsilon,
)

Son olarak, eğitim döngüsünde, adaptör koşullu görüntü ve metin gömüleri, gürültü artığını tahmin etmek için UNet'e iletilir:

t2iadapter_image = batch["conditioning_pixel_values"].to(dtype=weight_dtype)
down_block_additional_residuals = t2iadapter(t2iadapter_image)
down_block_additional_residuals = [
    sample.to(dtype=weight_dtype) for sample in down_block_additional_residuals
]

model_pred = unet(
    inp_noisy_latents,
    timesteps,
    encoder_hidden_states=batch["prompt_ids"],
    added_cond_kwargs=batch["unet_added_conditions"],
    down_block_additional_residuals=down_block_additional_residuals,
).sample

Eğitim döngüsünün nasıl çalıştığı hakkında daha fazla bilgi edinmek isterseniz, gürültü azaltma sürecinin temel kalıbını açıklayan Understanding pipelines, models and schedulers eğitim materyaline göz atın.

Betik başlat

Şimdi eğitim betiğini başlatmaya hazırsınız! 🚀

Bu örnek eğitim için fusing/fill50k veri setini kullanacaksınız. İsterseniz kendi veri setinizi oluşturup kullanabilirsiniz (Eğitim için veri seti oluşturma kılavuzuna bakın).

Ortam değişkeni MODEL_DIR'i Hub'daki bir model kimliğine veya yerel bir modele giden yola, OUTPUT_DIR'i ise modelin kaydedilmesini istediğiniz konuma ayarlayın.

Eğitiminizi koşullandırmak için aşağıdaki görüntüleri indirin:

wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_1.png
wget https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/controlnet_training/conditioning_image_2.png

Eğitim ilerlemesini Weights & Biases ile izlemek için eğitim komutuna --report_to=wandb parametresini ekleyin. Sonuçları takip etmek için eğitim komutuna ayrıca --validation_image, --validation_prompt ve --validation_steps parametrelerini de eklemeniz gerekir. Bu, modeli hata ayıklamak ve ara sonuçları görüntülemek için gerçekten faydalı olabilir.

export MODEL_DIR="stabilityai/stable-diffusion-xl-base-1.0"
export OUTPUT_DIR="path to save model"

accelerate launch train_t2i_adapter_sdxl.py \
 --pretrained_model_name_or_path=$MODEL_DIR \
 --output_dir=$OUTPUT_DIR \
 --dataset_name=fusing/fill50k \
 --mixed_precision="fp16" \
 --resolution=1024 \
 --learning_rate=1e-5 \
 --max_train_steps=15000 \
 --validation_image "./conditioning_image_1.png" "./conditioning_image_2.png" \
 --validation_prompt "red circle with blue background" "cyan circle with brown floral background" \
 --validation_steps=100 \
 --train_batch_size=1 \
 --gradient_accumulation_steps=4 \
 --report_to="wandb" \
 --seed=42 \
 --push_to_hub

Eğitim tamamlandığında, T2I-Adapter'ınızı çıkarım için kullanabilirsiniz:

from diffusers import StableDiffusionXLAdapterPipeline, T2IAdapter, EulerAncestralDiscreteSchedulerTest
from diffusers.utils import load_image
import torch

adapter = T2IAdapter.from_pretrained("path/to/adapter", dtype=torch.float16)
pipeline = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", adapter=adapter, dtype=torch.float16
)

pipeline.scheduler = EulerAncestralDiscreteSchedulerTest.from_config(pipe.scheduler.config)
pipeline.enable_xformers_memory_efficient_attention()
pipeline.enable_model_cpu_offload()

control_image = load_image("./conditioning_image_1.png")
prompt = "pale golden rod circle with old lace background"

generator = torch.manual_seed(0)
image = pipeline(
    prompt, image=control_image, generator=generator
).images[0]
image.save("./output.png")

Sonraki adımlar

Bir T2I-Adapter modeli eğittiğiniz için tebrikler! 🎉 Daha fazla bilgi edinmek için:

Update on GitHub