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

Lets Finetune Stable Diffusion

Lets Finetune Stable Diffusion

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を試したいところ (いずれ挑戦したい)