HuggingFace Diffusers v0.30.0の新機能
「Diffusers v0.30.0」の新機能についてまとめました。
前回
1. Diffusers v0.30.0 のリリースノート
情報元となる「Diffusers 0.30.0」のリリースノートは、以下で参照できます。
2. 新パイプライン
2-1. オーディオパイプライン
2-2. ビデオパイプライン
2-3. 画像パイプライン
これらのパイプラインについて詳しく知るには、それぞれのドキュメントを参照してください。
3. PAG (Perturbed Attention Guidance)
「PAG」のコミュニティ パイプラインはすでにありましたが、その有用性を考慮して、ライブラリの第一級メンバーにすることにしました。ここに「PAG」の中心的な使用ガイドがあります。
現在、「PAG」では次のパイプラインをサポートしています。
4. SparseCtrl を使用した AnimateDiff
「SparseCtrl」は、ControlNet にヒントを得た追加の条件エンコーダを組み込むことで、線/エッジスケッチ、深度マップ、RGB 画像などの信号を活用したText-to-Videoのdiffusionモデルに制御方法を導入し、これらの信号を AnimateDiffフレームワークで処理します。補間やビデオ予測 (アニメーション用の画像シーケンス間のギャップを埋める)、パーソナライズされた画像アニメーション、Sketch-to-Video、Depth-to-Videoなど、さまざまなアプリケーションに適用できます。これは、「SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models」で導入されました。
著者によって提供されている「SparseCtrl」固有のチェックポイント2つと 「Motion LoRA」1つがあります。
・Scribble Interpolationの例
import torch
from diffusers import AnimateDiffSparseControlNetPipeline, AutoencoderKL, MotionAdapter, SparseControlNetModel
from diffusers.schedulers import DPMSolverMultistepScheduler
from diffusers.utils import export_to_gif, load_image
motion_adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5-3", torch_dtype=torch.float16).to(device)
controlnet = SparseControlNetModel.from_pretrained("guoyww/animatediff-sparsectrl-scribble", torch_dtype=torch.float16).to(device)
vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-mse", torch_dtype=torch.float16).to(device)
pipe = AnimateDiffSparseControlNetPipeline.from_pretrained(
"SG161222/Realistic_Vision_V5.1_noVAE",
motion_adapter=motion_adapter,
controlnet=controlnet,
vae=vae,
scheduler=scheduler,
torch_dtype=torch.float16,
).to(device)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config, beta_schedule="linear", algorithm_type="dpmsolver++", use_karras_sigmas=True)
pipe.load_lora_weights("guoyww/animatediff-motion-lora-v1-5-3", adapter_name="motion_lora")
pipe.fuse_lora(lora_scale=1.0)
prompt = "an aerial view of a cyberpunk city, night time, neon lights, masterpiece, high quality"
negative_prompt = "low quality, worst quality, letterboxed"
image_files = [
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-1.png",
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-2.png",
"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/animatediff-scribble-3.png"
]
condition_frame_indices = [0, 8, 15]
conditioning_frames = [load_image(img_file) for img_file in image_files]
video = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_inference_steps=25,
conditioning_frames=conditioning_frames,
controlnet_conditioning_scale=1.0,
controlnet_frame_indices=condition_frame_indices,
generator=torch.Generator().manual_seed(1337),
).frames[0]
export_to_gif(video, "output.gif")
詳しくはドキュメントを参照。
5. AnimateDiff 用 FreeNoise
「FreeNoise」は、学習不要の方法で、事前学習済みのビデオ拡散モデルの生成機能を既存のコンテキスト/フレーム制限を超えて拡張できます。
「FreeNoise」は、すべてのフレームのノイズを初期化する代わりに、長距離相関のためにノイズのシーケンスを再スケジュールし、ウィンドウベースの関数を使用してそれらに対して時間的注意を実行します。DiffusersのAnimateDiffモデル ファミリに「FreeNoise」を追加し、デフォルトの32フレーム制限を超えてビデオを生成できるようにしました。
import torch
from diffusers import AnimateDiffPipeline, MotionAdapter, EulerAncestralDiscreteScheduler
from diffusers.utils import export_to_gif
adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5-2", torch_dtype=torch.float16)
pipe = AnimateDiffPipeline.from_pretrained("SG161222/Realistic_Vision_V6.0_B1_noVAE", motion_adapter=adapter, torch_dtype=torch.float16)
pipe.scheduler = EulerAncestralDiscreteScheduler(
beta_schedule="linear",
beta_start=0.00085,
beta_end=0.012,
)
pipe.enable_free_noise()
pipe.vae.enable_slicing()
pipe.enable_model_cpu_offload()
frames = pipe(
"An astronaut riding a horse on Mars.",
num_frames=64,
num_inference_steps=20,
guidance_scale=7.0,
decode_chunk_size=2,
).frames[0]
export_to_gif(frames, "freenoise-64.gif")
6. LoRA のリファクタリング
LoRAに関連するローダークラスを大幅にリファクタリングしました。今後、これは新パイプラインとモデルにLoRAサポートを追加する上で役立ちます。現在、StableDiffusionXLLoraLoaderMixin などのさまざまなパイプラインレベルのLoRAローディングクラスによってサブクラス化される LoraBaseMixin クラスがあります。このドキュメントでは、使用可能なクラスの概要を示します。
さらに、PeftAdapterMixinクラス内のメソッドの範囲を拡大しました。このリファクタリングにより、サポートされているすべてのモデルで、set_adapter()、add_adapter() などの共通のLoRA機能を共有できます。
詳しくは、このPRに従ってください。これらのリファクタリングに起因する LoRA 関連の問題を見つけた場合は、問題を報告してください。
7. attention projection fusion の修正
fuse_qkv_projections() の実装が壊れていることが分かりました。このPRで修正されました。さらにこのPRにより、「AuraFlow」と「PixArt Sigma」への融合サポートが追加されました。この種の融合が役立つ可能性がある場所についての根拠は、こちらを参照してください。
この記事が気に入ったらサポートをしてみませんか?