HuggingFace Diffusers 0.12 : リリースノート – Instruct-Pix2Pix, DiT, LoRA (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 02/03/2023 (v0.12.0 – 1/E/2023)
* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace Diffusers 0.12 : リリースノート – Instruct-Pix2Pix, DiT, LoRA
🪄 Instruct-Pix2Pix
Instruct-Pix2Pix は人間の指示から画像を編集するために再調整された Stable Diffusion モデルです。入力画像とモデルが何をするべきかを教える書かれた手順が与えられた場合、モデルはこれらの手順に従って画像を編集します。
The model was released with the paper InstructPix2Pix: Learning to Follow Image Editing Instructions. More information about the model can be found in the paper.
pip install diffusers transformers safetensors accelerate
import PIL
import requests
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline
model_id = "timbrooks/instruct-pix2pix"
pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
url = "https://huggingface.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png"
def download_image(url):
image = PIL.Image.open(requests.get(url, stream=True).raw)
image = PIL.ImageOps.exif_transpose(image)
image = image.convert("RGB")
return image
image = download_image(url)
prompt = "make the mountains snowy"
edit = pipe(prompt, image=image, num_inference_steps=20, image_guidance_scale=1.5, guidance_scale=7).images[0]
images[0].save("snowy_mountains.png")
- Add InstructPix2Pix pipeline by @patil-suraj #2040
🤖 DiT
Diffusion Transformers (DiTs) はクラス条件付き潜在的拡散モデルで、一般に使用される U-Net バックボーンを潜在的パッチ上で作用する transformer で置き換えています。事前訓練済みモデルは ImageNet-1K データセット上で訓練され、256×256 or 512×512 ピクセルのクラス条件付き画像を生成することができます。
The model was released with the paper Scalable Diffusion Models with Transformers.
import torch
from diffusers import DiTPipeline
model_id = "facebook/DiT-XL-2-256"
pipe = DiTPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")
# pick words that exist in ImageNet
words = ["white shark", "umbrella"]
class_ids = pipe.get_label_ids(words)
output = pipe(class_labels=class_ids)
image = output.images[0] # label 'white shark'
⚡ LoRA
LoRA は大規模モデル用のパラメータ効率的な再調整を遂行するためのテクニックです。LoRA はいわゆる “update matrices (更新行列)” を事前訓練済みモデルの特定のブロックに追加することで機能します。再調整の際は、これらの更新行列のみが更新され、事前訓練済みモデルのパラメータは凍結されています。これは再調整時のより素晴らしいメモリ効率性とより簡単な可搬性を実現することを可能にします。
LoRA は LoRA: Low-Rank Adaptation of Large Language Models で提案されました。原論文では、著者らは GPT-3 のような大規模な言語モデルを再調整するために LoRA を研究しました。cloneofsimo はポピュラーな lora GitHub レポジトリの Stable Diffusion のために LoRA 訓練を試した最初のものです。
Diffusers は LoRA をサポートするようになりました!つまり、Tesla T4 or RTX 2080 Ti のようなコンシューマ向け GPU を使用して Stable Diffusion のようなモデルを再調整できるようになりました。LoRA support was added to UNet2DConditionModel and DreamBooth training script by @patrickvonplaten in #1884.
LoRA を使用することで、再調整されたチェックポイントはサイズが 3MB だけになります。再調整後、以下のように LoRA チェックポイントを利用できます :
from diffusers import StableDiffusionPipeline
import torch
model_path = "sayakpaul/sd-model-finetuned-lora-t4"
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16)
pipe.unet.load_attn_procs(model_path)
pipe.to("cuda")
prompt = "A pokemon with blue eyes."
image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5).images[0]
image.save("pokemon.png")
You can follow these resources to know more about how to use LoRA in diffusers:
- text2image fine-tuning script (by @sayakpaul in #2031).
- Official documentation discussing how LoRA is supported (by @sayakpaul in #2086).
📐 カスタマイズ可能なクロスアテンション
LoRA は UNet の深いところにあるクロスアテンション層をカスタマイズする新しい手法を利用しています。これは、Prompt-to-Prompt のような他の創造的なアプローチのためにも有用であり得て、xFormers のように optimizers を適用することを簡単にします。This new “attention processor” abstraction was created by @patrickvonplaten in #1639 after discussing the design with the community, and we have used it to rewrite our xFormers and attention slicing implementations!
🌿 Flax => PyTorch
A long requested feature, prolific community member @camenduru took up the gauntlet in #1900 and created a way to convert Flax model weights for PyTorch.つまり、Google TPUs を使用してモデルを超高速に訓練または再調整できることを意味し、そして重みを誰もが使えるように PyTorch に変換することができます。
🌀 Flax Img2Img
Another community member, @dhruvrnaik, ported the image-to-image pipeline to Flax in #1355! Using a TPU v2-8 (available in Colab’s free tier), you can generate 8 images at once in a few seconds!
🎲 DEIS スケジューラ
DEIS (Diffusion Exponential Integrator サンプラー) は新しい高速なマルチステップ・スケジューラで、より少ないステップで高品質なサンプルを生成できます。このスケジューラは論文 Fast Sampling of Diffusion Models with Exponential Integrator で紹介されました。スケジューラの詳細は論文で見つけられます。
from diffusers import StableDiffusionPipeline, DEISMultistepScheduler
import torch
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16)
pipe.scheduler = DEISMultistepScheduler.from_config(pipe.scheduler.config)
pipe = pipe.to("cuda")
prompt = "a photo of an astronaut riding a horse on mars"
generator = torch.Generator(device="cuda").manual_seed(0)
image = pipe(prompt, generator=generator, num_inference_steps=25).images[0
- feat : add log-rho deis multistep scheduler by @qsh-zh #1432
再現性
CPU generators をすべてのパイプラインに渡すことができるようになりました、パイプラインが GPU 上にある場合でさえも。これは GPU ハードウェアに対して遥かにより良い再現性を保証します。
import torch
from diffusers import DDIMPipeline
import numpy as np
model_id = "google/ddpm-cifar10-32"
# load model and scheduler
ddim = DDIMPipeline.from_pretrained(model_id)
ddim.to("cuda")
# create a generator for reproducibility
generator = torch.manual_seed(0)
# run pipeline for just two steps and return numpy tensor
image = ddim(num_inference_steps=2, output_type="np", generator=generator).images
print(np.abs(image).sum())
See: #1902 and https://huggingface.co/docs/diffusers/using-diffusers/reproducibility
Important New Guides
- Stable Diffusion 101: https://huggingface.co/docs/diffusers/stable_diffusion
- 再現性: https://huggingface.co/docs/diffusers/using-diffusers/reproducibility
- LoRA: https://huggingface.co/docs/diffusers/training/lora
以上