Buckets:
| # Diffusers | |
| ## Docs | |
| - [Desempenho básico](https://huggingface.co/docs/diffusers/pr_11739/pt/stable_diffusion.md) | |
| - [Instalação](https://huggingface.co/docs/diffusers/pr_11739/pt/installation.md) | |
| - [Tour rápido](https://huggingface.co/docs/diffusers/pr_11739/pt/quicktour.md) | |
| - [Diffusers](https://huggingface.co/docs/diffusers/pr_11739/pt/index.md) | |
| ### Desempenho básico | |
| https://huggingface.co/docs/diffusers/pr_11739/pt/stable_diffusion.md | |
| # Desempenho básico | |
| Difusão é um processo aleatório que demanda muito processamento. Você pode precisar executar o `DiffusionPipeline` várias vezes antes de obter o resultado desejado. Por isso é importante equilibrar cuidadosamente a velocidade de geração e o uso de memória para iterar mais rápido. | |
| Este guia recomenda algumas dicas básicas de desempenho para usar o `DiffusionPipeline`. Consulte a seção de documentação sobre Otimização de Inferência, como [Acelerar inferência](./optimization/fp16) ou [Reduzir uso de memória](./optimization/memory) para guias de desempenho mais detalhados. | |
| ## Uso de memória | |
| Reduzir a quantidade de memória usada indiretamente acelera a geração e pode ajudar um modelo a caber no dispositivo. | |
| O método `enable_model_cpu_offload()` move um modelo para a CPU quando não está em uso para economizar memória da GPU. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| torch_dtype=torch.bfloat16, | |
| device_map="cuda" | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| pipeline(prompt).images[0] | |
| print(f"Memória máxima reservada: {torch.cuda.max_memory_allocated() / 1024**3:.2f} GB") | |
| ``` | |
| ## Velocidade de inferência | |
| O processo de remoção de ruído é o mais exigente computacionalmente durante a difusão. Métodos que otimizam este processo aceleram a velocidade de inferência. Experimente os seguintes métodos para acelerar. | |
| - Adicione `device_map="cuda"` para colocar o pipeline em uma GPU. Colocar um modelo em um acelerador, como uma GPU, aumenta a velocidade porque realiza computações em paralelo. | |
| - Defina `torch_dtype=torch.bfloat16` para executar o pipeline em meia-precisão. Reduzir a precisão do tipo de dado aumenta a velocidade porque leva menos tempo para realizar computações em precisão mais baixa. | |
| ```py | |
| import torch | |
| import time | |
| from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| torch_dtype=torch.bfloat16, | |
| device_map="cuda" | |
| ) | |
| ``` | |
| - Use um agendador mais rápido, como `DPMSolverMultistepScheduler`, que requer apenas ~20-25 passos. | |
| - Defina `num_inference_steps` para um valor menor. Reduzir o número de passos de inferência reduz o número total de computações. No entanto, isso pode resultar em menor qualidade de geração. | |
| ```py | |
| pipeline.scheduler = DPMSolverMultistepScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| start_time = time.perf_counter() | |
| image = pipeline(prompt).images[0] | |
| end_time = time.perf_counter() | |
| print(f"Geração de imagem levou {end_time - start_time:.3f} segundos") | |
| ``` | |
| ## Qualidade de geração | |
| Muitos modelos de difusão modernos entregam imagens de alta qualidade imediatamente. No entanto, você ainda pode melhorar a qualidade de geração experimentando o seguinte. | |
| - Experimente um prompt mais detalhado e descritivo. Inclua detalhes como o meio da imagem, assunto, estilo e estética. Um prompt negativo também pode ajudar, guiando um modelo para longe de características indesejáveis usando palavras como baixa qualidade ou desfocado. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| torch_dtype=torch.bfloat16, | |
| device_map="cuda" | |
| ) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| Para mais detalhes sobre como criar prompts melhores, consulte a documentação sobre [Técnicas de prompt](./using-diffusers/weighted_prompts). | |
| - Experimente um agendador diferente, como `HeunDiscreteScheduler` ou `LMSDiscreteScheduler`, que sacrifica velocidade de geração por qualidade. | |
| ```py | |
| import torch | |
| from diffusers import DiffusionPipeline, HeunDiscreteScheduler | |
| pipeline = DiffusionPipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-base-1.0", | |
| torch_dtype=torch.bfloat16, | |
| device_map="cuda" | |
| ) | |
| pipeline.scheduler = HeunDiscreteScheduler.from_config(pipeline.scheduler.config) | |
| prompt = """ | |
| cinematic film still of a cat sipping a margarita in a pool in Palm Springs, California | |
| highly detailed, high budget hollywood movie, cinemascope, moody, epic, gorgeous, film grain | |
| """ | |
| negative_prompt = "low quality, blurry, ugly, poor details" | |
| pipeline(prompt, negative_prompt=negative_prompt).images[0] | |
| ``` | |
| ## Próximos passos | |
| Diffusers oferece otimizações mais avançadas e poderosas, como [group-offloading](./optimization/memory#group-offloading) e [compilação regional](./optimization/fp16#regional-compilation). Para saber mais sobre como maximizar o desempenho, consulte a seção sobre Otimização de Inferência. | |
| ### Instalação | |
| https://huggingface.co/docs/diffusers/pr_11739/pt/installation.md | |
| # Instalação | |
| 🤗 Diffusers é testado no Python 3.8+, PyTorch 1.7.0+, e Flax. Siga as instruções de instalação abaixo para a biblioteca de deep learning que você está utilizando: | |
| - [PyTorch](https://pytorch.org/get-started/locally/) instruções de instalação | |
| - [Flax](https://flax.readthedocs.io/en/latest/) instruções de instalação | |
| ## Instalação com pip | |
| Recomenda-se instalar 🤗 Diffusers em um [ambiente virtual](https://docs.python.org/3/library/venv.html). | |
| Se você não está familiarizado com ambiente virtuals, veja o [guia](https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/). | |
| Um ambiente virtual facilita gerenciar diferentes projetos e evitar problemas de compatibilidade entre dependências. | |
| Comece criando um ambiente virtual no diretório do projeto: | |
| ```bash | |
| python -m venv .env | |
| ``` | |
| Ative o ambiente virtual: | |
| ```bash | |
| source .env/bin/activate | |
| ``` | |
| Recomenda-se a instalação do 🤗 Transformers porque 🤗 Diffusers depende de seus modelos: | |
| ```bash | |
| pip install diffusers["torch"] transformers | |
| ``` | |
| ```bash | |
| pip install diffusers["flax"] transformers | |
| ``` | |
| ## Instalação a partir do código fonte | |
| Antes da instalação do 🤗 Diffusers a partir do código fonte, certifique-se de ter o PyTorch e o 🤗 Accelerate instalados. | |
| Para instalar o 🤗 Accelerate: | |
| ```bash | |
| pip install accelerate | |
| ``` | |
| então instale o 🤗 Diffusers do código fonte: | |
| ```bash | |
| pip install git+https://github.com/huggingface/diffusers | |
| ``` | |
| Esse comando instala a última versão em desenvolvimento `main` em vez da última versão estável `stable`. | |
| A versão `main` é útil para se manter atualizado com os últimos desenvolvimentos. | |
| Por exemplo, se um bug foi corrigido desde o último lançamento estável, mas um novo lançamento ainda não foi lançado. | |
| No entanto, isso significa que a versão `main` pode não ser sempre estável. | |
| Nós nos esforçamos para manter a versão `main` operacional, e a maioria dos problemas geralmente são resolvidos em algumas horas ou um dia. | |
| Se você encontrar um problema, por favor abra uma [Issue](https://github.com/huggingface/diffusers/issues/new/choose), assim conseguimos arrumar o quanto antes! | |
| ## Instalação editável | |
| Você precisará de uma instalação editável se você: | |
| - Usar a versão `main` do código fonte. | |
| - Contribuir para o 🤗 Diffusers e precisa testar mudanças no código. | |
| Clone o repositório e instale o 🤗 Diffusers com os seguintes comandos: | |
| ```bash | |
| git clone https://github.com/huggingface/diffusers.git | |
| cd diffusers | |
| ``` | |
| ```bash | |
| pip install -e ".[torch]" | |
| ``` | |
| ```bash | |
| pip install -e ".[flax]" | |
| ``` | |
| Esses comandos irão vincular a pasta que você clonou o repositório e os caminhos das suas bibliotecas Python. | |
| Python então irá procurar dentro da pasta que você clonou além dos caminhos normais das bibliotecas. | |
| Por exemplo, se o pacote python for tipicamente instalado no `~/anaconda3/envs/main/lib/python3.10/site-packages/`, o Python também irá procurar na pasta `~/diffusers/` que você clonou. | |
| > [!WARNING] | |
| > Você deve manter a pasta `diffusers` se quiser continuar usando a biblioteca. | |
| Agora você pode facilmente atualizar seu clone para a última versão do 🤗 Diffusers com o seguinte comando: | |
| ```bash | |
| cd ~/diffusers/ | |
| git pull | |
| ``` | |
| Seu ambiente Python vai encontrar a versão `main` do 🤗 Diffusers na próxima execução. | |
| ## Cache | |
| Os pesos e os arquivos dos modelos são baixados do Hub para o cache que geralmente é o seu diretório home. Você pode mudar a localização do cache especificando as variáveis de ambiente `HF_HOME` ou `HUGGINFACE_HUB_CACHE` ou configurando o parâmetro `cache_dir` em métodos como `from_pretrained()`. | |
| Aquivos em cache permitem que você rode 🤗 Diffusers offline. Para prevenir que o 🤗 Diffusers se conecte à internet, defina a variável de ambiente `HF_HUB_OFFLINE` para `True` e o 🤗 Diffusers irá apenas carregar arquivos previamente baixados em cache. | |
| ```shell | |
| export HF_HUB_OFFLINE=True | |
| ``` | |
| Para mais detalhes de como gerenciar e limpar o cache, olhe o guia de [caching](https://huggingface.co/docs/huggingface_hub/guides/manage-cache). | |
| ## Telemetria | |
| Nossa biblioteca coleta informações de telemetria durante as requisições `from_pretrained()`. | |
| O dado coletado inclui a versão do 🤗 Diffusers e PyTorch/Flax, o modelo ou classe de pipeline requisitado, | |
| e o caminho para um checkpoint pré-treinado se ele estiver hospedado no Hugging Face Hub. | |
| Esse dado de uso nos ajuda a debugar problemas e priorizar novas funcionalidades. | |
| Telemetria é enviada apenas quando é carregado modelos e pipelines do Hub, | |
| e não é coletado se você estiver carregando arquivos locais. | |
| Nos entendemos que nem todo mundo quer compartilhar informações adicionais, e nós respeitamos sua privacidade. | |
| Você pode desabilitar a coleta de telemetria definindo a variável de ambiente `DISABLE_TELEMETRY` do seu terminal: | |
| No Linux/MacOS: | |
| ```bash | |
| export DISABLE_TELEMETRY=YES | |
| ``` | |
| No Windows: | |
| ```bash | |
| set DISABLE_TELEMETRY=YES | |
| ``` | |
| ### Tour rápido | |
| https://huggingface.co/docs/diffusers/pr_11739/pt/quicktour.md | |
| # Tour rápido | |
| Modelos de difusão são treinados para remover o ruído Gaussiano aleatório passo a passo para gerar uma amostra de interesse, como uma imagem ou áudio. Isso despertou um tremendo interesse em IA generativa, e você provavelmente já viu exemplos de imagens geradas por difusão na internet. 🧨 Diffusers é uma biblioteca que visa tornar os modelos de difusão amplamente acessíveis a todos. | |
| Seja você um desenvolvedor ou um usuário, esse tour rápido irá introduzir você ao 🧨 Diffusers e ajudar você a começar a gerar rapidamente! Há três componentes principais da biblioteca para conhecer: | |
| - O `DiffusionPipeline` é uma classe de alto nível de ponta a ponta desenhada para gerar rapidamente amostras de modelos de difusão pré-treinados para inferência. | |
| - [Modelos](./api/models) pré-treinados populares e módulos que podem ser usados como blocos de construção para criar sistemas de difusão. | |
| - Vários [Agendadores](./api/schedulers/overview) diferentes - algoritmos que controlam como o ruído é adicionado para treinamento, e como gerar imagens sem o ruído durante a inferência. | |
| Esse tour rápido mostrará como usar o `DiffusionPipeline` para inferência, e então mostrará como combinar um modelo e um agendador para replicar o que está acontecendo dentro do `DiffusionPipeline`. | |
| > [!TIP] | |
| > Esse tour rápido é uma versão simplificada da introdução 🧨 Diffusers [notebook](https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/diffusers_intro.ipynb) para ajudar você a começar rápido. Se você quer aprender mais sobre o objetivo do 🧨 Diffusers, filosofia de design, e detalhes adicionais sobre a API principal, veja o notebook! | |
| Antes de começar, certifique-se de ter todas as bibliotecas necessárias instaladas: | |
| ```py | |
| # uncomment to install the necessary libraries in Colab | |
| #!pip install --upgrade diffusers accelerate transformers | |
| ``` | |
| - [🤗 Accelerate](https://huggingface.co/docs/accelerate/index) acelera o carregamento do modelo para geração e treinamento. | |
| - [🤗 Transformers](https://huggingface.co/docs/transformers/index) é necessário para executar os modelos mais populares de difusão, como o [Stable Diffusion](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/overview). | |
| ## DiffusionPipeline | |
| O `DiffusionPipeline` é a forma mais fácil de usar um sistema de difusão pré-treinado para geração. É um sistema de ponta a ponta contendo o modelo e o agendador. Você pode usar o `DiffusionPipeline` pronto para muitas tarefas. Dê uma olhada na tabela abaixo para algumas tarefas suportadas, e para uma lista completa de tarefas suportadas, veja a tabela [Resumo do 🧨 Diffusers](./api/pipelines/overview#diffusers-summary). | |
| | **Tarefa** | **Descrição** | **Pipeline** | | |
| | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | | |
| | Unconditional Image Generation | gera uma imagem a partir do ruído Gaussiano | [unconditional_image_generation](./using-diffusers/unconditional_image_generation) | | |
| | Text-Guided Image Generation | gera uma imagem a partir de um prompt de texto | [conditional_image_generation](./using-diffusers/conditional_image_generation) | | |
| | Text-Guided Image-to-Image Translation | adapta uma imagem guiada por um prompt de texto | [img2img](./using-diffusers/img2img) | | |
| | Text-Guided Image-Inpainting | preenche a parte da máscara da imagem, dado a imagem, a máscara e o prompt de texto | [inpaint](./using-diffusers/inpaint) | | |
| | Text-Guided Depth-to-Image Translation | adapta as partes de uma imagem guiada por um prompt de texto enquanto preserva a estrutura por estimativa de profundidade | [depth2img](./using-diffusers/depth2img) | | |
| Comece criando uma instância do `DiffusionPipeline` e especifique qual checkpoint do pipeline você gostaria de baixar. | |
| Você pode usar o `DiffusionPipeline` para qualquer [checkpoint](https://huggingface.co/models?library=diffusers&sort=downloads) armazenado no Hugging Face Hub. | |
| Nesse quicktour, você carregará o checkpoint [`stable-diffusion-v1-5`](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5) para geração de texto para imagem. | |
| > [!WARNING] | |
| > Para os modelos de [Stable Diffusion](https://huggingface.co/CompVis/stable-diffusion), por favor leia cuidadosamente a [licença](https://huggingface.co/spaces/CompVis/stable-diffusion-license) primeiro antes de rodar o modelo. 🧨 Diffusers implementa uma verificação de segurança: [`safety_checker`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/safety_checker.py) para prevenir conteúdo ofensivo ou nocivo, mas as capacidades de geração de imagem aprimorada do modelo podem ainda produzir conteúdo potencialmente nocivo. | |
| Para carregar o modelo com o método `from_pretrained()`: | |
| ```python | |
| >>> from diffusers import DiffusionPipeline | |
| >>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", use_safetensors=True) | |
| ``` | |
| O `DiffusionPipeline` baixa e armazena em cache todos os componentes de modelagem, tokenização, e agendamento. Você verá que o pipeline do Stable Diffusion é composto pelo `UNet2DConditionModel` e `PNDMScheduler` entre outras coisas: | |
| ```py | |
| >>> pipeline | |
| StableDiffusionPipeline { | |
| "_class_name": "StableDiffusionPipeline", | |
| "_diffusers_version": "0.13.1", | |
| ..., | |
| "scheduler": [ | |
| "diffusers", | |
| "PNDMScheduler" | |
| ], | |
| ..., | |
| "unet": [ | |
| "diffusers", | |
| "UNet2DConditionModel" | |
| ], | |
| "vae": [ | |
| "diffusers", | |
| "AutoencoderKL" | |
| ] | |
| } | |
| ``` | |
| Nós fortemente recomendamos rodar o pipeline em uma placa de vídeo, pois o modelo consiste em aproximadamente 1.4 bilhões de parâmetros. | |
| Você pode mover o objeto gerador para uma placa de vídeo, assim como você faria no PyTorch: | |
| ```python | |
| >>> pipeline.to("cuda") | |
| ``` | |
| Agora você pode passar o prompt de texto para o `pipeline` para gerar uma imagem, e então acessar a imagem sem ruído. Por padrão, a saída da imagem é embrulhada em um objeto [`PIL.Image`](https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=image#the-image-class). | |
| ```python | |
| >>> image = pipeline("An image of a squirrel in Picasso style").images[0] | |
| >>> image | |
| ``` | |
| Salve a imagem chamando o `save`: | |
| ```python | |
| >>> image.save("image_of_squirrel_painting.png") | |
| ``` | |
| ### Pipeline local | |
| Você também pode utilizar o pipeline localmente. A única diferença é que você precisa baixar os pesos primeiro: | |
| ```bash | |
| !git lfs install | |
| !git clone https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5 | |
| ``` | |
| Assim carregue os pesos salvos no pipeline: | |
| ```python | |
| >>> pipeline = DiffusionPipeline.from_pretrained("./stable-diffusion-v1-5", use_safetensors=True) | |
| ``` | |
| Agora você pode rodar o pipeline como você faria na seção acima. | |
| ### Troca dos agendadores | |
| Agendadores diferentes tem diferentes velocidades de retirar o ruído e compensações de qualidade. A melhor forma de descobrir qual funciona melhor para você é testar eles! Uma das principais características do 🧨 Diffusers é permitir que você troque facilmente entre agendadores. Por exemplo, para substituir o `PNDMScheduler` padrão com o `EulerDiscreteScheduler`, carregue ele com o método `from_config()`: | |
| ```py | |
| >>> from diffusers import EulerDiscreteScheduler | |
| >>> pipeline = DiffusionPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5", use_safetensors=True) | |
| >>> pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config) | |
| ``` | |
| Tente gerar uma imagem com o novo agendador e veja se você nota alguma diferença! | |
| Na próxima seção, você irá dar uma olhada mais de perto nos componentes - o modelo e o agendador - que compõe o `DiffusionPipeline` e aprender como usar esses componentes para gerar uma imagem de um gato. | |
| ## Modelos | |
| A maioria dos modelos recebe uma amostra de ruído, e em cada _timestep_ ele prevê o _noise residual_ (outros modelos aprendem a prever a amostra anterior diretamente ou a velocidade ou [`v-prediction`](https://github.com/huggingface/diffusers/blob/5e5ce13e2f89ac45a0066cb3f369462a3cf1d9ef/src/diffusers/schedulers/scheduling_ddim.py#L110)), a diferença entre uma imagem menos com ruído e a imagem de entrada. Você pode misturar e combinar modelos para criar outros sistemas de difusão. | |
| Modelos são inicializados com o método `from_pretrained()` que também armazena em cache localmente os pesos do modelo para que seja mais rápido na próxima vez que você carregar o modelo. Para o tour rápido, você irá carregar o `UNet2DModel`, um modelo básico de geração de imagem incondicional com um checkpoint treinado em imagens de gato: | |
| ```py | |
| >>> from diffusers import UNet2DModel | |
| >>> repo_id = "google/ddpm-cat-256" | |
| >>> model = UNet2DModel.from_pretrained(repo_id, use_safetensors=True) | |
| ``` | |
| Para acessar os parâmetros do modelo, chame `model.config`: | |
| ```py | |
| >>> model.config | |
| ``` | |
| A configuração do modelo é um dicionário 🧊 congelado 🧊, o que significa que esses parâmetros não podem ser mudados depois que o modelo é criado. Isso é intencional e garante que os parâmetros usados para definir a arquitetura do modelo no início permaneçam os mesmos, enquanto outros parâmetros ainda podem ser ajustados durante a geração. | |
| Um dos parâmetros mais importantes são: | |
| - `sample_size`: a dimensão da altura e largura da amostra de entrada. | |
| - `in_channels`: o número de canais de entrada da amostra de entrada. | |
| - `down_block_types` e `up_block_types`: o tipo de blocos de downsampling e upsampling usados para criar a arquitetura UNet. | |
| - `block_out_channels`: o número de canais de saída dos blocos de downsampling; também utilizado como uma order reversa do número de canais de entrada dos blocos de upsampling. | |
| - `layers_per_block`: o número de blocks ResNet presentes em cada block UNet. | |
| Para usar o modelo para geração, crie a forma da imagem com ruído Gaussiano aleatório. Deve ter um eixo `batch` porque o modelo pode receber múltiplos ruídos aleatórios, um eixo `channel` correspondente ao número de canais de entrada, e um eixo `sample_size` para a altura e largura da imagem: | |
| ```py | |
| >>> import torch | |
| >>> torch.manual_seed(0) | |
| >>> noisy_sample = torch.randn(1, model.config.in_channels, model.config.sample_size, model.config.sample_size) | |
| >>> noisy_sample.shape | |
| torch.Size([1, 3, 256, 256]) | |
| ``` | |
| Para geração, passe a imagem com ruído para o modelo e um `timestep`. O `timestep` indica o quão ruidosa a imagem de entrada é, com mais ruído no início e menos no final. Isso ajuda o modelo a determinar sua posição no processo de difusão, se está mais perto do início ou do final. Use o método `sample` para obter a saída do modelo: | |
| ```py | |
| >>> with torch.no_grad(): | |
| ... noisy_residual = model(sample=noisy_sample, timestep=2).sample | |
| ``` | |
| Para geração de exemplos reais, você precisará de um agendador para guiar o processo de retirada do ruído. Na próxima seção, você irá aprender como acoplar um modelo com um agendador. | |
| ## Agendadores | |
| Agendadores gerenciam a retirada do ruído de uma amostra ruidosa para uma amostra menos ruidosa dado a saída do modelo - nesse caso, é o `noisy_residual`. | |
| > [!TIP] | |
| > 🧨 Diffusers é uma caixa de ferramentas para construir sistemas de difusão. Enquanto o `DiffusionPipeline` é uma forma conveniente de começar com um sistema de difusão pré-construído, você também pode escolher seus próprios modelos e agendadores separadamente para construir um sistema de difusão personalizado. | |
| Para o tour rápido, você irá instanciar o `DDPMScheduler` com o método `from_config()`: | |
| ```py | |
| >>> from diffusers import DDPMScheduler | |
| >>> scheduler = DDPMScheduler.from_config(repo_id) | |
| >>> scheduler | |
| DDPMScheduler { | |
| "_class_name": "DDPMScheduler", | |
| "_diffusers_version": "0.13.1", | |
| "beta_end": 0.02, | |
| "beta_schedule": "linear", | |
| "beta_start": 0.0001, | |
| "clip_sample": true, | |
| "clip_sample_range": 1.0, | |
| "num_train_timesteps": 1000, | |
| "prediction_type": "epsilon", | |
| "trained_betas": null, | |
| "variance_type": "fixed_small" | |
| } | |
| ``` | |
| > [!TIP] | |
| > 💡 Perceba como o agendador é instanciado de uma configuração. Diferentemente de um modelo, um agendador não tem pesos treináveis e é livre de parâmetros! | |
| Um dos parâmetros mais importante são: | |
| - `num_train_timesteps`: o tamanho do processo de retirar ruído ou em outras palavras, o número de _timesteps_ necessários para o processo de ruídos Gausianos aleatórios dentro de uma amostra de dados. | |
| - `beta_schedule`: o tipo de agendados de ruído para o uso de geração e treinamento. | |
| - `beta_start` e `beta_end`: para começar e terminar os valores de ruído para o agendador de ruído. | |
| Para predizer uma imagem com um pouco menos de ruído, passe o seguinte para o método do agendador `step()`: saída do modelo, `timestep`, e a atual `amostra`. | |
| ```py | |
| >>> less_noisy_sample = scheduler.step(model_output=noisy_residual, timestep=2, sample=noisy_sample).prev_sample | |
| >>> less_noisy_sample.shape | |
| ``` | |
| O `less_noisy_sample` pode ser passado para o próximo `timestep` onde ele ficará ainda com menos ruído! Vamos juntar tudo agora e visualizar o processo inteiro de retirada de ruído. | |
| Comece, criando a função que faça o pós-processamento e mostre a imagem sem ruído como uma `PIL.Image`: | |
| ```py | |
| >>> import PIL.Image | |
| >>> import numpy as np | |
| >>> def display_sample(sample, i): | |
| ... image_processed = sample.cpu().permute(0, 2, 3, 1) | |
| ... image_processed = (image_processed + 1.0) * 127.5 | |
| ... image_processed = image_processed.numpy().astype(np.uint8) | |
| ... image_pil = PIL.Image.fromarray(image_processed[0]) | |
| ... display(f"Image at step {i}") | |
| ... display(image_pil) | |
| ``` | |
| Para acelerar o processo de retirada de ruído, mova a entrada e o modelo para uma GPU: | |
| ```py | |
| >>> model.to("cuda") | |
| >>> noisy_sample = noisy_sample.to("cuda") | |
| ``` | |
| Agora, crie um loop de retirada de ruído que prediz o residual da amostra menos ruidosa, e computa a amostra menos ruidosa com o agendador: | |
| ```py | |
| >>> import tqdm | |
| >>> sample = noisy_sample | |
| >>> for i, t in enumerate(tqdm.tqdm(scheduler.timesteps)): | |
| ... # 1. predict noise residual | |
| ... with torch.no_grad(): | |
| ... residual = model(sample, t).sample | |
| ... # 2. compute less noisy image and set x_t -> x_t-1 | |
| ... sample = scheduler.step(residual, t, sample).prev_sample | |
| ... # 3. optionally look at image | |
| ... if (i + 1) % 50 == 0: | |
| ... display_sample(sample, i + 1) | |
| ``` | |
| Sente-se e assista o gato ser gerado do nada além de ruído! 😻 | |
| ## Próximos passos | |
| Esperamos que você tenha gerado algumas imagens legais com o 🧨 Diffusers neste tour rápido! Para suas próximas etapas, você pode | |
| - Treine ou faça a configuração fina de um modelo para gerar suas próprias imagens no tutorial de [treinamento](./tutorials/basic_training). | |
| - Veja exemplos oficiais e da comunidade de [scripts de treinamento ou configuração fina](https://github.com/huggingface/diffusers/tree/main/examples#-diffusers-examples) para os mais variados casos de uso. | |
| - Aprenda sobre como carregar, acessar, mudar e comparar agendadores no guia [Usando diferentes agendadores](./using-diffusers/schedulers). | |
| - Explore engenharia de prompt, otimizações de velocidade e memória, e dicas e truques para gerar imagens de maior qualidade com o guia [Stable Diffusion](./stable_diffusion). | |
| - Se aprofunde em acelerar 🧨 Diffusers com guias sobre [PyTorch otimizado em uma GPU](./optimization/fp16), e guias de inferência para rodar [Stable Diffusion em Apple Silicon (M1/M2)](./optimization/mps) e [ONNX Runtime](./optimization/onnx). | |
| ### Diffusers | |
| https://huggingface.co/docs/diffusers/pr_11739/pt/index.md | |
| # Diffusers | |
| 🤗 Diffusers é uma biblioteca de modelos de difusão de última geração para geração de imagens, áudio e até mesmo estruturas 3D de moléculas. Se você está procurando uma solução de geração simples ou quer treinar seu próprio modelo de difusão, 🤗 Diffusers é uma caixa de ferramentas modular que suporta ambos. Nossa biblioteca é desenhada com foco em [usabilidade em vez de desempenho](conceptual/philosophy#usability-over-performance), [simples em vez de fácil](conceptual/philosophy#simple-over-easy) e [customizável em vez de abstrações](conceptual/philosophy#tweakable-contributorfriendly-over-abstraction). | |
| A Biblioteca tem três componentes principais: | |
| - Pipelines de última geração para a geração em poucas linhas de código. Há muitos pipelines no 🤗 Diffusers, veja a tabela no pipeline [Visão geral](api/pipelines/overview) para uma lista completa de pipelines disponíveis e as tarefas que eles resolvem. | |
| - Intercambiáveis [agendadores de ruído](api/schedulers/overview) para balancear as compensações entre velocidade e qualidade de geração. | |
| - [Modelos](api/models) pré-treinados que podem ser usados como se fossem blocos de construção, e combinados com agendadores, para criar seu próprio sistema de difusão de ponta a ponta. | |
| Tutoriais | |
| Aprenda as competências fundamentais que precisa para iniciar a gerar saídas, construa seu próprio sistema de difusão, e treine um modelo de difusão. Nós recomendamos começar por aqui se você está utilizando o 🤗 Diffusers pela primeira vez! | |
| Guias de utilização | |
| Guias práticos para ajudar você carregar pipelines, modelos, e agendadores. Você também aprenderá como usar os pipelines para tarefas específicas, controlar como as saídas são geradas, otimizar a velocidade de geração, e outras técnicas diferentes de treinamento. | |
| Guias conceituais | |
| Compreenda porque a biblioteca foi desenhada da forma que ela é, e aprenda mais sobre as diretrizes éticas e implementações de segurança para o uso da biblioteca. | |
| Referência | |
| Descrições técnicas de como funcionam as classes e métodos do 🤗 Diffusers | |
Xet Storage Details
- Size:
- 29.9 kB
- Xet hash:
- 963cc41868ca7f5e1af7ea00965449b17d55440d4b0270d140353277c24340e0
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.