見出し画像

HuggingFace Diffusers v0.19.0の新機能

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


前回

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

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

2. SDXL 1.0

寛容な 「CreativeML Open RAIL++-M License」を備えた「SDXL 1.0」(Stable Diffusion XL 1.0) をリリースしました。

from diffusers import DiffusionPipeline
import torch

pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", 
    torch_dtype=torch.float16, 
    variant="fp16", 
    use_safetensors=True
)
pipe.to("cuda")

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(prompt=prompt).images[0]
image

多くの追加機能が提供されています。

・パイプライン
 ・Img2Img
 ・Inpainting
・Torchコンパイルのサポート
・モデルのオフロード
・Denoising Exportsのアンサンブル(E-Diffiアプローチ)

詳しくは、ドキュメントを参照。

3. SDXL 用の新しい学習スクリプト

SDXL 上に構築される学習スクリプトのサポートを追加しました。

DreamBooth with LoRA
ControlNet
InstructPix2Pix

4. SDXL 用の新しいパイプライン

ControlNet および InstructPix2Pix 学習スクリプトにも、それぞれのパイプラインが必要でした。 そこで、次のパイプラインのサポートも追加しました。

・StableDiffusionXLControlNetPipeline
・StableDiffusionXLInstructPix2PixPipeline

ControlNetパイプラインと InstructPix2Pixパイプラインには、興味深いチェックポイントがまだありません。 コミュニティがこのリリースの学習スクリプトを活用して、学習スクリプトの作成に役立てられることを期待しています。

5. AutoPipeline API

のタスクのAuto API をサポートするようになりました。

AutoPipelineForText2Image
AutoPipelineForImage2Image
AutoPipelineForInpainting

使用方法は次のとおりです。

from diffusers import AutoPipelineForTextToImage
import torch

pipe_t2i = AutoPipelineForText2Image.from_pretrained(
    "runwayml/stable-diffusion-v1-5", requires_safety_checker=False, torch_dtype=torch.float16
).to("cuda")

prompt = "photo a majestic sunrise in the mountains, best quality, 4k"
image = pipe_t2i(prompt).images[0]
image.save("image.png")

追加のメモリがなくても、Image-to-Image に切り替えることができます。

from diffusers import AutoPipelineForImageToImage

pipe_i2i = AutoPipelineForImageToImage.from_pipe(pipe_t2i)

image = pipe_t2i("sunrise in snowy mountains", image=image, strength=0.75).images[0]
image.save("image.png")

サポートされるパイプラインは、SDv1、SDv2、SDXL、Kandinksy、ControlNet、IF です。さらに追加される予定です。

詳細しくは、ドキュメントを参照。

6. Kandinskyシリーズの新しいcombineパイプライン

Kandinsky prior と decoder を一緒に使いやすくするために、Kandinskyシリーズに新しい combineパイプライン を導入しました。 これにより、Kandinsky が画像を生成するために複数のパイプラインを初期化して使用する必要がなくなります。 

from diffusers import AutoPipelineForTextToImage
import torch

pipe = AutoPipelineForTextToImage.from_pretrained(
    "kandinsky-community/kandinsky-2-2-decoder", torch_dtype=torch.float16
)
pipe.enable_model_cpu_offload()

prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt=prompt, num_inference_steps=25).images[0] 
image.save("image.png")

Autoパイプライン経由で利用できる、次のパイプラインが追加されました。

KandinskyCombinedPipeline
KandinskyImg2ImgCombinedPipeline
KandinskyInpaintCombinedPipeline
KandinskyV22CombinedPipeline
KandinskyV22Img2ImgCombinedPipeline
KandinskyV22InpaintCombinedPipeline

詳細については、「Kandinsky」と「Kandinsky 2.2」を参照。

7. Kandinsky Mask Inpaintingの重大な変更

Kandinskyは間違ったマスク形式を使用していました。 (SD や IF のように) 白いピクセルをマスクとして使用する代わりに、Kandinskyモデルは黒いピクセルを使用していました。これを修正してdiffusers API を調整する必要があります。 パイプラインごとに異なるマスク形式を使用することはできません。

これは、Kandinsky Inpaint をすでに使用しているすべてのユーザーが、マスクを次のように変更する必要があることを意味します。

# For PIL input
import PIL.ImageOps
mask = PIL.ImageOps.invert(mask)

# For PyTorch and Numpy input
mask = 1 - mask

8. Asymmetric VQGAN

「Stable Diffusion」のためのより良い「Asymmetric VQGAN」の設計では、Inpaintingタスクに特に適したVQGANを導入しました。
使用方法は次のとおりです。

from io import BytesIO
from PIL import Image
import requests
from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline

def download_image(url: str) -> Image.Image:
    response = requests.get(url)
    return Image.open(BytesIO(response.content)).convert("RGB")

prompt = "a photo of a person"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"

image = download_image(img_url).resize((256, 256))
mask_image = download_image(mask_url).resize((256, 256))

pipe = StableDiffusionInpaintPipeline.from_pretrained("runwayml/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda")

image = pipe(prompt=prompt, image=image, mask_image=mask_image).images[0]
image.save("image.jpeg")

詳細しくは、ドキュメントを参照。

9. Kohya-styleチェックポイントの読み込みサポートの改善

Kohyaで学習されたチェックポイントをdiffusersにロードするための既存のサポートを改善しました。

次回




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