HuggingFace Diffusers 0.12 : パイプライン : Cycle Diffusion

HuggingFace Diffusers 0.12 : API : パイプライン – Cycle Diffusion (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/15/2023 (v0.14.0)

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

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

 

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

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

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

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

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

 

 

HuggingFace Diffusers 0.12 : API : パイプライン – Cycle Diffusion

概要

Cycle Diffusion は Unifying Diffusion Models’ Latent Space, with Applications to CycleDiffusion and Guidance by Chen Henry Wu, Fernando De la Torre で紹介されたテキスト誘導, 画像-to-画像生成モデルです。

論文の要約は以下のようなものです :

拡散モデルは生成モデリングにおいて前例のないパフォーマンスを獲得してきました。拡散モデルの潜在的コードの一般に採用された定式化は、GAN, VAE と正規化フローのより単純な (e.g., ガウシアン) 潜在的空間に対して、徐々にサンプルをノイズ除去するシークエンスです。この論文は様々な拡散モデルの潜在的空間の別のガウシアン定式化と、画像を潜在的空間にマップする可逆な (invertible) DPM エンコーダを提供しています。私たちの定式化が純粋に拡散モデルの定式化に基づく一方で、幾つかの興味深い結果を実演します。
(1) 実験から、関連ドメイン上で独立に訓練された 2 つの拡散モデルから共通の潜在的空間が出現することを観測しました。この発見を踏まえて、私たちは CycleDiffusion を提案します、これはペアでない画像-to-画像変換のために DPM エンコーダを使用します。更に、CycleDiffusion をテキスト-to-画像変換拡散モデルに適用して、大規模スケールなテキスト-to-画像変換拡散モデルがゼロショット画像-to-画像エディタとして使用できることを示します。
(2) エネルギーベース・モデルに基づく統一された, プラグ&プレイな定式化の潜在的コードを制御することにより、事前訓練済み拡散モデルと GAN を誘導できます。ガイダンスとして CLIP モデルと顔認識モデルを使用して、GAN よりも、拡散モデルが低密度の sub-populations や個人個人のより良いカバレージを持つことを実演します。

Tips :

  • Cycle Diffusion パイプラインは任意の Stable Diffusion チェック・ポイントと完全互換です。
  • 現在 Cycle Diffusion は DDIMScheduler でのみ動作します。

 
Example :

以下では CycleDiffusionPipeline のベストな使用方法を示します :

import requests
import torch
from PIL import Image
from io import BytesIO

from diffusers import CycleDiffusionPipeline, DDIMScheduler

# load the pipeline
# make sure you're logged in with `huggingface-cli login`
model_id_or_path = "CompVis/stable-diffusion-v1-4"
scheduler = DDIMScheduler.from_pretrained(model_id_or_path, subfolder="scheduler")
pipe = CycleDiffusionPipeline.from_pretrained(model_id_or_path, scheduler=scheduler).to("cuda")

# let's download an initial image
url = "https://raw.githubusercontent.com/ChenWu98/cycle-diffusion/main/data/dalle2/An%20astronaut%20riding%20a%20horse.png"
response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((512, 512))
init_image.save("horse.png")

# let's specify a prompt
source_prompt = "An astronaut riding a horse"
prompt = "An astronaut riding an elephant"

# call the pipeline
image = pipe(
    prompt=prompt,
    source_prompt=source_prompt,
    image=init_image,
    num_inference_steps=100,
    eta=0.1,
    strength=0.8,
    guidance_scale=2,
    source_guidance_scale=1,
).images[0]

image.save("horse_to_elephant.png")

# let's try another example
# See more samples at the original repo: https://github.com/ChenWu98/cycle-diffusion
url = "https://raw.githubusercontent.com/ChenWu98/cycle-diffusion/main/data/dalle2/A%20black%20colored%20car.png"
response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image = init_image.resize((512, 512))
init_image.save("black.png")

source_prompt = "A black colored car"
prompt = "A blue colored car"

# call the pipeline
torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    source_prompt=source_prompt,
    image=init_image,
    num_inference_steps=100,
    eta=0.1,
    strength=0.85,
    guidance_scale=3,
    source_guidance_scale=1,
).images[0]

image.save("black_to_blue.png")

 

CycleDiffusionPipeline

class CycleDiffusionPipeline(DiffusionPipeline):
    def __init__(
        self,
        vae: AutoencoderKL,
        text_encoder: CLIPTextModel,
        tokenizer: CLIPTokenizer,
        unet: UNet2DConditionModel,
        scheduler: DDIMScheduler,
        safety_checker: StableDiffusionSafetyChecker,
        feature_extractor: CLIPFeatureExtractor,
        requires_safety_checker: bool = True,
    ):

パラメータ

  • vae (AutoencoderKL) — 変分オートエンコーダ (VAE) モデル, 画像を潜在的表現に / からエンコード・デコードします。
  • text_encoder (CLIPTextModel) — 凍結されたテキストエンコーダ。Stable Diffusion は CLIP のテキスト部を使用します、特に clip-vit-large-patch14 バリアント。
  • tokenizer (CLIPTokenizer) — CLIPTokenizer クラスのトークナイザー。
  • unet (UNet2DConditionModel) — エンコードされた画像潜在的 (表現) をノイズ除去する条件付き U-Net アーキテクチャ。
  • scheduler (SchedulerMixin) — エンコードされた画像潜在的表現をノイズ除去するために unet と組み合わせて使用されるスケジューラ。DDIMScheduler, LMSDiscreteScheduler, or PNDMScheduler のいずれかが可能です。
  • safety_checker (StableDiffusionSafetyChecker) — 生成画像が不快や有害であると考えられるかを推定する分類モジュール。詳細は モデルカード を参照してください。
  • feature_extractor (CLIPFeatureExtractor) — safety_checker のために入力として使用される、生成画像からの特徴量を抽出するモデル。

Stable Diffusion を使用するテキスト誘導, 画像-to-画像生成のためのパイプライン。

このモデルは DiffusionPipeline を継承しています。(ダウンロードやセーブ, 特定のデバイス上の実行等のような) すべてのパイプラインに対してライブラリが実装する汎用メソッドについてはスーパークラスのドキュメントを確認してください。

 

以上