HuggingFace Diffusers 0.2 : 概要 (テキストから画像への拡散モデル) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/24/2022 (v0.2.4)
* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
HuggingFace Diffusers 0.2 : 概要 (テキストから画像への拡散モデル)
より正確には、
- 最先端の拡散 (= diffusion) パイプライン、これは数行のコードだけで推論を実行できます (src/diffusers/pipeline 参照)。
- 様々なノイズスケジューラ、これは推論において望ましいスピード vs. 品質のトレードオフのために交換可能に使用できます (src/diffusers/schedulers 参照)。
- UNet のような複数のタイプのモデルは end-to-end な拡散システムのビルディングブロックとして利用できます (src/diffusers/models 参照) 。
- 最もポピュラーな拡散モデルを訓練する方法を示す訓練サンプル (examples 参照)。
クイックスタート
始めるために、2 つのノートブックを見ることを勧めます :
- Getting started with Diffusers ノートブック、これは拡散モデル, スケジューラとパイプラインの使用方法の end-to-end サンプルを紹介します。貴方のために総て (モデル, スケジューラ, ノイズ処理) を処理するパイプライン抽象化の使用方法を学習し、ライブラリの個々の独立したビルディングブロックも理解するためにこのノートブックを見てください。
- Training a diffusers model ノートブックは diffuser モデルの訓練方法をまとめています。このノートブックは画像データセットで貴方の diffuser モデルを訓練するために、説明のためのグラフィクスとともに step-by-step のアプローチを取ります。
新しい 🎨 🎨 🎨 Stable Diffusion は diffusers と完全互換になりました!
Stable Diffusion は CompVis, Stability AI と LAION の研究者と技術者により作成されたテキスト-to-画像の潜在拡散モデルです。それは LAION-5B データベースのサブセットの 512×512 画像で訓練されています。このモデルはモデルをテキスト・プロンプト上で条件付けるために凍結された CLIP ViT-L/14 テキストエンコーダを使用します。860M UNet と 123M テキストエンコーダを持つ、このモデルは比較的軽量で少なくとも 10GB VRAM を持つ GPU 上で動作します。詳細は モデルカード を見てください。
Stable Diffusion 重みをダウンロードまたは使用する前に、モデルライセンスを認める必要があります。モデルカード にアクセスし、ライセンスを読んで、同意するならばチェックボックスをチェックしてください。貴方は
# make sure you're logged in with `huggingface-cli login`
from torch import autocast
from diffusers import StableDiffusionPipeline, LMSDiscreteScheduler
lms = LMSDiscreteScheduler(
beta_start=0.00085,
beta_end=0.012,
beta_schedule="scaled_linear"
)
pipe = StableDiffusionPipeline.from_pretrained(
"CompVis/stable-diffusion-v1-3",
scheduler=lms,
use_auth_token=True
) .to("cuda")
prompt = "a photo of an astronaut riding a horse on mars"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]
image.save("astronaut_rides_horse.png")
詳細は、Stable Diffusion ノートブック を確認して リリースノート を調べてください。
Examples
# !pip install diffusers transformers
from diffusers import DiffusionPipeline
model_id = "CompVis/ldm-text2im-large-256"
# load model and scheduler
ldm = DiffusionPipeline.from_pretrained(model_id)
# run pipeline in inference (sample random noise and denoise)
prompt = "A painting of a squirrel eating a burger"
images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6)["sample"]
# save images
for idx, image in enumerate(images):
image.save(f"squirrel-{idx}.png")
# !pip install diffusers
from diffusers import DDPMPipeline, DDIMPipeline, PNDMPipeline
model_id = "google/ddpm-celebahq-256"
# load model and scheduler
ddpm = DDPMPipeline.from_pretrained(model_id) # you can replace DDPMPipeline with DDIMPipeline or PNDMPipeline for faster inference
# run pipeline in inference (sample random noise and denoise)
image = ddpm()["sample"]
# save image
image[0].save("ddpm_generated_image.png")
幾つかの web デモで遊びたいだけなら、以下の
- モデル : Text-to-Image Latent Diffusion
- Hugging Face Spaces
- モデル : Faces generator
- Hugging Face Spaces
- モデル : DDPM with different schedulers
- Hugging Face Spaces
定義
モデル : $p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)$ (下図参照) をモデル化し、画像へのノイズのある入力をノイズ除去するために end-to-end で訓練されたニューラルネットワークです。
例: UNet, 条件付き UNet, 3D UNet, Transformer UNet
スケジューラ : 推論と訓練の両者のためのアルゴリズム・クラス。このクラスはアルファ、ベータスケジュールに従って前の画像を計算し、訓練のためにノイズを予測する機能を提供します。
例: DDPM, DDIM, PNDM, DEIS
拡散パイプライン : 複数の拡散モデル, 可能なテキストエンコーダ 等々を含む end-to-end パイプライン。
Examples: Glide, Latent-Diffusion, Imagen, DALL-E 2
哲学
- 高度に最適化されたコードよりも可読性と明瞭性を選択します。読みやすく、直感的で初歩的なコード設計に強い重点が置かれます。例えば、提供される スケジューラ は、提供される モデル から分離されて、元の論文と並行して読むことができる良くコメントされたコードを提供します。
- Diffusers は モダリティ独立 で、ビジョンと音声のような 連続的な出力 を生成するシステムを構築する事前訓練済みモデルとツールを提供することにフォーカスしています。
- 拡散モデルとスケジューラは簡潔で、初歩的なビルディングブロックとして提供されます。対称的に、拡散パイプラインは end-to-end 拡散システムのコレクションで、そのまますぐに利用できて、オリジナル実装にできる限り近くあるべきで、そしてテキストエンコーダのような、他のライブラリのコンポーネントを含むことができます。拡散パイプラインのサンプルは Glide と Latent Diffusion です。
インストール
With pip
pip install --upgrade diffusers # should install diffusers 0.2.1
With conda
conda install -c conda-forge diffusers
進行中
最初のリリースについては、
- Diffusers for 音声
- Diffusers for 強化学習 (initial work happening in #105).
- Diffusers for 動画生成
- Diffusers for 分子生成 (initial work happening in #54)
幾つかのパイプライン・コンポーネントは既に取り組まれています、つまり :
- BDDMPipeline for spectrogram-to-sound ヴォコーディング
- GLIDEPipeline to support OpenAI の GLIDE モデル
- Grad-TTS for テキストから音声生成 / 条件付き音声生成
diffusers が一般的な拡散モデルのために有用なツールボックスであることを望みます。現在の API で何らかの制限を感じたり、追加のモデル、スケジューラやテクニックを見たい場合には、何を見たいかに言及して GitHub issue をオープンしてください。
Credits
(訳注: 原文 参照)
以上