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

Lets Finetune Stable Diffusion

Avatar for payanotty payanotty
April 06, 2023

Lets Finetune Stable Diffusion

Avatar for payanotty

payanotty

April 06, 2023
Tweet

More Decks by payanotty

Other Decks in Technology

Transcript

  1. 自己紹介
 • 名前
 ◦ 早野 康太
 • お仕事
 ◦ 自然言語モデルの改善


    • 春アニメおすすめ
 ◦ 僕ヤバ
 ◦ 水星の魔女 第2期
 • 映画
 ◦ BLUE GIANT
 → 神でした
 (原作一気買い)

  2. Stable Diffusionとは
 • モデルを誰でも利用できるため
 Stable Diffusionを使ったサービスや派生モデルの公開など
 さかんに行われている
 ◦ 画像生成bot
 ▪

    Line, Discordなど
 ◦ 派生モデル
 ▪ NovelAI Diffusion
 ▪ Waifu Diffusion
 ▪ ほか、Huggingfaceで検索したら無限に出てくる
 • Models - Hugging Face 
 

  3. アジェンダ
 • データセットの作成
 ◦ 画像の収集
 ◦ キャプション付け
 ▪ BLIPを利用して自動でキャプションをつけよう
 •

    学習
 ◦ Stable Diffusionの学習のやり方
 ◦ 学習コードの解説
 • 推論
 ◦ 作ったモデルで画像を生成してみる

  4. データセットの作成
 • 画像収集
 ◦ Safebooru (画像投稿サイト) のAPIを利用して収集
 ▪ “umamusume”タグで絞り込んで15,000枚
 •

    キャプション付け
 ◦ BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
 ▪ 2022年1月に論文で発表されたモデル
 ▪ 画像を入力として
 その画像に即したキャプションを出力できる

  5. データセットの作成
 image file
 caption
 path/to/image1.png 
 a group of cartoon

    animals sitting next to ...
 path/to/image2.png 
 an anime girl with long hair and a bow in her ...
 path/to/image3.png 
 a couple of anime girls laying on top of a bed
 csv
 画像ファイル

  6. Stable Diffusionの学習
 VAE
 VAE
 Denoising Autoencoder (UNET) Text Encoder input

    text 出典:ぼっち・ざ・ろっく! CloverWorks、アニプレックス、芳文社、 ©はまじあき/芳文社・アニプレックス
  7. Stable Diffusionの学習
 VAE
 VAE
 Denoising Autoencoder (UNET) Text Encoder input

    text 今回はここだけ
 学習する
 出典:ぼっち・ざ・ろっく! CloverWorks、アニプレックス、芳文社、 ©はまじあき/芳文社・アニプレックス
  8. Stable Diffusionの学習
 
 
 x 0 x 1 = x

    0 + ε 1 x 2 = x 1 + ε 2 x 3 = x 2 + ε 3 z 1 = x 0 - ε θ (z 0 , 0) z 2 = z 1 - ε θ (z 1 , 1) z 3 = z 2 - ε θ (z 2 , 2) 出典:ぼっち・ざ・ろっく! CloverWorks、アニプレックス、芳文社、 ©はまじあき/芳文社・アニプレックス z 0
  9. Stable Diffusionの学習
 
 
 x 0 x 1 = x

    0 + ε 1 x 2 = x 1 + ε 2 x 3 = x 2 + ε 3 z 1 = x 0 - ε θ (z 0 , 0) z 2 = z 1 - ε θ (z 1 , 1) z 3 = z 2 - ε θ (z 2 , 2) 出典:ぼっち・ざ・ろっく! CloverWorks、アニプレックス、芳文社、 ©はまじあき/芳文社・アニプレックス z 0 各タイムステップにおいて 
 付加したノイズをターゲットとして 
 ロスを計算する

  10. Stable Diffusionの学習
 
 
 raw pixel value
 VAE
 latent
 noisy

    latent
 + noise
 input text
 Text
 Encoder
 embedding 
 UNET
 prediction
 loss
 velocity

  11. Stable Diffusionの学習
 
 
 raw pixel value
 VAE
 latent
 noisy

    latent
 + noise
 input text
 Text
 Encoder
 embedding 
 UNET
 prediction
 loss
 velocity
 前処理

  12. 余談: velocityってなんぞ?
 
 x : 画像の値 
 ε : ノイズの値

    
 z = αx + σε • Stable Diffusion 1.0
 ◦ εがターゲット
 • Stable Diffusion 2.0
 ◦ vがターゲット
 
 ※理屈がわかっていないため深入りしません 
 
 α, σ : ノイズ付与のハイパラ
 (タイムステップごとに変動) 
 v = dz / dφ Progressive Distillation for Fast Sampling of Diffusion Models
  13. 学習してみた結果
 
 • 作りたかったモデル
 ◦ ウマ娘風の絵柄でイラストを生成するAI
 (3期も始まるので備えたい)
 
 • データセット


    ◦ 画像
 ▪ Safebooru APIを使い”umamusume”タグで
 収集した画像(10,000 - 15,000枚)
 ◦ キャプション
 ▪ 収集した画像をもとにBLIPで生成
 • モデル
 ◦ backbone
 ▪ stabilityai/stable-diffusion-2

  14. UMA Diffusion
 
 • プロンプト
 ◦ “a girl in a

    maid outfit holding a teapot”
 • 画像数: 10,000
 • ハイパラ
 ◦ epochs: 30
 ◦ batch_size: 4
 ◦ lr: 5e-6
 ◦ lr_scheduler: cosine
 ◦ warmup_ratio: 0.06
 ◦ resolution: 512x512
 ◦ transforms
 ▪ RandomCrop
 

  15. UMA Diffusion
 
 • プロンプト
 ◦ “a girl in a

    maid outfit holding a teapot”
 • 画像数: 15,000
 • ハイパラ
 ◦ epochs: 30
 ◦ batch_size: 4
 ◦ lr: 5e-6
 ◦ lr_scheduler: cosine
 ◦ warmup_ratio: 0.06
 ◦ resolution: 512x512
 ◦ transforms
 ▪ RandomCrop
 

  16. UMA Diffusion
 
 • プロンプト
 ◦ “a girl in a

    maid outfit holding a teapot”
 • 画像数: 10,000
 • ハイパラ
 ◦ epochs: 30
 ◦ batch_size: 4
 ◦ lr: 5e-6
 ◦ lr_scheduler: cosine
 ◦ warmup_ratio: 0.06
 ◦ resolution: 512x384
 ◦ transforms
 ▪ RandomCrop
 

  17. UMA Diffusion
 
 • プロンプト
 ◦ “a girl in a

    maid outfit holding a teapot”
 • 画像数: 15,000
 • ハイパラ
 ◦ epochs: 30
 ◦ batch_size: 4
 ◦ lr: 5e-6
 ◦ lr_scheduler: cosine
 ◦ warmup_ratio: 0.06
 ◦ resolution: 512x384
 ◦ transforms
 ▪ RandomCrop
 

  18. finetune方法発展
 • 今回はシンプルなfinetuneを紹介したが
 さまざまなfinetune手法が提案されている 
 ◦ Text Inversion
 ▪ An

    Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion
 ◦ DreamBooth
 ▪ DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 
 ◦ Hypernetworks
 ▪ NovelAI Improvements on Stable Diffusion
 ◦ LoRA
 ▪ GitHub - cloneofsimo/lora: Using Low-rank adaptation to quickly fine-tune diffusion models.

  19. やってみた所感
 • DNNの学習を触ったことがあるなら
 学習コードを回すこと自体は全然難しくない
 ◦ 計算資源の確保が大変 (GPUメモリ16GB以上推奨)
 
 • 10,000枚程度の画像でもある程度のクオリティの


    モデルを学習できた
 ◦ とはいえ安定したクオリティの出力は難しい
 ◦ 特に手の作画は崩れてしまう
 
 
 • よりクオリティを追求しようとするなら
 発展的な手法を使ったfinetuneを試したいところ (いずれ挑戦したい)