Upgrade to Pro — share decks privately, control downloads, hide ads and more …

拡散モデルによる画像生成(CVIMチュートリアル)

mi141
November 15, 2023

 拡散モデルによる画像生成(CVIMチュートリアル)

2023年5月開催の情報処理学会CVIM研究会において行ったチュートリアル講演の資料です。
拡散モデルによる画像生成について、「拡散モデルの原理と学習方法」「生成処理の制御(画像変換・編集への応用)」「生成処理の高速化(微分方程式との関係)」の3つに分けて解説しています。

mi141

November 15, 2023
Tweet

Other Decks in Research

Transcript

  1. • • • 𝑝(𝑧) 𝑧~𝑝(𝑧) … … … … …

    … {𝑥𝑖 }𝑖=1 𝑁 𝑥 = 𝑓(𝑧)
  2. • • 𝑞 𝑥𝑡 𝑥𝑡−1 ≔ 𝑁(𝑥𝑡 ; 1 −

    𝛽𝑡 𝑥𝑡−1 , 𝛽𝑡 𝐈) 𝑥𝑡 = 1 − 𝛽𝑡 𝑥𝑡−1 + 𝛽𝑡 𝜖 𝑞 𝑥1:𝑇 𝑥0 = ෑ 𝑡=1 𝑇 𝑞 𝑥𝑡 𝑥𝑡−1 𝑥𝑖 𝑡=1 𝑇
  3. • 𝑥0 𝑥𝑡 • 𝑥0 𝑥𝑡 = 1 − 𝛽𝑡

    𝑥𝑡−1 + 𝛽𝑡 𝜖 = 1 − 𝛽𝑡 ( 1 − 𝛽𝑡−1 𝑥𝑡−2 + 𝛽𝑡−1 𝜖′) + 𝛽𝑡 𝜖 = 1 − 𝛽𝑡 1 − 𝛽𝑡−1 𝑥𝑡−2 + 1 − (1 − 𝛽𝑡 )(1 − 𝛽𝑡−1 )𝜖′′ = … = ത 𝛼𝑡 𝑥0 + 1 − ത 𝛼𝑡 𝜖 ത 𝛼𝑡 = ς𝑖=1 𝑡 (1 − 𝛽𝑖 )
  4. • 𝑥0 𝑥𝑡 • 𝑥0 𝑥𝑡 = 1 − 𝛽𝑡

    𝑥𝑡−1 + 𝛽𝑡 𝜖 = 1 − 𝛽𝑡 ( 1 − 𝛽𝑡−1 𝑥𝑡−2 + 𝛽𝑡−1 𝜖′) + 𝛽𝑡 𝜖 = 1 − 𝛽𝑡 1 − 𝛽𝑡−1 𝑥𝑡−2 + 1 − (1 − 𝛽𝑡 )(1 − 𝛽𝑡−1 )𝜖′′ = … = ത 𝛼𝑡 𝑥0 + 1 − ത 𝛼𝑡 𝜖 ത 𝛼𝑡 = ς𝑖=1 𝑡 (1 − 𝛽𝑖 ) 𝛽𝑡 ത 𝛼𝑡
  5. • 𝑥𝑡−1 𝑥𝑡 𝑥𝑡−1 𝑥𝑡 1 − 𝛽𝑡 𝑥𝑡−1 𝑥𝑡−1

    𝛽𝑡 𝛽𝑡 𝑝𝜃 𝑥𝑡−1 𝑥𝑡 = 𝑁(𝑥𝑡−1 ; 𝜇𝜃 (𝑥𝑡 ,𝑡), 𝚺𝜃 (𝑥𝑡 ,𝑡)) 𝜎𝑡 2𝑰 𝜎𝑡 2 = 𝛽𝑡
  6. # Initialization xt = random.normal(0, 1, (3,H,W)) # Reverse diffusion

    process for t in range(T, 0, -1): # estimate mean mu = estimate_mean(model, xt, t) # use fixed sigma sigma = beta[t] ** 0.5 # sample x_{t-1} xt = mu + sigma * random.normal(0, 1, (3,H,W)) # return x_0 return xt
  7. # Initialization xt = random.normal(0, 1, (3,H,W)) # Reverse diffusion

    process for t in range(T, 0, -1): # estimate mean mu = estimate_mean(model, xt, t) # use fixed sigma sigma = beta[t] ** 0.5 # sample x_{t-1} xt = mu + sigma * random.normal(0, 1, (3,H,W)) # return x_0 return xt
  8. • 𝑝𝜃 (𝑥) 𝑝data (𝑥) • 𝜃∗ = arg min

    𝜃 𝐷𝐾𝐿 (𝑝data (𝑥)||𝑝𝜃 (𝑥)) = arg min 𝜃 𝔼𝑝data(𝑥) log𝑝data (𝑥) − 𝔼𝑝data(𝑥) log 𝑝𝜃 (𝑥) = arg min 𝜃 𝔼𝑝data(𝑥) − log 𝑝𝜃 (𝑥)
  9. • − log 𝑝𝜃 𝑥0 = − log න 𝑝𝜃

    𝑥0:𝑇 d𝑥1:𝑇 = − log න 𝑞(𝑥1:𝑇 |𝑥0 ) 𝑝𝜃 𝑥0:𝑇 𝑞(𝑥1:𝑇 |𝑥0 ) d𝑥1:𝑇 ≤ − න 𝑞 𝑥1:𝑇 𝑥0 log 𝑝𝜃 𝑥0:𝑇 𝑞 𝑥1:𝑇 𝑥0 d𝑥1:𝑇 = 𝔼𝑞(𝑥1:𝑇|𝑥0) log 𝑞 𝑥1:𝑇 𝑥0 𝑝𝜃 𝑥0:𝑇 log𝔼𝑞 [𝑉] ≥ 𝔼𝑞 [log𝑉] 𝑥0 𝑥0:𝑇 𝑥0 𝑥1:𝑇
  10. • 𝑞 𝑥1:𝑇 𝑥0 = ෑ 𝑡=1 𝑇 𝑞 𝑥𝑡

    𝑥𝑡−1 = 𝐷KL 𝑞 𝑥𝑇 𝑥0 ԡ𝑝𝜃 𝑥𝑇 − 𝔼𝑞(𝑥1|𝑥0) log 𝑝𝜃 (𝑥0 |𝑥1 ) + ෍ 𝑡=2 𝑇 𝔼𝑞(𝑥𝑡|𝑥0) 𝐷KL (𝑞(𝑥𝑡−1 |𝑥𝑡 ,𝑥0 )ԡ𝑝𝜃 (𝑥𝑡−1 |𝑥𝑡 )) 𝑁(𝑥𝑡−1 ; 𝜇𝜃 (𝑥𝑡 ,𝑡),𝜎𝑡 2𝑰) 𝑁(𝑥𝑡−1 ; ෤ 𝜇𝑡 (𝑥𝑡 ,𝑥0 ), ෨ 𝛽𝑡 𝑰) 𝑥𝑡 𝑥0 𝑥𝑡−1
  11. • 𝑞 𝑥1:𝑇 𝑥0 = ෑ 𝑡=1 𝑇 𝑞 𝑥𝑡

    𝑥𝑡−1 = 𝐷KL 𝑞 𝑥𝑇 𝑥0 ԡ𝑝𝜃 𝑥𝑇 − 𝔼𝑞(𝑥1|𝑥0) log 𝑝𝜃 (𝑥0 |𝑥1 ) + ෍ 𝑡=2 𝑇 𝔼𝑞(𝑥𝑡|𝑥0) 1 2𝜎𝑡 2 ෤ 𝜇𝑡 𝑥𝑡 ,𝑥0 − 𝜇𝜃 (𝑥𝑡 , 𝑡) 2 + const. 𝑥𝑡 ෤ 𝜇𝑡
  12. • ෤ 𝜇𝑡 𝑥𝑡 ,𝑥0 = 𝑐0 𝑥0 + 𝑐1

    𝑥𝑡 = 𝑐0 ത 𝛼𝑡 + 𝑐1 𝑥𝑡 − 𝑐0 1 − ത 𝛼𝑡 ത 𝛼𝑡 𝜖 𝑐0 = 𝛽𝑡 1 − 𝛽𝑡−1 1 − ത 𝛼𝑡 , 𝑐1 = 1 − 𝛽𝑡 (1 − ത 𝛼𝑡−1 ) 1 − ത 𝛼𝑡 𝑥𝑡 = ത 𝛼𝑡 𝑥0 + 1 − ത 𝛼𝑡 𝜖 𝑥𝑡 ෤ 𝜇𝑡 𝑥𝑡 𝑥0 𝑥𝑡 𝜖
  13. • 𝑞 𝑥1:𝑇 𝑥0 = ෑ 𝑡=1 𝑇 𝑞 𝑥𝑡

    𝑥𝑡−1 = 𝐷KL 𝑞 𝑥𝑇 𝑥0 ԡ𝑝𝜃 𝑥𝑇 − 𝔼𝑞(𝑥1|𝑥0) log 𝑝𝜃 (𝑥0 |𝑥1 ) + ෍ 𝑡=2 𝑇 𝔼𝑞(𝑥𝑡|𝑥0) 1 2𝜎𝑡 2 ෤ 𝜇𝑡 𝑥𝑡 ,𝑥0 − 𝜇𝜃 (𝑥𝑡 , 𝑡) 2 + const. 𝜖
  14. • 𝜖 • • = 𝔼𝑡,𝜖 𝜖 − 𝜖𝜃 (

    ത 𝛼𝑡 𝑥0 + 1 − ത 𝛼𝑡 𝜖, 𝑡) 2
  15. • • • • 𝛽𝑡 • 𝛽1 = 10−4, 𝛽𝑇

    = 0.02 • 𝜎𝑡 • 𝜎𝑡 2 = 𝛽𝑡 •
  16. • • • • • • • • • •

    • • • • • • • • • • • • • • • • • • • • • • • • • • •
  17. # Initialization xt = random.normal(0, 1, (3,H,W)) # Reverse diffusion

    process for t in range(T, 0, -1): # estimate mean mu = estimate_mean(model, xt, t) # use fixed sigma sigma = beta[t] ** 0.5 # sample x_{t-1} xt = mu + sigma * random.normal(0, 1, (3,H,W)) # return x_0 return xt
  18. • • • 𝑧1 𝑧𝑇 𝑧0 𝐻 × 𝑊 ×

    3 𝐻 𝑛 × 𝑊 𝑛 × 𝑐
  19. • • 𝜏1 ,… , 𝜏𝑆 (𝜏𝑖 ∈ [1,𝑇]) 𝛽

    𝛽𝜏𝑖 = 1 − ෑ 𝑗=𝜏𝑖−1+1 𝜏𝑖 1 − 𝛽𝑗 𝜏𝑖−1 𝜏𝑖 𝑥𝑡−1 𝑥𝑡 𝑥𝑡−2 𝑥𝑡−1 𝑥𝑡 𝑥𝑡−2 𝜏𝑖
  20. • • 𝑥 𝑡 = 0 𝑡 = 𝑇 𝑥0

    𝑥𝑇 𝑥𝑇−1 𝑥1 𝑥𝑡+1 = 1 − 𝛽𝑡+1 𝑥𝑡 + 𝛽𝑡+1 𝜖
  21. • 𝑥 𝑡 = 0 𝑡 = 1 𝑥0 𝑥1

    d𝑥 = − 1 2 𝛽 𝑡 𝑥 d𝑡 + 𝛽(𝑡) d𝑤 𝑤
  22. ⇒ ⇒ 𝑁(𝑥𝑡 ; 1 − 𝛽𝑡 𝑥𝑡−1 , 𝛽𝑡

    𝐈) 𝑁(𝑥𝑡−1 ; 𝜇𝜃 (𝑥𝑡 ,𝑡),𝜎𝑡 2𝐈) d𝑥 = − 1 2 𝛽 𝑡 𝑥 d𝑡 + 𝛽(𝑡) d𝑤
  23. ⇒ ⇒ 𝑁(𝑥𝑡 ; 1 − 𝛽𝑡 𝑥𝑡−1 , 𝛽𝑡

    𝐈) 𝑁(𝑥𝑡−1 ; 𝜇𝜃 (𝑥𝑡 ,𝑡),𝜎𝑡 2𝐈) d𝑥 = − 1 2 𝛽 𝑡 𝑥 d𝑡 + 𝛽(𝑡) d𝑤
  24. • 𝑥 𝑡 = 0 𝑡 = 1 𝑥0 𝑥1

    ഥ 𝑤 d𝑥 = −𝛽 𝑡 1 2 𝑥 + ∇𝑥 log 𝑞𝑡 (𝑥) d𝑡 + 𝛽(𝑡) dഥ 𝑤
  25. • • • d𝑥 = −𝛽 𝑡 1 2 𝑥

    + ∇𝑥 log 𝑞𝑡 (𝑥) d𝑡 + 𝛽(𝑡) dഥ 𝑤 𝑥1 ~𝑞1 (𝑥) 𝑠𝜃 𝑥 = − 𝜖𝜃 (𝑥, 𝑡) 1 − ത 𝛼𝑡
  26. ∇𝑥 log 𝑞𝑡 (𝑥) 𝜖𝜃 (𝑥𝑡 ,𝑡) 𝔼𝑞𝑡(𝑥) 1 2

    𝑠𝜃 𝑥 − ∇𝑥 log 𝑞𝑡 𝑥 2 𝔼𝑥0~𝑞0(𝑥) 𝜖~𝑁(0,𝐼) 𝜖𝜃 ( ത 𝛼𝑡 𝑥0 + 1 − ത 𝛼𝑡 𝜖, 𝑡) − 𝜖 2 𝑠𝜃 𝑠𝜃 𝑥 = − 𝜖𝜃 (𝑥,𝑡) 1 − ത 𝛼𝑡
  27. ⇒ ⇒ 𝑁(𝑥𝑡 ; 1 − 𝛽𝑡 𝑥𝑡−1 , 𝛽𝑡

    𝐈) 𝑁(𝑥𝑡−1 ; 𝜇𝜃 (𝑥𝑡 ,𝑡),𝜎𝑡 2𝐈) d𝑥 = − 1 2 𝛽 𝑡 𝑥 d𝑡 + 𝛽(𝑡) d𝑤 d𝑥 = −𝛽 𝑡 1 2 𝑥 − 𝜖𝜃 (𝑥, 𝑡) 1 − ത 𝛼𝑡 d𝑡 + 𝛽(𝑡) dഥ 𝑤
  28. • • d𝑥 = −𝛽 𝑡 1 2 𝑥 +

    ∇𝑥 log 𝑞𝑡 (𝑥) d𝑡 + 𝛽(𝑡) dഥ 𝑤 𝑥1 ~𝑞1 (𝑥) d𝑥 = −𝛽 𝑡 1 2 𝑥 + 1 2 ∇𝑥 log 𝑞𝑡 (𝑥) d𝑡 𝑥1 ~𝑞1 (𝑥) 𝑥1 𝑥0
  29. 𝑥 𝑡 = 0 𝑡 = 1 𝑥 𝑡 =

    0 𝑡 = 1 𝑞0 (𝑥) 𝑞𝑡 (𝑥) 𝑞1 (𝑥) 𝑞0 (𝑥) 𝑞𝑡 (𝑥) 𝑞1 (𝑥)
  30. • ∆𝑡 𝑥 𝑥1 𝑥0 𝑥 𝑡 − ∆𝑡 =

    𝑥𝑡 − ∆𝑡 ቤ d𝑥 d𝑡 𝑥=𝑥𝑡 𝑥 𝑡 = 0 𝑡 = 1 𝑥0 𝑥∆𝑡 𝑥1 𝑥1−∆𝑡 d𝑥 = −𝛽 𝑡 1 2 𝑥 + 1 2 ∇𝑥 log 𝑞𝑡 (𝑥) d𝑡 ∆𝑡 𝑥