Buckets:
| import{s as sn,o as an,n as vs}from"../chunks/scheduler.5c93273d.js";import{S as nn,i as pn,g as i,s as a,r as c,A as Mn,h as p,f as t,c as n,j as tn,u as o,x as M,k as Ze,y as Jn,a as s,v as m,d as y,t as T,w as r}from"../chunks/index.e43dd92b.js";import{T as Gs}from"../chunks/Tip.3538f9e3.js";import{C as u}from"../chunks/CodeBlock.6896320e.js";import{H as Be,E as cn}from"../chunks/getInferenceSnippets.161194d2.js";function on(I){let J,U='在模型训练过程中查看推理样本有助于评估训练进度。我们的<a href="https://github.com/huggingface/diffusers/tree/main/examples/" rel="nofollow">训练脚本</a>支持此功能,并额外提供TensorBoard和Weights & Biases日志记录功能。';return{c(){J=i("p"),J.innerHTML=U},l(d){J=p(d,"P",{"data-svelte-h":!0}),M(J)!=="svelte-11fkf2z"&&(J.innerHTML=U)},m(d,w){s(d,J,w)},p:vs,d(d){d&&t(J)}}}function mn(I){let J,U="该分数存在固有局限性:训练数据中的标题是从网络爬取,并提取自图片关联的<code>alt</code>等标签。这些描述未必符合人类描述图像的方式,因此我们需要人工”设计”部分提示词。";return{c(){J=i("p"),J.innerHTML=U},l(d){J=p(d,"P",{"data-svelte-h":!0}),M(J)!=="svelte-1kd06m1"&&(J.innerHTML=U)},m(d,w){s(d,J,w)},p:vs,d(d){d&&t(J)}}}function yn(I){let J,U="CLIP分数和CLIP方向相似度都依赖CLIP模型,可能导致评估结果存在偏差。";return{c(){J=i("p"),J.textContent=U},l(d){J=p(d,"P",{"data-svelte-h":!0}),M(J)!=="svelte-deyo40"&&(J.textContent=U)},m(d,w){s(d,J,w)},p:vs,d(d){d&&t(J)}}}function Tn(I){let J,U="FID结果往往具有脆弱性,因为它依赖于许多因素:",d,w,C="<li>计算过程中使用的特定Inception模型</li> <li>计算实现的准确性</li> <li>图像格式(PNG和JPG的起点不同)</li>",Z,j,We="需要注意的是,FID通常在比较相似实验时最有用,但除非作者仔细公开FID测量代码,否则很难复现论文结果。",B,h,ge="这些注意事项同样适用于其他相关指标,如KID和IS。";return{c(){J=i("p"),J.textContent=U,d=a(),w=i("ul"),w.innerHTML=C,Z=a(),j=i("p"),j.textContent=We,B=a(),h=i("p"),h.textContent=ge},l(f){J=p(f,"P",{"data-svelte-h":!0}),M(J)!=="svelte-fax4tc"&&(J.textContent=U),d=n(f),w=p(f,"UL",{"data-svelte-h":!0}),M(w)!=="svelte-40toec"&&(w.innerHTML=C),Z=n(f),j=p(f,"P",{"data-svelte-h":!0}),M(j)!=="svelte-1lq2320"&&(j.textContent=We),B=n(f),h=p(f,"P",{"data-svelte-h":!0}),M(h)!=="svelte-1zrqq3"&&(h.textContent=ge)},m(f,b){s(f,J,b),s(f,d,b),s(f,w,b),s(f,Z,b),s(f,j,b),s(f,B,b),s(f,h,b)},p:vs,d(f){f&&(t(J),t(d),t(w),t(Z),t(j),t(B),t(h))}}}function rn(I){let J,U,d,w,C,Z,j,We='<img src="https://colab.research.google.com/assets/colab-badge.svg" alt="在 Colab 中打开"/>',B,h,ge='<p>鉴于当前已出现针对图像生成Diffusion模型的成熟评估框架(如<a href="https://crfm.stanford.edu/helm/heim/latest/" rel="nofollow">HEIM</a>、<a href="https://huggingface.co/papers/2307.06350" rel="nofollow">T2I-Compbench</a>、<a href="https://huggingface.co/papers/2310.11513" rel="nofollow">GenEval</a>),本文档部分内容已过时。</p>',f,b,Vs='像 <a href="https://huggingface.co/docs/diffusers/stable_diffusion" rel="nofollow">Stable Diffusion</a> 这类生成模型的评估本质上是主观的。但作为开发者和研究者,我们经常需要在众多可能性中做出审慎选择。那么当面对不同生成模型(如 GANs、Diffusion 等)时,该如何决策?',Ge,k,ks="定性评估容易产生偏差,可能导致错误结论;而定量指标又未必能准确反映图像质量。因此,通常需要结合定性与定量评估来获得更可靠的模型选择依据。",ve,x,xs="本文档将系统介绍扩散模型的定性与定量评估方法(非穷尽列举)。对于定量方法,我们将重点演示如何结合 <code>diffusers</code> 库实现这些评估。",Ve,X,Xs='文档所示方法同样适用于评估不同<a href="https://huggingface.co/docs/diffusers/main/en/api/schedulers/overview" rel="nofollow">噪声调度器</a>在固定生成模型下的表现差异。',ke,R,xe,N,Rs="我们涵盖以下Diffusion模型管线的评估:",Xe,F,Ns='<li>文本引导图像生成(如 <a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/text2img" rel="nofollow"><code>StableDiffusionPipeline</code></a>)</li> <li>基于文本和输入图像的引导生成(如 <a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/img2img" rel="nofollow"><code>StableDiffusionImg2ImgPipeline</code></a> 和 <a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/pix2pix" rel="nofollow"><code>StableDiffusionInstructPix2PixPipeline</code></a>)</li> <li>类别条件图像生成模型(如 <a href="https://huggingface.co/docs/diffusers/main/en/api/pipe" rel="nofollow"><code>DiTPipeline</code></a>)</li>',Re,H,Ne,E,Fs='定性评估通常涉及对生成图像的人工评判。评估维度包括构图质量、图文对齐度和空间关系等方面。标准化的提示词能为这些主观指标提供统一基准。DrawBench和PartiPrompts是常用的定性评估提示词数据集,分别由<a href="https://imagen.research.google/" rel="nofollow">Imagen</a>和<a href="https://parti.research.google/" rel="nofollow">Parti</a>团队提出。',Fe,Y,Hs='根据<a href="https://parti.research.google/" rel="nofollow">Parti官方网站</a>说明:',He,$,Es="<p>PartiPrompts (P2)是我们发布的包含1600多个英文提示词的丰富集合,可用于测量模型在不同类别和挑战维度上的能力。</p>",Ee,Q,Ys='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts.png" alt="parti-prompts"/>',Ye,A,$s="PartiPrompts包含以下字段:",$e,z,Qs="<li>Prompt(提示词)</li> <li>Category(类别,如”抽象”、“世界知识”等)</li> <li>Challenge(难度等级,如”基础”、“复杂”、“文字与符号”等)</li>",Qe,S,As="这些基准测试支持对不同图像生成模型进行并排人工对比评估。为此,🧨 Diffusers团队构建了<strong>Open Parti Prompts</strong>——一个基于Parti Prompts的社区驱动型定性评估基准,用于比较顶尖开源diffusion模型:",Ae,L,zs='<li><a href="https://huggingface.co/spaces/OpenGenAI/open-parti-prompts" rel="nofollow">Open Parti Prompts游戏</a>:展示10个parti提示词对应的4张生成图像,用户选择最符合提示的图片</li> <li><a href="https://huggingface.co/spaces/OpenGenAI/parti-prompts-leaderboard" rel="nofollow">Open Parti Prompts排行榜</a>:对比当前最优开源diffusion模型的性能榜单</li>',ze,P,Ss="为进行手动图像对比,我们演示如何使用<code>diffusers</code>处理部分PartiPrompts提示词。",Se,D,Ls='以下是从不同挑战维度(基础、复杂、语言结构、想象力、文字与符号)采样的提示词示例(使用<a href="https://huggingface.co/datasets/nateraw/parti-prompts" rel="nofollow">PartiPrompts作为数据集</a>):',Le,q,Pe,K,Ps='现在我们可以使用Stable Diffusion(<a href="https://huggingface.co/CompVis/stable-diffusion-v1-4" rel="nofollow">v1-4 checkpoint</a>)生成这些提示词对应的图像:',De,O,qe,ll,Ds='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts-14.png" alt="parti-prompts-14"/>',Ke,el,qs='我们也可以通过设置<code>num_images_per_prompt</code>参数来比较同一提示词生成的不同图像。使用不同检查点(<a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5</a>)运行相同流程后,结果如下:',Oe,tl,Ks='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts-15.png" alt="parti-prompts-15"/>',lt,sl,Os="当使用多个待评估模型为所有提示词生成若干图像后,这些结果将提交给人类评估员进行打分。有关DrawBench和PartiPrompts基准测试的更多细节,请参阅各自的论文。",et,W,tt,al,st,nl,la="本节将指导您如何评估三种不同的扩散流程,使用以下指标:",at,il,ea="<li>CLIP分数</li> <li>CLIP方向相似度</li> <li>FID(弗雷歇起始距离)</li>",nt,pl,it,Ml,ta='<a href="https://huggingface.co/papers/2104.08718" rel="nofollow">CLIP分数</a>用于衡量图像-标题对的匹配程度。CLIP分数越高表明匹配度越高🔼。该分数是对”匹配度”这一定性概念的量化测量,也可以理解为图像与标题之间的语义相似度。研究发现CLIP分数与人类判断具有高度相关性。',pt,Jl,sa="首先加载<code>StableDiffusionPipeline</code>:",Mt,cl,Jt,ol,aa="使用多个提示词生成图像:",ct,ml,ot,yl,na="然后计算CLIP分数:",mt,Tl,yt,rl,ia="上述示例中,我们为每个提示生成一张图像。如果为每个提示生成多张图像,则需要计算每个提示生成图像的平均分数。",Tt,dl,pa='当需要比较两个兼容<code>StableDiffusionPipeline</code>的检查点时,应在调用管道时传入生成器。首先使用<a href="https://huggingface.co/CompVis/stable-diffusion-v1-4" rel="nofollow">v1-4 Stable Diffusion检查点</a>以固定种子生成图像:',rt,ul,dt,fl,Ma='然后加载<a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5检查点</a>生成图像:',ut,wl,ft,jl,Ja="最后比较两者的CLIP分数:",wt,Ul,jt,hl,ca='结果表明<a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5</a>检查点性能优于前代。但需注意,我们用于计算CLIP分数的提示词数量较少。实际评估时应使用更多样化且数量更大的提示词集。',Ut,g,ht,bl,bt,Il,oa="这种情况下,生成管道同时接受输入图像和文本提示作为条件。以<code>StableDiffusionInstructPix2PixPipeline</code>为例,该管道接收编辑指令作为输入提示,并接受待编辑的输入图像。",It,Cl,ma="示例图示:",Ct,Zl,ya='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-instruction.png" alt="编辑指令"/>',Zt,Bl,Ta='评估此类模型的策略之一是测量两幅图像间变化的连贯性(通过<a href="https://huggingface.co/docs/transformers/model_doc/clip" rel="nofollow">CLIP</a>定义)中两个图像之间的变化与两个图像描述之间的变化的一致性(如论文<a href="https://huggingface.co/papers/2108.00946" rel="nofollow">《CLIP-Guided Domain Adaptation of Image Generators》</a>所示)。这被称为“<strong>CLIP方向相似度</strong>”。',Bt,Wl,ra="<li><strong>描述1</strong>对应输入图像(图像1),即待编辑的图像。</li> <li><strong>描述2</strong>对应编辑后的图像(图像2),应反映编辑指令。</li>",Wt,gl,da="以下是示意图:",gt,_l,ua='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-consistency.png" alt="edit-consistency"/>',_t,Gl,fa="我们准备了一个小型数据集来实现该指标。首先加载数据集:",Gt,vl,vt,Vl,Vt,kl,wa="数据字段说明:",kt,xl,ja="<li><code>input</code>:与<code>image</code>对应的原始描述。</li> <li><code>edit</code>:编辑指令。</li> <li><code>output</code>:反映<code>edit</code>指令的修改后描述。</li>",xt,Xl,Ua="查看一个样本:",Xt,Rl,Rt,Nl,Nt,Fl,ha="对应的图像:",Ft,Hl,Ht,El,ba='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-dataset.png" alt="edit-dataset"/>',Et,Yl,Ia="我们将根据编辑指令修改数据集中的图像,并计算方向相似度。",Yt,$l,Ca="首先加载<code>StableDiffusionInstructPix2PixPipeline</code>:",$t,Ql,Qt,Al,Za="执行编辑操作:",At,zl,zt,Sl,Ba="为测量方向相似度,我们首先加载CLIP的图像和文本编码器:",St,Ll,Lt,Pl,Wa='注意我们使用的是特定CLIP检查点——<code>openai/clip-vit-large-patch14</code>,因为Stable Diffusion预训练正是基于此CLIP变体。详见<a href="https://huggingface.co/docs/transformers/model_doc/clip" rel="nofollow">文档</a>。',Pt,Dl,ga="接着准备计算方向相似度的PyTorch <code>nn.Module</code>:",Dt,ql,qt,Kl,_a="现在让我们使用<code>DirectionalSimilarity</code>模块:",Kt,Ol,Ot,le,Ga="与CLIP分数类似,CLIP方向相似度数值越高越好。",ls,ee,va="需要注意的是,<code>StableDiffusionInstructPix2PixPipeline</code>提供了两个控制参数<code>image_guidance_scale</code>和<code>guidance_scale</code>来调节最终编辑图像的质量。建议您尝试调整这两个参数,观察它们对方向相似度的影响。",es,te,Va="我们可以扩展这个度量标准来评估原始图像与编辑版本的相似度,只需计算<code>F.cosine_similarity(img_feat_two, img_feat_one)</code>。对于这类编辑任务,我们仍希望尽可能保留图像的主要语义特征(即保持较高的相似度分数)。",ts,se,ka='该度量方法同样适用于类似流程,例如<a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/pix2pix_zero#diffusers.StableDiffusionPix2PixZeroPipeline" rel="nofollow"><code>StableDiffusionPix2PixZeroPipeline</code></a>。',ss,_,as,ae,xa='<strong><em>扩展IS、FID(后文讨论)或KID等指标存在困难</em></strong>,当被评估模型是在大型图文数据集(如<a href="https://laion.ai/blog/laion-5b/" rel="nofollow">LAION-5B数据集</a>)上预训练时。因为这些指标的底层都使用了在ImageNet-1k数据集上预训练的InceptionNet来提取图像特征。Stable Diffusion的预训练数据集与InceptionNet的预训练数据集可能重叠有限,因此不适合作为特征提取器。',ns,ne,Xa=`<strong><em>上述指标更适合评估类别条件模型</em></strong>,例如<a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/dit" rel="nofollow">DiT</a>。该模型是在ImageNet-1k类别条件下预训练的。 | |
| 这是9篇文档中的第8部分。`,is,ie,ps,pe,Ra='基于类别的生成模型通常是在带有类别标签的数据集(如<a href="https://huggingface.co/datasets/imagenet-1k" rel="nofollow">ImageNet-1k</a>)上进行预训练的。评估这些模型的常用指标包括Fréchet Inception Distance(FID)、Kernel Inception Distance(KID)和Inception Score(IS)。本文档重点介绍FID(<a href="https://huggingface.co/papers/1706.08500" rel="nofollow">Heusel等人</a>),并展示如何使用<a href="https://huggingface.co/docs/diffusers/api/pipelines/dit" rel="nofollow"><code>DiTPipeline</code></a>计算该指标,该管道底层使用了<a href="https://huggingface.co/papers/2212.09748" rel="nofollow">DiT模型</a>。',Ms,Me,Na='FID旨在衡量两组图像数据集的相似程度。根据<a href="https://mmgeneration.readthedocs.io/en/latest/quick_run.html#fid" rel="nofollow">此资源</a>:',Js,Je,Fa="<p>Fréchet Inception Distance是衡量两组图像数据集相似度的指标。研究表明其与人类对视觉质量的主观判断高度相关,因此最常用于评估生成对抗网络(GAN)生成样本的质量。FID通过计算Inception网络特征表示所拟合的两个高斯分布之间的Fréchet距离来实现。</p>",cs,ce,Ha="这两个数据集本质上是真实图像数据集和生成图像数据集(本例中为人工生成的图像)。FID通常基于两个大型数据集计算,但本文档将使用两个小型数据集进行演示。",os,oe,Ea="首先下载ImageNet-1k训练集中的部分图像:",ms,me,ys,ye,Ts,Te,Ya="这些是来自以下ImageNet-1k类别的10张图像:“cassette_player”、“chain_saw”(2张)、“church”、“gas_pump”(3张)、“parachute”(2张)和”tench”。",rs,G,$a='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/real-images.png" alt="真实图像"/><br/> <em>真实图像</em>',ds,re,Qa="加载图像后,我们对其进行轻量级预处理以便用于FID计算:",us,de,fs,ue,Aa='我们现在加载<a href="https://huggingface.co/docs/diffusers/api/pipelines/dit" rel="nofollow"><code>DiTPipeline</code></a>来生成基于上述类别的条件图像。',ws,fe,js,we,za='现在,我们可以使用<a href="https://torchmetrics.readthedocs.io/" rel="nofollow"><code>torchmetrics</code></a>计算FID分数。',Us,je,hs,Ue,Sa="FID分数越低越好。以下因素会影响FID结果:",bs,he,La="<li>图像数量(包括真实图像和生成图像)</li> <li>扩散过程中引入的随机性</li> <li>扩散过程的推理步数</li> <li>扩散过程中使用的调度器</li>",Is,be,Pa="对于最后两点,最佳实践是使用不同的随机种子和推理步数进行多次评估,然后报告平均结果。",Cs,v,Zs,Ie,Da="最后,让我们可视化检查这些<code>fake_images</code>。",Bs,V,qa='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/fake-images.png" alt="生成图像"/><br/> <em>生成图像示例</em>',Ws,Ce,gs,_e,_s;return C=new Be({props:{title:"Diffusion模型评估指南",local:"diffusion模型评估指南",headingTag:"h1"}}),R=new Be({props:{title:"评估场景",local:"评估场景",headingTag:"h2"}}),H=new Be({props:{title:"定性评估",local:"定性评估",headingTag:"h2"}}),q=new u({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBJTIzJTIwcHJvbXB0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJuYXRlcmF3JTJGcGFydGktcHJvbXB0cyUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMjIpJTBBJTIzJTIwcHJvbXB0cyUyMCUzRCUyMHByb21wdHMuc2h1ZmZsZSgpJTBBJTIzJTIwc2FtcGxlX3Byb21wdHMlMjAlM0QlMjAlNUJwcm9tcHRzJTVCaSU1RCU1QiUyMlByb21wdCUyMiU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKDUpJTVEJTBBJTBBJTIzJTIwRml4aW5nJTIwdGhlc2UlMjBzYW1wbGUlMjBwcm9tcHRzJTIwaW4lMjB0aGUlMjBpbnRlcmVzdCUyMG9mJTIwcmVwcm9kdWNpYmlsaXR5LiUwQXNhbXBsZV9wcm9tcHRzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyYSUyMGNvcmdpJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyYSUyMGhvdCUyMGFpciUyMGJhbGxvb24lMjB3aXRoJTIwYSUyMHlpbi15YW5nJTIwc3ltYm9sJTJDJTIwd2l0aCUyMHRoZSUyMG1vb24lMjB2aXNpYmxlJTIwaW4lMjB0aGUlMjBkYXl0aW1lJTIwc2t5JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyYSUyMGNhciUyMHdpdGglMjBubyUyMHdpbmRvd3MlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJhJTIwY3ViZSUyMG1hZGUlMjBvZiUyMHBvcmN1cGluZSUyMiUyQyUwQSUyMCUyMCUyMCUyMCdUaGUlMjBzYXlpbmclMjAlMjJCRSUyMEVYQ0VMTEVOVCUyMFRPJTIwRUFDSCUyME9USEVSJTIyJTIwd3JpdHRlbiUyMG9uJTIwYSUyMHJlZCUyMGJyaWNrJTIwd2FsbCUyMHdpdGglMjBhJTIwZ3JhZmZpdGklMjBpbWFnZSUyMG9mJTIwYSUyMGdyZWVuJTIwYWxpZW4lMjB3ZWFyaW5nJTIwYSUyMHR1eGVkby4lMjBBJTIweWVsbG93JTIwZmlyZSUyMGh5ZHJhbnQlMjBpcyUyMG9uJTIwYSUyMHNpZGV3YWxrJTIwaW4lMjB0aGUlMjBmb3JlZ3JvdW5kLiclMkMlMEElNUQ=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-comment"># prompts = load_dataset("nateraw/parti-prompts", split="train")</span> | |
| <span class="hljs-comment"># prompts = prompts.shuffle()</span> | |
| <span class="hljs-comment"># sample_prompts = [prompts[i]["Prompt"] for i in range(5)]</span> | |
| <span class="hljs-comment"># Fixing these sample prompts in the interest of reproducibility.</span> | |
| sample_prompts = [ | |
| <span class="hljs-string">"a corgi"</span>, | |
| <span class="hljs-string">"a hot air balloon with a yin-yang symbol, with the moon visible in the daytime sky"</span>, | |
| <span class="hljs-string">"a car with no windows"</span>, | |
| <span class="hljs-string">"a cube made of porcupine"</span>, | |
| <span class="hljs-string">'The saying "BE EXCELLENT TO EACH OTHER" written on a red brick wall with a graffiti image of a green alien wearing a tuxedo. A yellow fire hydrant is on a sidewalk in the foreground.'</span>, | |
| ]`,wrap:!1}}),O=new u({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFzZWVkJTIwJTNEJTIwMCUwQWdlbmVyYXRvciUyMCUzRCUyMHRvcmNoLm1hbnVhbF9zZWVkKHNlZWQpJTBBJTBBaW1hZ2VzJTIwJTNEJTIwc2RfcGlwZWxpbmUoc2FtcGxlX3Byb21wdHMlMkMlMjBudW1faW1hZ2VzX3Blcl9wcm9tcHQlM0QxJTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yKS5pbWFnZXM=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| seed = <span class="hljs-number">0</span> | |
| generator = torch.manual_seed(seed) | |
| images = sd_pipeline(sample_prompts, num_images_per_prompt=<span class="hljs-number">1</span>, generator=generator).images`,wrap:!1}}),W=new Gs({props:{$$slots:{default:[on]},$$scope:{ctx:I}}}),al=new Be({props:{title:"定量评估",local:"定量评估",headingTag:"h2"}}),pl=new Be({props:{title:"文本引导图像生成",local:"文本引导图像生成",headingTag:"h3"}}),cl=new u({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFN0YWJsZURpZmZ1c2lvblBpcGVsaW5lJTBBaW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9ja3B0JTIwJTNEJTIwJTIyQ29tcFZpcyUyRnN0YWJsZS1kaWZmdXNpb24tdjEtNCUyMiUwQXNkX3BpcGVsaW5lJTIwJTNEJTIwU3RhYmxlRGlmZnVzaW9uUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NrcHQlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYpLnRvKCUyMmN1ZGElMjIp",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> StableDiffusionPipeline | |
| <span class="hljs-keyword">import</span> torch | |
| model_ckpt = <span class="hljs-string">"CompVis/stable-diffusion-v1-4"</span> | |
| sd_pipeline = StableDiffusionPipeline.from_pretrained(model_ckpt, torch_dtype=torch.float16).to(<span class="hljs-string">"cuda"</span>)`,wrap:!1}}),ml=new u({props:{code:"cHJvbXB0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMmElMjBwaG90byUyMG9mJTIwYW4lMjBhc3Ryb25hdXQlMjByaWRpbmclMjBhJTIwaG9yc2UlMjBvbiUyMG1hcnMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJBJTIwaGlnaCUyMHRlY2glMjBzb2xhcnB1bmslMjB1dG9waWElMjBpbiUyMHRoZSUyMEFtYXpvbiUyMHJhaW5mb3Jlc3QlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJBJTIwcGlrYWNodSUyMGZpbmUlMjBkaW5pbmclMjB3aXRoJTIwYSUyMHZpZXclMjB0byUyMHRoZSUyMEVpZmZlbCUyMFRvd2VyJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyQSUyMG1lY2hhJTIwcm9ib3QlMjBpbiUyMGElMjBmYXZlbGElMjBpbiUyMGV4cHJlc3Npb25pc3QlMjBzdHlsZSUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmFuJTIwaW5zZWN0JTIwcm9ib3QlMjBwcmVwYXJpbmclMjBhJTIwZGVsaWNpb3VzJTIwbWVhbCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkElMjBzbWFsbCUyMGNhYmluJTIwb24lMjB0b3AlMjBvZiUyMGElMjBzbm93eSUyMG1vdW50YWluJTIwaW4lMjB0aGUlMjBzdHlsZSUyMG9mJTIwRGlzbmV5JTJDJTIwYXJ0c3RhdGlvbiUyMiUyQyUwQSU1RCUwQSUwQWltYWdlcyUyMCUzRCUyMHNkX3BpcGVsaW5lKHByb21wdHMlMkMlMjBudW1faW1hZ2VzX3Blcl9wcm9tcHQlM0QxJTJDJTIwb3V0cHV0X3R5cGUlM0QlMjJucCUyMikuaW1hZ2VzJTBBJTBBcHJpbnQoaW1hZ2VzLnNoYXBlKSUwQSUyMyUyMCg2JTJDJTIwNTEyJTJDJTIwNTEyJTJDJTIwMyk=",highlighted:`prompts = [ | |
| <span class="hljs-string">"a photo of an astronaut riding a horse on mars"</span>, | |
| <span class="hljs-string">"A high tech solarpunk utopia in the Amazon rainforest"</span>, | |
| <span class="hljs-string">"A pikachu fine dining with a view to the Eiffel Tower"</span>, | |
| <span class="hljs-string">"A mecha robot in a favela in expressionist style"</span>, | |
| <span class="hljs-string">"an insect robot preparing a delicious meal"</span>, | |
| <span class="hljs-string">"A small cabin on top of a snowy mountain in the style of Disney, artstation"</span>, | |
| ] | |
| images = sd_pipeline(prompts, num_images_per_prompt=<span class="hljs-number">1</span>, output_type=<span class="hljs-string">"np"</span>).images | |
| <span class="hljs-built_in">print</span>(images.shape) | |
| <span class="hljs-comment"># (6, 512, 512, 3)</span>`,wrap:!1}}),Tl=new u({props:{code:"ZnJvbSUyMHRvcmNobWV0cmljcy5mdW5jdGlvbmFsLm11bHRpbW9kYWwlMjBpbXBvcnQlMjBjbGlwX3Njb3JlJTBBZnJvbSUyMGZ1bmN0b29scyUyMGltcG9ydCUyMHBhcnRpYWwlMEElMEFjbGlwX3Njb3JlX2ZuJTIwJTNEJTIwcGFydGlhbChjbGlwX3Njb3JlJTJDJTIwbW9kZWxfbmFtZV9vcl9wYXRoJTNEJTIyb3BlbmFpJTJGY2xpcC12aXQtYmFzZS1wYXRjaDE2JTIyKSUwQSUwQWRlZiUyMGNhbGN1bGF0ZV9jbGlwX3Njb3JlKGltYWdlcyUyQyUyMHByb21wdHMpJTNBJTBBJTIwJTIwJTIwJTIwaW1hZ2VzX2ludCUyMCUzRCUyMChpbWFnZXMlMjAqJTIwMjU1KS5hc3R5cGUoJTIydWludDglMjIpJTBBJTIwJTIwJTIwJTIwY2xpcF9zY29yZSUyMCUzRCUyMGNsaXBfc2NvcmVfZm4odG9yY2guZnJvbV9udW1weShpbWFnZXNfaW50KS5wZXJtdXRlKDAlMkMlMjAzJTJDJTIwMSUyQyUyMDIpJTJDJTIwcHJvbXB0cykuZGV0YWNoKCklMEElMjAlMjAlMjAlMjByZXR1cm4lMjByb3VuZChmbG9hdChjbGlwX3Njb3JlKSUyQyUyMDQpJTBBJTBBc2RfY2xpcF9zY29yZSUyMCUzRCUyMGNhbGN1bGF0ZV9jbGlwX3Njb3JlKGltYWdlcyUyQyUyMHByb21wdHMpJTBBcHJpbnQoZiUyMkNMSVAlRTUlODglODYlRTYlOTUlQjAlM0ElMjAlN0JzZF9jbGlwX3Njb3JlJTdEJTIyKSUwQSUyMyUyMENMSVAlRTUlODglODYlRTYlOTUlQjAlM0ElMjAzNS43MDM4",highlighted:`<span class="hljs-keyword">from</span> torchmetrics.functional.multimodal <span class="hljs-keyword">import</span> clip_score | |
| <span class="hljs-keyword">from</span> functools <span class="hljs-keyword">import</span> partial | |
| clip_score_fn = partial(clip_score, model_name_or_path=<span class="hljs-string">"openai/clip-vit-base-patch16"</span>) | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">calculate_clip_score</span>(<span class="hljs-params">images, prompts</span>): | |
| images_int = (images * <span class="hljs-number">255</span>).astype(<span class="hljs-string">"uint8"</span>) | |
| clip_score = clip_score_fn(torch.from_numpy(images_int).permute(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>), prompts).detach() | |
| <span class="hljs-keyword">return</span> <span class="hljs-built_in">round</span>(<span class="hljs-built_in">float</span>(clip_score), <span class="hljs-number">4</span>) | |
| sd_clip_score = calculate_clip_score(images, prompts) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"CLIP分数: <span class="hljs-subst">{sd_clip_score}</span>"</span>) | |
| <span class="hljs-comment"># CLIP分数: 35.7038</span>`,wrap:!1}}),ul=new u({props:{code:"c2VlZCUyMCUzRCUyMDAlMEFnZW5lcmF0b3IlMjAlM0QlMjB0b3JjaC5tYW51YWxfc2VlZChzZWVkKSUwQSUwQWltYWdlcyUyMCUzRCUyMHNkX3BpcGVsaW5lKHByb21wdHMlMkMlMjBudW1faW1hZ2VzX3Blcl9wcm9tcHQlM0QxJTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yJTJDJTIwb3V0cHV0X3R5cGUlM0QlMjJucCUyMikuaW1hZ2Vz",highlighted:`seed = <span class="hljs-number">0</span> | |
| generator = torch.manual_seed(seed) | |
| images = sd_pipeline(prompts, num_images_per_prompt=<span class="hljs-number">1</span>, generator=generator, output_type=<span class="hljs-string">"np"</span>).images`,wrap:!1}}),wl=new u({props:{code:"bW9kZWxfY2twdF8xXzUlMjAlM0QlMjAlMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMEFzZF9waXBlbGluZV8xXzUlMjAlM0QlMjBTdGFibGVEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2twdF8xXzUlMkMlMjB0b3JjaF9kdHlwZSUzRHRvcmNoLmZsb2F0MTYpLnRvKCUyMmN1ZGElMjIpJTBBJTBBaW1hZ2VzXzFfNSUyMCUzRCUyMHNkX3BpcGVsaW5lXzFfNShwcm9tcHRzJTJDJTIwbnVtX2ltYWdlc19wZXJfcHJvbXB0JTNEMSUyQyUyMGdlbmVyYXRvciUzRGdlbmVyYXRvciUyQyUyMG91dHB1dF90eXBlJTNEJTIybnAlMjIpLmltYWdlcw==",highlighted:`model_ckpt_1_5 = <span class="hljs-string">"stable-diffusion-v1-5/stable-diffusion-v1-5"</span> | |
| sd_pipeline_1_5 = StableDiffusionPipeline.from_pretrained(model_ckpt_1_5, torch_dtype=torch.float16).to(<span class="hljs-string">"cuda"</span>) | |
| images_1_5 = sd_pipeline_1_5(prompts, num_images_per_prompt=<span class="hljs-number">1</span>, generator=generator, output_type=<span class="hljs-string">"np"</span>).images`,wrap:!1}}),Ul=new u({props:{code:"c2RfY2xpcF9zY29yZV8xXzQlMjAlM0QlMjBjYWxjdWxhdGVfY2xpcF9zY29yZShpbWFnZXMlMkMlMjBwcm9tcHRzKSUwQXByaW50KGYlMjJ2LTEtNCVFNyU4OSU4OCVFNiU5QyVBQyVFNyU5QSU4NENMSVAlRTUlODglODYlRTYlOTUlQjAlM0ElMjAlN0JzZF9jbGlwX3Njb3JlXzFfNCU3RCUyMiklMEElMjMlMjB2LTEtNCVFNyU4OSU4OCVFNiU5QyVBQyVFNyU5QSU4NENMSVAlRTUlODglODYlRTYlOTUlQjAlM0ElMjAzNC45MTAyJTBBJTBBc2RfY2xpcF9zY29yZV8xXzUlMjAlM0QlMjBjYWxjdWxhdGVfY2xpcF9zY29yZShpbWFnZXNfMV81JTJDJTIwcHJvbXB0cyklMEFwcmludChmJTIydi0xLTUlRTclODklODglRTYlOUMlQUMlRTclOUElODRDTElQJUU1JTg4JTg2JUU2JTk1JUIwJTNBJTIwJTdCc2RfY2xpcF9zY29yZV8xXzUlN0QlMjIpJTBBJTIzJTIwdi0xLTUlRTclODklODglRTYlOUMlQUMlRTclOUElODRDTElQJUU1JTg4JTg2JUU2JTk1JUIwJTNBJTIwMzYuMjEzNw==",highlighted:`sd_clip_score_1_4 = calculate_clip_score(images, prompts) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"v-1-4版本的CLIP分数: <span class="hljs-subst">{sd_clip_score_1_4}</span>"</span>) | |
| <span class="hljs-comment"># v-1-4版本的CLIP分数: 34.9102</span> | |
| sd_clip_score_1_5 = calculate_clip_score(images_1_5, prompts) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"v-1-5版本的CLIP分数: <span class="hljs-subst">{sd_clip_score_1_5}</span>"</span>) | |
| <span class="hljs-comment"># v-1-5版本的CLIP分数: 36.2137</span>`,wrap:!1}}),g=new Gs({props:{warning:!0,$$slots:{default:[mn]},$$scope:{ctx:I}}}),bl=new Be({props:{title:"图像条件式文本生成图像",local:"图像条件式文本生成图像",headingTag:"h3"}}),vl=new u({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJzYXlha3BhdWwlMkZpbnN0cnVjdHBpeDJwaXgtZGVtbyUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMjIpJTBBZGF0YXNldC5mZWF0dXJlcw==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| dataset = load_dataset(<span class="hljs-string">"sayakpaul/instructpix2pix-demo"</span>, split=<span class="hljs-string">"train"</span>) | |
| dataset.features`,wrap:!1}}),Vl=new u({props:{code:"JTdCJ2lucHV0JyUzQSUyMFZhbHVlKGR0eXBlJTNEJ3N0cmluZyclMkMlMjBpZCUzRE5vbmUpJTJDJTBBJTIwJ2VkaXQnJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnb3V0cHV0JyUzQSUyMFZhbHVlKGR0eXBlJTNEJ3N0cmluZyclMkMlMjBpZCUzRE5vbmUpJTJDJTBBJTIwJ2ltYWdlJyUzQSUyMEltYWdlKGRlY29kZSUzRFRydWUlMkMlMjBpZCUzRE5vbmUpJTdE",highlighted:`{<span class="hljs-string">'input'</span>: Value(dtype=<span class="hljs-string">'string'</span>, <span class="hljs-built_in">id</span>=None), | |
| <span class="hljs-string">'edit'</span>: Value(dtype=<span class="hljs-string">'string'</span>, <span class="hljs-built_in">id</span>=None), | |
| <span class="hljs-string">'output'</span>: Value(dtype=<span class="hljs-string">'string'</span>, <span class="hljs-built_in">id</span>=None), | |
| <span class="hljs-string">'image'</span>: Image(decode=True, <span class="hljs-built_in">id</span>=None)}`,wrap:!1}}),Rl=new u({props:{code:"aWR4JTIwJTNEJTIwMCUwQXByaW50KGYlMjJPcmlnaW5hbCUyMGNhcHRpb24lM0ElMjAlN0JkYXRhc2V0JTVCaWR4JTVEJTVCJ2lucHV0JyU1RCU3RCUyMiklMEFwcmludChmJTIyRWRpdCUyMGluc3RydWN0aW9uJTNBJTIwJTdCZGF0YXNldCU1QmlkeCU1RCU1QidlZGl0JyU1RCU3RCUyMiklMEFwcmludChmJTIyTW9kaWZpZWQlMjBjYXB0aW9uJTNBJTIwJTdCZGF0YXNldCU1QmlkeCU1RCU1QidvdXRwdXQnJTVEJTdEJTIyKQ==",highlighted:`idx = <span class="hljs-number">0</span> | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Original caption: <span class="hljs-subst">{dataset[idx][<span class="hljs-string">'input'</span>]}</span>"</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Edit instruction: <span class="hljs-subst">{dataset[idx][<span class="hljs-string">'edit'</span>]}</span>"</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Modified caption: <span class="hljs-subst">{dataset[idx][<span class="hljs-string">'output'</span>]}</span>"</span>)`,wrap:!1}}),Nl=new u({props:{code:"T3JpZ2luYWwlMjBjYXB0aW9uJTNBJTIwMi4lMjBGQVJPRSUyMElTTEFORFMlM0ElMjBBbiUyMGFyY2hpcGVsYWdvJTIwb2YlMjAxOCUyMG1vdW50YWlub3VzJTIwaXNsZXMlMjBpbiUyMHRoZSUyME5vcnRoJTIwQXRsYW50aWMlMjBPY2VhbiUyMGJldHdlZW4lMjBOb3J3YXklMjBhbmQlMjBJY2VsYW5kJTJDJTIwdGhlJTIwRmFyb2UlMjBJc2xhbmRzJTIwaGFzJTIwJ2V2ZXJ5dGhpbmclMjB5b3UlMjBjb3VsZCUyMGhvcGUlMjBmb3InJTJDJTIwYWNjb3JkaW5nJTIwdG8lMjBCaWclMjA3JTIwVHJhdmVsLiUyMEl0JTIwYm9hc3RzJTIwJ2NyeXN0YWwlMjBjbGVhciUyMHdhdGVyZmFsbHMlMkMlMjByb2NreSUyMGNsaWZmcyUyMHRoYXQlMjBzZWVtJTIwdG8lMjBqdXQlMjBvdXQlMjBvZiUyMG5vd2hlcmUlMjBhbmQlMjB2ZWx2ZXR5JTIwZ3JlZW4lMjBoaWxscyclMEFFZGl0JTIwaW5zdHJ1Y3Rpb24lM0ElMjBtYWtlJTIwdGhlJTIwaXNsZXMlMjBhbGwlMjB3aGl0ZSUyMG1hcmJsZSUwQU1vZGlmaWVkJTIwY2FwdGlvbiUzQSUyMDIuJTIwV0hJVEUlMjBNQVJCTEUlMjBJU0xBTkRTJTNBJTIwQW4lMjBhcmNoaXBlbGFnbyUyMG9mJTIwMTglMjBtb3VudGFpbm91cyUyMHdoaXRlJTIwbWFyYmxlJTIwaXNsZXMlMjBpbiUyMHRoZSUyME5vcnRoJTIwQXRsYW50aWMlMjBPY2VhbiUyMGJldHdlZW4lMjBOb3J3YXklMjBhbmQlMjBJY2VsYW5kJTJDJTIwdGhlJTIwV2hpdGUlMjBNYXJibGUlMjBJc2xhbmRzJTIwaGFzJTIwJ2V2ZXJ5dGhpbmclMjB5b3UlMjBjb3VsZCUyMGhvcGUlMjBmb3InJTJDJTIwYWNjb3JkaW5nJTIwdG8lMjBCaWclMjA3JTIwVHJhdmVsLiUyMEl0JTIwYm9hc3RzJTIwJ2NyeXN0YWwlMjBjbGVhciUyMHdhdGVyZmFsbHMlMkMlMjByb2NreSUyMGNsaWZmcyUyMHRoYXQlMjBzZWVtJTIwdG8lMjBqdXQlMjBvdXQlMjBvZiUyMG5vd2hlcmUlMjBhbmQlMjB2ZWx2ZXR5JTIwZ3JlZW4lMjBoaWxscyc=",highlighted:`Original caption: 2. FAROE ISLANDS: An archipelago of 18 mountainous isles <span class="hljs-keyword">in</span> the North Atlantic Ocean between Norway and Iceland, the Faroe Islands has <span class="hljs-string">'everything you could hope for'</span>, according to Big 7 Travel. It boasts <span class="hljs-string">'crystal clear waterfalls, rocky cliffs that seem to jut out of nowhere and velvety green hills'</span> | |
| Edit instruction: make the isles all white marble | |
| Modified caption: 2. WHITE MARBLE ISLANDS: An archipelago of 18 mountainous white marble isles <span class="hljs-keyword">in</span> the North Atlantic Ocean between Norway and Iceland, the White Marble Islands has <span class="hljs-string">'everything you could hope for'</span>, according to Big 7 Travel. It boasts <span class="hljs-string">'crystal clear waterfalls, rocky cliffs that seem to jut out of nowhere and velvety green hills'</span>`,wrap:!1}}),Hl=new u({props:{code:"ZGF0YXNldCU1QmlkeCU1RCU1QiUyMmltYWdlJTIyJTVE",highlighted:'dataset[idx][<span class="hljs-string">"image"</span>]',wrap:!1}}),Ql=new u({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFN0YWJsZURpZmZ1c2lvbkluc3RydWN0UGl4MlBpeFBpcGVsaW5lJTBBJTBBaW5zdHJ1Y3RfcGl4MnBpeF9waXBlbGluZSUyMCUzRCUyMFN0YWJsZURpZmZ1c2lvbkluc3RydWN0UGl4MlBpeFBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJ0aW1icm9va3MlMkZpbnN0cnVjdC1waXgycGl4JTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byglMjJjdWRhJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> StableDiffusionInstructPix2PixPipeline | |
| instruct_pix2pix_pipeline = StableDiffusionInstructPix2PixPipeline.from_pretrained( | |
| <span class="hljs-string">"timbrooks/instruct-pix2pix"</span>, torch_dtype=torch.float16 | |
| ).to(<span class="hljs-string">"cuda"</span>)`,wrap:!1}}),zl=new u({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwZWRpdF9pbWFnZShpbnB1dF9pbWFnZSUyQyUyMGluc3RydWN0aW9uKSUzQSUwQSUyMCUyMCUyMCUyMGltYWdlJTIwJTNEJTIwaW5zdHJ1Y3RfcGl4MnBpeF9waXBlbGluZSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnN0cnVjdGlvbiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGltYWdlJTNEaW5wdXRfaW1hZ2UlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRfdHlwZSUzRCUyMm5wJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yJTJDJTBBJTIwJTIwJTIwJTIwKS5pbWFnZXMlNUIwJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwaW1hZ2UlMEElMEFpbnB1dF9pbWFnZXMlMjAlM0QlMjAlNUIlNUQlMEFvcmlnaW5hbF9jYXB0aW9ucyUyMCUzRCUyMCU1QiU1RCUwQW1vZGlmaWVkX2NhcHRpb25zJTIwJTNEJTIwJTVCJTVEJTBBZWRpdGVkX2ltYWdlcyUyMCUzRCUyMCU1QiU1RCUwQSUwQWZvciUyMGlkeCUyMGluJTIwcmFuZ2UobGVuKGRhdGFzZXQpKSUzQSUwQSUyMCUyMCUyMCUyMGlucHV0X2ltYWdlJTIwJTNEJTIwZGF0YXNldCU1QmlkeCU1RCU1QiUyMmltYWdlJTIyJTVEJTBBJTIwJTIwJTIwJTIwZWRpdF9pbnN0cnVjdGlvbiUyMCUzRCUyMGRhdGFzZXQlNUJpZHglNUQlNUIlMjJlZGl0JTIyJTVEJTBBJTIwJTIwJTIwJTIwZWRpdGVkX2ltYWdlJTIwJTNEJTIwZWRpdF9pbWFnZShpbnB1dF9pbWFnZSUyQyUyMGVkaXRfaW5zdHJ1Y3Rpb24pJTBBJTBBJTIwJTIwJTIwJTIwaW5wdXRfaW1hZ2VzLmFwcGVuZChucC5hcnJheShpbnB1dF9pbWFnZSkpJTBBJTIwJTIwJTIwJTIwb3JpZ2luYWxfY2FwdGlvbnMuYXBwZW5kKGRhdGFzZXQlNUJpZHglNUQlNUIlMjJpbnB1dCUyMiU1RCklMEElMjAlMjAlMjAlMjBtb2RpZmllZF9jYXB0aW9ucy5hcHBlbmQoZGF0YXNldCU1QmlkeCU1RCU1QiUyMm91dHB1dCUyMiU1RCklMEElMjAlMjAlMjAlMjBlZGl0ZWRfaW1hZ2VzLmFwcGVuZChlZGl0ZWRfaW1hZ2Up",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">edit_image</span>(<span class="hljs-params">input_image, instruction</span>): | |
| image = instruct_pix2pix_pipeline( | |
| instruction, | |
| image=input_image, | |
| output_type=<span class="hljs-string">"np"</span>, | |
| generator=generator, | |
| ).images[<span class="hljs-number">0</span>] | |
| <span class="hljs-keyword">return</span> image | |
| input_images = [] | |
| original_captions = [] | |
| modified_captions = [] | |
| edited_images = [] | |
| <span class="hljs-keyword">for</span> idx <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(dataset)): | |
| input_image = dataset[idx][<span class="hljs-string">"image"</span>] | |
| edit_instruction = dataset[idx][<span class="hljs-string">"edit"</span>] | |
| edited_image = edit_image(input_image, edit_instruction) | |
| input_images.append(np.array(input_image)) | |
| original_captions.append(dataset[idx][<span class="hljs-string">"input"</span>]) | |
| modified_captions.append(dataset[idx][<span class="hljs-string">"output"</span>]) | |
| edited_images.append(edited_image)`,wrap:!1}}),Ll=new u({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMCglMEElMjAlMjAlMjAlMjBDTElQVG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwQ0xJUFRleHRNb2RlbFdpdGhQcm9qZWN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwQ0xJUFZpc2lvbk1vZGVsV2l0aFByb2plY3Rpb24lMkMlMEElMjAlMjAlMjAlMjBDTElQSW1hZ2VQcm9jZXNzb3IlMkMlMEEpJTBBJTBBY2xpcF9pZCUyMCUzRCUyMCUyMm9wZW5haSUyRmNsaXAtdml0LWxhcmdlLXBhdGNoMTQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBDTElQVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjbGlwX2lkKSUwQXRleHRfZW5jb2RlciUyMCUzRCUyMENMSVBUZXh0TW9kZWxXaXRoUHJvamVjdGlvbi5mcm9tX3ByZXRyYWluZWQoY2xpcF9pZCkudG8oJTIyY3VkYSUyMiklMEFpbWFnZV9wcm9jZXNzb3IlMjAlM0QlMjBDTElQSW1hZ2VQcm9jZXNzb3IuZnJvbV9wcmV0cmFpbmVkKGNsaXBfaWQpJTBBaW1hZ2VfZW5jb2RlciUyMCUzRCUyMENMSVBWaXNpb25Nb2RlbFdpdGhQcm9qZWN0aW9uLmZyb21fcHJldHJhaW5lZChjbGlwX2lkKS50byglMjJjdWRhJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> ( | |
| CLIPTokenizer, | |
| CLIPTextModelWithProjection, | |
| CLIPVisionModelWithProjection, | |
| CLIPImageProcessor, | |
| ) | |
| clip_id = <span class="hljs-string">"openai/clip-vit-large-patch14"</span> | |
| tokenizer = CLIPTokenizer.from_pretrained(clip_id) | |
| text_encoder = CLIPTextModelWithProjection.from_pretrained(clip_id).to(<span class="hljs-string">"cuda"</span>) | |
| image_processor = CLIPImageProcessor.from_pretrained(clip_id) | |
| image_encoder = CLIPVisionModelWithProjection.from_pretrained(clip_id).to(<span class="hljs-string">"cuda"</span>)`,wrap:!1}}),ql=new u({props:{code:"aW1wb3J0JTIwdG9yY2gubm4lMjBhcyUyMG5uJTBBaW1wb3J0JTIwdG9yY2gubm4uZnVuY3Rpb25hbCUyMGFzJTIwRiUwQSUwQSUwQWNsYXNzJTIwRGlyZWN0aW9uYWxTaW1pbGFyaXR5KG5uLk1vZHVsZSklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjBfX2luaXRfXyhzZWxmJTJDJTIwdG9rZW5pemVyJTJDJTIwdGV4dF9lbmNvZGVyJTJDJTIwaW1hZ2VfcHJvY2Vzc29yJTJDJTIwaW1hZ2VfZW5jb2RlciklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdXBlcigpLl9faW5pdF9fKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLnRva2VuaXplciUyMCUzRCUyMHRva2VuaXplciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYudGV4dF9lbmNvZGVyJTIwJTNEJTIwdGV4dF9lbmNvZGVyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5pbWFnZV9wcm9jZXNzb3IlMjAlM0QlMjBpbWFnZV9wcm9jZXNzb3IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmltYWdlX2VuY29kZXIlMjAlM0QlMjBpbWFnZV9lbmNvZGVyJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcHJlcHJvY2Vzc19pbWFnZShzZWxmJTJDJTIwaW1hZ2UpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2UlMjAlM0QlMjBzZWxmLmltYWdlX3Byb2Nlc3NvcihpbWFnZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTVCJTIycGl4ZWxfdmFsdWVzJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIycGl4ZWxfdmFsdWVzJTIyJTNBJTIwaW1hZ2UudG8oJTIyY3VkYSUyMiklN0QlMEElMEElMjAlMjAlMjAlMjBkZWYlMjB0b2tlbml6ZV90ZXh0KHNlbGYlMkMlMjB0ZXh0KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0cyUyMCUzRCUyMHNlbGYudG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRleHQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbGVuZ3RoJTNEc2VsZi50b2tlbml6ZXIubW9kZWxfbWF4X2xlbmd0aCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhZGRpbmclM0QlMjJtYXhfbGVuZ3RoJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMCU3QiUyMmlucHV0X2lkcyUyMiUzQSUyMGlucHV0cy5pbnB1dF9pZHMudG8oJTIyY3VkYSUyMiklN0QlMEElMEElMjAlMjAlMjAlMjBkZWYlMjBlbmNvZGVfaW1hZ2Uoc2VsZiUyQyUyMGltYWdlKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZXByb2Nlc3NlZF9pbWFnZSUyMCUzRCUyMHNlbGYucHJlcHJvY2Vzc19pbWFnZShpbWFnZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbWFnZV9mZWF0dXJlcyUyMCUzRCUyMHNlbGYuaW1hZ2VfZW5jb2RlcigqKnByZXByb2Nlc3NlZF9pbWFnZSkuaW1hZ2VfZW1iZWRzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2VfZmVhdHVyZXMlMjAlM0QlMjBpbWFnZV9mZWF0dXJlcyUyMCUyRiUyMGltYWdlX2ZlYXR1cmVzLm5vcm0oZGltJTNEMSUyQyUyMGtlZXBkaW0lM0RUcnVlKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMGltYWdlX2ZlYXR1cmVzJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwZW5jb2RlX3RleHQoc2VsZiUyQyUyMHRleHQpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdG9rZW5pemVkX3RleHQlMjAlM0QlMjBzZWxmLnRva2VuaXplX3RleHQodGV4dCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0X2ZlYXR1cmVzJTIwJTNEJTIwc2VsZi50ZXh0X2VuY29kZXIoKip0b2tlbml6ZWRfdGV4dCkudGV4dF9lbWJlZHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0X2ZlYXR1cmVzJTIwJTNEJTIwdGV4dF9mZWF0dXJlcyUyMCUyRiUyMHRleHRfZmVhdHVyZXMubm9ybShkaW0lM0QxJTJDJTIwa2VlcGRpbSUzRFRydWUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwdGV4dF9mZWF0dXJlcyUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMGNvbXB1dGVfZGlyZWN0aW9uYWxfc2ltaWxhcml0eShzZWxmJTJDJTIwaW1nX2ZlYXRfb25lJTJDJTIwaW1nX2ZlYXRfdHdvJTJDJTIwdGV4dF9mZWF0X29uZSUyQyUyMHRleHRfZmVhdF90d28pJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2ltX2RpcmVjdGlvbiUyMCUzRCUyMEYuY29zaW5lX3NpbWlsYXJpdHkoaW1nX2ZlYXRfdHdvJTIwLSUyMGltZ19mZWF0X29uZSUyQyUyMHRleHRfZmVhdF90d28lMjAtJTIwdGV4dF9mZWF0X29uZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBzaW1fZGlyZWN0aW9uJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwZm9yd2FyZChzZWxmJTJDJTIwaW1hZ2Vfb25lJTJDJTIwaW1hZ2VfdHdvJTJDJTIwY2FwdGlvbl9vbmUlMkMlMjBjYXB0aW9uX3R3byklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbWdfZmVhdF9vbmUlMjAlM0QlMjBzZWxmLmVuY29kZV9pbWFnZShpbWFnZV9vbmUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1nX2ZlYXRfdHdvJTIwJTNEJTIwc2VsZi5lbmNvZGVfaW1hZ2UoaW1hZ2VfdHdvKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRleHRfZmVhdF9vbmUlMjAlM0QlMjBzZWxmLmVuY29kZV90ZXh0KGNhcHRpb25fb25lKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRleHRfZmVhdF90d28lMjAlM0QlMjBzZWxmLmVuY29kZV90ZXh0KGNhcHRpb25fdHdvKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRpcmVjdGlvbmFsX3NpbWlsYXJpdHklMjAlM0QlMjBzZWxmLmNvbXB1dGVfZGlyZWN0aW9uYWxfc2ltaWxhcml0eSglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbWdfZmVhdF9vbmUlMkMlMjBpbWdfZmVhdF90d28lMkMlMjB0ZXh0X2ZlYXRfb25lJTJDJTIwdGV4dF9mZWF0X3R3byUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBkaXJlY3Rpb25hbF9zaW1pbGFyaXR5",highlighted:`<span class="hljs-keyword">import</span> torch.nn <span class="hljs-keyword">as</span> nn | |
| <span class="hljs-keyword">import</span> torch.nn.functional <span class="hljs-keyword">as</span> F | |
| <span class="hljs-keyword">class</span> <span class="hljs-title class_">DirectionalSimilarity</span>(nn.Module): | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, tokenizer, text_encoder, image_processor, image_encoder</span>): | |
| <span class="hljs-built_in">super</span>().__init__() | |
| self.tokenizer = tokenizer | |
| self.text_encoder = text_encoder | |
| self.image_processor = image_processor | |
| self.image_encoder = image_encoder | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_image</span>(<span class="hljs-params">self, image</span>): | |
| image = self.image_processor(image, return_tensors=<span class="hljs-string">"pt"</span>)[<span class="hljs-string">"pixel_values"</span>] | |
| <span class="hljs-keyword">return</span> {<span class="hljs-string">"pixel_values"</span>: image.to(<span class="hljs-string">"cuda"</span>)} | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_text</span>(<span class="hljs-params">self, text</span>): | |
| inputs = self.tokenizer( | |
| text, | |
| max_length=self.tokenizer.model_max_length, | |
| padding=<span class="hljs-string">"max_length"</span>, | |
| truncation=<span class="hljs-literal">True</span>, | |
| return_tensors=<span class="hljs-string">"pt"</span>, | |
| ) | |
| <span class="hljs-keyword">return</span> {<span class="hljs-string">"input_ids"</span>: inputs.input_ids.to(<span class="hljs-string">"cuda"</span>)} | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">encode_image</span>(<span class="hljs-params">self, image</span>): | |
| preprocessed_image = self.preprocess_image(image) | |
| image_features = self.image_encoder(**preprocessed_image).image_embeds | |
| image_features = image_features / image_features.norm(dim=<span class="hljs-number">1</span>, keepdim=<span class="hljs-literal">True</span>) | |
| <span class="hljs-keyword">return</span> image_features | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">encode_text</span>(<span class="hljs-params">self, text</span>): | |
| tokenized_text = self.tokenize_text(text) | |
| text_features = self.text_encoder(**tokenized_text).text_embeds | |
| text_features = text_features / text_features.norm(dim=<span class="hljs-number">1</span>, keepdim=<span class="hljs-literal">True</span>) | |
| <span class="hljs-keyword">return</span> text_features | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_directional_similarity</span>(<span class="hljs-params">self, img_feat_one, img_feat_two, text_feat_one, text_feat_two</span>): | |
| sim_direction = F.cosine_similarity(img_feat_two - img_feat_one, text_feat_two - text_feat_one) | |
| <span class="hljs-keyword">return</span> sim_direction | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">forward</span>(<span class="hljs-params">self, image_one, image_two, caption_one, caption_two</span>): | |
| img_feat_one = self.encode_image(image_one) | |
| img_feat_two = self.encode_image(image_two) | |
| text_feat_one = self.encode_text(caption_one) | |
| text_feat_two = self.encode_text(caption_two) | |
| directional_similarity = self.compute_directional_similarity( | |
| img_feat_one, img_feat_two, text_feat_one, text_feat_two | |
| ) | |
| <span class="hljs-keyword">return</span> directional_similarity`,wrap:!1}}),Ol=new u({props:{code:"ZGlyX3NpbWlsYXJpdHklMjAlM0QlMjBEaXJlY3Rpb25hbFNpbWlsYXJpdHkodG9rZW5pemVyJTJDJTIwdGV4dF9lbmNvZGVyJTJDJTIwaW1hZ2VfcHJvY2Vzc29yJTJDJTIwaW1hZ2VfZW5jb2RlciklMEFzY29yZXMlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oaW5wdXRfaW1hZ2VzKSklM0ElMEElMjAlMjAlMjAlMjBvcmlnaW5hbF9pbWFnZSUyMCUzRCUyMGlucHV0X2ltYWdlcyU1QmklNUQlMEElMjAlMjAlMjAlMjBvcmlnaW5hbF9jYXB0aW9uJTIwJTNEJTIwb3JpZ2luYWxfY2FwdGlvbnMlNUJpJTVEJTBBJTIwJTIwJTIwJTIwZWRpdGVkX2ltYWdlJTIwJTNEJTIwZWRpdGVkX2ltYWdlcyU1QmklNUQlMEElMjAlMjAlMjAlMjBtb2RpZmllZF9jYXB0aW9uJTIwJTNEJTIwbW9kaWZpZWRfY2FwdGlvbnMlNUJpJTVEJTBBJTBBJTIwJTIwJTIwJTIwc2ltaWxhcml0eV9zY29yZSUyMCUzRCUyMGRpcl9zaW1pbGFyaXR5KG9yaWdpbmFsX2ltYWdlJTJDJTIwZWRpdGVkX2ltYWdlJTJDJTIwb3JpZ2luYWxfY2FwdGlvbiUyQyUyMG1vZGlmaWVkX2NhcHRpb24pJTBBJTIwJTIwJTIwJTIwc2NvcmVzLmFwcGVuZChmbG9hdChzaW1pbGFyaXR5X3Njb3JlLmRldGFjaCgpLmNwdSgpKSklMEElMEFwcmludChmJTIyQ0xJUCVFNiU5NiVCOSVFNSU5MCU5MSVFNyU5QiVCOCVFNCVCQyVCQyVFNSVCQSVBNiUzQSUyMCU3Qm5wLm1lYW4oc2NvcmVzKSU3RCUyMiklMEElMjMlMjBDTElQJUU2JTk2JUI5JUU1JTkwJTkxJUU3JTlCJUI4JUU0JUJDJUJDJUU1JUJBJUE2JTNBJTIwMC4wNzk3OTc2NTUzNDQwMDk0",highlighted:`dir_similarity = DirectionalSimilarity(tokenizer, text_encoder, image_processor, image_encoder) | |
| scores = [] | |
| <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(input_images)): | |
| original_image = input_images[i] | |
| original_caption = original_captions[i] | |
| edited_image = edited_images[i] | |
| modified_caption = modified_captions[i] | |
| similarity_score = dir_similarity(original_image, edited_image, original_caption, modified_caption) | |
| scores.append(<span class="hljs-built_in">float</span>(similarity_score.detach().cpu())) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"CLIP方向相似度: <span class="hljs-subst">{np.mean(scores)}</span>"</span>) | |
| <span class="hljs-comment"># CLIP方向相似度: 0.0797976553440094</span>`,wrap:!1}}),_=new Gs({props:{$$slots:{default:[yn]},$$scope:{ctx:I}}}),ie=new Be({props:{title:"基于类别的图像生成",local:"基于类别的图像生成",headingTag:"h3"}}),me=new u({props:{code:"ZnJvbSUyMHppcGZpbGUlMjBpbXBvcnQlMjBaaXBGaWxlJTBBaW1wb3J0JTIwcmVxdWVzdHMlMEElMEElMEFkZWYlMjBkb3dubG9hZCh1cmwlMkMlMjBsb2NhbF9maWxlcGF0aCklM0ElMEElMjAlMjAlMjAlMjByJTIwJTNEJTIwcmVxdWVzdHMuZ2V0KHVybCklMEElMjAlMjAlMjAlMjB3aXRoJTIwb3Blbihsb2NhbF9maWxlcGF0aCUyQyUyMCUyMndiJTIyKSUyMGFzJTIwZiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYud3JpdGUoci5jb250ZW50KSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGxvY2FsX2ZpbGVwYXRoJTBBJTBBZHVtbXlfZGF0YXNldF91cmwlMjAlM0QlMjAlMjJodHRwcyUzQSUyRiUyRmhmLmNvJTJGZGF0YXNldHMlMkZzYXlha3BhdWwlMkZzYW1wbGUtZGF0YXNldHMlMkZyZXNvbHZlJTJGbWFpbiUyRnNhbXBsZS1pbWFnZW5ldC1pbWFnZXMuemlwJTIyJTBBbG9jYWxfZmlsZXBhdGglMjAlM0QlMjBkb3dubG9hZChkdW1teV9kYXRhc2V0X3VybCUyQyUyMGR1bW15X2RhdGFzZXRfdXJsLnNwbGl0KCUyMiUyRiUyMiklNUItMSU1RCklMEElMEF3aXRoJTIwWmlwRmlsZShsb2NhbF9maWxlcGF0aCUyQyUyMCUyMnIlMjIpJTIwYXMlMjB6aXBwZXIlM0ElMEElMjAlMjAlMjAlMjB6aXBwZXIuZXh0cmFjdGFsbCglMjIuJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> zipfile <span class="hljs-keyword">import</span> ZipFile | |
| <span class="hljs-keyword">import</span> requests | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">download</span>(<span class="hljs-params">url, local_filepath</span>): | |
| r = requests.get(url) | |
| <span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(local_filepath, <span class="hljs-string">"wb"</span>) <span class="hljs-keyword">as</span> f: | |
| f.write(r.content) | |
| <span class="hljs-keyword">return</span> local_filepath | |
| dummy_dataset_url = <span class="hljs-string">"https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/sample-imagenet-images.zip"</span> | |
| local_filepath = download(dummy_dataset_url, dummy_dataset_url.split(<span class="hljs-string">"/"</span>)[-<span class="hljs-number">1</span>]) | |
| <span class="hljs-keyword">with</span> ZipFile(local_filepath, <span class="hljs-string">"r"</span>) <span class="hljs-keyword">as</span> zipper: | |
| zipper.extractall(<span class="hljs-string">"."</span>)`,wrap:!1}}),ye=new u({props:{code:"ZnJvbSUyMFBJTCUyMGltcG9ydCUyMEltYWdlJTBBaW1wb3J0JTIwb3MlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFkYXRhc2V0X3BhdGglMjAlM0QlMjAlMjJzYW1wbGUtaW1hZ2VuZXQtaW1hZ2VzJTIyJTBBaW1hZ2VfcGF0aHMlMjAlM0QlMjBzb3J0ZWQoJTVCb3MucGF0aC5qb2luKGRhdGFzZXRfcGF0aCUyQyUyMHgpJTIwZm9yJTIweCUyMGluJTIwb3MubGlzdGRpcihkYXRhc2V0X3BhdGgpJTVEKSUwQSUwQXJlYWxfaW1hZ2VzJTIwJTNEJTIwJTVCbnAuYXJyYXkoSW1hZ2Uub3BlbihwYXRoKS5jb252ZXJ0KCUyMlJHQiUyMikpJTIwZm9yJTIwcGF0aCUyMGluJTIwaW1hZ2VfcGF0aHMlNUQ=",highlighted:`<span class="hljs-keyword">from</span> PIL <span class="hljs-keyword">import</span> Image | |
| <span class="hljs-keyword">import</span> os | |
| <span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| dataset_path = <span class="hljs-string">"sample-imagenet-images"</span> | |
| image_paths = <span class="hljs-built_in">sorted</span>([os.path.join(dataset_path, x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> os.listdir(dataset_path)]) | |
| real_images = [np.array(Image.<span class="hljs-built_in">open</span>(path).convert(<span class="hljs-string">"RGB"</span>)) <span class="hljs-keyword">for</span> path <span class="hljs-keyword">in</span> image_paths]`,wrap:!1}}),de=new u({props:{code:"ZnJvbSUyMHRvcmNodmlzaW9uLnRyYW5zZm9ybXMlMjBpbXBvcnQlMjBmdW5jdGlvbmFsJTIwYXMlMjBGJTBBaW1wb3J0JTIwdG9yY2glMEElMEElMEFkZWYlMjBwcmVwcm9jZXNzX2ltYWdlKGltYWdlKSUzQSUwQSUyMCUyMCUyMCUyMGltYWdlJTIwJTNEJTIwdG9yY2gudGVuc29yKGltYWdlKS51bnNxdWVlemUoMCklMEElMjAlMjAlMjAlMjBpbWFnZSUyMCUzRCUyMGltYWdlLnBlcm11dGUoMCUyQyUyMDMlMkMlMjAxJTJDJTIwMiklMjAlMkYlMjAyNTUuMCUwQSUyMCUyMCUyMCUyMHJldHVybiUyMEYuY2VudGVyX2Nyb3AoaW1hZ2UlMkMlMjAoMjU2JTJDJTIwMjU2KSklMEElMEFyZWFsX2ltYWdlcyUyMCUzRCUyMHRvcmNoLnN0YWNrKCU1QmRpdF9waXBlbGluZS5wcmVwcm9jZXNzX2ltYWdlKGltYWdlKSUyMGZvciUyMGltYWdlJTIwaW4lMjByZWFsX2ltYWdlcyU1RCklMEFwcmludChyZWFsX2ltYWdlcy5zaGFwZSklMEElMjMlMjB0b3JjaC5TaXplKCU1QjEwJTJDJTIwMyUyQyUyMDI1NiUyQyUyMDI1NiU1RCk=",highlighted:`<span class="hljs-keyword">from</span> torchvision.transforms <span class="hljs-keyword">import</span> functional <span class="hljs-keyword">as</span> F | |
| <span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_image</span>(<span class="hljs-params">image</span>): | |
| image = torch.tensor(image).unsqueeze(<span class="hljs-number">0</span>) | |
| image = image.permute(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>) / <span class="hljs-number">255.0</span> | |
| <span class="hljs-keyword">return</span> F.center_crop(image, (<span class="hljs-number">256</span>, <span class="hljs-number">256</span>)) | |
| real_images = torch.stack([dit_pipeline.preprocess_image(image) <span class="hljs-keyword">for</span> image <span class="hljs-keyword">in</span> real_images]) | |
| <span class="hljs-built_in">print</span>(real_images.shape) | |
| <span class="hljs-comment"># torch.Size([10, 3, 256, 256])</span>`,wrap:!1}}),fe=new u({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpVFBpcGVsaW5lJTJDJTIwRFBNU29sdmVyTXVsdGlzdGVwU2NoZWR1bGVyJTBBJTBBZGl0X3BpcGVsaW5lJTIwJTNEJTIwRGlUUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUyMmZhY2Vib29rJTJGRGlULVhMLTItMjU2JTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2KSUwQWRpdF9waXBlbGluZS5zY2hlZHVsZXIlMjAlM0QlMjBEUE1Tb2x2ZXJNdWx0aXN0ZXBTY2hlZHVsZXIuZnJvbV9jb25maWcoZGl0X3BpcGVsaW5lLnNjaGVkdWxlci5jb25maWcpJTBBZGl0X3BpcGVsaW5lJTIwJTNEJTIwZGl0X3BpcGVsaW5lLnRvKCUyMmN1ZGElMjIpJTBBJTBBc2VlZCUyMCUzRCUyMDAlMEFnZW5lcmF0b3IlMjAlM0QlMjB0b3JjaC5tYW51YWxfc2VlZChzZWVkKSUwQSUwQSUwQXdvcmRzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyY2Fzc2V0dGUlMjBwbGF5ZXIlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJjaGFpbnNhdyUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmNoYWluc2F3JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyY2h1cmNoJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyZ2FzJTIwcHVtcCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmdhcyUyMHB1bXAlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJnYXMlMjBwdW1wJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIycGFyYWNodXRlJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIycGFyYWNodXRlJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIydGVuY2glMjIlMkMlMEElNUQlMEElMEFjbGFzc19pZHMlMjAlM0QlMjBkaXRfcGlwZWxpbmUuZ2V0X2xhYmVsX2lkcyh3b3JkcyklMEFvdXRwdXQlMjAlM0QlMjBkaXRfcGlwZWxpbmUoY2xhc3NfbGFiZWxzJTNEY2xhc3NfaWRzJTJDJTIwZ2VuZXJhdG9yJTNEZ2VuZXJhdG9yJTJDJTIwb3V0cHV0X3R5cGUlM0QlMjJucCUyMiklMEElMEFmYWtlX2ltYWdlcyUyMCUzRCUyMG91dHB1dC5pbWFnZXMlMEFmYWtlX2ltYWdlcyUyMCUzRCUyMHRvcmNoLnRlbnNvcihmYWtlX2ltYWdlcyklMEFmYWtlX2ltYWdlcyUyMCUzRCUyMGZha2VfaW1hZ2VzLnBlcm11dGUoMCUyQyUyMDMlMkMlMjAxJTJDJTIwMiklMEFwcmludChmYWtlX2ltYWdlcy5zaGFwZSklMEElMjMlMjB0b3JjaC5TaXplKCU1QjEwJTJDJTIwMyUyQyUyMDI1NiUyQyUyMDI1NiU1RCk=",highlighted:`<span class="hljs-keyword">from</span> diffusers <span class="hljs-keyword">import</span> DiTPipeline, DPMSolverMultistepScheduler | |
| dit_pipeline = DiTPipeline.from_pretrained(<span class="hljs-string">"facebook/DiT-XL-2-256"</span>, torch_dtype=torch.float16) | |
| dit_pipeline.scheduler = DPMSolverMultistepScheduler.from_config(dit_pipeline.scheduler.config) | |
| dit_pipeline = dit_pipeline.to(<span class="hljs-string">"cuda"</span>) | |
| seed = <span class="hljs-number">0</span> | |
| generator = torch.manual_seed(seed) | |
| words = [ | |
| <span class="hljs-string">"cassette player"</span>, | |
| <span class="hljs-string">"chainsaw"</span>, | |
| <span class="hljs-string">"chainsaw"</span>, | |
| <span class="hljs-string">"church"</span>, | |
| <span class="hljs-string">"gas pump"</span>, | |
| <span class="hljs-string">"gas pump"</span>, | |
| <span class="hljs-string">"gas pump"</span>, | |
| <span class="hljs-string">"parachute"</span>, | |
| <span class="hljs-string">"parachute"</span>, | |
| <span class="hljs-string">"tench"</span>, | |
| ] | |
| class_ids = dit_pipeline.get_label_ids(words) | |
| output = dit_pipeline(class_labels=class_ids, generator=generator, output_type=<span class="hljs-string">"np"</span>) | |
| fake_images = output.images | |
| fake_images = torch.tensor(fake_images) | |
| fake_images = fake_images.permute(<span class="hljs-number">0</span>, <span class="hljs-number">3</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>) | |
| <span class="hljs-built_in">print</span>(fake_images.shape) | |
| <span class="hljs-comment"># torch.Size([10, 3, 256, 256])</span>`,wrap:!1}}),je=new u({props:{code:"ZnJvbSUyMHRvcmNobWV0cmljcy5pbWFnZS5maWQlMjBpbXBvcnQlMjBGcmVjaGV0SW5jZXB0aW9uRGlzdGFuY2UlMEElMEFmaWQlMjAlM0QlMjBGcmVjaGV0SW5jZXB0aW9uRGlzdGFuY2Uobm9ybWFsaXplJTNEVHJ1ZSklMEFmaWQudXBkYXRlKHJlYWxfaW1hZ2VzJTJDJTIwcmVhbCUzRFRydWUpJTBBZmlkLnVwZGF0ZShmYWtlX2ltYWdlcyUyQyUyMHJlYWwlM0RGYWxzZSklMEElMEFwcmludChmJTIyRklEJUU1JTg4JTg2JUU2JTk1JUIwJTNBJTIwJTdCZmxvYXQoZmlkLmNvbXB1dGUoKSklN0QlMjIpJTBBJTIzJTIwRklEJUU1JTg4JTg2JUU2JTk1JUIwJTNBJTIwMTc3LjcxNDcyMTY3OTY4NzU=",highlighted:`<span class="hljs-keyword">from</span> torchmetrics.image.fid <span class="hljs-keyword">import</span> FrechetInceptionDistance | |
| fid = FrechetInceptionDistance(normalize=<span class="hljs-literal">True</span>) | |
| fid.update(real_images, real=<span class="hljs-literal">True</span>) | |
| fid.update(fake_images, real=<span class="hljs-literal">False</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"FID分数: <span class="hljs-subst">{<span class="hljs-built_in">float</span>(fid.compute())}</span>"</span>) | |
| <span class="hljs-comment"># FID分数: 177.7147216796875</span>`,wrap:!1}}),v=new Gs({props:{warning:!0,$$slots:{default:[Tn]},$$scope:{ctx:I}}}),Ce=new cn({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/zh/conceptual/evaluation.md"}}),{c(){J=i("meta"),U=a(),d=i("p"),w=a(),c(C.$$.fragment),Z=a(),j=i("a"),j.innerHTML=We,B=a(),h=i("blockquote"),h.innerHTML=ge,f=a(),b=i("p"),b.innerHTML=Vs,Ge=a(),k=i("p"),k.textContent=ks,ve=a(),x=i("p"),x.innerHTML=xs,Ve=a(),X=i("p"),X.innerHTML=Xs,ke=a(),c(R.$$.fragment),xe=a(),N=i("p"),N.textContent=Rs,Xe=a(),F=i("ul"),F.innerHTML=Ns,Re=a(),c(H.$$.fragment),Ne=a(),E=i("p"),E.innerHTML=Fs,Fe=a(),Y=i("p"),Y.innerHTML=Hs,He=a(),$=i("blockquote"),$.innerHTML=Es,Ee=a(),Q=i("p"),Q.innerHTML=Ys,Ye=a(),A=i("p"),A.textContent=$s,$e=a(),z=i("ul"),z.innerHTML=Qs,Qe=a(),S=i("p"),S.innerHTML=As,Ae=a(),L=i("ul"),L.innerHTML=zs,ze=a(),P=i("p"),P.innerHTML=Ss,Se=a(),D=i("p"),D.innerHTML=Ls,Le=a(),c(q.$$.fragment),Pe=a(),K=i("p"),K.innerHTML=Ps,De=a(),c(O.$$.fragment),qe=a(),ll=i("p"),ll.innerHTML=Ds,Ke=a(),el=i("p"),el.innerHTML=qs,Oe=a(),tl=i("p"),tl.innerHTML=Ks,lt=a(),sl=i("p"),sl.textContent=Os,et=a(),c(W.$$.fragment),tt=a(),c(al.$$.fragment),st=a(),nl=i("p"),nl.textContent=la,at=a(),il=i("ul"),il.innerHTML=ea,nt=a(),c(pl.$$.fragment),it=a(),Ml=i("p"),Ml.innerHTML=ta,pt=a(),Jl=i("p"),Jl.innerHTML=sa,Mt=a(),c(cl.$$.fragment),Jt=a(),ol=i("p"),ol.textContent=aa,ct=a(),c(ml.$$.fragment),ot=a(),yl=i("p"),yl.textContent=na,mt=a(),c(Tl.$$.fragment),yt=a(),rl=i("p"),rl.textContent=ia,Tt=a(),dl=i("p"),dl.innerHTML=pa,rt=a(),c(ul.$$.fragment),dt=a(),fl=i("p"),fl.innerHTML=Ma,ut=a(),c(wl.$$.fragment),ft=a(),jl=i("p"),jl.textContent=Ja,wt=a(),c(Ul.$$.fragment),jt=a(),hl=i("p"),hl.innerHTML=ca,Ut=a(),c(g.$$.fragment),ht=a(),c(bl.$$.fragment),bt=a(),Il=i("p"),Il.innerHTML=oa,It=a(),Cl=i("p"),Cl.textContent=ma,Ct=a(),Zl=i("p"),Zl.innerHTML=ya,Zt=a(),Bl=i("p"),Bl.innerHTML=Ta,Bt=a(),Wl=i("ul"),Wl.innerHTML=ra,Wt=a(),gl=i("p"),gl.textContent=da,gt=a(),_l=i("p"),_l.innerHTML=ua,_t=a(),Gl=i("p"),Gl.textContent=fa,Gt=a(),c(vl.$$.fragment),vt=a(),c(Vl.$$.fragment),Vt=a(),kl=i("p"),kl.textContent=wa,kt=a(),xl=i("ul"),xl.innerHTML=ja,xt=a(),Xl=i("p"),Xl.textContent=Ua,Xt=a(),c(Rl.$$.fragment),Rt=a(),c(Nl.$$.fragment),Nt=a(),Fl=i("p"),Fl.textContent=ha,Ft=a(),c(Hl.$$.fragment),Ht=a(),El=i("p"),El.innerHTML=ba,Et=a(),Yl=i("p"),Yl.textContent=Ia,Yt=a(),$l=i("p"),$l.innerHTML=Ca,$t=a(),c(Ql.$$.fragment),Qt=a(),Al=i("p"),Al.textContent=Za,At=a(),c(zl.$$.fragment),zt=a(),Sl=i("p"),Sl.textContent=Ba,St=a(),c(Ll.$$.fragment),Lt=a(),Pl=i("p"),Pl.innerHTML=Wa,Pt=a(),Dl=i("p"),Dl.innerHTML=ga,Dt=a(),c(ql.$$.fragment),qt=a(),Kl=i("p"),Kl.innerHTML=_a,Kt=a(),c(Ol.$$.fragment),Ot=a(),le=i("p"),le.textContent=Ga,ls=a(),ee=i("p"),ee.innerHTML=va,es=a(),te=i("p"),te.innerHTML=Va,ts=a(),se=i("p"),se.innerHTML=ka,ss=a(),c(_.$$.fragment),as=a(),ae=i("p"),ae.innerHTML=xa,ns=a(),ne=i("p"),ne.innerHTML=Xa,is=a(),c(ie.$$.fragment),ps=a(),pe=i("p"),pe.innerHTML=Ra,Ms=a(),Me=i("p"),Me.innerHTML=Na,Js=a(),Je=i("blockquote"),Je.innerHTML=Fa,cs=a(),ce=i("p"),ce.textContent=Ha,os=a(),oe=i("p"),oe.textContent=Ea,ms=a(),c(me.$$.fragment),ys=a(),c(ye.$$.fragment),Ts=a(),Te=i("p"),Te.textContent=Ya,rs=a(),G=i("p"),G.innerHTML=$a,ds=a(),re=i("p"),re.textContent=Qa,us=a(),c(de.$$.fragment),fs=a(),ue=i("p"),ue.innerHTML=Aa,ws=a(),c(fe.$$.fragment),js=a(),we=i("p"),we.innerHTML=za,Us=a(),c(je.$$.fragment),hs=a(),Ue=i("p"),Ue.textContent=Sa,bs=a(),he=i("ul"),he.innerHTML=La,Is=a(),be=i("p"),be.textContent=Pa,Cs=a(),c(v.$$.fragment),Zs=a(),Ie=i("p"),Ie.innerHTML=Da,Bs=a(),V=i("p"),V.innerHTML=qa,Ws=a(),c(Ce.$$.fragment),gs=a(),_e=i("p"),this.h()},l(l){const e=Mn("svelte-u9bgzb",document.head);J=p(e,"META",{name:!0,content:!0}),e.forEach(t),U=n(l),d=p(l,"P",{}),tn(d).forEach(t),w=n(l),o(C.$$.fragment,l),Z=n(l),j=p(l,"A",{target:!0,href:!0,"data-svelte-h":!0}),M(j)!=="svelte-h14285"&&(j.innerHTML=We),B=n(l),h=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(h)!=="svelte-1jugxt2"&&(h.innerHTML=ge),f=n(l),b=p(l,"P",{"data-svelte-h":!0}),M(b)!=="svelte-1pes0mw"&&(b.innerHTML=Vs),Ge=n(l),k=p(l,"P",{"data-svelte-h":!0}),M(k)!=="svelte-k5obfv"&&(k.textContent=ks),ve=n(l),x=p(l,"P",{"data-svelte-h":!0}),M(x)!=="svelte-1ajaxvu"&&(x.innerHTML=xs),Ve=n(l),X=p(l,"P",{"data-svelte-h":!0}),M(X)!=="svelte-e6klhp"&&(X.innerHTML=Xs),ke=n(l),o(R.$$.fragment,l),xe=n(l),N=p(l,"P",{"data-svelte-h":!0}),M(N)!=="svelte-1iu3uxb"&&(N.textContent=Rs),Xe=n(l),F=p(l,"UL",{"data-svelte-h":!0}),M(F)!=="svelte-1nhmbj0"&&(F.innerHTML=Ns),Re=n(l),o(H.$$.fragment,l),Ne=n(l),E=p(l,"P",{"data-svelte-h":!0}),M(E)!=="svelte-1txffyk"&&(E.innerHTML=Fs),Fe=n(l),Y=p(l,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-1vuvlvf"&&(Y.innerHTML=Hs),He=n(l),$=p(l,"BLOCKQUOTE",{"data-svelte-h":!0}),M($)!=="svelte-m0q7q0"&&($.innerHTML=Es),Ee=n(l),Q=p(l,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-19xz367"&&(Q.innerHTML=Ys),Ye=n(l),A=p(l,"P",{"data-svelte-h":!0}),M(A)!=="svelte-f20ejf"&&(A.textContent=$s),$e=n(l),z=p(l,"UL",{"data-svelte-h":!0}),M(z)!=="svelte-11gxful"&&(z.innerHTML=Qs),Qe=n(l),S=p(l,"P",{"data-svelte-h":!0}),M(S)!=="svelte-1op8x1l"&&(S.innerHTML=As),Ae=n(l),L=p(l,"UL",{"data-svelte-h":!0}),M(L)!=="svelte-jo9asf"&&(L.innerHTML=zs),ze=n(l),P=p(l,"P",{"data-svelte-h":!0}),M(P)!=="svelte-1hb73k9"&&(P.innerHTML=Ss),Se=n(l),D=p(l,"P",{"data-svelte-h":!0}),M(D)!=="svelte-16alyrm"&&(D.innerHTML=Ls),Le=n(l),o(q.$$.fragment,l),Pe=n(l),K=p(l,"P",{"data-svelte-h":!0}),M(K)!=="svelte-rdopsg"&&(K.innerHTML=Ps),De=n(l),o(O.$$.fragment,l),qe=n(l),ll=p(l,"P",{"data-svelte-h":!0}),M(ll)!=="svelte-4i7yd5"&&(ll.innerHTML=Ds),Ke=n(l),el=p(l,"P",{"data-svelte-h":!0}),M(el)!=="svelte-8snsne"&&(el.innerHTML=qs),Oe=n(l),tl=p(l,"P",{"data-svelte-h":!0}),M(tl)!=="svelte-gipltn"&&(tl.innerHTML=Ks),lt=n(l),sl=p(l,"P",{"data-svelte-h":!0}),M(sl)!=="svelte-ueq19r"&&(sl.textContent=Os),et=n(l),o(W.$$.fragment,l),tt=n(l),o(al.$$.fragment,l),st=n(l),nl=p(l,"P",{"data-svelte-h":!0}),M(nl)!=="svelte-r7hhw0"&&(nl.textContent=la),at=n(l),il=p(l,"UL",{"data-svelte-h":!0}),M(il)!=="svelte-b93mpw"&&(il.innerHTML=ea),nt=n(l),o(pl.$$.fragment,l),it=n(l),Ml=p(l,"P",{"data-svelte-h":!0}),M(Ml)!=="svelte-n2bg45"&&(Ml.innerHTML=ta),pt=n(l),Jl=p(l,"P",{"data-svelte-h":!0}),M(Jl)!=="svelte-1hzc3dk"&&(Jl.innerHTML=sa),Mt=n(l),o(cl.$$.fragment,l),Jt=n(l),ol=p(l,"P",{"data-svelte-h":!0}),M(ol)!=="svelte-1k1g1o6"&&(ol.textContent=aa),ct=n(l),o(ml.$$.fragment,l),ot=n(l),yl=p(l,"P",{"data-svelte-h":!0}),M(yl)!=="svelte-1k28vwi"&&(yl.textContent=na),mt=n(l),o(Tl.$$.fragment,l),yt=n(l),rl=p(l,"P",{"data-svelte-h":!0}),M(rl)!=="svelte-1iltbps"&&(rl.textContent=ia),Tt=n(l),dl=p(l,"P",{"data-svelte-h":!0}),M(dl)!=="svelte-mydfaa"&&(dl.innerHTML=pa),rt=n(l),o(ul.$$.fragment,l),dt=n(l),fl=p(l,"P",{"data-svelte-h":!0}),M(fl)!=="svelte-1o4hn2o"&&(fl.innerHTML=Ma),ut=n(l),o(wl.$$.fragment,l),ft=n(l),jl=p(l,"P",{"data-svelte-h":!0}),M(jl)!=="svelte-2io45m"&&(jl.textContent=Ja),wt=n(l),o(Ul.$$.fragment,l),jt=n(l),hl=p(l,"P",{"data-svelte-h":!0}),M(hl)!=="svelte-ujkfdk"&&(hl.innerHTML=ca),Ut=n(l),o(g.$$.fragment,l),ht=n(l),o(bl.$$.fragment,l),bt=n(l),Il=p(l,"P",{"data-svelte-h":!0}),M(Il)!=="svelte-1yzloih"&&(Il.innerHTML=oa),It=n(l),Cl=p(l,"P",{"data-svelte-h":!0}),M(Cl)!=="svelte-7c2hev"&&(Cl.textContent=ma),Ct=n(l),Zl=p(l,"P",{"data-svelte-h":!0}),M(Zl)!=="svelte-1u1nt56"&&(Zl.innerHTML=ya),Zt=n(l),Bl=p(l,"P",{"data-svelte-h":!0}),M(Bl)!=="svelte-1nycz9x"&&(Bl.innerHTML=Ta),Bt=n(l),Wl=p(l,"UL",{"data-svelte-h":!0}),M(Wl)!=="svelte-169ilj8"&&(Wl.innerHTML=ra),Wt=n(l),gl=p(l,"P",{"data-svelte-h":!0}),M(gl)!=="svelte-f9n3pa"&&(gl.textContent=da),gt=n(l),_l=p(l,"P",{"data-svelte-h":!0}),M(_l)!=="svelte-8e89hb"&&(_l.innerHTML=ua),_t=n(l),Gl=p(l,"P",{"data-svelte-h":!0}),M(Gl)!=="svelte-r23mbf"&&(Gl.textContent=fa),Gt=n(l),o(vl.$$.fragment,l),vt=n(l),o(Vl.$$.fragment,l),Vt=n(l),kl=p(l,"P",{"data-svelte-h":!0}),M(kl)!=="svelte-4az32q"&&(kl.textContent=wa),kt=n(l),xl=p(l,"UL",{"data-svelte-h":!0}),M(xl)!=="svelte-1rw2hq2"&&(xl.innerHTML=ja),xt=n(l),Xl=p(l,"P",{"data-svelte-h":!0}),M(Xl)!=="svelte-11cxr2x"&&(Xl.textContent=Ua),Xt=n(l),o(Rl.$$.fragment,l),Rt=n(l),o(Nl.$$.fragment,l),Nt=n(l),Fl=p(l,"P",{"data-svelte-h":!0}),M(Fl)!=="svelte-xp6zg6"&&(Fl.textContent=ha),Ft=n(l),o(Hl.$$.fragment,l),Ht=n(l),El=p(l,"P",{"data-svelte-h":!0}),M(El)!=="svelte-ogvsh3"&&(El.innerHTML=ba),Et=n(l),Yl=p(l,"P",{"data-svelte-h":!0}),M(Yl)!=="svelte-16d8j0z"&&(Yl.textContent=Ia),Yt=n(l),$l=p(l,"P",{"data-svelte-h":!0}),M($l)!=="svelte-1yqwgt0"&&($l.innerHTML=Ca),$t=n(l),o(Ql.$$.fragment,l),Qt=n(l),Al=p(l,"P",{"data-svelte-h":!0}),M(Al)!=="svelte-1llczdr"&&(Al.textContent=Za),At=n(l),o(zl.$$.fragment,l),zt=n(l),Sl=p(l,"P",{"data-svelte-h":!0}),M(Sl)!=="svelte-y69d0n"&&(Sl.textContent=Ba),St=n(l),o(Ll.$$.fragment,l),Lt=n(l),Pl=p(l,"P",{"data-svelte-h":!0}),M(Pl)!=="svelte-1olfepe"&&(Pl.innerHTML=Wa),Pt=n(l),Dl=p(l,"P",{"data-svelte-h":!0}),M(Dl)!=="svelte-1cfzew0"&&(Dl.innerHTML=ga),Dt=n(l),o(ql.$$.fragment,l),qt=n(l),Kl=p(l,"P",{"data-svelte-h":!0}),M(Kl)!=="svelte-1ah96o9"&&(Kl.innerHTML=_a),Kt=n(l),o(Ol.$$.fragment,l),Ot=n(l),le=p(l,"P",{"data-svelte-h":!0}),M(le)!=="svelte-1evlka"&&(le.textContent=Ga),ls=n(l),ee=p(l,"P",{"data-svelte-h":!0}),M(ee)!=="svelte-du0g2y"&&(ee.innerHTML=va),es=n(l),te=p(l,"P",{"data-svelte-h":!0}),M(te)!=="svelte-1ck0ggc"&&(te.innerHTML=Va),ts=n(l),se=p(l,"P",{"data-svelte-h":!0}),M(se)!=="svelte-15kssed"&&(se.innerHTML=ka),ss=n(l),o(_.$$.fragment,l),as=n(l),ae=p(l,"P",{"data-svelte-h":!0}),M(ae)!=="svelte-10m0vep"&&(ae.innerHTML=xa),ns=n(l),ne=p(l,"P",{"data-svelte-h":!0}),M(ne)!=="svelte-1sls2vo"&&(ne.innerHTML=Xa),is=n(l),o(ie.$$.fragment,l),ps=n(l),pe=p(l,"P",{"data-svelte-h":!0}),M(pe)!=="svelte-1be9oeu"&&(pe.innerHTML=Ra),Ms=n(l),Me=p(l,"P",{"data-svelte-h":!0}),M(Me)!=="svelte-18nm4k9"&&(Me.innerHTML=Na),Js=n(l),Je=p(l,"BLOCKQUOTE",{"data-svelte-h":!0}),M(Je)!=="svelte-15x4a9v"&&(Je.innerHTML=Fa),cs=n(l),ce=p(l,"P",{"data-svelte-h":!0}),M(ce)!=="svelte-fg97ol"&&(ce.textContent=Ha),os=n(l),oe=p(l,"P",{"data-svelte-h":!0}),M(oe)!=="svelte-pwwdv9"&&(oe.textContent=Ea),ms=n(l),o(me.$$.fragment,l),ys=n(l),o(ye.$$.fragment,l),Ts=n(l),Te=p(l,"P",{"data-svelte-h":!0}),M(Te)!=="svelte-6bz4xb"&&(Te.textContent=Ya),rs=n(l),G=p(l,"P",{align:!0,"data-svelte-h":!0}),M(G)!=="svelte-ke5ahc"&&(G.innerHTML=$a),ds=n(l),re=p(l,"P",{"data-svelte-h":!0}),M(re)!=="svelte-ilkg7f"&&(re.textContent=Qa),us=n(l),o(de.$$.fragment,l),fs=n(l),ue=p(l,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-1g1dyy3"&&(ue.innerHTML=Aa),ws=n(l),o(fe.$$.fragment,l),js=n(l),we=p(l,"P",{"data-svelte-h":!0}),M(we)!=="svelte-1wphc0p"&&(we.innerHTML=za),Us=n(l),o(je.$$.fragment,l),hs=n(l),Ue=p(l,"P",{"data-svelte-h":!0}),M(Ue)!=="svelte-1v2r3ps"&&(Ue.textContent=Sa),bs=n(l),he=p(l,"UL",{"data-svelte-h":!0}),M(he)!=="svelte-1iufyfv"&&(he.innerHTML=La),Is=n(l),be=p(l,"P",{"data-svelte-h":!0}),M(be)!=="svelte-1skjrzw"&&(be.textContent=Pa),Cs=n(l),o(v.$$.fragment,l),Zs=n(l),Ie=p(l,"P",{"data-svelte-h":!0}),M(Ie)!=="svelte-147tlvf"&&(Ie.innerHTML=Da),Bs=n(l),V=p(l,"P",{align:!0,"data-svelte-h":!0}),M(V)!=="svelte-1if1i1w"&&(V.innerHTML=qa),Ws=n(l),o(Ce.$$.fragment,l),gs=n(l),_e=p(l,"P",{}),tn(_e).forEach(t),this.h()},h(){Ze(J,"name","hf:doc:metadata"),Ze(J,"content",dn),Ze(j,"target","_blank"),Ze(j,"href","https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/evaluation.ipynb"),Ze(h,"class","tip"),Ze(G,"align","center"),Ze(V,"align","center")},m(l,e){Jn(document.head,J),s(l,U,e),s(l,d,e),s(l,w,e),m(C,l,e),s(l,Z,e),s(l,j,e),s(l,B,e),s(l,h,e),s(l,f,e),s(l,b,e),s(l,Ge,e),s(l,k,e),s(l,ve,e),s(l,x,e),s(l,Ve,e),s(l,X,e),s(l,ke,e),m(R,l,e),s(l,xe,e),s(l,N,e),s(l,Xe,e),s(l,F,e),s(l,Re,e),m(H,l,e),s(l,Ne,e),s(l,E,e),s(l,Fe,e),s(l,Y,e),s(l,He,e),s(l,$,e),s(l,Ee,e),s(l,Q,e),s(l,Ye,e),s(l,A,e),s(l,$e,e),s(l,z,e),s(l,Qe,e),s(l,S,e),s(l,Ae,e),s(l,L,e),s(l,ze,e),s(l,P,e),s(l,Se,e),s(l,D,e),s(l,Le,e),m(q,l,e),s(l,Pe,e),s(l,K,e),s(l,De,e),m(O,l,e),s(l,qe,e),s(l,ll,e),s(l,Ke,e),s(l,el,e),s(l,Oe,e),s(l,tl,e),s(l,lt,e),s(l,sl,e),s(l,et,e),m(W,l,e),s(l,tt,e),m(al,l,e),s(l,st,e),s(l,nl,e),s(l,at,e),s(l,il,e),s(l,nt,e),m(pl,l,e),s(l,it,e),s(l,Ml,e),s(l,pt,e),s(l,Jl,e),s(l,Mt,e),m(cl,l,e),s(l,Jt,e),s(l,ol,e),s(l,ct,e),m(ml,l,e),s(l,ot,e),s(l,yl,e),s(l,mt,e),m(Tl,l,e),s(l,yt,e),s(l,rl,e),s(l,Tt,e),s(l,dl,e),s(l,rt,e),m(ul,l,e),s(l,dt,e),s(l,fl,e),s(l,ut,e),m(wl,l,e),s(l,ft,e),s(l,jl,e),s(l,wt,e),m(Ul,l,e),s(l,jt,e),s(l,hl,e),s(l,Ut,e),m(g,l,e),s(l,ht,e),m(bl,l,e),s(l,bt,e),s(l,Il,e),s(l,It,e),s(l,Cl,e),s(l,Ct,e),s(l,Zl,e),s(l,Zt,e),s(l,Bl,e),s(l,Bt,e),s(l,Wl,e),s(l,Wt,e),s(l,gl,e),s(l,gt,e),s(l,_l,e),s(l,_t,e),s(l,Gl,e),s(l,Gt,e),m(vl,l,e),s(l,vt,e),m(Vl,l,e),s(l,Vt,e),s(l,kl,e),s(l,kt,e),s(l,xl,e),s(l,xt,e),s(l,Xl,e),s(l,Xt,e),m(Rl,l,e),s(l,Rt,e),m(Nl,l,e),s(l,Nt,e),s(l,Fl,e),s(l,Ft,e),m(Hl,l,e),s(l,Ht,e),s(l,El,e),s(l,Et,e),s(l,Yl,e),s(l,Yt,e),s(l,$l,e),s(l,$t,e),m(Ql,l,e),s(l,Qt,e),s(l,Al,e),s(l,At,e),m(zl,l,e),s(l,zt,e),s(l,Sl,e),s(l,St,e),m(Ll,l,e),s(l,Lt,e),s(l,Pl,e),s(l,Pt,e),s(l,Dl,e),s(l,Dt,e),m(ql,l,e),s(l,qt,e),s(l,Kl,e),s(l,Kt,e),m(Ol,l,e),s(l,Ot,e),s(l,le,e),s(l,ls,e),s(l,ee,e),s(l,es,e),s(l,te,e),s(l,ts,e),s(l,se,e),s(l,ss,e),m(_,l,e),s(l,as,e),s(l,ae,e),s(l,ns,e),s(l,ne,e),s(l,is,e),m(ie,l,e),s(l,ps,e),s(l,pe,e),s(l,Ms,e),s(l,Me,e),s(l,Js,e),s(l,Je,e),s(l,cs,e),s(l,ce,e),s(l,os,e),s(l,oe,e),s(l,ms,e),m(me,l,e),s(l,ys,e),m(ye,l,e),s(l,Ts,e),s(l,Te,e),s(l,rs,e),s(l,G,e),s(l,ds,e),s(l,re,e),s(l,us,e),m(de,l,e),s(l,fs,e),s(l,ue,e),s(l,ws,e),m(fe,l,e),s(l,js,e),s(l,we,e),s(l,Us,e),m(je,l,e),s(l,hs,e),s(l,Ue,e),s(l,bs,e),s(l,he,e),s(l,Is,e),s(l,be,e),s(l,Cs,e),m(v,l,e),s(l,Zs,e),s(l,Ie,e),s(l,Bs,e),s(l,V,e),s(l,Ws,e),m(Ce,l,e),s(l,gs,e),s(l,_e,e),_s=!0},p(l,[e]){const Ka={};e&2&&(Ka.$$scope={dirty:e,ctx:l}),W.$set(Ka);const Oa={};e&2&&(Oa.$$scope={dirty:e,ctx:l}),g.$set(Oa);const ln={};e&2&&(ln.$$scope={dirty:e,ctx:l}),_.$set(ln);const en={};e&2&&(en.$$scope={dirty:e,ctx:l}),v.$set(en)},i(l){_s||(y(C.$$.fragment,l),y(R.$$.fragment,l),y(H.$$.fragment,l),y(q.$$.fragment,l),y(O.$$.fragment,l),y(W.$$.fragment,l),y(al.$$.fragment,l),y(pl.$$.fragment,l),y(cl.$$.fragment,l),y(ml.$$.fragment,l),y(Tl.$$.fragment,l),y(ul.$$.fragment,l),y(wl.$$.fragment,l),y(Ul.$$.fragment,l),y(g.$$.fragment,l),y(bl.$$.fragment,l),y(vl.$$.fragment,l),y(Vl.$$.fragment,l),y(Rl.$$.fragment,l),y(Nl.$$.fragment,l),y(Hl.$$.fragment,l),y(Ql.$$.fragment,l),y(zl.$$.fragment,l),y(Ll.$$.fragment,l),y(ql.$$.fragment,l),y(Ol.$$.fragment,l),y(_.$$.fragment,l),y(ie.$$.fragment,l),y(me.$$.fragment,l),y(ye.$$.fragment,l),y(de.$$.fragment,l),y(fe.$$.fragment,l),y(je.$$.fragment,l),y(v.$$.fragment,l),y(Ce.$$.fragment,l),_s=!0)},o(l){T(C.$$.fragment,l),T(R.$$.fragment,l),T(H.$$.fragment,l),T(q.$$.fragment,l),T(O.$$.fragment,l),T(W.$$.fragment,l),T(al.$$.fragment,l),T(pl.$$.fragment,l),T(cl.$$.fragment,l),T(ml.$$.fragment,l),T(Tl.$$.fragment,l),T(ul.$$.fragment,l),T(wl.$$.fragment,l),T(Ul.$$.fragment,l),T(g.$$.fragment,l),T(bl.$$.fragment,l),T(vl.$$.fragment,l),T(Vl.$$.fragment,l),T(Rl.$$.fragment,l),T(Nl.$$.fragment,l),T(Hl.$$.fragment,l),T(Ql.$$.fragment,l),T(zl.$$.fragment,l),T(Ll.$$.fragment,l),T(ql.$$.fragment,l),T(Ol.$$.fragment,l),T(_.$$.fragment,l),T(ie.$$.fragment,l),T(me.$$.fragment,l),T(ye.$$.fragment,l),T(de.$$.fragment,l),T(fe.$$.fragment,l),T(je.$$.fragment,l),T(v.$$.fragment,l),T(Ce.$$.fragment,l),_s=!1},d(l){l&&(t(U),t(d),t(w),t(Z),t(j),t(B),t(h),t(f),t(b),t(Ge),t(k),t(ve),t(x),t(Ve),t(X),t(ke),t(xe),t(N),t(Xe),t(F),t(Re),t(Ne),t(E),t(Fe),t(Y),t(He),t($),t(Ee),t(Q),t(Ye),t(A),t($e),t(z),t(Qe),t(S),t(Ae),t(L),t(ze),t(P),t(Se),t(D),t(Le),t(Pe),t(K),t(De),t(qe),t(ll),t(Ke),t(el),t(Oe),t(tl),t(lt),t(sl),t(et),t(tt),t(st),t(nl),t(at),t(il),t(nt),t(it),t(Ml),t(pt),t(Jl),t(Mt),t(Jt),t(ol),t(ct),t(ot),t(yl),t(mt),t(yt),t(rl),t(Tt),t(dl),t(rt),t(dt),t(fl),t(ut),t(ft),t(jl),t(wt),t(jt),t(hl),t(Ut),t(ht),t(bt),t(Il),t(It),t(Cl),t(Ct),t(Zl),t(Zt),t(Bl),t(Bt),t(Wl),t(Wt),t(gl),t(gt),t(_l),t(_t),t(Gl),t(Gt),t(vt),t(Vt),t(kl),t(kt),t(xl),t(xt),t(Xl),t(Xt),t(Rt),t(Nt),t(Fl),t(Ft),t(Ht),t(El),t(Et),t(Yl),t(Yt),t($l),t($t),t(Qt),t(Al),t(At),t(zt),t(Sl),t(St),t(Lt),t(Pl),t(Pt),t(Dl),t(Dt),t(qt),t(Kl),t(Kt),t(Ot),t(le),t(ls),t(ee),t(es),t(te),t(ts),t(se),t(ss),t(as),t(ae),t(ns),t(ne),t(is),t(ps),t(pe),t(Ms),t(Me),t(Js),t(Je),t(cs),t(ce),t(os),t(oe),t(ms),t(ys),t(Ts),t(Te),t(rs),t(G),t(ds),t(re),t(us),t(fs),t(ue),t(ws),t(js),t(we),t(Us),t(hs),t(Ue),t(bs),t(he),t(Is),t(be),t(Cs),t(Zs),t(Ie),t(Bs),t(V),t(Ws),t(gs),t(_e)),t(J),r(C,l),r(R,l),r(H,l),r(q,l),r(O,l),r(W,l),r(al,l),r(pl,l),r(cl,l),r(ml,l),r(Tl,l),r(ul,l),r(wl,l),r(Ul,l),r(g,l),r(bl,l),r(vl,l),r(Vl,l),r(Rl,l),r(Nl,l),r(Hl,l),r(Ql,l),r(zl,l),r(Ll,l),r(ql,l),r(Ol,l),r(_,l),r(ie,l),r(me,l),r(ye,l),r(de,l),r(fe,l),r(je,l),r(v,l),r(Ce,l)}}}const dn='{"title":"Diffusion模型评估指南","local":"diffusion模型评估指南","sections":[{"title":"评估场景","local":"评估场景","sections":[],"depth":2},{"title":"定性评估","local":"定性评估","sections":[],"depth":2},{"title":"定量评估","local":"定量评估","sections":[{"title":"文本引导图像生成","local":"文本引导图像生成","sections":[],"depth":3},{"title":"图像条件式文本生成图像","local":"图像条件式文本生成图像","sections":[],"depth":3},{"title":"基于类别的图像生成","local":"基于类别的图像生成","sections":[],"depth":3}],"depth":2}],"depth":1}';function un(I){return an(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class bn extends nn{constructor(J){super(),pn(this,J,un,rn,sn,{})}}export{bn as component}; | |
Xet Storage Details
- Size:
- 76.1 kB
- Xet hash:
- 79159fe2c1ab988a76d90e3bbdc0e35afe3c021aebf9fd482d0d92eecb037f28
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.