見出し画像

HuggingFace Diffusers v0.14.0の新機能

「Diffusers v0.14.0」の新機能についてまとめました。

前回

1. Diffusers v0.14.0 のリリースノート

情報元となる「Diffusers 0.14.0」のリリースノートは、以下で参照できます。

2. ControlNet

「ControlNet」 を完全にサポートしました。論文の8つのコントロールモデル (depth、scribbles、edgesなど) すべて利用できます。他の実装の利点と最適化を利用することで、ControlNetの超高速実装になります。

「ControlNet」は、元の「Stable Diffusion」モデルの一部のレイヤーのコピーを、深度マップなどの追加信号で学習することで機能します。学習後、達成したい構成の強力なヒントとして深度マップを提供し、「Stable Diffusion」で詳細を埋めることができます。 

現在、8つの公開されたコントロールモデルがあり、そのすべてが「runwayml/stable-diffusion-v1-5」で学習されています。

以下は、「depth」を使用する例です。

以下は、「scribbles」を使用する例です。

二次元絵を一貫性のあるリアルな写真に変換することもできます。

使用例は、次のとおりです。

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
import torch

# コントロールネットの準備
controlnet = ControlNetModel.from_pretrained(
    "lllyasviel/sd-controlnet-canny", 
    torch_dtype=torch.float16
)

# パイプラインの準備
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", 
    controlnet=controlnet, 
    torch_dtype=torch.float16
)

3. 超高解像度生成のためのVAEタイリング


「VAEタイリング」は、メモリを消費せずに超高解像度の画像を生成できます。プロセスの画像デコード段階でタイリングアプローチに従い、一度に画像の一部を生成してから、それらをすべてつなぎ合わせます。

使用例は、次のとおりです。

pipe.vae.enable_tiling()

これだけです。完全なコードは、次のとおりです。

import torch
from diffusers import StableDiffusionPipeline

# パイプラインの準備
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", 
    revision="fp16", 
    torch_dtype=torch.float16, 
    use_auth_token=True
)
pipe = pipe.to("cuda")
pipe.enable_xformers_memory_efficient_attention()
pipe.vae.enable_tiling()

# 推論の実行
prompt = "a beautiful landscape photo"
image = pipe(
    prompt, 
    width=4096, 
    height=2048, 
    num_inference_steps=10
).images[0]
image.save("4k_landscape.jpg")

次回



この記事が気に入ったらサポートをしてみませんか?