HuggingFace Diffusers 0.12 : 使用方法 : 推論のためのパイプライン (1)

HuggingFace Diffusers 0.12 : 使用方法 : 推論のためのパイプライン (1) (翻訳/解説)

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

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

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

 

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

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

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

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

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

 

 

HuggingFace Diffusers 0.12 : 使用方法 : 推論のためのパイプライン (1)

条件なし画像生成

DiffusionPipeline は推論のために事前訓練済み拡散システムを使用する最も簡単な方法です。

DiffusionPipeline のインスタンスを作成することから始めてどのパイプライン・チェックポイントをダウンロードしたいかを指定します。任意の Diffusers のチェックポイント に対して DiffusionPipeline を使用できます。このガイドではしかし、DDPM による条件なし画像生成に対して DiffusionPipeline を使用します :

from diffusers import DiffusionPipeline

generator = DiffusionPipeline.from_pretrained("google/ddpm-celebahq-256")

DiffusionPipeline はモデリング、トークン化とスケジューリング・コンポーネントのすべてをダウンロードしてキャッシュします。モデルはおよそ 14 億のパラメータから構成されていますので、それを GPU で実行することを強く勧めます。ちょうど PyTorch でのように、generator オブジェクトを GPU に移動できます。

generator.to("cuda")

そして貴方のテキストプロンプトで generator を使用できます :

image = generator().images[0]

出力はデフォルトでは PIL Image オブジェクト にラップされます。

単純に次を呼び出すことで画像をセーブできます :

image.save("generated_image.png")

 

条件付き画像生成

DiffusionPipeline は推論のために事前訓練済み拡散システムを使用する最も簡単な方法です。

DiffusionPipeline のインスタンスを作成することから始めてどのパイプライン・チェックポイントをダウンロードしたいかを指定します。任意の Diffusers のチェックポイント に対して DiffusionPipeline を使用できます。このガイドではしかし、Latent Diffusion によるテキスト-to-画像生成に対して DiffusionPipeline を使用します :

from diffusers import DiffusionPipeline

generator = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

DiffusionPipeline はモデリング、トークン化とスケジューリング・コンポーネントのすべてをダウンロードしてキャッシュします。モデルはおよそ 14 億のパラメータから構成されていますので、それを GPU で実行することを強く勧めます。ちょうど PyTorch でのように、generator オブジェクトを GPU に移動できます。

generator.to("cuda")

そして貴方のテキストプロンプトで generator を使用できます :

image = generator("An image of a squirrel in Picasso style").images[0]

出力はデフォルトでは PIL Image オブジェクト にラップされます。

単純に次を呼び出すことで画像をセーブできます :

image.save("image_of_squirrel_painting.png")

 

テキスト-Guided 画像-to-画像生成

StableDiffusionImg2ImgPipeline はテキストプロンプトと初期画像を渡して新しい画像の生成を条件付けます。

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

from diffusers import StableDiffusionImg2ImgPipeline

# load the pipeline
device = "cuda"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16).to(
    device
)

# let's download an initial image
url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"

response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")
init_image.thumbnail((768, 768))

prompt = "A fantasy landscape, trending on artstation"

images = pipe(prompt=prompt, image=init_image, strength=0.75, guidance_scale=7.5).images

images[0].save("fantasy_landscape.png")

(訳注 : prompt = “A fantasy landscape, beautiful, photorealistic, trending on artstation”, using DPMSolverMultistepScheduler)

 

テキスト-Guided 画像インペインティング

StableDiffusionInpaintPipeline はマスクとテキストプロンプトを提供することにより画像の特定の一部を編集できます。それはインペインティング・タスクのために特に訓練された Stable Diffusion のバージョンを使用しています。

import PIL
import requests
import torch
from io import BytesIO

from diffusers import StableDiffusionInpaintPipeline


def download_image(url):
    response = requests.get(url)
    return PIL.Image.open(BytesIO(response.content)).convert("RGB")


img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

init_image = download_image(img_url).resize((512, 512))
mask_image = download_image(mask_url).resize((512, 512))

pipe = StableDiffusionInpaintPipeline.from_pretrained(
    "runwayml/stable-diffusion-inpainting",
    torch_dtype=torch.float16,
)
pipe = pipe.to("cuda")

prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
image = pipe(prompt=prompt, image=init_image, mask_image=mask_image).images[0]

 

以上