HuggingFace Diffusers v0.4.0の新機能
「Diffusers v0.4.0」の新機能についてまとめました。
前回
1. Diffusers v0.4.0 のリリースノート
情報元となる「Diffusers 0.4.0」のリリースノートは、以下で参照できます。
2022年10月9日現在、若干の不具合対応したv0.4.1がリリースされています。
2. 速度が3倍に向上
速度をほぼ 3倍に向上できるようになりました。さらに、デフォルトで float16 形式を使用するようになりました。float32よりも高速で、同等品質の画像が生成されます。
3. ネガティブプロンプト
Stable Diffusionパイプラインは、ポジティブプロンプトとネガティブプロンプトの両方を受け取ることができるようになりました。
バラの花束を生成すると多くの場合赤くなります。
images = pipe("bouquet of roses", guidance_scale=7.5).images
ネガティブプロンプトにredを指定することで、赤以外のバラを生成できます。
images = pipe("bouquet of roses", negative_prompt="red", guidance_scale=7.5).images
4. 新スケジューラAPI
スケジューラは、共通のシンプルな統合APIを使用するようになりました。
Stable Diffusionパイプラインを以下のように更新してください。
- if isinstance(self.scheduler, LMSDiscreteScheduler):
- latents = latents * self.scheduler.sigmas[0]
+ latents = latents * self.scheduler.init_noise_sigma
- if isinstance(self.scheduler, LMSDiscreteScheduler):
- sigma = self.scheduler.sigmas[i]
- latent_model_input = latent_model_input / ((sigma**2 + 1) ** 0.5)
+ latent_model_input = self.scheduler.scale_model_input(latent_model_input, t)
- if isinstance(self.scheduler, LMSDiscreteScheduler):
- latents = self.scheduler.step(noise_pred, i, latents, **extra_step_kwargs).prev_sample
- else:
- latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs).prev_sample
+ latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs).prev_sample
5. ログイン時にuse_auth_tokenは不要
HuggingFaceにログインしている場合、「use_auth_token=True」は不要になりました。
- pipe = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=True)
+ pipe = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
6. Textual Inversion
新しい概念やスタイルをすばやく学習し、Stable Diffusionの語彙に組み込むことができます。何百人もの人々がすでに作成しており、それらを共有して組み合わせることができます。
詳しくは、学習用のColabノートブックを参照してください。
7. DreamBooth
Textual Inversionと同様の目的ですが、語彙に新しい項目を作成する代わりに、モデルをファインチューニングして新しい概念を学習させます。
詳しくは、学習用のColabノートブックを参照してください。
8. 【実験的】 カスタムパイプライン
カスタムパイプラインを作成して、他のユーザーと共有できるようになりました。HuggingFace Hub、GitHub、またはローカルファイルシステムに保存した独自のパイプラインを、StableDiffusionPipeline.from_pretrained()で読み込んで実行することができます。
詳しくは、ドキュメントを参照してください。
次回
この記事が気に入ったらサポートをしてみませんか?