ステップ0: 環境の準備
このステップでは、必要なライブラリをインストールし、環境を設定します。このステップは、実際にローカル環境やColabで実行する際に最初に行う必要があります。
!cd /content
!pip install -q hidiffusion
!pip install -q diffusers==0.25.0 transformers==4.27.4 accelerate==0.18.0 xformers==0.0.16rc425
ステップ1: ライブラリのインポート(改訂版)
ライブラリのインポートにhidiffusion
の関連関数を追加します。
import torch
from PIL import Image
import numpy as np
import cv2
from diffusers import ControlNetModel, StableDiffusionXLControlNetImg2ImgPipeline, DDIMScheduler
from hidiffusion import apply_hidiffusion, remove_hidiffusion
ステップ2: モデルとスケジューラのロード
次に、ControlNetモデルとDDIMスケジューラをロードします。
controlnet = ControlNetModel.from_pretrained(
"diffusers/controlnet-canny-sdxl-1.0", torch_dtype=torch.float16, variant="fp16"
).to("cuda")
scheduler = DDIMScheduler.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler")
ステップ3: 画像変換パイプラインの設定
画像変換パイプラインを初期化します。
pipe = StableDiffusionXLControlNetImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
controlnet=controlnet,
scheduler=scheduler,
torch_dtype=torch.float16,
).to("cuda")
パイプラインにhidiffusion
を適用します。これにより、画像生成プロセスがさらに最適化されます。
apply_hidiffusion(pipe)
ステップ4: メモリ効率の良い機能の有効化
メモリ効率を考慮した機能を有効化します。
pipe.enable_xformers_memory_efficient_attention()
pipe.enable_vae_tiling()
ステップ5: 元の画像の読み込みとCannyエッジ検出
元の画像を読み込み、Cannyエッジ検出を使用して制御画像を生成します。
path = './assets/lara.jpeg'
ori_image = Image.open(path)
image = np.array(ori_image)
canny_edges = cv2.Canny(image, threshold1=50, threshold2=120)
canny_image = Image.fromarray(canny_edges).convert("RGB")
ステップ6: 画像生成のパラメータ設定と画像生成
画像生成に必要なパラメータを設定し、新しい画像を生成します。
controlnet_conditioning_scale = 0.5
prompt = "Lara Croft with brown hair, wearing a tank top and a brown backpack in a dark room with old-fashioned decor"
negative_prompt = "underexposed, poorly drawn hands, duplicate hands, overexposed, bad art"
result_image = pipe(
prompt=prompt,
image=ori_image,
control_image=canny_image,
height=1536,
width=2048,
strength=0.75,
num_inference_steps=50,
controlnet_conditioning_scale=controlnet_conditioning_scale,
guidance_scale=7.5,
negative_prompt=negative_prompt
).images[0]
ステップ7: 生成した画像の保存
生成した画像を保存します。
result_image.save("modified_lara.jpg")
ノートブック
Google Colab
コメント