![見出し画像](https://assets.st-note.com/production/uploads/images/113625271/rectangle_large_type_2_0845a9e8831c80ed3ea052ee031208ae.png?width=1200)
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
![](https://assets.st-note.com/img/1690497029645-2ixqGQhzl7.png?width=1200)
多くの追加機能が提供されています。
・パイプライン
・Img2Img
・Inpainting
・Torchコンパイルのサポート
・モデルのオフロード
・Denoising Exportsのアンサンブル(E-Diffiアプローチ)
詳しくは、ドキュメントを参照。
3. SDXL 用の新しい学習スクリプト
SDXL 上に構築される学習スクリプトのサポートを追加しました。
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にロードするための既存のサポートを改善しました。
次回
この記事が気に入ったらサポートをしてみませんか?