Buckets:
| import"../chunks/DsnmJJEf.js";import{i as V,h as q,C as k,H as f,D as t,E as L,s as E,a as z}from"../chunks/BtE7mKSK.js";import{p as X,o as B,s as e,f as x,a as h,b as O,c as s,d as p,n as i,r as n}from"../chunks/jDjavuwI.js";import{E as N}from"../chunks/SrSJA0zO.js";const R='{"title":"VQDiffusionScheduler","local":"vqdiffusionscheduler","sections":[{"title":"VQDiffusionScheduler","local":"diffusers.VQDiffusionScheduler","sections":[],"depth":2},{"title":"VQDiffusionSchedulerOutput","local":"diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput","sections":[],"depth":2}],"depth":1}';var F=p('<meta name="hf:doc:metadata"/>'),H=p("<p>Calculates the log probabilities for the predicted classes of the image at timestep <code>t-1</code>:</p> <!>",1),W=p(`<p></p> <!> <!> <p><code>VQDiffusionScheduler</code> converts the transformer model’s output into a sample for the unnoised image at the previous diffusion timestep. It was introduced in <a href="https://huggingface.co/papers/2111.14822" rel="nofollow">Vector Quantized Diffusion Model for Text-to-Image Synthesis</a> by Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.</p> <p>The abstract from the paper is:</p> <p><em>We present the vector quantized diffusion (VQ-Diffusion) model for text-to-image generation. This method is based on a vector quantized variational autoencoder (VQ-VAE) whose latent space is modeled by a conditional variant of the recently developed Denoising Diffusion Probabilistic Model (DDPM). We find that this latent-space method is well-suited for text-to-image generation tasks because it not only eliminates the unidirectional bias with existing methods but also allows us to incorporate a mask-and-replace diffusion strategy to avoid the accumulation of errors, which is a serious problem with existing methods. Our experiments show that the VQ-Diffusion produces significantly better text-to-image generation results when compared with conventional autoregressive (AR) models with similar numbers of parameters. Compared with previous GAN-based text-to-image methods, our VQ-Diffusion can handle more complex scenes and improve the synthesized image quality by a large margin. Finally, we show that the image generation computation in our method can be made highly efficient by reparameterization. With traditional AR methods, the text-to-image generation time increases linearly with the output image resolution and hence is quite time consuming even for normal size images. The VQ-Diffusion allows us to achieve a better trade-off between quality and speed. Our experiments indicate that the VQ-Diffusion model with the reparameterization is fifteen times faster than traditional AR methods while achieving a better image quality.</em></p> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>A scheduler for vector quantized diffusion.</p> <p>This model inherits from <a href="/docs/diffusers/pr_14192/en/api/schedulers/overview#diffusers.SchedulerMixin">SchedulerMixin</a> and <a href="/docs/diffusers/pr_14192/en/api/configuration#diffusers.ConfigMixin">ConfigMixin</a>. Check the superclass documentation for the generic | |
| methods the library implements for all schedulers such as loading and saving.</p> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Calculates the log probabilities of the rows from the (cumulative or non-cumulative) transition matrix for each | |
| latent pixel in <code>x_t</code>.</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <!></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Sets the discrete timesteps used for the diffusion chain (to be run before inference).</p></div> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Predict the sample from the previous timestep by the reverse transition distribution. See <a href="/docs/diffusers/pr_14192/en/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior">q_posterior()</a> for more details about how the distribution is computer.</p></div></div> <!> <div class="docstring border-l-2 border-t-2 pl-4 pt-3.5 border-gray-100 rounded-tl-xl mb-6 mt-8"><!> <p>Output class for the scheduler’s step function output.</p></div> <!> <p></p>`,1);function Z(J,b){X(b,!1),B(()=>{new URLSearchParams(window.location.search).get("fw")}),V();var m=W();q("ljw2yu",o=>{var u=F();E(u,"content",R),h(o,u)});var _=e(x(m),2);k(_,{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"});var g=e(_,2);f(g,{title:"VQDiffusionScheduler",local:"vqdiffusionscheduler",headingTag:"h1"});var M=e(g,8);f(M,{title:"VQDiffusionScheduler",local:"diffusers.VQDiffusionScheduler",headingTag:"h2"});var r=e(M,2),T=s(r);t(T,{name:"class diffusers.VQDiffusionScheduler",anchor:"diffusers.VQDiffusionScheduler",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L105",parameters:[{name:"num_vec_classes",val:": int"},{name:"num_train_timesteps",val:": int = 100"},{name:"alpha_cum_start",val:": float = 0.99999"},{name:"alpha_cum_end",val:": float = 9e-06"},{name:"gamma_cum_start",val:": float = 9e-06"},{name:"gamma_cum_end",val:": float = 0.99999"}],parametersDescription:[{anchor:"diffusers.VQDiffusionScheduler.num_vec_classes",description:`<strong>num_vec_classes</strong> (<code>int</code>) — | |
| The number of classes of the vector embeddings of the latent pixels. Includes the class for the masked | |
| latent pixel.`,name:"num_vec_classes"},{anchor:"diffusers.VQDiffusionScheduler.num_train_timesteps",description:`<strong>num_train_timesteps</strong> (<code>int</code>, defaults to 100) — | |
| The number of diffusion steps to train the model.`,name:"num_train_timesteps"},{anchor:"diffusers.VQDiffusionScheduler.alpha_cum_start",description:`<strong>alpha_cum_start</strong> (<code>float</code>, defaults to 0.99999) — | |
| The starting cumulative alpha value.`,name:"alpha_cum_start"},{anchor:"diffusers.VQDiffusionScheduler.alpha_cum_end",description:`<strong>alpha_cum_end</strong> (<code>float</code>, defaults to 0.00009) — | |
| The ending cumulative alpha value.`,name:"alpha_cum_end"},{anchor:"diffusers.VQDiffusionScheduler.gamma_cum_start",description:`<strong>gamma_cum_start</strong> (<code>float</code>, defaults to 0.00009) — | |
| The starting cumulative gamma value.`,name:"gamma_cum_start"},{anchor:"diffusers.VQDiffusionScheduler.gamma_cum_end",description:`<strong>gamma_cum_end</strong> (<code>float</code>, defaults to 0.99999) — | |
| The ending cumulative gamma value.`,name:"gamma_cum_end"}]});var a=e(T,6),I=s(a);t(I,{name:"log_Q_t_transitioning_to_known_class",anchor:"diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L355",parameters:[{name:"t",val:": int"},{name:"x_t",val:": LongTensor"},{name:"log_onehot_x_t",val:": Tensor"},{name:"cumulative",val:": bool"}],parametersDescription:[{anchor:"diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class.t",description:`<strong>t</strong> (<code>torch.Long</code>) — | |
| The timestep that determines which transition matrix is used.`,name:"t"},{anchor:"diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class.x_t",description:`<strong>x_t</strong> (<code>torch.LongTensor</code> of shape <code>(batch size, num latent pixels)</code>) — | |
| The classes of each latent pixel at time <code>t</code>.`,name:"x_t"},{anchor:"diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class.log_onehot_x_t",description:`<strong>log_onehot_x_t</strong> (<code>torch.Tensor</code> of shape <code>(batch size, num classes, num latent pixels)</code>) — | |
| The log one-hot vectors of <code>x_t</code>.`,name:"log_onehot_x_t"},{anchor:"diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class.cumulative",description:`<strong>cumulative</strong> (<code>bool</code>) — | |
| If cumulative is <code>False</code>, the single step transition matrix <code>t-1</code>-><code>t</code> is used. If cumulative is | |
| <code>True</code>, the cumulative transition matrix <code>0</code>-><code>t</code> is used.`,name:"cumulative"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p>Each <em>column</em> of the returned matrix is a <em>row</em> of log probabilities of the complete probability | |
| transition matrix.</p> | |
| <p>When non cumulative, returns <code>self.num_classes - 1</code> rows because the initial latent pixel cannot be | |
| masked.</p> | |
| <p>Where:</p> | |
| <ul> | |
| <li><code>q_n</code> is the probability distribution for the forward process of the <code>n</code>th latent pixel.</li> | |
| <li>C_0 is a class of a latent pixel embedding</li> | |
| <li>C_k is the class of the masked latent pixel</li> | |
| </ul> | |
| <p>non-cumulative result (omitting logarithms):</p> | |
| <CodeBlock | |
| code={\`cV8wKHhfdCUyMCU3QyUyMHhfJTdCdC0xJTdEJTIwJTNEJTIwQ18wKSUyMC4uLiUyMHFfbih4X3QlMjAlN0MlMjB4XyU3QnQtMSU3RCUyMCUzRCUyMENfMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMC4lMEFxXzAoeF90JTIwJTdDJTIweF8lN0J0LTElN0QlMjAlM0QlMjBDX2spJTIwLi4uJTIwcV9uKHhfdCUyMCU3QyUyMHhfJTdCdC0xJTdEJTIwJTNEJTIwQ19rKQ==\`} | |
| highlighted={\`<span class="hljs-built_in">q_0</span>(x_t | x_{t-<span class="hljs-number">1</span>\\} = C_0) ... <span class="hljs-built_in">q_n</span>(x_t | x_{t-<span class="hljs-number">1</span>\\} = C_0) | |
| . . . | |
| . . . | |
| . . . | |
| <span class="hljs-built_in">q_0</span>(x_t | x_{t-<span class="hljs-number">1</span>\\} = C_k) ... <span class="hljs-built_in">q_n</span>(x_t | x_{t-<span class="hljs-number">1</span>\\} = C_k)\`} | |
| lang="" | |
| wrap={false} | |
| /> | |
| <p>cumulative result (omitting logarithms):</p> | |
| <CodeBlock | |
| code={\`cV8wX2N1bXVsYXRpdmUoeF90JTIwJTdDJTIweF8wJTIwJTNEJTIwQ18wKSUyMCUyMCUyMCUyMC4uLiUyMCUyMHFfbl9jdW11bGF0aXZlKHhfdCUyMCU3QyUyMHhfMCUyMCUzRCUyMENfMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC4lMEFxXzBfY3VtdWxhdGl2ZSh4X3QlMjAlN0MlMjB4XzAlMjAlM0QlMjBDXyU3QmstMSU3RCklMjAuLi4lMjBxX25fY3VtdWxhdGl2ZSh4X3QlMjAlN0MlMjB4XzAlMjAlM0QlMjBDXyU3QmstMSU3RCk=\`} | |
| highlighted={\`<span class="hljs-built_in">q_0_cumulative</span>(x_t | x_0 = C_0) ... <span class="hljs-built_in">q_n_cumulative</span>(x_t | x_0 = C_0) | |
| . . . | |
| . . . | |
| . . . | |
| <span class="hljs-built_in">q_0_cumulative</span>(x_t | x_0 = C_{k-<span class="hljs-number">1</span>\\}) ... <span class="hljs-built_in">q_n_cumulative</span>(x_t | x_0 = C_{k-<span class="hljs-number">1</span>\\})\`} | |
| lang="" | |
| wrap={false} | |
| /> | |
| `,returnType:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>torch.Tensor</code> of shape <code>(batch size, num classes - 1, num latent pixels)</code></p> | |
| `}),i(2),n(a);var l=e(a,2),w=s(l);t(w,{name:"q_posterior",anchor:"diffusers.VQDiffusionScheduler.q_posterior",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L244",parameters:[{name:"log_p_x_0",val:""},{name:"x_t",val:""},{name:"t",val:""}],parametersDescription:[{anchor:"diffusers.VQDiffusionScheduler.q_posterior.log_p_x_0",description:`<strong>log_p_x_0</strong> (<code>torch.Tensor</code> of shape <code>(batch size, num classes - 1, num latent pixels)</code>) — | |
| The log probabilities for the predicted classes of the initial latent pixels. Does not include a | |
| prediction for the masked class as the initial unnoised image cannot be masked.`,name:"log_p_x_0"},{anchor:"diffusers.VQDiffusionScheduler.q_posterior.x_t",description:`<strong>x_t</strong> (<code>torch.LongTensor</code> of shape <code>(batch size, num latent pixels)</code>) — | |
| The classes of each latent pixel at time <code>t</code>.`,name:"x_t"},{anchor:"diffusers.VQDiffusionScheduler.q_posterior.t",description:`<strong>t</strong> (<code>torch.Long</code>) — | |
| The timestep that determines which transition matrix is used.`,name:"t"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p>The log probabilities for the predicted classes of the image at timestep <code>t-1</code>.</p> | |
| `,returnType:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><code>torch.Tensor</code> of shape <code>(batch size, num classes, num latent pixels)</code></p> | |
| `});var U=e(w,2);N(U,{anchor:"diffusers.VQDiffusionScheduler.q_posterior.example",children:(o,u)=>{var C=H(),S=e(x(C),2);z(S,{code:"cCh4XyU3QnQtMSU3RCUyMCU3QyUyMHhfdCklMjAlM0QlMjBzdW0oJTIwcSh4X3QlMjAlN0MlMjB4XyU3QnQtMSU3RCklMjAqJTIwcSh4XyU3QnQtMSU3RCUyMCU3QyUyMHhfMCklMjAqJTIwcCh4XzApJTIwJTJGJTIwcSh4X3QlMjAlN0MlMjB4XzApJTIwKQ==",highlighted:'p(x_{t-<span class="hljs-number">1</span>} | x_t) = sum( <span class="hljs-string">q(x_t | x_{t-1})</span> * <span class="hljs-string">q(x_{t-1} | x_0)</span> * p(x_0) / <span class="hljs-string">q(x_t | x_0)</span> )',lang:"",wrap:!1}),h(o,C)},$$slots:{default:!0}}),n(l);var d=e(l,2),j=s(d);t(j,{name:"set_timesteps",anchor:"diffusers.VQDiffusionScheduler.set_timesteps",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L177",parameters:[{name:"num_inference_steps",val:": int"},{name:"device",val:": typing.Union[str, torch.device] = None"}],parametersDescription:[{anchor:"diffusers.VQDiffusionScheduler.set_timesteps.num_inference_steps",description:`<strong>num_inference_steps</strong> (<code>int</code>) — | |
| The number of diffusion steps used when generating samples with a pre-trained model.`,name:"num_inference_steps"},{anchor:"diffusers.VQDiffusionScheduler.set_timesteps.device",description:`<strong>device</strong> (<code>str</code> or <code>torch.device</code>, <em>optional</em>) — | |
| The device to which the timesteps and diffusion process parameters (alpha, beta, gamma) should be moved | |
| to.`,name:"device"}]}),i(2),n(d);var y=e(d,2),Q=s(y);t(Q,{name:"step",anchor:"diffusers.VQDiffusionScheduler.step",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L199",parameters:[{name:"model_output",val:": Tensor"},{name:"timestep",val:": long"},{name:"sample",val:": LongTensor"},{name:"generator",val:": typing.Optional[torch.Generator] = None"},{name:"return_dict",val:": bool = True"}],parametersDescription:[{anchor:"diffusers.VQDiffusionScheduler.step.log_p_x_0",description:`<strong>log_p_x_0</strong> — (<code>torch.Tensor</code> of shape <code>(batch size, num classes - 1, num latent pixels)</code>): | |
| The log probabilities for the predicted classes of the initial latent pixels. Does not include a | |
| prediction for the masked class as the initial unnoised image cannot be masked.`,name:"log_p_x_0"},{anchor:"diffusers.VQDiffusionScheduler.step.t",description:`<strong>t</strong> (<code>torch.long</code>) — | |
| The timestep that determines which transition matrices are used.`,name:"t"},{anchor:"diffusers.VQDiffusionScheduler.step.x_t",description:`<strong>x_t</strong> (<code>torch.LongTensor</code> of shape <code>(batch size, num latent pixels)</code>) — | |
| The classes of each latent pixel at time <code>t</code>.`,name:"x_t"},{anchor:"diffusers.VQDiffusionScheduler.step.generator",description:`<strong>generator</strong> (<code>torch.Generator</code>, or <code>None</code>) — | |
| A random number generator for the noise applied to <code>p(x_{t-1} | x_t)</code> before it is sampled from.`,name:"generator"},{anchor:"diffusers.VQDiffusionScheduler.step.return_dict",description:`<strong>return_dict</strong> (<code>bool</code>, <em>optional</em>, defaults to <code>True</code>) — | |
| Whether or not to return a <a href="/docs/diffusers/pr_14192/en/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput">VQDiffusionSchedulerOutput</a> or | |
| <code>tuple</code>.`,name:"return_dict"}],returnDescription:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p>If return_dict is <code>True</code>, <a | |
| href="/docs/diffusers/pr_14192/en/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput" | |
| >VQDiffusionSchedulerOutput</a> is | |
| returned, otherwise a tuple is returned where the first element is the sample tensor.</p> | |
| `,returnType:`<script context="module">export const metadata = 'undefined';<\/script> | |
| <p><a | |
| href="/docs/diffusers/pr_14192/en/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput" | |
| >VQDiffusionSchedulerOutput</a> or <code>tuple</code></p> | |
| `}),i(2),n(y),n(r);var v=e(r,2);f(v,{title:"VQDiffusionSchedulerOutput",local:"diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput",headingTag:"h2"});var c=e(v,2),A=s(c);t(A,{name:"class diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput",anchor:"diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput",source:"https://github.com/huggingface/diffusers/blob/vr_14192/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27",parameters:[{name:"prev_sample",val:": LongTensor"}],parametersDescription:[{anchor:"diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput.prev_sample",description:`<strong>prev_sample</strong> (<code>torch.LongTensor</code> of shape <code>(batch size, num latent pixels)</code>) — | |
| Computed sample x_{t-1} of previous timestep. <code>prev_sample</code> should be used as next model input in the | |
| denoising loop.`,name:"prev_sample"}]}),i(2),n(c);var D=e(c,2);L(D,{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/en/api/schedulers/vq_diffusion.md"}),i(2),h(J,m),O()}export{Z as component}; | |
Xet Storage Details
- Size:
- 19.2 kB
- Xet hash:
- cd3d516b5174a19e241991245341a8cc0669db23d31e902682604538209a151a
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.