Buckets:

mishig's picture
|
download
raw
12 kB

Zamanlayıcılar

Bir zamanlayıcı, gürültü azaltma döngüsüne her adımda ne kadar gürültünün kaldırılacağını söyler. Farklı zamanlayıcılar hız ile kalite arasında bir denge kurar.

Bu kılavuz, bir zamanlayıcıyı (scheduler) nasıl yükleyeceğinizi ve zaman adımı (timestep) zamanlamasını, aralıklarını ve sigmalarını nasıl özelleştireceğinizi gösterir.

Zamanlayıcı seçimi

Checkpoint varsayılanından başlayın. Farklı bir hız veya kalite ödüşlemesi gerekiyorsa yalnızca o zaman değiştirin.

Zamanlayıcıların yüklenmesi

Qwen-Image ve Flux gibi flow-matching modelleri varsayılan olarak FlowMatchEulerDiscreteScheduler ile birlikte gelir. Bilinçli olarak deneysel bir çalışma yapmıyorsanız bu scheduler'ı kullanmaya devam edin. Yalnızca değiştirilecek scheduler'ın checkpoint ile uyumlu olduğu durumlarda from_config() ile değiştirin.

Schedulers yalnızca yapılandırma içerir ve ağırlık tensörleri taşımaz. Yüklenen yapılandırmayı incelemek için bir pipeline üzerinde .scheduler özniteliğine erişin.

import torch
from diffusers import DiffusionPipeline

pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, device_map="cuda"  # or "mps", "xpu", "cpu"
)
pipeline.scheduler

Yüklenmiş bir pipeline'da zamanlayıcıları değiştirmek için, num_train_timesteps ve ilgili alanların hizalı kalmasını sağlamak üzere mevcut zamanlayıcı yapılandırmasıyla from_config() kullanın. FlowMatch kontrol noktaları (Qwen-Image, Flux ve benzerleri) için, bilinçli olarak uyumlu bir alternatifle deney yapmıyorsanız FlowMatchEulerDiscreteScheduler kullanmaya devam edin.

from diffusers import DPMSolverMultistepScheduler

pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config)

Ayrıca bir zamanlayıcı yapılandırmasını Hub'dan from_pretrained() ile yükleyebilir ve scheduler üzerinden from_pretrained() içine aktarabilirsiniz.

from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler

dpm = DPMSolverMultistepScheduler.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler"
)
pipeline = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    scheduler=dpm,
    dtype=torch.float16,
    device_map="cuda",  # or "mps", "xpu", "cpu"
)
pipeline.scheduler

Zaman adımı zaman çizelgeleri

Timestep veya gürültü zamanlaması, gürültünün gürültüden arındırma süreci boyunca nasıl dağıtılacağını belirler. Zamanlama doğrusal olabilir ya da başlangıca ya da sona daha yoğunlaşmış olabilir. Zamanlayıcının varsayılan yapılandırmasından üretilen, önceden hesaplanmış bir gürültü seviyeleri dizisidir ancak diğer zamanlamaların kullanılacak şekilde özelleştirilebilir.

linear (even steps)                 AYS (denser where it matters)
noise                               noise
  ^                                   ^
  | *                                 | *
  |  *                                |   *
  |   *                               |    **
  |    *                              |     ***
  |     *                             |      **
  |      *                            |        *
  |       *                           |          *
  +-----------------> step            +-----------------> step

Özel timesteps yalnızca ilgili zamanlayıcının set_timesteps metodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayı retrieve_timesteps üzerinden kontrol eder ve aksi halde ValueError fırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veya set_timesteps imzasını kontrol edin.

Aşağıdaki örnek, 10 adımda yüksek kaliteli bir görüntü üretebilen ve bu sayede üretimi önemli ölçüde hızlandırıp hesaplama süresini azaltan Align Your Steps (AYS) zamanlamasını kullanır.

Zaman çizelgesini içe aktarın ve hattın timesteps argümanına iletin.

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.schedulers import AysSchedules

sampling_schedule = AysSchedules["StableDiffusionXLTimesteps"]
print(sampling_schedule)
# [999, 845, 730, 587, 443, 310, 193, 116, 53, 13]

pipeline = DiffusionPipeline.from_pretrained(
    "SG161222/RealVisXL_V4.0",
    dtype=torch.float16,
    device_map="cuda"  # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
  pipeline.scheduler.config, algorithm_type="sde-dpmsolver++"
)

prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
    prompt=prompt,
    negative_prompt="",
    timesteps=sampling_schedule,
).images[0]
AYS zaman adımı zamanlaması 10 adım



Doğrusal aralıklı zaman adımı zamanlaması 10 adım



Doğrusal aralıklı zaman adımı zamanlaması 25 adım

Eski kontrol noktalarında v-prediction/zero-SNR yeniden ölçekleme için bkz. Legacy checkpoints.

Zaman adımı aralığı

Timestep spacing, zamanlama planından örnek alınacak belirli t adımlarına atıfta bulunur. Diffusers aşağıda gösterilen üç spacing türü sağlar.

boşluk stratejisi aralık hesaplama örnek zaman adımları
leading eşit aralıklı adımlar [900, 800, 700, ..., 100, 0]
linspace ilk ve son adımları dahil edin ve kalan ara adımları eşit olarak bölün [1000, 888.89, 777.78, ..., 111.11, 0]
trailing son adımı dahil edin ve kalan ara adımları sondan başlayarak eşit olarak bölün [999, 899, 799, 699, 599, 499, 399, 299, 199, 99]

Aralama stratejisini zamanlayıcıdaki timestep_spacing argümanına iletin.

trailing stratejisi genellikle daha az adımda daha fazla detaya sahip, daha yüksek kaliteli görseller üretir, ancak daha standart adım değerleri için kalite farkı o kadar belirgin değildir.

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler

pipeline = DiffusionPipeline.from_pretrained(
    "SG161222/RealVisXL_V4.0",
    dtype=torch.float16,
    device_map="cuda"  # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
  pipeline.scheduler.config, timestep_spacing="trailing"
)

prompt = "A cinematic shot of a cute little black cat sitting on a pumpkin at night"
image = pipeline(
    prompt=prompt,
    negative_prompt="",
    num_inference_steps=5,
).images[0]
image
5 adım sonrası son boşluk



5 adım sonrası önde boşluk

Sigmalar

Sigmas, zaman çizelgesi tarafından tanımlandığı üzere bir örneğin belirli bir adımda ne kadar gürültülü olduğunun bir ölçüsüdür. Özel sigmas kullanıldığında, timesteps varsayılan zamanlayıcı yapılandırması yerine bu değerlerden hesaplanır.

step:   0    1    2    3    4
sigma:  σ0 > σ1 > σ2 > σ3 > σ4 ≈ 0
        high noise  --->  clean sample

Özel sigmas değerleri, yalnızca ilgili zamanlayıcının set_timesteps metodu bu argümanı kabul ediyorsa çalışır (pipeline'lar imzayı retrieve_timesteps üzerinden kontrol eder ve aksi halde ValueError fırlatır). Bunları iletmeden önce zamanlayıcının API sayfasını veya set_timesteps imzasını kontrol edin.

Özel sigmaları pipeline'da sigmas argümanına iletin. Aşağıdaki örnek, 10 adımlı AYS zamanlamasındaki sigmas değerlerini kullanır.

import torch
from diffusers import DiffusionPipeline, EulerDiscreteScheduler
from diffusers.schedulers import AysSchedules

pipeline = DiffusionPipeline.from_pretrained(
    "SG161222/RealVisXL_V4.0",
    dtype=torch.float16,
    device_map="cuda",  # or "mps", "xpu", "cpu"
)
pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)

sigmas = AysSchedules["StableDiffusionXLSigmas"]
prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
    prompt=prompt,
    negative_prompt="",
    sigmas=sigmas,
).images[0]

Karras sigmaları

Karras sigmas, yapısal yeniden inşanın kritik olduğu dizinin ortasında sigmaları daha yoğun bir şekilde kümeleyerek ve gürültü değişimlerinin daha az etkili olduğu başlangıç ve sonda daha az sigma kullanarak, daha verimli örneklemeye yönelik gürültü zamanlamasını yeniden örnekler. Bu, üretilen bir görüntüdeki detay seviyesini artırabilir.

default σ:  *  *  *  *  *  *  *  *     even-ish
Karras σ:   *   * * * * *   *          denser mid, sparser ends
            |---structure---|

Bunu etkinleştirmek için zamanlayıcıda use_karras_sigmas=True değerini ayarlayın.

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler

pipeline = DiffusionPipeline.from_pretrained(
    "SG161222/RealVisXL_V4.0",
    dtype=torch.float16,
    device_map="cuda"  # or "mps", "xpu", "cpu"
)
pipeline.scheduler = DPMSolverMultistepScheduler.from_config(
  pipeline.scheduler.config,
  algorithm_type="sde-dpmsolver++",
  use_karras_sigmas=True,
)

prompt = "A cinematic shot of a cute little rabbit wearing a jacket and doing a thumbs up"
image = pipeline(
    prompt=prompt,
    negative_prompt="",
    num_inference_steps=20,
).images[0]
Karras sigmaları etkin



Karras sigmaları devre dışı

Karras sigmalarını destekleyen zamanlayıcıların listesi için zamanlayıcı API genel bakışına bakın. Yalnızca Karras sigmalarıyla eğitilmiş modeller için kullanılmalıdır.

Sonraki adımlar

Xet Storage Details

Size:
12 kB
·
Xet hash:
a26852c0b178e3b7cccb39feb7b5ddaacb656e6f5973bfb1f0e400f3d2a42fa4

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.