Buckets:
| import{s as sn,n as an,o as nn}from"../chunks/scheduler.23542ac5.js";import{S as pn,i as Mn,e as i,s as a,c,h as cn,a as p,d as t,b as n,f as tn,g as J,j as M,k as w,l as Jn,m as s,n as o,t as m,o as T,p as r}from"../chunks/index.9b1f405b.js";import{C as on,H as Ue,E as mn}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.99afe1ab.js";import{C as y}from"../chunks/CodeBlock.1c9c6858.js";function Tn(_s){let d,Ie,he,Ze,Z,Be,B,Ce,u,Gs='<img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/>',We,C,vs='<a href="https://huggingface.co/docs/diffusers/stable_diffusion" rel="nofollow">Stable Diffusion</a>와 같은 생성 모델의 평가는 주관적인 성격을 가지고 있습니다. 그러나 실무자와 연구자로서 우리는 종종 다양한 가능성 중에서 신중한 선택을 해야 합니다. 그래서 다양한 생성 모델 (GAN, Diffusion 등)을 사용할 때 어떻게 선택해야 할까요?',ge,W,Xs="정성적인 평가는 모델의 이미지 품질에 대한 주관적인 평가이므로 오류가 발생할 수 있고 결정에 잘못된 영향을 미칠 수 있습니다. 반면, 정량적인 평가는 이미지 품질과 직접적인 상관관계를 갖지 않을 수 있습니다. 따라서 일반적으로 정성적 평가와 정량적 평가를 모두 고려하는 것이 더 강력한 신호를 제공하여 모델 선택에 도움이 됩니다.",_e,g,xs="이 문서에서는 Diffusion 모델을 평가하기 위한 정성적 및 정량적 방법에 대해 상세히 설명합니다. 정량적 방법에 대해서는 특히 <code>diffusers</code>와 함께 구현하는 방법에 초점을 맞추었습니다.",Ge,_,Vs='이 문서에서 보여진 방법들은 기반 생성 모델을 고정시키고 다양한 <a href="https://huggingface.co/docs/diffusers/main/en/api/schedulers/overview" rel="nofollow">노이즈 스케줄러</a>를 평가하는 데에도 사용할 수 있습니다.',ve,G,Xe,v,ks="다음과 같은 파이프라인을 사용하여 Diffusion 모델을 다룹니다:",xe,X,Rs='<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/pipelines/dit" rel="nofollow"><code>DiTPipeline</code></a>).</li>',Ve,x,ke,V,Hs=`정성적 평가는 일반적으로 생성된 이미지의 인간 평가를 포함합니다. 품질은 구성성, 이미지-텍스트 일치, 공간 관계 등과 같은 측면에서 측정됩니다. 일반적인 프롬프트는 주관적인 지표에 대한 일정한 기준을 제공합니다. | |
| DrawBench와 PartiPrompts는 정성적인 벤치마킹에 사용되는 프롬프트 데이터셋입니다. DrawBench와 PartiPrompts는 각각 <a href="https://imagen.research.google/" rel="nofollow">Imagen</a>과 <a href="https://parti.research.google/" rel="nofollow">Parti</a>에서 소개되었습니다.`,Re,k,Fs='<a href="https://parti.research.google/" rel="nofollow">Parti 공식 웹사이트</a>에서 다음과 같이 설명하고 있습니다:',He,R,Ns="<p>PartiPrompts (P2)는 이 작업의 일부로 공개되는 영어로 된 1600개 이상의 다양한 프롬프트 세트입니다. P2는 다양한 범주와 도전 측면에서 모델의 능력을 측정하는 데 사용할 수 있습니다.</p>",Fe,H,Ys='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts.png" alt="parti-prompts"/>',Ne,F,Es="PartiPrompts는 다음과 같은 열을 가지고 있습니다:",Ye,N,Qs="<li>프롬프트 (Prompt)</li> <li>프롬프트의 카테고리 (예: “Abstract”, “World Knowledge” 등)</li> <li>난이도를 반영한 챌린지 (예: “Basic”, “Complex”, “Writing & Symbols” 등)</li>",Ee,Y,As="이러한 벤치마크는 서로 다른 이미지 생성 모델을 인간 평가로 비교할 수 있도록 합니다.",Qe,E,zs="이를 위해 🧨 Diffusers 팀은 <strong>Open Parti Prompts</strong>를 구축했습니다. 이는 Parti Prompts를 기반으로 한 커뮤니티 기반의 질적 벤치마크로, 최첨단 오픈 소스 확산 모델을 비교하는 데 사용됩니다:",Ae,Q,$s='<li><a href="https://huggingface.co/spaces/OpenGenAI/open-parti-prompts" rel="nofollow">Open Parti Prompts 게임</a>: 10개의 parti prompt에 대해 4개의 생성된 이미지가 제시되며, 사용자는 프롬프트에 가장 적합한 이미지를 선택합니다.</li> <li><a href="https://huggingface.co/spaces/OpenGenAI/parti-prompts-leaderboard" rel="nofollow">Open Parti Prompts 리더보드</a>: 현재 최고의 오픈 소스 diffusion 모델들을 서로 비교하는 리더보드입니다.</li>',ze,A,Ss="이미지를 수동으로 비교하려면, <code>diffusers</code>를 사용하여 몇가지 PartiPrompts를 어떻게 활용할 수 있는지 알아봅시다.",$e,z,Ls='다음은 몇 가지 다른 도전에서 샘플링한 프롬프트를 보여줍니다: Basic, Complex, Linguistic Structures, Imagination, Writing & Symbols. 여기서는 PartiPrompts를 <a href="https://huggingface.co/datasets/nateraw/parti-prompts" rel="nofollow">데이터셋</a>으로 사용합니다.',Se,$,Le,S,Ps='이제 이런 프롬프트를 사용하여 Stable Diffusion (<a href="https://huggingface.co/CompVis/stable-diffusion-v1-4" rel="nofollow">v1-4 checkpoint</a>)를 사용한 이미지 생성을 할 수 있습니다 :',Pe,L,qe,P,qs='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts-14.png" alt="parti-prompts-14"/>',De,q,Ds='<code>num_images_per_prompt</code>를 설정하여 동일한 프롬프트에 대해 다른 이미지를 비교할 수도 있습니다. 다른 체크포인트(<a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5</a>)로 동일한 파이프라인을 실행하면 다음과 같은 결과가 나옵니다:',Ke,D,Ks='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/parti-prompts-15.png" alt="parti-prompts-15"/>',Oe,K,Os="다양한 모델을 사용하여 모든 프롬프트에서 생성된 여러 이미지들이 생성되면 (평가 과정에서) 이러한 결과물들은 사람 평가자들에게 점수를 매기기 위해 제시됩니다. DrawBench와 PartiPrompts 벤치마크에 대한 자세한 내용은 각각의 논문을 참조하십시오.",lt,j,la='<p>모델이 훈련 중일 때 추론 샘플을 살펴보는 것은 훈련 진행 상황을 측정하는 데 유용합니다. <a href="https://github.com/huggingface/diffusers/tree/main/examples/" rel="nofollow">훈련 스크립트</a>에서는 TensorBoard와 Weights & Biases에 대한 추가 지원과 함께 이 유틸리티를 지원합니다.</p>',et,O,tt,ll,ea="이 섹션에서는 세 가지 다른 확산 파이프라인을 평가하는 방법을 안내합니다:",st,el,ta="<li>CLIP 점수</li> <li>CLIP 방향성 유사도</li> <li>FID</li>",at,tl,nt,sl,sa='<a href="https://huggingface.co/papers/2104.08718" rel="nofollow">CLIP 점수</a>는 이미지-캡션 쌍의 호환성을 측정합니다. 높은 CLIP 점수는 높은 호환성🔼을 나타냅니다. CLIP 점수는 이미지와 캡션 사이의 의미적 유사성으로 생각할 수도 있습니다. CLIP 점수는 인간 판단과 높은 상관관계를 가지고 있습니다.',it,al,aa="<code>StableDiffusionPipeline</code>을 일단 로드해봅시다:",pt,nl,Mt,il,na="여러 개의 프롬프트를 사용하여 이미지를 생성합니다:",ct,pl,Jt,Ml,ia="그러고 나서 CLIP 점수를 계산합니다.",ot,cl,mt,Jl,pa="위의 예제에서는 각 프롬프트 당 하나의 이미지를 생성했습니다. 만약 프롬프트 당 여러 이미지를 생성한다면, 프롬프트 당 생성된 이미지의 평균 점수를 사용해야 합니다.",Tt,ol,Ma='이제 <code>StableDiffusionPipeline</code>과 호환되는 두 개의 체크포인트를 비교하려면, 파이프라인을 호출할 때 generator를 전달해야 합니다. 먼저, 고정된 시드로 <a href="https://huggingface.co/CompVis/stable-diffusion-v1-4" rel="nofollow">v1-4 Stable Diffusion 체크포인트</a>를 사용하여 이미지를 생성합니다:',rt,ml,yt,Tl,ca='그런 다음 <a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5 checkpoint</a>를 로드하여 이미지를 생성합니다:',wt,rl,dt,yl,Ja="그리고 마지막으로 CLIP 점수를 비교합니다:",ut,wl,jt,dl,oa='<a href="https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5" rel="nofollow">v1-5</a> 체크포인트가 이전 버전보다 더 나은 성능을 보이는 것 같습니다. 그러나 CLIP 점수를 계산하기 위해 사용한 프롬프트의 수가 상당히 적습니다. 보다 실용적인 평가를 위해서는 이 수를 훨씬 높게 설정하고, 프롬프트를 다양하게 사용해야 합니다.',ft,f,ma="<p>이 점수에는 몇 가지 제한 사항이 있습니다. 훈련 데이터셋의 캡션은 웹에서 크롤링되어 이미지와 관련된 <code>alt</code> 및 유사한 태그에서 추출되었습니다. 이들은 인간이 이미지를 설명하는 데 사용할 수 있는 것과 일치하지 않을 수 있습니다. 따라서 여기서는 몇 가지 프롬프트를 “엔지니어링”해야 했습니다.</p>",Ut,ul,ht,jl,Ta="이 경우, 생성 파이프라인을 입력 이미지와 텍스트 프롬프트로 조건화합니다. <code>StableDiffusionInstructPix2PixPipeline</code>을 예로 들어보겠습니다. 이는 편집 지시문을 입력 프롬프트로 사용하고 편집할 입력 이미지를 사용합니다.",bt,fl,ra="다음은 하나의 예시입니다:",It,Ul,ya='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-instruction.png" alt="edit-instruction"/>',Zt,hl,wa='모델을 평가하는 한 가지 전략은 두 이미지 캡션 간의 변경과(<a href="https://huggingface.co/papers/2108.00946" rel="nofollow">CLIP-Guided Domain Adaptation of Image Generators</a>에서 보여줍니다) 함께 두 이미지 사이의 변경의 일관성을 측정하는 것입니다 (<a href="https://huggingface.co/docs/transformers/model_doc/clip" rel="nofollow">CLIP</a> 공간에서). 이를 ”<strong>CLIP 방향성 유사성</strong>“이라고 합니다.',Bt,bl,da="<li>캡션 1은 편집할 이미지 (이미지 1)에 해당합니다.</li> <li>캡션 2는 편집된 이미지 (이미지 2)에 해당합니다. 편집 지시를 반영해야 합니다.</li>",Ct,Il,ua="다음은 그림으로 된 개요입니다:",Wt,Zl,ja='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-consistency.png" alt="edit-consistency"/>',gt,Bl,fa="우리는 이 측정 항목을 구현하기 위해 미니 데이터 세트를 준비했습니다. 먼저 데이터 세트를 로드해 보겠습니다.",_t,Cl,Gt,Wl,vt,gl,Ua="여기에는 다음과 같은 항목이 있습니다:",Xt,_l,ha="<li><code>input</code>은 <code>image</code>에 해당하는 캡션입니다.</li> <li><code>edit</code>은 편집 지시사항을 나타냅니다.</li> <li><code>output</code>은 <code>edit</code> 지시사항을 반영한 수정된 캡션입니다.</li>",xt,Gl,ba="샘플을 살펴보겠습니다.",Vt,vl,kt,Xl,Rt,xl,Ia="다음은 이미지입니다:",Ht,Vl,Ft,kl,Za='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/edit-dataset.png" alt="edit-dataset"/>',Nt,Rl,Ba="먼저 편집 지시사항을 사용하여 데이터 세트의 이미지를 편집하고 방향 유사도를 계산합니다.",Yt,Hl,Ca="<code>StableDiffusionInstructPix2PixPipeline</code>를 먼저 로드합니다:",Et,Fl,Qt,Nl,Wa="이제 편집을 수행합니다:",At,Yl,zt,El,ga="방향 유사도를 계산하기 위해서는 먼저 CLIP의 이미지와 텍스트 인코더를 로드합니다:",$t,Ql,St,Al,_a='주목할 점은 특정한 CLIP 체크포인트인 <code>openai/clip-vit-large-patch14</code>를 사용하고 있다는 것입니다. 이는 Stable Diffusion 사전 훈련이 이 CLIP 변형체와 함께 수행되었기 때문입니다. 자세한 내용은 <a href="https://huggingface.co/docs/transformers/model_doc/clip" rel="nofollow">문서</a>를 참조하세요.',Lt,zl,Ga="다음으로, 방향성 유사도를 계산하기 위해 PyTorch의 <code>nn.Module</code>을 준비합니다:",Pt,$l,qt,Sl,va="이제 <code>DirectionalSimilarity</code>를 사용해 보겠습니다.",Dt,Ll,Kt,Pl,Xa="CLIP 점수와 마찬가지로, CLIP 방향 유사성이 높을수록 좋습니다.",Ot,ql,xa="<code>StableDiffusionInstructPix2PixPipeline</code>은 <code>image_guidance_scale</code>과 <code>guidance_scale</code>이라는 두 가지 인자를 노출시킵니다. 이 두 인자를 조정하여 최종 편집된 이미지의 품질을 제어할 수 있습니다. 이 두 인자의 영향을 실험해보고 방향 유사성에 미치는 영향을 확인해보기를 권장합니다.",ls,Dl,Va="이러한 메트릭의 개념을 확장하여 원본 이미지와 편집된 버전의 유사성을 측정할 수 있습니다. 이를 위해 <code>F.cosine_similarity(img_feat_two, img_feat_one)</code>을 사용할 수 있습니다. 이러한 종류의 편집에서는 이미지의 주요 의미가 최대한 보존되어야 합니다. 즉, 높은 유사성 점수를 얻어야 합니다.",es,Kl,ka='<a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/pix2pix_zero#diffusers.StableDiffusionPix2PixZeroPipeline" rel="nofollow"><code>StableDiffusionPix2PixZeroPipeline</code></a>와 같은 유사한 파이프라인에도 이러한 메트릭을 사용할 수 있습니다.',ts,U,Ra="<p>CLIP 점수와 CLIP 방향 유사성 모두 CLIP 모델에 의존하기 때문에 평가가 편향될 수 있습니다</p>",ss,Ol,Ha='<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의 사전 훈련 데이터셋과 겹치는 부분이 제한적일 수 있으므로 따라서 여기에는 좋은 후보가 아닙니다.',as,le,Fa='<strong><em>위의 메트릭을 사용하면 클래스 조건이 있는 모델을 평가할 수 있습니다. 예를 들어, <a href="https://huggingface.co/docs/diffusers/main/en/api/pipelines/dit" rel="nofollow">DiT</a>. 이는 ImageNet-1k 클래스에 조건을 걸고 사전 훈련되었습니다.</em></strong>',ns,ee,is,te,Na='클래스 조건화 생성 모델은 일반적으로 <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 et al.</a>)에 초점을 맞추고 있습니다. <a href="https://huggingface.co/docs/diffusers/api/pipelines/dit" rel="nofollow"><code>DiTPipeline</code></a>을 사용하여 FID를 계산하는 방법을 보여줍니다. 이는 내부적으로 <a href="https://huggingface.co/papers/2212.09748" rel="nofollow">DiT 모델</a>을 사용합니다.',ps,se,Ya='FID는 두 개의 이미지 데이터셋이 얼마나 유사한지를 측정하는 것을 목표로 합니다. <a href="https://mmgeneration.readthedocs.io/en/latest/quick_run.html#fid" rel="nofollow">이 자료</a>에 따르면:',Ms,ae,Ea="<p>Fréchet Inception Distance는 두 개의 이미지 데이터셋 간의 유사성을 측정하는 지표입니다. 시각적 품질에 대한 인간 판단과 잘 상관되는 것으로 나타났으며, 주로 생성적 적대 신경망의 샘플 품질을 평가하는 데 사용됩니다. FID는 Inception 네트워크의 특징 표현에 맞게 적합한 두 개의 가우시안 사이의 Fréchet 거리를 계산하여 구합니다.</p>",cs,ne,Qa="이 두 개의 데이터셋은 실제 이미지 데이터셋과 가짜 이미지 데이터셋(우리의 경우 생성된 이미지)입니다. FID는 일반적으로 두 개의 큰 데이터셋으로 계산됩니다. 그러나 이 문서에서는 두 개의 미니 데이터셋으로 작업할 것입니다.",Js,ie,Aa="먼저 ImageNet-1k 훈련 세트에서 몇 개의 이미지를 다운로드해 봅시다:",os,pe,ms,Me,Ts,ce,za="다음은 ImageNet-1k classes의 이미지 10개입니다 : “cassette_player”, “chain_saw” (x2), “church”, “gas_pump” (x3), “parachute” (x2), 그리고 “tench”.",rs,h,$a='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/real-images.png" alt="real-images"/><br/> <em>Real images.</em>',ys,Je,Sa="이제 이미지가 로드되었으므로 이미지에 가벼운 전처리를 적용하여 FID 계산에 사용해 보겠습니다.",ws,oe,ds,me,La='이제 위에서 언급한 클래스에 따라 조건화 된 이미지를 생성하기 위해 <a href="https://huggingface.co/docs/diffusers/api/pipelines/dit" rel="nofollow"><code>DiTPipeline</code></a>를 로드합니다.',us,Te,js,re,Pa='이제 <a href="https://torchmetrics.readthedocs.io/" rel="nofollow"><code>torchmetrics</code></a>를 사용하여 FID를 계산할 수 있습니다.',fs,ye,Us,we,qa="FID는 낮을수록 좋습니다. 여러 가지 요소가 FID에 영향을 줄 수 있습니다:",hs,de,Da="<li>이미지의 수 (실제 이미지와 가짜 이미지 모두)</li> <li>diffusion 과정에서 발생하는 무작위성</li> <li>diffusion 과정에서의 추론 단계 수</li> <li>diffusion 과정에서 사용되는 스케줄러</li>",bs,ue,Ka="마지막 두 가지 요소에 대해서는, 다른 시드와 추론 단계에서 평가를 실행하고 평균 결과를 보고하는 것은 좋은 실천 방법입니다",Is,b,Oa="<p>FID 결과는 많은 요소에 의존하기 때문에 취약할 수 있습니다:</p> <ul><li>계산 중 사용되는 특정 Inception 모델.</li> <li>계산의 구현 정확도.</li> <li>이미지 형식 (PNG 또는 JPG에서 시작하는 경우가 다릅니다).</li></ul> <p>이러한 사항을 염두에 두면, FID는 유사한 실행을 비교할 때 가장 유용하지만, 저자가 FID 측정 코드를 주의 깊게 공개하지 않는 한 논문 결과를 재현하기는 어렵습니다.</p> <p>이러한 사항은 KID 및 IS와 같은 다른 관련 메트릭에도 적용됩니다.</p>",Zs,je,ln="마지막 단계로, <code>fake_images</code>를 시각적으로 검사해 봅시다.",Bs,I,en='<img src="https://huggingface.co/datasets/diffusers/docs-images/resolve/main/evaluation_diffusion_models/fake-images.png" alt="fake-images"/><br/> <em>Fake images.</em>',Cs,fe,Ws,be,gs;return Z=new on({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),B=new Ue({props:{title:"Diffusion 모델 평가하기",local:"evaluating-diffusion-models",headingTag:"h1"}}),G=new Ue({props:{title:"시나리오",local:"scenarios",headingTag:"h2"}}),x=new Ue({props:{title:"정성적 평가",local:"qualitative-evaluation",headingTag:"h2"}}),$=new y({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}}),L=new y({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}}),O=new Ue({props:{title:"정량적 평가",local:"quantitative-evaluation",headingTag:"h2"}}),tl=new Ue({props:{title:"텍스트 안내 이미지 생성",local:"text-guided-image-generation",headingTag:"h3"}}),nl=new y({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}}),pl=new y({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}}),cl=new y({props:{code:"ZnJvbSUyMHRvcmNobWV0cmljcy5mdW5jdGlvbmFsLm11bHRpbW9kYWwlMjBpbXBvcnQlMjBjbGlwX3Njb3JlJTBBZnJvbSUyMGZ1bmN0b29scyUyMGltcG9ydCUyMHBhcnRpYWwlMEElMEFjbGlwX3Njb3JlX2ZuJTIwJTNEJTIwcGFydGlhbChjbGlwX3Njb3JlJTJDJTIwbW9kZWxfbmFtZV9vcl9wYXRoJTNEJTIyb3BlbmFpJTJGY2xpcC12aXQtYmFzZS1wYXRjaDE2JTIyKSUwQSUwQWRlZiUyMGNhbGN1bGF0ZV9jbGlwX3Njb3JlKGltYWdlcyUyQyUyMHByb21wdHMpJTNBJTBBJTIwJTIwJTIwJTIwaW1hZ2VzX2ludCUyMCUzRCUyMChpbWFnZXMlMjAqJTIwMjU1KS5hc3R5cGUoJTIydWludDglMjIpJTBBJTIwJTIwJTIwJTIwY2xpcF9zY29yZSUyMCUzRCUyMGNsaXBfc2NvcmVfZm4odG9yY2guZnJvbV9udW1weShpbWFnZXNfaW50KS5wZXJtdXRlKDAlMkMlMjAzJTJDJTIwMSUyQyUyMDIpJTJDJTIwcHJvbXB0cykuZGV0YWNoKCklMEElMjAlMjAlMjAlMjByZXR1cm4lMjByb3VuZChmbG9hdChjbGlwX3Njb3JlKSUyQyUyMDQpJTBBJTBBc2RfY2xpcF9zY29yZSUyMCUzRCUyMGNhbGN1bGF0ZV9jbGlwX3Njb3JlKGltYWdlcyUyQyUyMHByb21wdHMpJTBBcHJpbnQoZiUyMkNMSVAlMjBzY29yZSUzQSUyMCU3QnNkX2NsaXBfc2NvcmUlN0QlMjIpJTBBJTIzJTIwQ0xJUCUyMHNjb3JlJTNBJTIwMzUuNzAzOA==",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 score: <span class="hljs-subst">{sd_clip_score}</span>"</span>) | |
| <span class="hljs-comment"># CLIP score: 35.7038</span>`,wrap:!1}}),ml=new y({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}}),rl=new y({props:{code:"bW9kZWxfY2twdF8xXzUlMjAlM0QlMjAlMjJzdGFibGUtZGlmZnVzaW9uLXYxLTUlMkZzdGFibGUtZGlmZnVzaW9uLXYxLTUlMjIlMEFzZF9waXBlbGluZV8xXzUlMjAlM0QlMjBTdGFibGVEaWZmdXNpb25QaXBlbGluZS5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2twdF8xXzUlMkMlMjB0b3JjaF9kdHlwZSUzRHdlaWdodF9kdHlwZSkudG8oZGV2aWNlKSUwQSUwQWltYWdlc18xXzUlMjAlM0QlMjBzZF9waXBlbGluZV8xXzUocHJvbXB0cyUyQyUyMG51bV9pbWFnZXNfcGVyX3Byb21wdCUzRDElMkMlMjBnZW5lcmF0b3IlM0RnZW5lcmF0b3IlMkMlMjBvdXRwdXRfdHlwZSUzRCUyMm5wJTIyKS5pbWFnZXM=",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=weight_dtype).to(device) | |
| 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}}),wl=new y({props:{code:"c2RfY2xpcF9zY29yZV8xXzQlMjAlM0QlMjBjYWxjdWxhdGVfY2xpcF9zY29yZShpbWFnZXMlMkMlMjBwcm9tcHRzKSUwQXByaW50KGYlMjJDTElQJTIwU2NvcmUlMjB3aXRoJTIwdi0xLTQlM0ElMjAlN0JzZF9jbGlwX3Njb3JlXzFfNCU3RCUyMiklMEElMjMlMjBDTElQJTIwU2NvcmUlMjB3aXRoJTIwdi0xLTQlM0ElMjAzNC45MTAyJTBBJTBBc2RfY2xpcF9zY29yZV8xXzUlMjAlM0QlMjBjYWxjdWxhdGVfY2xpcF9zY29yZShpbWFnZXNfMV81JTJDJTIwcHJvbXB0cyklMEFwcmludChmJTIyQ0xJUCUyMFNjb3JlJTIwd2l0aCUyMHYtMS01JTNBJTIwJTdCc2RfY2xpcF9zY29yZV8xXzUlN0QlMjIpJTBBJTIzJTIwQ0xJUCUyMFNjb3JlJTIwd2l0aCUyMHYtMS01JTNBJTIwMzYuMjEzNw==",highlighted:`sd_clip_score_1_4 = calculate_clip_score(images, prompts) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"CLIP Score with v-1-4: <span class="hljs-subst">{sd_clip_score_1_4}</span>"</span>) | |
| <span class="hljs-comment"># CLIP Score with v-1-4: 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"CLIP Score with v-1-5: <span class="hljs-subst">{sd_clip_score_1_5}</span>"</span>) | |
| <span class="hljs-comment"># CLIP Score with v-1-5: 36.2137</span>`,wrap:!1}}),ul=new Ue({props:{title:"이미지 조건화된 텍스트-이미지 생성",local:"image-conditioned-text-to-image-generation",headingTag:"h3"}}),Cl=new y({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}}),Wl=new y({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}}),vl=new y({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}}),Xl=new y({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}}),Vl=new y({props:{code:"ZGF0YXNldCU1QmlkeCU1RCU1QiUyMmltYWdlJTIyJTVE",highlighted:'dataset[idx][<span class="hljs-string">"image"</span>]',wrap:!1}}),Fl=new y({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMFN0YWJsZURpZmZ1c2lvbkluc3RydWN0UGl4MlBpeFBpcGVsaW5lJTBBJTBBaW5zdHJ1Y3RfcGl4MnBpeF9waXBlbGluZSUyMCUzRCUyMFN0YWJsZURpZmZ1c2lvbkluc3RydWN0UGl4MlBpeFBpcGVsaW5lLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjAlMjJ0aW1icm9va3MlMkZpbnN0cnVjdC1waXgycGl4JTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2JTBBKS50byhkZXZpY2Up",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(device)`,wrap:!1}}),Yl=new y({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}}),Ql=new y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMCglMEElMjAlMjAlMjAlMjBDTElQVG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwQ0xJUFRleHRNb2RlbFdpdGhQcm9qZWN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwQ0xJUFZpc2lvbk1vZGVsV2l0aFByb2plY3Rpb24lMkMlMEElMjAlMjAlMjAlMjBDTElQSW1hZ2VQcm9jZXNzb3IlMkMlMEEpJTBBJTBBY2xpcF9pZCUyMCUzRCUyMCUyMm9wZW5haSUyRmNsaXAtdml0LWxhcmdlLXBhdGNoMTQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBDTElQVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjbGlwX2lkKSUwQXRleHRfZW5jb2RlciUyMCUzRCUyMENMSVBUZXh0TW9kZWxXaXRoUHJvamVjdGlvbi5mcm9tX3ByZXRyYWluZWQoY2xpcF9pZCkudG8oZGV2aWNlKSUwQWltYWdlX3Byb2Nlc3NvciUyMCUzRCUyMENMSVBJbWFnZVByb2Nlc3Nvci5mcm9tX3ByZXRyYWluZWQoY2xpcF9pZCklMEFpbWFnZV9lbmNvZGVyJTIwJTNEJTIwQ0xJUFZpc2lvbk1vZGVsV2l0aFByb2plY3Rpb24uZnJvbV9wcmV0cmFpbmVkKGNsaXBfaWQpLnRvKGRldmljZSk=",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(device) | |
| image_processor = CLIPImageProcessor.from_pretrained(clip_id) | |
| image_encoder = CLIPVisionModelWithProjection.from_pretrained(clip_id).to(device)`,wrap:!1}}),$l=new y({props:{code:"aW1wb3J0JTIwdG9yY2gubm4lMjBhcyUyMG5uJTBBaW1wb3J0JTIwdG9yY2gubm4uZnVuY3Rpb25hbCUyMGFzJTIwRiUwQSUwQSUwQWNsYXNzJTIwRGlyZWN0aW9uYWxTaW1pbGFyaXR5KG5uLk1vZHVsZSklM0ElMEElMjAlMjAlMjAlMjBkZWYlMjBfX2luaXRfXyhzZWxmJTJDJTIwdG9rZW5pemVyJTJDJTIwdGV4dF9lbmNvZGVyJTJDJTIwaW1hZ2VfcHJvY2Vzc29yJTJDJTIwaW1hZ2VfZW5jb2RlciklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdXBlcigpLl9faW5pdF9fKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLnRva2VuaXplciUyMCUzRCUyMHRva2VuaXplciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlbGYudGV4dF9lbmNvZGVyJTIwJTNEJTIwdGV4dF9lbmNvZGVyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5pbWFnZV9wcm9jZXNzb3IlMjAlM0QlMjBpbWFnZV9wcm9jZXNzb3IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZWxmLmltYWdlX2VuY29kZXIlMjAlM0QlMjBpbWFnZV9lbmNvZGVyJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwcHJlcHJvY2Vzc19pbWFnZShzZWxmJTJDJTIwaW1hZ2UpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2UlMjAlM0QlMjBzZWxmLmltYWdlX3Byb2Nlc3NvcihpbWFnZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTVCJTIycGl4ZWxfdmFsdWVzJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIycGl4ZWxfdmFsdWVzJTIyJTNBJTIwaW1hZ2UudG8oZGV2aWNlKSU3RCUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMHRva2VuaXplX3RleHQoc2VsZiUyQyUyMHRleHQpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRzJTIwJTNEJTIwc2VsZi50b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGV4dCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1heF9sZW5ndGglM0RzZWxmLnRva2VuaXplci5tb2RlbF9tYXhfbGVuZ3RoJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFkZGluZyUzRCUyMm1heF9sZW5ndGglMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIyaW5wdXRfaWRzJTIyJTNBJTIwaW5wdXRzLmlucHV0X2lkcy50byhkZXZpY2UpJTdEJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwZW5jb2RlX2ltYWdlKHNlbGYlMkMlMjBpbWFnZSklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVwcm9jZXNzZWRfaW1hZ2UlMjAlM0QlMjBzZWxmLnByZXByb2Nlc3NfaW1hZ2UoaW1hZ2UpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1hZ2VfZmVhdHVyZXMlMjAlM0QlMjBzZWxmLmltYWdlX2VuY29kZXIoKipwcmVwcm9jZXNzZWRfaW1hZ2UpLmltYWdlX2VtYmVkcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGltYWdlX2ZlYXR1cmVzJTIwJTNEJTIwaW1hZ2VfZmVhdHVyZXMlMjAlMkYlMjBpbWFnZV9mZWF0dXJlcy5ub3JtKGRpbSUzRDElMkMlMjBrZWVwZGltJTNEVHJ1ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjBpbWFnZV9mZWF0dXJlcyUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMGVuY29kZV90ZXh0KHNlbGYlMkMlMjB0ZXh0KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplZF90ZXh0JTIwJTNEJTIwc2VsZi50b2tlbml6ZV90ZXh0KHRleHQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGV4dF9mZWF0dXJlcyUyMCUzRCUyMHNlbGYudGV4dF9lbmNvZGVyKCoqdG9rZW5pemVkX3RleHQpLnRleHRfZW1iZWRzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGV4dF9mZWF0dXJlcyUyMCUzRCUyMHRleHRfZmVhdHVyZXMlMjAlMkYlMjB0ZXh0X2ZlYXR1cmVzLm5vcm0oZGltJTNEMSUyQyUyMGtlZXBkaW0lM0RUcnVlKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybiUyMHRleHRfZmVhdHVyZXMlMEElMEElMjAlMjAlMjAlMjBkZWYlMjBjb21wdXRlX2RpcmVjdGlvbmFsX3NpbWlsYXJpdHkoc2VsZiUyQyUyMGltZ19mZWF0X29uZSUyQyUyMGltZ19mZWF0X3R3byUyQyUyMHRleHRfZmVhdF9vbmUlMkMlMjB0ZXh0X2ZlYXRfdHdvKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNpbV9kaXJlY3Rpb24lMjAlM0QlMjBGLmNvc2luZV9zaW1pbGFyaXR5KGltZ19mZWF0X3R3byUyMC0lMjBpbWdfZmVhdF9vbmUlMkMlMjB0ZXh0X2ZlYXRfdHdvJTIwLSUyMHRleHRfZmVhdF9vbmUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwc2ltX2RpcmVjdGlvbiUwQSUwQSUyMCUyMCUyMCUyMGRlZiUyMGZvcndhcmQoc2VsZiUyQyUyMGltYWdlX29uZSUyQyUyMGltYWdlX3R3byUyQyUyMGNhcHRpb25fb25lJTJDJTIwY2FwdGlvbl90d28pJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1nX2ZlYXRfb25lJTIwJTNEJTIwc2VsZi5lbmNvZGVfaW1hZ2UoaW1hZ2Vfb25lKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGltZ19mZWF0X3R3byUyMCUzRCUyMHNlbGYuZW5jb2RlX2ltYWdlKGltYWdlX3R3byklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0X2ZlYXRfb25lJTIwJTNEJTIwc2VsZi5lbmNvZGVfdGV4dChjYXB0aW9uX29uZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0ZXh0X2ZlYXRfdHdvJTIwJTNEJTIwc2VsZi5lbmNvZGVfdGV4dChjYXB0aW9uX3R3byklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkaXJlY3Rpb25hbF9zaW1pbGFyaXR5JTIwJTNEJTIwc2VsZi5jb21wdXRlX2RpcmVjdGlvbmFsX3NpbWlsYXJpdHkoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW1nX2ZlYXRfb25lJTJDJTIwaW1nX2ZlYXRfdHdvJTJDJTIwdGV4dF9mZWF0X29uZSUyQyUyMHRleHRfZmVhdF90d28lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwZGlyZWN0aW9uYWxfc2ltaWxhcml0eQ==",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(device)} | |
| <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(device)} | |
| <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}}),Ll=new y({props:{code:"ZGlyX3NpbWlsYXJpdHklMjAlM0QlMjBEaXJlY3Rpb25hbFNpbWlsYXJpdHkodG9rZW5pemVyJTJDJTIwdGV4dF9lbmNvZGVyJTJDJTIwaW1hZ2VfcHJvY2Vzc29yJTJDJTIwaW1hZ2VfZW5jb2RlciklMEFzY29yZXMlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oaW5wdXRfaW1hZ2VzKSklM0ElMEElMjAlMjAlMjAlMjBvcmlnaW5hbF9pbWFnZSUyMCUzRCUyMGlucHV0X2ltYWdlcyU1QmklNUQlMEElMjAlMjAlMjAlMjBvcmlnaW5hbF9jYXB0aW9uJTIwJTNEJTIwb3JpZ2luYWxfY2FwdGlvbnMlNUJpJTVEJTBBJTIwJTIwJTIwJTIwZWRpdGVkX2ltYWdlJTIwJTNEJTIwZWRpdGVkX2ltYWdlcyU1QmklNUQlMEElMjAlMjAlMjAlMjBtb2RpZmllZF9jYXB0aW9uJTIwJTNEJTIwbW9kaWZpZWRfY2FwdGlvbnMlNUJpJTVEJTBBJTBBJTIwJTIwJTIwJTIwc2ltaWxhcml0eV9zY29yZSUyMCUzRCUyMGRpcl9zaW1pbGFyaXR5KG9yaWdpbmFsX2ltYWdlJTJDJTIwZWRpdGVkX2ltYWdlJTJDJTIwb3JpZ2luYWxfY2FwdGlvbiUyQyUyMG1vZGlmaWVkX2NhcHRpb24pJTBBJTIwJTIwJTIwJTIwc2NvcmVzLmFwcGVuZChmbG9hdChzaW1pbGFyaXR5X3Njb3JlLmRldGFjaCgpLmNwdSgpKSklMEElMEFwcmludChmJTIyQ0xJUCUyMGRpcmVjdGlvbmFsJTIwc2ltaWxhcml0eSUzQSUyMCU3Qm5wLm1lYW4oc2NvcmVzKSU3RCUyMiklMEElMjMlMjBDTElQJTIwZGlyZWN0aW9uYWwlMjBzaW1pbGFyaXR5JTNBJTIwMC4wNzk3OTc2NTUzNDQwMDk0",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 directional similarity: <span class="hljs-subst">{np.mean(scores)}</span>"</span>) | |
| <span class="hljs-comment"># CLIP directional similarity: 0.0797976553440094</span>`,wrap:!1}}),ee=new Ue({props:{title:"클래스 조건화 이미지 생성",local:"class-conditioned-image-generation",headingTag:"h3"}}),pe=new y({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}}),Me=new y({props:{code:"ZnJvbSUyMFBJTCUyMGltcG9ydCUyMEltYWdlJTBBaW1wb3J0JTIwb3MlMEElMEFkYXRhc2V0X3BhdGglMjAlM0QlMjAlMjJzYW1wbGUtaW1hZ2VuZXQtaW1hZ2VzJTIyJTBBaW1hZ2VfcGF0aHMlMjAlM0QlMjBzb3J0ZWQoJTVCb3MucGF0aC5qb2luKGRhdGFzZXRfcGF0aCUyQyUyMHgpJTIwZm9yJTIweCUyMGluJTIwb3MubGlzdGRpcihkYXRhc2V0X3BhdGgpJTVEKSUwQSUwQXJlYWxfaW1hZ2VzJTIwJTNEJTIwJTVCbnAuYXJyYXkoSW1hZ2Uub3BlbihwYXRoKS5jb252ZXJ0KCUyMlJHQiUyMikpJTIwZm9yJTIwcGF0aCUyMGluJTIwaW1hZ2VfcGF0aHMlNUQ=",highlighted:`<span class="hljs-keyword">from</span> PIL <span class="hljs-keyword">import</span> Image | |
| <span class="hljs-keyword">import</span> os | |
| 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}}),oe=new y({props:{code:"ZnJvbSUyMHRvcmNodmlzaW9uLnRyYW5zZm9ybXMlMjBpbXBvcnQlMjBmdW5jdGlvbmFsJTIwYXMlMjBGJTBBJTBBJTBBZGVmJTIwcHJlcHJvY2Vzc19pbWFnZShpbWFnZSklM0ElMEElMjAlMjAlMjAlMjBpbWFnZSUyMCUzRCUyMHRvcmNoLnRlbnNvcihpbWFnZSkudW5zcXVlZXplKDApJTBBJTIwJTIwJTIwJTIwaW1hZ2UlMjAlM0QlMjBpbWFnZS5wZXJtdXRlKDAlMkMlMjAzJTJDJTIwMSUyQyUyMDIpJTIwJTJGJTIwMjU1LjAlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBGLmNlbnRlcl9jcm9wKGltYWdlJTJDJTIwKDI1NiUyQyUyMDI1NikpJTBBJTBBcmVhbF9pbWFnZXMlMjAlM0QlMjB0b3JjaC5jYXQoJTVCcHJlcHJvY2Vzc19pbWFnZShpbWFnZSklMjBmb3IlMjBpbWFnZSUyMGluJTIwcmVhbF9pbWFnZXMlNUQpJTBBcHJpbnQocmVhbF9pbWFnZXMuc2hhcGUpJTBBJTIzJTIwdG9yY2guU2l6ZSglNUIxMCUyQyUyMDMlMkMlMjAyNTYlMkMlMjAyNTYlNUQp",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">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.cat([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}}),Te=new y({props:{code:"ZnJvbSUyMGRpZmZ1c2VycyUyMGltcG9ydCUyMERpVFBpcGVsaW5lJTJDJTIwRFBNU29sdmVyTXVsdGlzdGVwU2NoZWR1bGVyJTBBJTBBZGl0X3BpcGVsaW5lJTIwJTNEJTIwRGlUUGlwZWxpbmUuZnJvbV9wcmV0cmFpbmVkKCUyMmZhY2Vib29rJTJGRGlULVhMLTItMjU2JTIyJTJDJTIwdG9yY2hfZHR5cGUlM0R0b3JjaC5mbG9hdDE2KSUwQWRpdF9waXBlbGluZS5zY2hlZHVsZXIlMjAlM0QlMjBEUE1Tb2x2ZXJNdWx0aXN0ZXBTY2hlZHVsZXIuZnJvbV9jb25maWcoZGl0X3BpcGVsaW5lLnNjaGVkdWxlci5jb25maWcpJTBBZGl0X3BpcGVsaW5lJTIwJTNEJTIwZGl0X3BpcGVsaW5lLnRvKCUyMmN1ZGElMjIpJTBBJTBBd29yZHMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjJjYXNzZXR0ZSUyMHBsYXllciUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmNoYWluc2F3JTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyY2hhaW5zYXclMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJjaHVyY2glMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJnYXMlMjBwdW1wJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyZ2FzJTIwcHVtcCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMmdhcyUyMHB1bXAlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJwYXJhY2h1dGUlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJwYXJhY2h1dGUlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJ0ZW5jaCUyMiUyQyUwQSU1RCUwQSUwQWNsYXNzX2lkcyUyMCUzRCUyMGRpdF9waXBlbGluZS5nZXRfbGFiZWxfaWRzKHdvcmRzKSUwQW91dHB1dCUyMCUzRCUyMGRpdF9waXBlbGluZShjbGFzc19sYWJlbHMlM0RjbGFzc19pZHMlMkMlMjBnZW5lcmF0b3IlM0RnZW5lcmF0b3IlMkMlMjBvdXRwdXRfdHlwZSUzRCUyMm5wJTIyKSUwQSUwQWZha2VfaW1hZ2VzJTIwJTNEJTIwb3V0cHV0LmltYWdlcyUwQWZha2VfaW1hZ2VzJTIwJTNEJTIwdG9yY2gudGVuc29yKGZha2VfaW1hZ2VzKSUwQWZha2VfaW1hZ2VzJTIwJTNEJTIwZmFrZV9pbWFnZXMucGVybXV0ZSgwJTJDJTIwMyUyQyUyMDElMkMlMjAyKSUwQXByaW50KGZha2VfaW1hZ2VzLnNoYXBlKSUwQSUyMyUyMHRvcmNoLlNpemUoJTVCMTAlMkMlMjAzJTJDJTIwMjU2JTJDJTIwMjU2JTVEKQ==",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>) | |
| 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}}),ye=new y({props:{code:"ZnJvbSUyMHRvcmNobWV0cmljcy5pbWFnZS5maWQlMjBpbXBvcnQlMjBGcmVjaGV0SW5jZXB0aW9uRGlzdGFuY2UlMEElMEFmaWQlMjAlM0QlMjBGcmVjaGV0SW5jZXB0aW9uRGlzdGFuY2Uobm9ybWFsaXplJTNEVHJ1ZSklMEFmaWQudXBkYXRlKHJlYWxfaW1hZ2VzJTJDJTIwcmVhbCUzRFRydWUpJTBBZmlkLnVwZGF0ZShmYWtlX2ltYWdlcyUyQyUyMHJlYWwlM0RGYWxzZSklMEElMEFwcmludChmJTIyRklEJTNBJTIwJTdCZmxvYXQoZmlkLmNvbXB1dGUoKSklN0QlMjIpJTBBJTIzJTIwRklEJTNBJTIwMTc3LjcxNDcyMTY3OTY4NzU=",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}}),fe=new mn({props:{source:"https://github.com/huggingface/diffusers/blob/main/docs/source/ko/conceptual/evaluation.md"}}),{c(){d=i("meta"),Ie=a(),he=i("p"),Ze=a(),c(Z.$$.fragment),Be=a(),c(B.$$.fragment),Ce=a(),u=i("a"),u.innerHTML=Gs,We=a(),C=i("p"),C.innerHTML=vs,ge=a(),W=i("p"),W.textContent=Xs,_e=a(),g=i("p"),g.innerHTML=xs,Ge=a(),_=i("p"),_.innerHTML=Vs,ve=a(),c(G.$$.fragment),Xe=a(),v=i("p"),v.textContent=ks,xe=a(),X=i("ul"),X.innerHTML=Rs,Ve=a(),c(x.$$.fragment),ke=a(),V=i("p"),V.innerHTML=Hs,Re=a(),k=i("p"),k.innerHTML=Fs,He=a(),R=i("blockquote"),R.innerHTML=Ns,Fe=a(),H=i("p"),H.innerHTML=Ys,Ne=a(),F=i("p"),F.textContent=Es,Ye=a(),N=i("ul"),N.innerHTML=Qs,Ee=a(),Y=i("p"),Y.textContent=As,Qe=a(),E=i("p"),E.innerHTML=zs,Ae=a(),Q=i("ul"),Q.innerHTML=$s,ze=a(),A=i("p"),A.innerHTML=Ss,$e=a(),z=i("p"),z.innerHTML=Ls,Se=a(),c($.$$.fragment),Le=a(),S=i("p"),S.innerHTML=Ps,Pe=a(),c(L.$$.fragment),qe=a(),P=i("p"),P.innerHTML=qs,De=a(),q=i("p"),q.innerHTML=Ds,Ke=a(),D=i("p"),D.innerHTML=Ks,Oe=a(),K=i("p"),K.textContent=Os,lt=a(),j=i("blockquote"),j.innerHTML=la,et=a(),c(O.$$.fragment),tt=a(),ll=i("p"),ll.textContent=ea,st=a(),el=i("ul"),el.innerHTML=ta,at=a(),c(tl.$$.fragment),nt=a(),sl=i("p"),sl.innerHTML=sa,it=a(),al=i("p"),al.innerHTML=aa,pt=a(),c(nl.$$.fragment),Mt=a(),il=i("p"),il.textContent=na,ct=a(),c(pl.$$.fragment),Jt=a(),Ml=i("p"),Ml.textContent=ia,ot=a(),c(cl.$$.fragment),mt=a(),Jl=i("p"),Jl.textContent=pa,Tt=a(),ol=i("p"),ol.innerHTML=Ma,rt=a(),c(ml.$$.fragment),yt=a(),Tl=i("p"),Tl.innerHTML=ca,wt=a(),c(rl.$$.fragment),dt=a(),yl=i("p"),yl.textContent=Ja,ut=a(),c(wl.$$.fragment),jt=a(),dl=i("p"),dl.innerHTML=oa,ft=a(),f=i("blockquote"),f.innerHTML=ma,Ut=a(),c(ul.$$.fragment),ht=a(),jl=i("p"),jl.innerHTML=Ta,bt=a(),fl=i("p"),fl.textContent=ra,It=a(),Ul=i("p"),Ul.innerHTML=ya,Zt=a(),hl=i("p"),hl.innerHTML=wa,Bt=a(),bl=i("ul"),bl.innerHTML=da,Ct=a(),Il=i("p"),Il.textContent=ua,Wt=a(),Zl=i("p"),Zl.innerHTML=ja,gt=a(),Bl=i("p"),Bl.textContent=fa,_t=a(),c(Cl.$$.fragment),Gt=a(),c(Wl.$$.fragment),vt=a(),gl=i("p"),gl.textContent=Ua,Xt=a(),_l=i("ul"),_l.innerHTML=ha,xt=a(),Gl=i("p"),Gl.textContent=ba,Vt=a(),c(vl.$$.fragment),kt=a(),c(Xl.$$.fragment),Rt=a(),xl=i("p"),xl.textContent=Ia,Ht=a(),c(Vl.$$.fragment),Ft=a(),kl=i("p"),kl.innerHTML=Za,Nt=a(),Rl=i("p"),Rl.textContent=Ba,Yt=a(),Hl=i("p"),Hl.innerHTML=Ca,Et=a(),c(Fl.$$.fragment),Qt=a(),Nl=i("p"),Nl.textContent=Wa,At=a(),c(Yl.$$.fragment),zt=a(),El=i("p"),El.textContent=ga,$t=a(),c(Ql.$$.fragment),St=a(),Al=i("p"),Al.innerHTML=_a,Lt=a(),zl=i("p"),zl.innerHTML=Ga,Pt=a(),c($l.$$.fragment),qt=a(),Sl=i("p"),Sl.innerHTML=va,Dt=a(),c(Ll.$$.fragment),Kt=a(),Pl=i("p"),Pl.textContent=Xa,Ot=a(),ql=i("p"),ql.innerHTML=xa,ls=a(),Dl=i("p"),Dl.innerHTML=Va,es=a(),Kl=i("p"),Kl.innerHTML=ka,ts=a(),U=i("blockquote"),U.innerHTML=Ra,ss=a(),Ol=i("p"),Ol.innerHTML=Ha,as=a(),le=i("p"),le.innerHTML=Fa,ns=a(),c(ee.$$.fragment),is=a(),te=i("p"),te.innerHTML=Na,ps=a(),se=i("p"),se.innerHTML=Ya,Ms=a(),ae=i("blockquote"),ae.innerHTML=Ea,cs=a(),ne=i("p"),ne.textContent=Qa,Js=a(),ie=i("p"),ie.textContent=Aa,os=a(),c(pe.$$.fragment),ms=a(),c(Me.$$.fragment),Ts=a(),ce=i("p"),ce.textContent=za,rs=a(),h=i("p"),h.innerHTML=$a,ys=a(),Je=i("p"),Je.textContent=Sa,ws=a(),c(oe.$$.fragment),ds=a(),me=i("p"),me.innerHTML=La,us=a(),c(Te.$$.fragment),js=a(),re=i("p"),re.innerHTML=Pa,fs=a(),c(ye.$$.fragment),Us=a(),we=i("p"),we.textContent=qa,hs=a(),de=i("ul"),de.innerHTML=Da,bs=a(),ue=i("p"),ue.textContent=Ka,Is=a(),b=i("blockquote"),b.innerHTML=Oa,Zs=a(),je=i("p"),je.innerHTML=ln,Bs=a(),I=i("p"),I.innerHTML=en,Cs=a(),c(fe.$$.fragment),Ws=a(),be=i("p"),this.h()},l(l){const e=cn("svelte-u9bgzb",document.head);d=p(e,"META",{name:!0,content:!0}),e.forEach(t),Ie=n(l),he=p(l,"P",{}),tn(he).forEach(t),Ze=n(l),J(Z.$$.fragment,l),Be=n(l),J(B.$$.fragment,l),Ce=n(l),u=p(l,"A",{target:!0,href:!0,"data-svelte-h":!0}),M(u)!=="svelte-1fn2wis"&&(u.innerHTML=Gs),We=n(l),C=p(l,"P",{"data-svelte-h":!0}),M(C)!=="svelte-6xq5a1"&&(C.innerHTML=vs),ge=n(l),W=p(l,"P",{"data-svelte-h":!0}),M(W)!=="svelte-1xlftt0"&&(W.textContent=Xs),_e=n(l),g=p(l,"P",{"data-svelte-h":!0}),M(g)!=="svelte-yspndj"&&(g.innerHTML=xs),Ge=n(l),_=p(l,"P",{"data-svelte-h":!0}),M(_)!=="svelte-un0io1"&&(_.innerHTML=Vs),ve=n(l),J(G.$$.fragment,l),Xe=n(l),v=p(l,"P",{"data-svelte-h":!0}),M(v)!=="svelte-1p7jqma"&&(v.textContent=ks),xe=n(l),X=p(l,"UL",{"data-svelte-h":!0}),M(X)!=="svelte-1l171m9"&&(X.innerHTML=Rs),Ve=n(l),J(x.$$.fragment,l),ke=n(l),V=p(l,"P",{"data-svelte-h":!0}),M(V)!=="svelte-1w1uh1l"&&(V.innerHTML=Hs),Re=n(l),k=p(l,"P",{"data-svelte-h":!0}),M(k)!=="svelte-1v3brnz"&&(k.innerHTML=Fs),He=n(l),R=p(l,"BLOCKQUOTE",{"data-svelte-h":!0}),M(R)!=="svelte-1udk7r1"&&(R.innerHTML=Ns),Fe=n(l),H=p(l,"P",{"data-svelte-h":!0}),M(H)!=="svelte-19xz367"&&(H.innerHTML=Ys),Ne=n(l),F=p(l,"P",{"data-svelte-h":!0}),M(F)!=="svelte-4fj1bh"&&(F.textContent=Es),Ye=n(l),N=p(l,"UL",{"data-svelte-h":!0}),M(N)!=="svelte-6wioij"&&(N.innerHTML=Qs),Ee=n(l),Y=p(l,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-3d1wrj"&&(Y.textContent=As),Qe=n(l),E=p(l,"P",{"data-svelte-h":!0}),M(E)!=="svelte-vnamve"&&(E.innerHTML=zs),Ae=n(l),Q=p(l,"UL",{"data-svelte-h":!0}),M(Q)!=="svelte-tidi6g"&&(Q.innerHTML=$s),ze=n(l),A=p(l,"P",{"data-svelte-h":!0}),M(A)!=="svelte-1tvbdp7"&&(A.innerHTML=Ss),$e=n(l),z=p(l,"P",{"data-svelte-h":!0}),M(z)!=="svelte-sgc14z"&&(z.innerHTML=Ls),Se=n(l),J($.$$.fragment,l),Le=n(l),S=p(l,"P",{"data-svelte-h":!0}),M(S)!=="svelte-ucg1d9"&&(S.innerHTML=Ps),Pe=n(l),J(L.$$.fragment,l),qe=n(l),P=p(l,"P",{"data-svelte-h":!0}),M(P)!=="svelte-4i7yd5"&&(P.innerHTML=qs),De=n(l),q=p(l,"P",{"data-svelte-h":!0}),M(q)!=="svelte-px9uzg"&&(q.innerHTML=Ds),Ke=n(l),D=p(l,"P",{"data-svelte-h":!0}),M(D)!=="svelte-gipltn"&&(D.innerHTML=Ks),Oe=n(l),K=p(l,"P",{"data-svelte-h":!0}),M(K)!=="svelte-j6hquq"&&(K.textContent=Os),lt=n(l),j=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(j)!=="svelte-1392ys"&&(j.innerHTML=la),et=n(l),J(O.$$.fragment,l),tt=n(l),ll=p(l,"P",{"data-svelte-h":!0}),M(ll)!=="svelte-fcrw06"&&(ll.textContent=ea),st=n(l),el=p(l,"UL",{"data-svelte-h":!0}),M(el)!=="svelte-148168f"&&(el.innerHTML=ta),at=n(l),J(tl.$$.fragment,l),nt=n(l),sl=p(l,"P",{"data-svelte-h":!0}),M(sl)!=="svelte-1p20uhi"&&(sl.innerHTML=sa),it=n(l),al=p(l,"P",{"data-svelte-h":!0}),M(al)!=="svelte-xk9h88"&&(al.innerHTML=aa),pt=n(l),J(nl.$$.fragment,l),Mt=n(l),il=p(l,"P",{"data-svelte-h":!0}),M(il)!=="svelte-1sbnm0m"&&(il.textContent=na),ct=n(l),J(pl.$$.fragment,l),Jt=n(l),Ml=p(l,"P",{"data-svelte-h":!0}),M(Ml)!=="svelte-1guznfb"&&(Ml.textContent=ia),ot=n(l),J(cl.$$.fragment,l),mt=n(l),Jl=p(l,"P",{"data-svelte-h":!0}),M(Jl)!=="svelte-yopa5z"&&(Jl.textContent=pa),Tt=n(l),ol=p(l,"P",{"data-svelte-h":!0}),M(ol)!=="svelte-1ytdcd"&&(ol.innerHTML=Ma),rt=n(l),J(ml.$$.fragment,l),yt=n(l),Tl=p(l,"P",{"data-svelte-h":!0}),M(Tl)!=="svelte-gge1c8"&&(Tl.innerHTML=ca),wt=n(l),J(rl.$$.fragment,l),dt=n(l),yl=p(l,"P",{"data-svelte-h":!0}),M(yl)!=="svelte-umer2m"&&(yl.textContent=Ja),ut=n(l),J(wl.$$.fragment,l),jt=n(l),dl=p(l,"P",{"data-svelte-h":!0}),M(dl)!=="svelte-skbucg"&&(dl.innerHTML=oa),ft=n(l),f=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(f)!=="svelte-1rbprfx"&&(f.innerHTML=ma),Ut=n(l),J(ul.$$.fragment,l),ht=n(l),jl=p(l,"P",{"data-svelte-h":!0}),M(jl)!=="svelte-1rd9xlo"&&(jl.innerHTML=Ta),bt=n(l),fl=p(l,"P",{"data-svelte-h":!0}),M(fl)!=="svelte-17dg0d1"&&(fl.textContent=ra),It=n(l),Ul=p(l,"P",{"data-svelte-h":!0}),M(Ul)!=="svelte-tnn31f"&&(Ul.innerHTML=ya),Zt=n(l),hl=p(l,"P",{"data-svelte-h":!0}),M(hl)!=="svelte-53z69p"&&(hl.innerHTML=wa),Bt=n(l),bl=p(l,"UL",{"data-svelte-h":!0}),M(bl)!=="svelte-1pnh71f"&&(bl.innerHTML=da),Ct=n(l),Il=p(l,"P",{"data-svelte-h":!0}),M(Il)!=="svelte-1ubfnyv"&&(Il.textContent=ua),Wt=n(l),Zl=p(l,"P",{"data-svelte-h":!0}),M(Zl)!=="svelte-fs1abj"&&(Zl.innerHTML=ja),gt=n(l),Bl=p(l,"P",{"data-svelte-h":!0}),M(Bl)!=="svelte-ixcjgc"&&(Bl.textContent=fa),_t=n(l),J(Cl.$$.fragment,l),Gt=n(l),J(Wl.$$.fragment,l),vt=n(l),gl=p(l,"P",{"data-svelte-h":!0}),M(gl)!=="svelte-x2kg70"&&(gl.textContent=Ua),Xt=n(l),_l=p(l,"UL",{"data-svelte-h":!0}),M(_l)!=="svelte-1uwuaaj"&&(_l.innerHTML=ha),xt=n(l),Gl=p(l,"P",{"data-svelte-h":!0}),M(Gl)!=="svelte-1idfvnt"&&(Gl.textContent=ba),Vt=n(l),J(vl.$$.fragment,l),kt=n(l),J(Xl.$$.fragment,l),Rt=n(l),xl=p(l,"P",{"data-svelte-h":!0}),M(xl)!=="svelte-skm5wr"&&(xl.textContent=Ia),Ht=n(l),J(Vl.$$.fragment,l),Ft=n(l),kl=p(l,"P",{"data-svelte-h":!0}),M(kl)!=="svelte-1r4pb3b"&&(kl.innerHTML=Za),Nt=n(l),Rl=p(l,"P",{"data-svelte-h":!0}),M(Rl)!=="svelte-1udfdoz"&&(Rl.textContent=Ba),Yt=n(l),Hl=p(l,"P",{"data-svelte-h":!0}),M(Hl)!=="svelte-1inu8ac"&&(Hl.innerHTML=Ca),Et=n(l),J(Fl.$$.fragment,l),Qt=n(l),Nl=p(l,"P",{"data-svelte-h":!0}),M(Nl)!=="svelte-b448d3"&&(Nl.textContent=Wa),At=n(l),J(Yl.$$.fragment,l),zt=n(l),El=p(l,"P",{"data-svelte-h":!0}),M(El)!=="svelte-13ebdic"&&(El.textContent=ga),$t=n(l),J(Ql.$$.fragment,l),St=n(l),Al=p(l,"P",{"data-svelte-h":!0}),M(Al)!=="svelte-j4jmg5"&&(Al.innerHTML=_a),Lt=n(l),zl=p(l,"P",{"data-svelte-h":!0}),M(zl)!=="svelte-i6vhnq"&&(zl.innerHTML=Ga),Pt=n(l),J($l.$$.fragment,l),qt=n(l),Sl=p(l,"P",{"data-svelte-h":!0}),M(Sl)!=="svelte-19tiepu"&&(Sl.innerHTML=va),Dt=n(l),J(Ll.$$.fragment,l),Kt=n(l),Pl=p(l,"P",{"data-svelte-h":!0}),M(Pl)!=="svelte-1ff4mmy"&&(Pl.textContent=Xa),Ot=n(l),ql=p(l,"P",{"data-svelte-h":!0}),M(ql)!=="svelte-1hslery"&&(ql.innerHTML=xa),ls=n(l),Dl=p(l,"P",{"data-svelte-h":!0}),M(Dl)!=="svelte-1nlq5nk"&&(Dl.innerHTML=Va),es=n(l),Kl=p(l,"P",{"data-svelte-h":!0}),M(Kl)!=="svelte-1gpzo3s"&&(Kl.innerHTML=ka),ts=n(l),U=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(U)!=="svelte-jxqxvz"&&(U.innerHTML=Ra),ss=n(l),Ol=p(l,"P",{"data-svelte-h":!0}),M(Ol)!=="svelte-dg71ox"&&(Ol.innerHTML=Ha),as=n(l),le=p(l,"P",{"data-svelte-h":!0}),M(le)!=="svelte-179vfay"&&(le.innerHTML=Fa),ns=n(l),J(ee.$$.fragment,l),is=n(l),te=p(l,"P",{"data-svelte-h":!0}),M(te)!=="svelte-1qwesop"&&(te.innerHTML=Na),ps=n(l),se=p(l,"P",{"data-svelte-h":!0}),M(se)!=="svelte-179n0sy"&&(se.innerHTML=Ya),Ms=n(l),ae=p(l,"BLOCKQUOTE",{"data-svelte-h":!0}),M(ae)!=="svelte-8chdsm"&&(ae.innerHTML=Ea),cs=n(l),ne=p(l,"P",{"data-svelte-h":!0}),M(ne)!=="svelte-83slvb"&&(ne.textContent=Qa),Js=n(l),ie=p(l,"P",{"data-svelte-h":!0}),M(ie)!=="svelte-16ocjht"&&(ie.textContent=Aa),os=n(l),J(pe.$$.fragment,l),ms=n(l),J(Me.$$.fragment,l),Ts=n(l),ce=p(l,"P",{"data-svelte-h":!0}),M(ce)!=="svelte-1fss7yu"&&(ce.textContent=za),rs=n(l),h=p(l,"P",{align:!0,"data-svelte-h":!0}),M(h)!=="svelte-94lw7t"&&(h.innerHTML=$a),ys=n(l),Je=p(l,"P",{"data-svelte-h":!0}),M(Je)!=="svelte-mqjsy3"&&(Je.textContent=Sa),ws=n(l),J(oe.$$.fragment,l),ds=n(l),me=p(l,"P",{"data-svelte-h":!0}),M(me)!=="svelte-1osf93j"&&(me.innerHTML=La),us=n(l),J(Te.$$.fragment,l),js=n(l),re=p(l,"P",{"data-svelte-h":!0}),M(re)!=="svelte-1xh8e6v"&&(re.innerHTML=Pa),fs=n(l),J(ye.$$.fragment,l),Us=n(l),we=p(l,"P",{"data-svelte-h":!0}),M(we)!=="svelte-jfhad4"&&(we.textContent=qa),hs=n(l),de=p(l,"UL",{"data-svelte-h":!0}),M(de)!=="svelte-1mjj4yp"&&(de.innerHTML=Da),bs=n(l),ue=p(l,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-1bjjf4r"&&(ue.textContent=Ka),Is=n(l),b=p(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(b)!=="svelte-1aim618"&&(b.innerHTML=Oa),Zs=n(l),je=p(l,"P",{"data-svelte-h":!0}),M(je)!=="svelte-147ab8l"&&(je.innerHTML=ln),Bs=n(l),I=p(l,"P",{align:!0,"data-svelte-h":!0}),M(I)!=="svelte-16e5oh4"&&(I.innerHTML=en),Cs=n(l),J(fe.$$.fragment,l),Ws=n(l),be=p(l,"P",{}),tn(be).forEach(t),this.h()},h(){w(d,"name","hf:doc:metadata"),w(d,"content",rn),w(u,"target","_blank"),w(u,"href","https://colab.research.google.com/github/huggingface/notebooks/blob/main/diffusers/evaluation.ipynb"),w(j,"class","tip"),w(f,"class","warning"),w(U,"class","tip"),w(h,"align","center"),w(b,"class","warning"),w(I,"align","center")},m(l,e){Jn(document.head,d),s(l,Ie,e),s(l,he,e),s(l,Ze,e),o(Z,l,e),s(l,Be,e),o(B,l,e),s(l,Ce,e),s(l,u,e),s(l,We,e),s(l,C,e),s(l,ge,e),s(l,W,e),s(l,_e,e),s(l,g,e),s(l,Ge,e),s(l,_,e),s(l,ve,e),o(G,l,e),s(l,Xe,e),s(l,v,e),s(l,xe,e),s(l,X,e),s(l,Ve,e),o(x,l,e),s(l,ke,e),s(l,V,e),s(l,Re,e),s(l,k,e),s(l,He,e),s(l,R,e),s(l,Fe,e),s(l,H,e),s(l,Ne,e),s(l,F,e),s(l,Ye,e),s(l,N,e),s(l,Ee,e),s(l,Y,e),s(l,Qe,e),s(l,E,e),s(l,Ae,e),s(l,Q,e),s(l,ze,e),s(l,A,e),s(l,$e,e),s(l,z,e),s(l,Se,e),o($,l,e),s(l,Le,e),s(l,S,e),s(l,Pe,e),o(L,l,e),s(l,qe,e),s(l,P,e),s(l,De,e),s(l,q,e),s(l,Ke,e),s(l,D,e),s(l,Oe,e),s(l,K,e),s(l,lt,e),s(l,j,e),s(l,et,e),o(O,l,e),s(l,tt,e),s(l,ll,e),s(l,st,e),s(l,el,e),s(l,at,e),o(tl,l,e),s(l,nt,e),s(l,sl,e),s(l,it,e),s(l,al,e),s(l,pt,e),o(nl,l,e),s(l,Mt,e),s(l,il,e),s(l,ct,e),o(pl,l,e),s(l,Jt,e),s(l,Ml,e),s(l,ot,e),o(cl,l,e),s(l,mt,e),s(l,Jl,e),s(l,Tt,e),s(l,ol,e),s(l,rt,e),o(ml,l,e),s(l,yt,e),s(l,Tl,e),s(l,wt,e),o(rl,l,e),s(l,dt,e),s(l,yl,e),s(l,ut,e),o(wl,l,e),s(l,jt,e),s(l,dl,e),s(l,ft,e),s(l,f,e),s(l,Ut,e),o(ul,l,e),s(l,ht,e),s(l,jl,e),s(l,bt,e),s(l,fl,e),s(l,It,e),s(l,Ul,e),s(l,Zt,e),s(l,hl,e),s(l,Bt,e),s(l,bl,e),s(l,Ct,e),s(l,Il,e),s(l,Wt,e),s(l,Zl,e),s(l,gt,e),s(l,Bl,e),s(l,_t,e),o(Cl,l,e),s(l,Gt,e),o(Wl,l,e),s(l,vt,e),s(l,gl,e),s(l,Xt,e),s(l,_l,e),s(l,xt,e),s(l,Gl,e),s(l,Vt,e),o(vl,l,e),s(l,kt,e),o(Xl,l,e),s(l,Rt,e),s(l,xl,e),s(l,Ht,e),o(Vl,l,e),s(l,Ft,e),s(l,kl,e),s(l,Nt,e),s(l,Rl,e),s(l,Yt,e),s(l,Hl,e),s(l,Et,e),o(Fl,l,e),s(l,Qt,e),s(l,Nl,e),s(l,At,e),o(Yl,l,e),s(l,zt,e),s(l,El,e),s(l,$t,e),o(Ql,l,e),s(l,St,e),s(l,Al,e),s(l,Lt,e),s(l,zl,e),s(l,Pt,e),o($l,l,e),s(l,qt,e),s(l,Sl,e),s(l,Dt,e),o(Ll,l,e),s(l,Kt,e),s(l,Pl,e),s(l,Ot,e),s(l,ql,e),s(l,ls,e),s(l,Dl,e),s(l,es,e),s(l,Kl,e),s(l,ts,e),s(l,U,e),s(l,ss,e),s(l,Ol,e),s(l,as,e),s(l,le,e),s(l,ns,e),o(ee,l,e),s(l,is,e),s(l,te,e),s(l,ps,e),s(l,se,e),s(l,Ms,e),s(l,ae,e),s(l,cs,e),s(l,ne,e),s(l,Js,e),s(l,ie,e),s(l,os,e),o(pe,l,e),s(l,ms,e),o(Me,l,e),s(l,Ts,e),s(l,ce,e),s(l,rs,e),s(l,h,e),s(l,ys,e),s(l,Je,e),s(l,ws,e),o(oe,l,e),s(l,ds,e),s(l,me,e),s(l,us,e),o(Te,l,e),s(l,js,e),s(l,re,e),s(l,fs,e),o(ye,l,e),s(l,Us,e),s(l,we,e),s(l,hs,e),s(l,de,e),s(l,bs,e),s(l,ue,e),s(l,Is,e),s(l,b,e),s(l,Zs,e),s(l,je,e),s(l,Bs,e),s(l,I,e),s(l,Cs,e),o(fe,l,e),s(l,Ws,e),s(l,be,e),gs=!0},p:an,i(l){gs||(m(Z.$$.fragment,l),m(B.$$.fragment,l),m(G.$$.fragment,l),m(x.$$.fragment,l),m($.$$.fragment,l),m(L.$$.fragment,l),m(O.$$.fragment,l),m(tl.$$.fragment,l),m(nl.$$.fragment,l),m(pl.$$.fragment,l),m(cl.$$.fragment,l),m(ml.$$.fragment,l),m(rl.$$.fragment,l),m(wl.$$.fragment,l),m(ul.$$.fragment,l),m(Cl.$$.fragment,l),m(Wl.$$.fragment,l),m(vl.$$.fragment,l),m(Xl.$$.fragment,l),m(Vl.$$.fragment,l),m(Fl.$$.fragment,l),m(Yl.$$.fragment,l),m(Ql.$$.fragment,l),m($l.$$.fragment,l),m(Ll.$$.fragment,l),m(ee.$$.fragment,l),m(pe.$$.fragment,l),m(Me.$$.fragment,l),m(oe.$$.fragment,l),m(Te.$$.fragment,l),m(ye.$$.fragment,l),m(fe.$$.fragment,l),gs=!0)},o(l){T(Z.$$.fragment,l),T(B.$$.fragment,l),T(G.$$.fragment,l),T(x.$$.fragment,l),T($.$$.fragment,l),T(L.$$.fragment,l),T(O.$$.fragment,l),T(tl.$$.fragment,l),T(nl.$$.fragment,l),T(pl.$$.fragment,l),T(cl.$$.fragment,l),T(ml.$$.fragment,l),T(rl.$$.fragment,l),T(wl.$$.fragment,l),T(ul.$$.fragment,l),T(Cl.$$.fragment,l),T(Wl.$$.fragment,l),T(vl.$$.fragment,l),T(Xl.$$.fragment,l),T(Vl.$$.fragment,l),T(Fl.$$.fragment,l),T(Yl.$$.fragment,l),T(Ql.$$.fragment,l),T($l.$$.fragment,l),T(Ll.$$.fragment,l),T(ee.$$.fragment,l),T(pe.$$.fragment,l),T(Me.$$.fragment,l),T(oe.$$.fragment,l),T(Te.$$.fragment,l),T(ye.$$.fragment,l),T(fe.$$.fragment,l),gs=!1},d(l){l&&(t(Ie),t(he),t(Ze),t(Be),t(Ce),t(u),t(We),t(C),t(ge),t(W),t(_e),t(g),t(Ge),t(_),t(ve),t(Xe),t(v),t(xe),t(X),t(Ve),t(ke),t(V),t(Re),t(k),t(He),t(R),t(Fe),t(H),t(Ne),t(F),t(Ye),t(N),t(Ee),t(Y),t(Qe),t(E),t(Ae),t(Q),t(ze),t(A),t($e),t(z),t(Se),t(Le),t(S),t(Pe),t(qe),t(P),t(De),t(q),t(Ke),t(D),t(Oe),t(K),t(lt),t(j),t(et),t(tt),t(ll),t(st),t(el),t(at),t(nt),t(sl),t(it),t(al),t(pt),t(Mt),t(il),t(ct),t(Jt),t(Ml),t(ot),t(mt),t(Jl),t(Tt),t(ol),t(rt),t(yt),t(Tl),t(wt),t(dt),t(yl),t(ut),t(jt),t(dl),t(ft),t(f),t(Ut),t(ht),t(jl),t(bt),t(fl),t(It),t(Ul),t(Zt),t(hl),t(Bt),t(bl),t(Ct),t(Il),t(Wt),t(Zl),t(gt),t(Bl),t(_t),t(Gt),t(vt),t(gl),t(Xt),t(_l),t(xt),t(Gl),t(Vt),t(kt),t(Rt),t(xl),t(Ht),t(Ft),t(kl),t(Nt),t(Rl),t(Yt),t(Hl),t(Et),t(Qt),t(Nl),t(At),t(zt),t(El),t($t),t(St),t(Al),t(Lt),t(zl),t(Pt),t(qt),t(Sl),t(Dt),t(Kt),t(Pl),t(Ot),t(ql),t(ls),t(Dl),t(es),t(Kl),t(ts),t(U),t(ss),t(Ol),t(as),t(le),t(ns),t(is),t(te),t(ps),t(se),t(Ms),t(ae),t(cs),t(ne),t(Js),t(ie),t(os),t(ms),t(Ts),t(ce),t(rs),t(h),t(ys),t(Je),t(ws),t(ds),t(me),t(us),t(js),t(re),t(fs),t(Us),t(we),t(hs),t(de),t(bs),t(ue),t(Is),t(b),t(Zs),t(je),t(Bs),t(I),t(Cs),t(Ws),t(be)),t(d),r(Z,l),r(B,l),r(G,l),r(x,l),r($,l),r(L,l),r(O,l),r(tl,l),r(nl,l),r(pl,l),r(cl,l),r(ml,l),r(rl,l),r(wl,l),r(ul,l),r(Cl,l),r(Wl,l),r(vl,l),r(Xl,l),r(Vl,l),r(Fl,l),r(Yl,l),r(Ql,l),r($l,l),r(Ll,l),r(ee,l),r(pe,l),r(Me,l),r(oe,l),r(Te,l),r(ye,l),r(fe,l)}}}const rn='{"title":"Diffusion 모델 평가하기","local":"evaluating-diffusion-models","sections":[{"title":"시나리오","local":"scenarios","sections":[],"depth":2},{"title":"정성적 평가","local":"qualitative-evaluation","sections":[],"depth":2},{"title":"정량적 평가","local":"quantitative-evaluation","sections":[{"title":"텍스트 안내 이미지 생성","local":"text-guided-image-generation","sections":[],"depth":3},{"title":"이미지 조건화된 텍스트-이미지 생성","local":"image-conditioned-text-to-image-generation","sections":[],"depth":3},{"title":"클래스 조건화 이미지 생성","local":"class-conditioned-image-generation","sections":[],"depth":3}],"depth":2}],"depth":1}';function yn(_s){return nn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class fn extends pn{constructor(d){super(),Mn(this,d,yn,Tn,sn,{})}}export{fn as component}; | |
Xet Storage Details
- Size:
- 78.1 kB
- Xet hash:
- 02963a01808e4c2ffc2c60b7a42c002ffa3611dde754ab9a2aff2852b65c6322
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.