Diffusers documentation

Agendadores

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Agendadores

🤗 O Diffusers fornece muitas funções de agendador para o processo de difusão. Um agendador recebe a saída de um modelo (a amostra na qual o processo de difusão está iterando) e um timestep para retornar uma amostra sem ruído. O timestep é importante porque determina em que ponto do processo de difusão a etapa está; os dados são gerados iterando para frente n timesteps e a inferência ocorre propagando para trás pelos timesteps. Com base no timestep, um agendador pode ser discreto, no qual o timestep é um int, ou contínuo, no qual o timestep é um float.

Dependendo do contexto, um scheduler define como adicionar ruído iterativamente a uma imagem ou como atualizar uma amostra com base na saída de um modelo:

  • durante o treinamento, um agendador adiciona ruído (existem diferentes algoritmos para a forma de adicionar ruído) a uma amostra para treinar um modelo de difusão
  • durante a inferência, um agendador define como atualizar uma amostra com base na saída de um modelo pré-treinado

Muitos agendadores são implementados a partir da biblioteca k-diffusion de Katherine Crowson e também são amplamente utilizados no A1111. Para ajudá-lo a mapear os agendadores do k-diffusion e do A1111 para os agendadores no 🤗 Diffusers, veja a tabela abaixo:

A1111/k-diffusion🤗 DiffusersUso
DPM++ 2MDPMSolverMultistepScheduler
DPM++ 2M KarrasDPMSolverMultistepSchedulerinicialize com use_karras_sigmas=True
DPM++ 2M SDEDPMSolverMultistepSchedulerinicialize com algorithm_type="sde-dpmsolver++"
DPM++ 2M SDE KarrasDPMSolverMultistepSchedulerinicialize com use_karras_sigmas=True e algorithm_type="sde-dpmsolver++"
DPM++ 2S aN/Amuito semelhante ao DPMSolverSinglestepScheduler
DPM++ 2S a KarrasN/Amuito semelhante a DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...)
DPM++ SDEDPMSolverSinglestepScheduler
DPM++ SDE KarrasDPMSolverSinglestepSchedulerinicialize com use_karras_sigmas=True
DPM2KDPM2DiscreteScheduler
DPM2 KarrasKDPM2DiscreteSchedulerinicialize com use_karras_sigmas=True
DPM2 aKDPM2AncestralDiscreteScheduler
DPM2 a KarrasKDPM2AncestralDiscreteSchedulerinicialize com use_karras_sigmas=True
DPM adaptativoN/A
DPM rápidoN/A
EulerEulerDiscreteScheduler
Euler aEulerAncestralDiscreteScheduler
HeunHeunDiscreteScheduler
LMSLMSDiscreteScheduler
LMS KarrasLMSDiscreteSchedulerinicialize com use_karras_sigmas=True
N/ADEISMultistepScheduler
N/AUniPCMultistepScheduler

Agendamentos de ruído e tipos de agendamento

A1111/k-diffusion🤗 Diffusers
Karrasinicialize com use_karras_sigmas=True
sgm_uniforminicializar com timestep_spacing="trailing"
simplesinicializar com timestep_spacing="trailing"
exponencialinicialize com timestep_spacing="linspace", use_exponential_sigmas=True
betainicializar com timestep_spacing="linspace", use_beta_sigmas=True

Todos os agendadores são construídos a partir da classe base SchedulerMixin, que implementa utilitários de baixo nível compartilhados por todos os agendadores.

SchedulerMixin

classe diffusers.SchedulerMixin

< >

( )

Classe base para todos os agendadores.

SchedulerMixin contém funções comuns compartilhadas por todos os agendadores, como as funcionalidades gerais de carregamento e salvamento.

ConfigMixin cuida de armazenar os atributos de configuração (como num_train_timesteps) que são passados para a função __init__ do scheduler, e os atributos podem ser acessados por scheduler.config.num_train_timesteps.

Atributos de classe:

  • _compatibles (list[str]) — Uma lista de classes de agendadores compatíveis com a classe de agendador pai. Use from_config() para carregar uma classe de agendador compatível diferente (deve ser sobrescrita pela classe pai).

from_pretrained

< >

( pretrained_model_name_or_path: str | os.PathLike | None = Nonesubfolder: str | None = Nonereturn_unused_kwargs: bool = False**kwargs: Any ) → SchedulerMixin or tuple[SchedulerMixin, dict[str, Any]]

Parâmetros

  • pretrained_model_name_or_path (str ou os.PathLike, opcional) — Pode ser:
    • Uma string, o id do modelo (por exemplo, google/ddpm-celebahq-256) de um modelo pré-treinado hospedado no Hub.
    • Um caminho para um diretório (por exemplo, ./my_model_directory) contendo a configuração do agendador salva com save_pretrained().
  • subfolder (str, opcional) — A localização da subpasta de um arquivo de modelo dentro de um repositório de modelo maior no Hub ou localmente.
  • return_unused_kwargs (bool, opcional, padrão False) — Se os kwargs que não são consumidos pela classe Python devem ser retornados ou não.
  • cache_dir (str ou os.PathLike, opcional) — Caminho para um diretório onde a configuração de um modelo pré-treinado baixado é armazenada em cache, caso o cache padrão não seja utilizado.
  • force_download (bool, opcional, padrão False) — Se deve forçar o (re-)download dos pesos do modelo e dos arquivos de configuração, sobrescrevendo as versões em cache, caso existam.
  • proxies (dict[str, str], opcional) — Um dicionário de servidores proxy a serem usados por protocolo ou endpoint, por exemplo, {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. Os proxies são usados em cada solicitação.
  • output_loading_info (bool, opcional, padrão False) — Indica se deve ou não retornar também um dicionário contendo chaves ausentes, chaves inesperadas e mensagens de erro.
  • local_files_only (bool, opcional, padrão False) — Se deve carregar apenas os pesos e arquivos de configuração do modelo localmente. Se definido como True, o modelo não será baixado do Hub.
  • token (str ou bool, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. Se True, o token gerado por diffusers-cli login (armazenado em ~/.huggingface) é utilizado.
  • revision (str, opcional, padrão "main") — A versão específica do modelo a ser usada. Pode ser o nome de um branch, o nome de uma tag, um id de commit ou qualquer identificador permitido pelo Git.

Retorna

SchedulerMixin ou tuple[SchedulerMixin, dict[str, Any]]

O agendador instanciado a partir da configuração. Se return_unused_kwargs for True, uma tupla é retornada, onde o segundo elemento é um dicionário de argumentos de palavra-chave não utilizados.

Instancie um agendador a partir de um arquivo de configuração JSON predefinido em um diretório local ou em um repositório do Hub.

> Para usar modelos privados ou com acesso restrito, faça login com hf > auth login. Você também pode ativar o modo especial > “offline” para usar este método em um > ambiente com firewall.

save_pretrained

< >

( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs: Any )

Parâmetros

  • save_directory (str ou os.PathLike) — Diretório onde o arquivo JSON de configuração será salvo (será criado se não existir).
  • push_to_hub (bool, opcional, padrão False) — Se deve ou não enviar seu modelo para o Hugging Face Hub após salvá-lo. Você pode especificar o repositório para o qual deseja enviar com repo_id (o padrão será o nome de save_directory no seu namespace).
  • kwargs (dict[str, Any], opcional) — Argumentos de palavra-chave adicionais passados ao método push_to_hub().

Salve um objeto de configuração de agendador em um diretório para que ele possa ser recarregado usando o método de classe from_pretrained().

SchedulerOutput

classe diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

Parâmetros

  • prev_sample (torch.Tensor de forma (batch_size, num_channels, height, width) para imagens) — Amostra calculada (x_{t-1}) do passo de tempo anterior. prev_sample deve ser usado como entrada do modelo no loop de remoção de ruído.

Classe base para a saída da função step de um agendador.

KarrasDiffusionSchedulers

KarrasDiffusionSchedulers são uma generalização ampla dos agendadores no 🤗 Diffusers. Os agendadores desta classe se distinguem em alto nível pela estratégia de amostragem de ruído, pelo tipo de rede e escalonamento, pela estratégia de treinamento e pela forma como a perda é ponderada.

Os diferentes agendadores desta classe, dependendo do tipo de solucionador de equações diferenciais ordinárias (ODE), se enquadram na taxonomia acima e fornecem uma boa abstração para o design dos principais agendadores implementados no 🤗 Diffusers. Os agendadores desta classe estão disponíveis aqui.

PushToHubMixin

classe diffusers.utils.PushToHubMixin

< >

( )

Um Mixin para enviar um modelo, agendador ou pipeline para o Hugging Face Hub.

push_to_hub

< >

( repo_id: strcommit_message: str | None = Noneprivate: bool | None = Nonetoken: str | None = Nonecreate_pr: bool = Falsesafe_serialization: bool = Truevariant: str | None = Nonesubfolder: str | None = None )

Parâmetros

  • repo_id (str) — O nome do repositório para o qual você deseja enviar os arquivos do seu modelo, agendador ou pipeline. Deve conter o nome da sua organização ao enviar para uma organização. repo_id também pode ser um caminho para um diretório local.
  • commit_message (str, opcional) — Mensagem a ser commitada durante o push. Padrão: "Upload {object}".
  • private (bool, opcional) — Se deve tornar o repositório privado. Se None (padrão), o repositório será público, a menos que o padrão da organização seja privado. Este valor é ignorado se o repositório já existir.
  • token (str, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. O token gerado ao executar hf auth login (armazenado em ~/.huggingface).
  • create_pr (bool, opcional, padrão False) — Se deve ou não criar um PR com os arquivos enviados ou fazer o commit diretamente.
  • safe_serialization (bool, opcional, padrão True) — Se os pesos do modelo devem ser convertidos para o formato safetensors.
  • variant (str, opcional) — Se especificado, os pesos são salvos no formato pytorch_model.<variant>.bin.

Envie arquivos de modelo, agendador ou pipeline para o 🤗 Hugging Face Hub.

Exemplos:

from diffusers import UNet2DConditionModel

unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2", subfolder="unet")

# Push the `unet` to your namespace with the name "my-finetuned-unet".
unet.push_to_hub("my-finetuned-unet")

# Push the `unet` to an organization with the name "my-finetuned-unet".
unet.push_to_hub("your-org/my-finetuned-unet")
Update on GitHub