Diffusers documentation
Agendadores
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 | 🤗 Diffusers | Uso |
|---|---|---|
| DPM++ 2M | DPMSolverMultistepScheduler | |
| DPM++ 2M Karras | DPMSolverMultistepScheduler | inicialize com use_karras_sigmas=True |
| DPM++ 2M SDE | DPMSolverMultistepScheduler | inicialize com algorithm_type="sde-dpmsolver++" |
| DPM++ 2M SDE Karras | DPMSolverMultistepScheduler | inicialize com use_karras_sigmas=True e algorithm_type="sde-dpmsolver++" |
| DPM++ 2S a | N/A | muito semelhante ao DPMSolverSinglestepScheduler |
| DPM++ 2S a Karras | N/A | muito semelhante a DPMSolverSinglestepScheduler(use_karras_sigmas=True, ...) |
| DPM++ SDE | DPMSolverSinglestepScheduler | |
| DPM++ SDE Karras | DPMSolverSinglestepScheduler | inicialize com use_karras_sigmas=True |
| DPM2 | KDPM2DiscreteScheduler | |
| DPM2 Karras | KDPM2DiscreteScheduler | inicialize com use_karras_sigmas=True |
| DPM2 a | KDPM2AncestralDiscreteScheduler | |
| DPM2 a Karras | KDPM2AncestralDiscreteScheduler | inicialize com use_karras_sigmas=True |
| DPM adaptativo | N/A | |
| DPM rápido | N/A | |
| Euler | EulerDiscreteScheduler | |
| Euler a | EulerAncestralDiscreteScheduler | |
| Heun | HeunDiscreteScheduler | |
| LMS | LMSDiscreteScheduler | |
| LMS Karras | LMSDiscreteScheduler | inicialize com use_karras_sigmas=True |
| N/A | DEISMultistepScheduler | |
| N/A | UniPCMultistepScheduler |
Agendamentos de ruído e tipos de agendamento
| A1111/k-diffusion | 🤗 Diffusers |
|---|---|
| Karras | inicialize com use_karras_sigmas=True |
| sgm_uniform | inicializar com timestep_spacing="trailing" |
| simples | inicializar com timestep_spacing="trailing" |
| exponencial | inicialize com timestep_spacing="linspace", use_exponential_sigmas=True |
| beta | inicializar 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 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
< source >( 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 (
strouos.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().
- Uma string, o id do modelo (por exemplo,
- 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ãoFalse) — Se os kwargs que não são consumidos pela classe Python devem ser retornados ou não. - cache_dir (
strouos.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ãoFalse) — 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ãoFalse) — 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ãoFalse) — Se deve carregar apenas os pesos e arquivos de configuração do modelo localmente. Se definido comoTrue, o modelo não será baixado do Hub. - token (
stroubool, opcional) — O token a ser usado como autorização de bearer HTTP para arquivos remotos. SeTrue, o token gerado pordiffusers-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
< source >( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs: Any )
Parâmetros
- save_directory (
strouos.PathLike) — Diretório onde o arquivo JSON de configuração será salvo (será criado se não existir). - push_to_hub (
bool, opcional, padrãoFalse) — 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 comrepo_id(o padrão será o nome desave_directoryno 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
< source >( prev_sample: Tensor )
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
Um Mixin para enviar um modelo, agendador ou pipeline para o Hugging Face Hub.
push_to_hub
< source >( 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_idtambé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. SeNone(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 executarhf auth login(armazenado em~/.huggingface). - create_pr (
bool, opcional, padrãoFalse) — Se deve ou não criar um PR com os arquivos enviados ou fazer o commit diretamente. - safe_serialization (
bool, opcional, padrãoTrue) — Se os pesos do modelo devem ser convertidos para o formatosafetensors. - variant (
str, opcional) — Se especificado, os pesos são salvos no formatopytorch_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")