当サイトにはアフィリエイト広告が含まれます。なおレビューは私の感想を書いており、内容を指示するご依頼はお断りしています

【Stable Diffusion】Sampler(Scheduler)及びtorch_dtypeが画像生成に与える影響調査【Diffusers】

StableDiffusionの世界では、さまざまな手法が試されていますが、画風や品質の違いを明確に把握することは難しいものです。

今回は、AI画像生成技術「StableDiffusion」に関する調査結果をもとに、Samplerの変更やパラメータ設定による画風の違いや生成速度の変化について詳しく解説します。

NoCrypt/SomethingV2でSampler別生成イラスト比較

from diffusers import PNDMScheduler 
pipe = StableDiffusionPipeline.from_pretrained(
      input_model,
      use_auth_token=token,
      torch_dtype=torch.float16,
      scheduler=c_scheduler
).to("cuda")  
  • Sampler: PNDMScheduler(9秒)
  • Sampler: EulerDiscreteScheduler(9秒)
  • Sampler: DDIMScheduler(9秒)
  • Sampler: DPMSolverMultistepScheduler(9秒)
  • Sampler: LMSDiscreteScheduler(9秒)
  • Sampler: EulerDiscreteScheduler(9秒)
Sampler変更による画風の違いはあまりわからないが、LMSDiscreteSchedulerは崩れやすい

torch_dtypeを指定しないVer

from diffusers import PNDMScheduler 
pipe = StableDiffusionPipeline.from_pretrained(
      input_model,
      use_auth_token=token,
      #torch_dtype=torch.float16,
      scheduler=c_scheduler
).to("cuda")  
  • Sampler: PNDMScheduler(28秒)
  • Sampler: EulerDiscreteScheduler(28秒)
  • Sampler: DDIMScheduler(28秒)
  • Sampler: DPMSolverMultistepScheduler(28秒)
  • Sampler: LMSDiscreteScheduler(28秒)
  • Sampler: EulerDiscreteScheduler(28秒)
「torch_dtype=torch.float16」にすると、所要時間が66%短縮される。
指定しない場合は30秒、指定した場合は10秒で画像生成される

torch_dtypeを指定有無比較

  • torch_dtype指定あり(高速):上
  • torch_dtype指定なし(低速):下

  • Sampler: PNDMScheduler

  • Sampler: EulerDiscreteScheduler
  • Sampler: DDIMScheduler
  • Sampler: DPMSolverMultistepScheduler
  • Sampler: LMSDiscreteScheduler
  • Sampler: EulerDiscreteScheduler
「torch_dtype=torch.float16」にすると、詳細な書き込みが少なくなる(半精度になる)

・繊細なイラストにしたい場合はtorch_dtypeを指定しない
・デフォルメしたい場合は「torch_dtype=torch.float16」にする
のように使い分けるのが良い

Linaqruf/anything-v3.0で高スケール検証

DDIMScheduler

DPMSolverMultistepScheduler

PNDMScheduler

EulerDiscreteScheduler

EulerAncestralDiscreteScheduler

デフォルトのPNDMSchedulerでは崩れてしまうような高スケール(scale=20)でも、他のサンプラーでは問題なく画像生成が行える

DDIMScheduler

DPMSolverMultistepScheduler

EulerDiscreteScheduler

EulerAncestralDiscreteScheduler

DDIMSchedulerやEulerDiscreteSchedulerは、scale40でも崩れにくい

リアル風モデルでSampler別生成画像の比較

Samplerによって生成画像に大きく差が出るというわけではないが、シード値とプロンプトを固定した状態で差分を作りたい時にはSamplerを変えてみるのも良さそう。表情や光の入り方や服など細かい所が色々変わる