HuggingFace Diffusers 0.2 : 概要 (テキストから画像への拡散モデル)

HuggingFace Diffusers 0.2 : 概要 (テキストから画像への拡散モデル) (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 08/24/2022 (v0.2.4)

* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

HuggingFace Diffusers 0.2 : 概要 (テキストから画像への拡散モデル)

🤗 Diffusers はビジョンや音声 (視覚や聴覚) のような複数のモダリティに対する事前訓練済み拡散モデルを提供し、そして拡散モデルの推論と訓練のためのモジュール型ツールボックスとして機能します。

より正確には、🤗 Diffusers は以下を提供します :

  • 最先端の拡散 (= 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 AILAION の研究者と技術者により作成されたテキスト-to-画像の潜在拡散モデルです。それは LAION-5B データベースのサブセットの 512×512 画像で訓練されています。このモデルはモデルをテキスト・プロンプト上で条件付けるために凍結された CLIP ViT-L/14 テキストエンコーダを使用します。860M UNet と 123M テキストエンコーダを持つ、このモデルは比較的軽量で少なくとも 10GB VRAM を持つ GPU 上で動作します。詳細は モデルカード を見てください。

Stable Diffusion 重みをダウンロードまたは使用する前に、モデルライセンスを認める必要があります。モデルカード にアクセスし、ライセンスを読んで、同意するならばチェックボックスをチェックしてください。貴方は 🤗 Hugging Face ハブで登録ユーザである必要があり、コードを動作させるにはアクセストークンを使用する必要もあります。アクセストークンの詳細は、ドキュメントの このセクション を参照してください。

# 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 デモで遊びたいだけなら、以下の 🚀 Spaces を試すことができます :

 

定義

モデル : $p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)$ (下図参照) をモデル化し、画像へのノイズのある入力をノイズ除去するために end-to-end で訓練されたニューラルネットワークです。
例: UNet, 条件付き UNet, 3D UNet, Transformer UNet


DDPM 論文 ( https://arxiv.org/abs/2006.11239 ) からの図

 
スケジューラ : 推論と訓練の両者のためのアルゴリズム・クラス。このクラスはアルファ、ベータスケジュールに従って前の画像を計算し、訓練のためにノイズを予測する機能を提供します。
例: DDPM, DDIM, PNDM, DEIS


サンプリングと訓練アルゴリズム。DDPM 論文 (https://arxiv.org/abs/2006.11239) からの図

 
拡散パイプライン : 複数の拡散モデル, 可能なテキストエンコーダ 等々を含む end-to-end パイプライン。
Examples: Glide, Latent-Diffusion, Imagen, DALL-E 2


ImageGen (https://imagen.research.google/ からの図)

 

哲学

  • 高度に最適化されたコードよりも可読性と明瞭性を選択します。読みやすく、直感的で初歩的なコード設計に強い重点が置かれます。例えば、提供される スケジューラ は、提供される モデル から分離されて、元の論文と並行して読むことができる良くコメントされたコードを提供します。

  • Diffusers は モダリティ独立 で、ビジョンと音声のような 連続的な出力 を生成するシステムを構築する事前訓練済みモデルとツールを提供することにフォーカスしています。

  • 拡散モデルとスケジューラは簡潔で、初歩的なビルディングブロックとして提供されます。対称的に、拡散パイプラインは end-to-end 拡散システムのコレクションで、そのまますぐに利用できて、オリジナル実装にできる限り近くあるべきで、そしてテキストエンコーダのような、他のライブラリのコンポーネントを含むことができます。拡散パイプラインのサンプルは GlideLatent Diffusion です。

 

インストール

With pip

pip install --upgrade diffusers  # should install diffusers 0.2.1

With conda

conda install -c conda-forge diffusers

 

進行中

最初のリリースについては、🤗 Diffusers はテキストから画像への拡散テクニックにフォーカスしています。けれども、diffusers can be used for much more than that! 今後のリリースでは、以下にフォーカスしていきます :

  • 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

(訳注: 原文 参照)

 

以上