Buckets:

download
raw
30.8 kB
import"../chunks/DsnmJJEf.js";import{i as x,h as N,C as X,H as s,a as e,E as D,s as R}from"../chunks/BZtIR7es.js";import{p as Y,o as E,s as a,f as P,a as I,b as A,c as S,n as Q}from"../chunks/_hyVs69O.js";import{D as F}from"../chunks/DbcpnoaO.js";const H='{"title":"Tour rápido","local":"tour-rápido","sections":[{"title":"DiffusionPipeline","local":"diffusionpipeline","sections":[{"title":"Pipeline local","local":"pipeline-local","sections":[],"depth":3},{"title":"Troca dos agendadores","local":"troca-dos-agendadores","sections":[],"depth":3}],"depth":2},{"title":"Modelos","local":"modelos","sections":[],"depth":2},{"title":"Agendadores","local":"agendadores","sections":[],"depth":2},{"title":"Próximos passos","local":"próximos-passos","sections":[],"depth":2}],"depth":1}';var L=S('<meta name="hf:doc:metadata"/>'),K=S(`<p></p> <!> <!> <!> <p>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.</p> <p>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:</p> <ul><li>O <code>DiffusionPipeline</code> é 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.</li> <li><a href="./api/models">Modelos</a> pré-treinados populares e módulos que podem ser usados como blocos de construção para criar sistemas de difusão.</li> <li>Vários <a href="./api/schedulers/overview">Agendadores</a> diferentes - algoritmos que controlam como o ruído é adicionado para treinamento, e como gerar imagens sem o ruído durante a inferência.</li></ul> <p>Esse tour rápido mostrará como usar o <code>DiffusionPipeline</code> para inferência, e então mostrará como combinar um modelo e um agendador para replicar o que está acontecendo dentro do <code>DiffusionPipeline</code>.</p> <blockquote class="tip"><p>Esse tour rápido é uma versão simplificada da introdução 🧨 Diffusers <a href="https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/diffusers_intro.ipynb" rel="nofollow">notebook</a> 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!</p></blockquote> <p>Antes de começar, certifique-se de ter todas as bibliotecas necessárias instaladas:</p> <!> <ul><li><a href="https://huggingface.co/docs/accelerate/index" rel="nofollow">🤗 Accelerate</a> acelera o carregamento do modelo para geração e treinamento.</li> <li><a href="https://huggingface.co/docs/transformers/index" rel="nofollow">🤗 Transformers</a> é necessário para executar os modelos mais populares de difusão, como o <a href="https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/overview" rel="nofollow">Stable Diffusion</a>.</li></ul> <!> <p>O <code>DiffusionPipeline</code> é 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 <code>DiffusionPipeline</code> 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 <a href="./api/pipelines/overview#diffusers-summary">Resumo do 🧨 Diffusers</a>.</p> <table><thead><tr><th><strong>Tarefa</strong></th><th><strong>Descrição</strong></th><th><strong>Pipeline</strong></th></tr></thead><tbody><tr><td>Unconditional Image Generation</td><td>gera uma imagem a partir do ruído Gaussiano</td><td><a href="./using-diffusers/unconditional_image_generation">unconditional_image_generation</a></td></tr><tr><td>Text-Guided Image Generation</td><td>gera uma imagem a partir de um prompt de texto</td><td><a href="./using-diffusers/conditional_image_generation">conditional_image_generation</a></td></tr><tr><td>Text-Guided Image-to-Image Translation</td><td>adapta uma imagem guiada por um prompt de texto</td><td><a href="./using-diffusers/img2img">img2img</a></td></tr><tr><td>Text-Guided Image-Inpainting</td><td>preenche a parte da máscara da imagem, dado a imagem, a máscara e o prompt de texto</td><td><a href="./using-diffusers/inpaint">inpaint</a></td></tr><tr><td>Text-Guided Depth-to-Image Translation</td><td>adapta as partes de uma imagem guiada por um prompt de texto enquanto preserva a estrutura por estimativa de profundidade</td><td><a href="./using-diffusers/depth2img">depth2img</a></td></tr></tbody></table> <p>Comece criando uma instância do <code>DiffusionPipeline</code> e especifique qual checkpoint do pipeline você gostaria de baixar.
Você pode usar o <code>DiffusionPipeline</code> para qualquer <a href="https://huggingface.co/models?library=diffusers&amp;sort=downloads" rel="nofollow">checkpoint</a> armazenado no Hugging Face Hub.
Nesse quicktour, você carregará o checkpoint <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow"><code>stable-diffusion-v1-5</code></a> para geração de texto para imagem.</p> <blockquote class="warning"><p>Para os modelos de <a href="https://huggingface.co/CompVis/stable-diffusion" rel="nofollow">Stable Diffusion</a>, por favor leia cuidadosamente a <a href="https://huggingface.co/spaces/CompVis/stable-diffusion-license" rel="nofollow">licença</a> primeiro antes de rodar o modelo. 🧨 Diffusers implementa uma verificação de segurança: <a href="https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/stable_diffusion/safety_checker.py" rel="nofollow"><code>safety_checker</code></a> 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.</p></blockquote> <p>Para carregar o modelo com o método <code>from_pretrained()</code>:</p> <!> <p>O <code>DiffusionPipeline</code> baixa e armazena em cache todos os componentes de modelagem, tokenização, e agendamento. Você verá que o pipeline do Stable Diffusion é composto pelo <code>UNet2DConditionModel</code> e <code>PNDMScheduler</code> entre outras coisas:</p> <!> <p>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:</p> <!> <p>Agora você pode passar o prompt de texto para o <code>pipeline</code> 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 <a href="https://pillow.readthedocs.io/en/stable/reference/Image.html?highlight=image#the-image-class" rel="nofollow"><code>PIL.Image</code></a>.</p> <!> <div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/image_of_squirrel_painting.png"/></div> <p>Salve a imagem chamando o <code>save</code>:</p> <!> <!> <p>Você também pode utilizar o pipeline localmente. A única diferença é que você precisa baixar os pesos primeiro:</p> <!> <p>Assim carregue os pesos salvos no pipeline:</p> <!> <p>Agora você pode rodar o pipeline como você faria na seção acima.</p> <!> <p>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 <code>PNDMScheduler</code> padrão com o <code>EulerDiscreteScheduler</code>, carregue ele com o método <code>from_config()</code>:</p> <!> <p>Tente gerar uma imagem com o novo agendador e veja se você nota alguma diferença!</p> <p>Na próxima seção, você irá dar uma olhada mais de perto nos componentes - o modelo e o agendador - que compõe o <code>DiffusionPipeline</code> e aprender como usar esses componentes para gerar uma imagem de um gato.</p> <!> <p>A maioria dos modelos recebe uma amostra de ruído, e em cada <em>timestep</em> ele prevê o <em>noise residual</em> (outros modelos aprendem a prever a amostra anterior diretamente ou a velocidade ou <a href="https://github.com/huggingface/diffusers/blob/5e5ce13e2f89ac45a0066cb3f369462a3cf1d9ef/src/diffusers/schedulers/scheduling_ddim.py#L110" rel="nofollow"><code>v-prediction</code></a>), 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.</p> <p>Modelos são inicializados com o método <code>from_pretrained()</code> 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 <code>UNet2DModel</code>, um modelo básico de geração de imagem incondicional com um checkpoint treinado em imagens de gato:</p> <!> <p>Para acessar os parâmetros do modelo, chame <code>model.config</code>:</p> <!> <p>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.</p> <p>Um dos parâmetros mais importantes são:</p> <ul><li><code>sample_size</code>: a dimensão da altura e largura da amostra de entrada.</li> <li><code>in_channels</code>: o número de canais de entrada da amostra de entrada.</li> <li><code>down_block_types</code> e <code>up_block_types</code>: o tipo de blocos de downsampling e upsampling usados para criar a arquitetura UNet.</li> <li><code>block_out_channels</code>: 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.</li> <li><code>layers_per_block</code>: o número de blocks ResNet presentes em cada block UNet.</li></ul> <p>Para usar o modelo para geração, crie a forma da imagem com ruído Gaussiano aleatório. Deve ter um eixo <code>batch</code> porque o modelo pode receber múltiplos ruídos aleatórios, um eixo <code>channel</code> correspondente ao número de canais de entrada, e um eixo <code>sample_size</code> para a altura e largura da imagem:</p> <!> <p>Para geração, passe a imagem com ruído para o modelo e um <code>timestep</code>. O <code>timestep</code> 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 <code>sample</code> para obter a saída do modelo:</p> <!> <p>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.</p> <!> <p>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 <code>noisy_residual</code>.</p> <blockquote class="tip"><p>🧨 Diffusers é uma caixa de ferramentas para construir sistemas de difusão. Enquanto o <code>DiffusionPipeline</code> é 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.</p></blockquote> <p>Para o tour rápido, você irá instanciar o <code>DDPMScheduler</code> com o método <code>from_config()</code>:</p> <!> <blockquote class="tip"><p>💡 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!</p></blockquote> <p>Um dos parâmetros mais importante são:</p> <ul><li><code>num_train_timesteps</code>: o tamanho do processo de retirar ruído ou em outras palavras, o número de <em>timesteps</em> necessários para o processo de ruídos Gausianos aleatórios dentro de uma amostra de dados.</li> <li><code>beta_schedule</code>: o tipo de agendados de ruído para o uso de geração e treinamento.</li> <li><code>beta_start</code> e <code>beta_end</code>: para começar e terminar os valores de ruído para o agendador de ruído.</li></ul> <p>Para predizer uma imagem com um pouco menos de ruído, passe o seguinte para o método do agendador <code>step()</code>: saída do modelo, <code>timestep</code>, e a atual <code>amostra</code>.</p> <!> <p>O <code>less_noisy_sample</code> pode ser passado para o próximo <code>timestep</code> onde ele ficará ainda com menos ruído! Vamos juntar tudo agora e visualizar o processo inteiro de retirada de ruído.</p> <p>Comece, criando a função que faça o pós-processamento e mostre a imagem sem ruído como uma <code>PIL.Image</code>:</p> <!> <p>Para acelerar o processo de retirada de ruído, mova a entrada e o modelo para uma GPU:</p> <!> <p>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:</p> <!> <p>Sente-se e assista o gato ser gerado do nada além de ruído! 😻</p> <div class="flex justify-center"><img src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/diffusion-quicktour.png"/></div> <!> <p>Esperamos que você tenha gerado algumas imagens legais com o 🧨 Diffusers neste tour rápido! Para suas próximas etapas, você pode</p> <ul><li>Treine ou faça a configuração fina de um modelo para gerar suas próprias imagens no tutorial de <a href="./tutorials/basic_training">treinamento</a>.</li> <li>Veja exemplos oficiais e da comunidade de <a href="https://github.com/huggingface/diffusers/tree/main/examples#-diffusers-examples" rel="nofollow">scripts de treinamento ou configuração fina</a> para os mais variados casos de uso.</li> <li>Aprenda sobre como carregar, acessar, mudar e comparar agendadores no guia <a href="./using-diffusers/schedulers">Usando diferentes agendadores</a>.</li> <li>Explore engenharia de prompt, otimizações de velocidade e memória, e dicas e truques para gerar imagens de maior qualidade com o guia <a href="./stable_diffusion">Stable Diffusion</a>.</li> <li>Se aprofunde em acelerar 🧨 Diffusers com guias sobre <a href="./optimization/fp16">PyTorch otimizado em uma GPU</a>, e guias de inferência para rodar <a href="./optimization/mps">Stable Diffusion em Apple Silicon (M1/M2)</a> e <a href="./optimization/onnx">ONNX Runtime</a>.</li></ul> <!> <p></p>`,1);function sa(z,C){Y(C,!1),E(()=>{new URLSearchParams(window.location.search).get("fw")}),x();var o=K();N("1at4a0u",W=>{var V=L();R(V,"content",H),I(W,V)});var l=a(P(o),2);X(l,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var n=a(l,2);F(n,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;",options:[{label:"Mixed",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/pt/quicktour.ipynb"},{label:"PyTorch",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/pt/pytorch/quicktour.ipynb"},{label:"TensorFlow",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers_doc/pt/tensorflow/quicktour.ipynb"},{label:"Mixed",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/pt/quicktour.ipynb"},{label:"PyTorch",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/pt/pytorch/quicktour.ipynb"},{label:"TensorFlow",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/main/diffusers_doc/pt/tensorflow/quicktour.ipynb"}]});var i=a(n,2);s(i,{title:"Tour rápido",local:"tour-rápido",headingTag:"h1"});var t=a(i,14);e(t,{code:"JTIzJTIwdW5jb21tZW50JTIwdG8lMjBpbnN0YWxsJTIwdGhlJTIwbmVjZXNzYXJ5JTIwbGlicmFyaWVzJTIwaW4lMjBDb2xhYiUwQSUyMyFwaXAlMjBpbnN0YWxsJTIwLS11cGdyYWRlJTIwZGlmZnVzZXJzJTIwYWNjZWxlcmF0ZSUyMHRyYW5zZm9ybWVycw==",highlighted:`<span class="hljs-comment"># uncomment to install the necessary libraries in Colab</span>
<span class="hljs-comment">#!pip install --upgrade diffusers accelerate transformers</span>`,lang:"py",wrap:!1});var r=a(t,4);s(r,{title:"DiffusionPipeline",local:"diffusionpipeline",headingTag:"h2"});var d=a(r,12);e(d,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpZmZ1c2lvblBpcGVsaW5lJTBBJTBBcGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIyc3RhYmxlLWRpZmZ1c2lvbi12MS01JTJGc3RhYmxlLWRpZmZ1c2lvbi12MS01JTIyJTJDJTIwdXNlX3NhZmV0ZW5zb3JzJTNEVHJ1ZSk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiffusionPipeline
<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>)`,lang:"python",wrap:!1});var p=a(d,4);e(p,{code:"cGlwZWxpbmU=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline
StableDiffusionPipeline {
<span class="hljs-string">&quot;_class_name&quot;</span>: <span class="hljs-string">&quot;StableDiffusionPipeline&quot;</span>,
<span class="hljs-string">&quot;_diffusers_version&quot;</span>: <span class="hljs-string">&quot;0.13.1&quot;</span>,
...,
<span class="hljs-string">&quot;scheduler&quot;</span>: [
<span class="hljs-string">&quot;diffusers&quot;</span>,
<span class="hljs-string">&quot;PNDMScheduler&quot;</span>
],
...,
<span class="hljs-string">&quot;unet&quot;</span>: [
<span class="hljs-string">&quot;diffusers&quot;</span>,
<span class="hljs-string">&quot;UNet2DConditionModel&quot;</span>
],
<span class="hljs-string">&quot;vae&quot;</span>: [
<span class="hljs-string">&quot;diffusers&quot;</span>,
<span class="hljs-string">&quot;AutoencoderKL&quot;</span>
]
}`,lang:"py",wrap:!1});var c=a(p,4);e(c,{code:"cGlwZWxpbmUudG8oJTIyY3VkYSUyMik=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline.to(<span class="hljs-string">&quot;cuda&quot;</span>)',lang:"python",wrap:!1});var m=a(c,4);e(m,{code:"aW1hZ2UlMjAlM0QlMjBwaXBlbGluZSglMjJBbiUyMGltYWdlJTIwb2YlMjBhJTIwc3F1aXJyZWwlMjBpbiUyMFBpY2Fzc28lMjBzdHlsZSUyMikuaW1hZ2VzJTVCMCU1RCUwQWltYWdl",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>image = pipeline(<span class="hljs-string">&quot;An image of a squirrel in Picasso style&quot;</span>).images[<span class="hljs-number">0</span>]
<span class="hljs-meta">&gt;&gt;&gt; </span>image`,lang:"python",wrap:!1});var u=a(m,6);e(u,{code:"aW1hZ2Uuc2F2ZSglMjJpbWFnZV9vZl9zcXVpcnJlbF9wYWludGluZy5wbmclMjIp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>image.save(<span class="hljs-string">&quot;image_of_squirrel_painting.png&quot;</span>)',lang:"python",wrap:!1});var g=a(u,2);s(g,{title:"Pipeline local",local:"pipeline-local",headingTag:"h3"});var h=a(g,4);e(h,{code:"IWdpdCUyMGxmcyUyMGluc3RhbGwlMEEhZ2l0JTIwY2xvbmUlMjBodHRwcyUzQSUyRiUyRmh1Z2dpbmdmYWNlLmNvJTJGc3RhYmxlLWRpZmZ1c2lvbi12MS01JTJGc3RhYmxlLWRpZmZ1c2lvbi12MS01",highlighted:`!git lfs install
!git <span class="hljs-built_in">clone</span> https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5`,lang:"bash",wrap:!1});var f=a(h,4);e(f,{code:"cGlwZWxpbmUlMjAlM0QlMjBEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQoJTIyLiUyRnN0YWJsZS1kaWZmdXNpb24tdjEtNSUyMiUyQyUyMHVzZV9zYWZldGVuc29ycyUzRFRydWUp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;./stable-diffusion-v1-5&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>)',lang:"python",wrap:!1});var b=a(f,4);s(b,{title:"Troca dos agendadores",local:"troca-dos-agendadores",headingTag:"h3"});var y=a(b,4);e(y,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEV1bGVyRGlzY3JldGVTY2hlZHVsZXIlMEElMEFwaXBlbGluZSUyMCUzRCUyMERpZmZ1c2lvblBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMkMlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlKSUwQXBpcGVsaW5lLnNjaGVkdWxlciUyMCUzRCUyMEV1bGVyRGlzY3JldGVTY2hlZHVsZXIuZnJvbV9jb25maWcocGlwZWxpbmUuc2NoZWR1bGVyLmNvbmZpZyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> EulerDiscreteScheduler
<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline = DiffusionPipeline.from_pretrained(<span class="hljs-string">&quot;stable-diffusion-v1-5/stable-diffusion-v1-5&quot;</span>, use_safetensors=<span class="hljs-literal">True</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>pipeline.scheduler = EulerDiscreteScheduler.from_config(pipeline.scheduler.config)`,lang:"py",wrap:!1});var M=a(y,6);s(M,{title:"Modelos",local:"modelos",headingTag:"h2"});var j=a(M,6);e(j,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFVOZXQyRE1vZGVsJTBBJTBBcmVwb19pZCUyMCUzRCUyMCUyMmdvb2dsZSUyRmRkcG0tY2F0LTI1NiUyMiUwQW1vZGVsJTIwJTNEJTIwVU5ldDJETW9kZWwuZnJvbV9wcmV0cmFpbmVkKHJlcG9faWQlMkMlMjB1c2Vfc2FmZXRlbnNvcnMlM0RUcnVlKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> UNet2DModel
<span class="hljs-meta">&gt;&gt;&gt; </span>repo_id = <span class="hljs-string">&quot;google/ddpm-cat-256&quot;</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>model = UNet2DModel.from_pretrained(repo_id, use_safetensors=<span class="hljs-literal">True</span>)`,lang:"py",wrap:!1});var w=a(j,4);e(w,{code:"bW9kZWwuY29uZmln",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>model.config',lang:"py",wrap:!1});var U=a(w,10);e(U,{code:"aW1wb3J0JTIwdG9yY2glMEElMEF0b3JjaC5tYW51YWxfc2VlZCgwKSUwQSUwQW5vaXN5X3NhbXBsZSUyMCUzRCUyMHRvcmNoLnJhbmRuKDElMkMlMjBtb2RlbC5jb25maWcuaW5fY2hhbm5lbHMlMkMlMjBtb2RlbC5jb25maWcuc2FtcGxlX3NpemUlMkMlMjBtb2RlbC5jb25maWcuc2FtcGxlX3NpemUpJTBBbm9pc3lfc2FtcGxlLnNoYXBl",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> torch
<span class="hljs-meta">&gt;&gt;&gt; </span>torch.manual_seed(<span class="hljs-number">0</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>noisy_sample = torch.randn(<span class="hljs-number">1</span>, model.config.in_channels, model.config.sample_size, model.config.sample_size)
<span class="hljs-meta">&gt;&gt;&gt; </span>noisy_sample.shape
torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">256</span>, <span class="hljs-number">256</span>])`,lang:"py",wrap:!1});var v=a(U,4);e(v,{code:"d2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMG5vaXN5X3Jlc2lkdWFsJTIwJTNEJTIwbW9kZWwoc2FtcGxlJTNEbm9pc3lfc2FtcGxlJTJDJTIwdGltZXN0ZXAlM0QyKS5zYW1wbGU=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">with</span> torch.no_grad():
<span class="hljs-meta">... </span> noisy_residual = model(sample=noisy_sample, timestep=<span class="hljs-number">2</span>).sample`,lang:"py",wrap:!1});var _=a(v,4);s(_,{title:"Agendadores",local:"agendadores",headingTag:"h2"});var J=a(_,8);e(J,{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMEREUE1TY2hlZHVsZXIlMEElMEFzY2hlZHVsZXIlMjAlM0QlMjBERFBNU2NoZWR1bGVyLmZyb21fY29uZmlnKHJlcG9faWQpJTBBc2NoZWR1bGVy",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DDPMScheduler
<span class="hljs-meta">&gt;&gt;&gt; </span>scheduler = DDPMScheduler.from_config(repo_id)
<span class="hljs-meta">&gt;&gt;&gt; </span>scheduler
DDPMScheduler {
<span class="hljs-string">&quot;_class_name&quot;</span>: <span class="hljs-string">&quot;DDPMScheduler&quot;</span>,
<span class="hljs-string">&quot;_diffusers_version&quot;</span>: <span class="hljs-string">&quot;0.13.1&quot;</span>,
<span class="hljs-string">&quot;beta_end&quot;</span>: <span class="hljs-number">0.02</span>,
<span class="hljs-string">&quot;beta_schedule&quot;</span>: <span class="hljs-string">&quot;linear&quot;</span>,
<span class="hljs-string">&quot;beta_start&quot;</span>: <span class="hljs-number">0.0001</span>,
<span class="hljs-string">&quot;clip_sample&quot;</span>: true,
<span class="hljs-string">&quot;clip_sample_range&quot;</span>: <span class="hljs-number">1.0</span>,
<span class="hljs-string">&quot;num_train_timesteps&quot;</span>: <span class="hljs-number">1000</span>,
<span class="hljs-string">&quot;prediction_type&quot;</span>: <span class="hljs-string">&quot;epsilon&quot;</span>,
<span class="hljs-string">&quot;trained_betas&quot;</span>: null,
<span class="hljs-string">&quot;variance_type&quot;</span>: <span class="hljs-string">&quot;fixed_small&quot;</span>
}`,lang:"py",wrap:!1});var Z=a(J,10);e(Z,{code:"bGVzc19ub2lzeV9zYW1wbGUlMjAlM0QlMjBzY2hlZHVsZXIuc3RlcChtb2RlbF9vdXRwdXQlM0Rub2lzeV9yZXNpZHVhbCUyQyUyMHRpbWVzdGVwJTNEMiUyQyUyMHNhbXBsZSUzRG5vaXN5X3NhbXBsZSkucHJldl9zYW1wbGUlMEFsZXNzX25vaXN5X3NhbXBsZS5zaGFwZQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>less_noisy_sample = scheduler.step(model_output=noisy_residual, timestep=<span class="hljs-number">2</span>, sample=noisy_sample).prev_sample
<span class="hljs-meta">&gt;&gt;&gt; </span>less_noisy_sample.shape`,lang:"py",wrap:!1});var q=a(Z,6);e(q,{code:"aW1wb3J0JTIwUElMLkltYWdlJTBBaW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwZGlzcGxheV9zYW1wbGUoc2FtcGxlJTJDJTIwaSklM0ElMEElMjAlMjAlMjAlMjBpbWFnZV9wcm9jZXNzZWQlMjAlM0QlMjBzYW1wbGUuY3B1KCkucGVybXV0ZSgwJTJDJTIwMiUyQyUyMDMlMkMlMjAxKSUwQSUyMCUyMCUyMCUyMGltYWdlX3Byb2Nlc3NlZCUyMCUzRCUyMChpbWFnZV9wcm9jZXNzZWQlMjAlMkIlMjAxLjApJTIwKiUyMDEyNy41JTBBJTIwJTIwJTIwJTIwaW1hZ2VfcHJvY2Vzc2VkJTIwJTNEJTIwaW1hZ2VfcHJvY2Vzc2VkLm51bXB5KCkuYXN0eXBlKG5wLnVpbnQ4KSUwQSUwQSUyMCUyMCUyMCUyMGltYWdlX3BpbCUyMCUzRCUyMFBJTC5JbWFnZS5mcm9tYXJyYXkoaW1hZ2VfcHJvY2Vzc2VkJTVCMCU1RCklMEElMjAlMjAlMjAlMjBkaXNwbGF5KGYlMjJJbWFnZSUyMGF0JTIwc3RlcCUyMCU3QmklN0QlMjIpJTBBJTIwJTIwJTIwJTIwZGlzcGxheShpbWFnZV9waWwp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> PIL.Image
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">def</span> <span class="hljs-title function_">display_sample</span>(<span class="hljs-params">sample, i</span>):
<span class="hljs-meta">... </span> image_processed = sample.cpu().permute(<span class="hljs-number">0</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>)
<span class="hljs-meta">... </span> image_processed = (image_processed + <span class="hljs-number">1.0</span>) * <span class="hljs-number">127.5</span>
<span class="hljs-meta">... </span> image_processed = image_processed.numpy().astype(np.uint8)
<span class="hljs-meta">... </span> image_pil = PIL.Image.fromarray(image_processed[<span class="hljs-number">0</span>])
<span class="hljs-meta">... </span> display(<span class="hljs-string">f&quot;Image at step <span class="hljs-subst">{i}</span>&quot;</span>)
<span class="hljs-meta">... </span> display(image_pil)`,lang:"py",wrap:!1});var T=a(q,4);e(T,{code:"bW9kZWwudG8oJTIyY3VkYSUyMiklMEFub2lzeV9zYW1wbGUlMjAlM0QlMjBub2lzeV9zYW1wbGUudG8oJTIyY3VkYSUyMik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>model.to(<span class="hljs-string">&quot;cuda&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>noisy_sample = noisy_sample.to(<span class="hljs-string">&quot;cuda&quot;</span>)`,lang:"py",wrap:!1});var G=a(T,4);e(G,{code:"aW1wb3J0JTIwdHFkbSUwQSUwQXNhbXBsZSUyMCUzRCUyMG5vaXN5X3NhbXBsZSUwQSUwQWZvciUyMGklMkMlMjB0JTIwaW4lMjBlbnVtZXJhdGUodHFkbS50cWRtKHNjaGVkdWxlci50aW1lc3RlcHMpKSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMDEuJTIwcHJlZGljdCUyMG5vaXNlJTIwcmVzaWR1YWwlMEElMjAlMjAlMjAlMjB3aXRoJTIwdG9yY2gubm9fZ3JhZCgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzaWR1YWwlMjAlM0QlMjBtb2RlbChzYW1wbGUlMkMlMjB0KS5zYW1wbGUlMEElMEElMjAlMjAlMjAlMjAlMjMlMjAyLiUyMGNvbXB1dGUlMjBsZXNzJTIwbm9pc3klMjBpbWFnZSUyMGFuZCUyMHNldCUyMHhfdCUyMC0lM0UlMjB4X3QtMSUwQSUyMCUyMCUyMCUyMHNhbXBsZSUyMCUzRCUyMHNjaGVkdWxlci5zdGVwKHJlc2lkdWFsJTJDJTIwdCUyQyUyMHNhbXBsZSkucHJldl9zYW1wbGUlMEElMEElMjAlMjAlMjAlMjAlMjMlMjAzLiUyMG9wdGlvbmFsbHklMjBsb29rJTIwYXQlMjBpbWFnZSUwQSUyMCUyMCUyMCUyMGlmJTIwKGklMjAlMkIlMjAxKSUyMCUyNSUyMDUwJTIwJTNEJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRpc3BsYXlfc2FtcGxlKHNhbXBsZSUyQyUyMGklMjAlMkIlMjAxKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">import</span> tqdm
<span class="hljs-meta">&gt;&gt;&gt; </span>sample = noisy_sample
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">for</span> i, t <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(tqdm.tqdm(scheduler.timesteps)):
<span class="hljs-meta">... </span> <span class="hljs-comment"># 1. predict noise residual</span>
<span class="hljs-meta">... </span> <span class="hljs-keyword">with</span> torch.no_grad():
<span class="hljs-meta">... </span> residual = model(sample, t).sample
<span class="hljs-meta">... </span> <span class="hljs-comment"># 2. compute less noisy image and set x_t -&gt; x_t-1</span>
<span class="hljs-meta">... </span> sample = scheduler.step(residual, t, sample).prev_sample
<span class="hljs-meta">... </span> <span class="hljs-comment"># 3. optionally look at image</span>
<span class="hljs-meta">... </span> <span class="hljs-keyword">if</span> (i + <span class="hljs-number">1</span>) % <span class="hljs-number">50</span> == <span class="hljs-number">0</span>:
<span class="hljs-meta">... </span> display_sample(sample, i + <span class="hljs-number">1</span>)`,lang:"py",wrap:!1});var k=a(G,6);s(k,{title:"Próximos passos",local:"próximos-passos",headingTag:"h2"});var B=a(k,6);D(B,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/pt/quicktour.md"}),Q(2),I(z,o),A()}export{sa as component};

Xet Storage Details

Size:
30.8 kB
·
Xet hash:
dfbe9d16a7838ed4f713e26a6c012b86f6f52fe7b2223cf683ff59bdb1e4db0a

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