Consistency Decoder は diffusers v0.23.0 で入った機能と思われます。
何それ?
- Consistency Decoder とは?
- とりあえず使ってみよう?
- ConsistencyDecoderVAE 無しでやってみたけど。。。
- 出力された画像2枚を使って GIF 動画にしてみた
- まとめ
Consistency Decoder とは?
Consistency Decoder とは、 ChatGPT でお馴染みの Open AI が DALE-E 3 で使われている Decoder をオープンソース化したものだそうです。
ここにちょっとだけ書いてありました。
We are also open sourcing the Consistency Decoder, a drop in replacement for the Stable Diffusion VAE decoder. This decoder improves all images compatible with the by Stable Diffusion 1.0+ VAE, with significant improvements in text, faces and straight lines.
詳しくは、ちゃんと説明している記事を探した方が早そうです。
とりあえず、高速化&品質向上されるそうです。
とりあえず使ってみよう?
モデルのロード等 (ConsistencyDecoderVAE, stable-diffusion-v1-5)
import torch
from diffusers import ConsistencyDecoderVAE, DiffusionPipeline
# ConsistencyDecoder VAE のロード
vae = ConsistencyDecoderVAE.from_pretrained(
"openai/consistency-decoder",
torch_dtype=torch.float16
)
# Stable Diffusion モデルのロード
pipe = DiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
vae=vae,
torch_dtype=torch.float16
).to("cuda")
VAEを変える感じなんですね?
プロンプト実行
import torch
# パイプライン実行
prompt = "cat"
image = pipe(
prompt,
generator=torch.manual_seed(0)
).images[0]
50/50 [00:07<00:00, 6.97it/s]
50ステップを7秒。早い?
50ステップを7秒。早い?
出力結果
from datetime import datetime
from zoneinfo import ZoneInfo
# Asia/Tokyo タイムゾーンの現在時刻を YYYYMMDDhhmmss 形式で得る
formattedNow = datetime.now(tz=ZoneInfo("Asia/Tokyo")).strftime("%Y%m%d%H%M%S")
# 実行結果
image.save(f"animation_{formattedNow}.png")

ConsistencyDecoderVAE 無しでやってみたけど。。。
import torch
from diffusers import DiffusionPipeline
# Stable Diffusion モデルのロード
pipe = DiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
# パイプライン実行
prompt = "cat"
image = pipe(
prompt,
generator=torch.manual_seed(0)
).images[0]
from datetime import datetime
from zoneinfo import ZoneInfo
# Asia/Tokyo タイムゾーンの現在時刻を YYYYMMDDhhmmss 形式で得る
formattedNow = datetime.now(tz=ZoneInfo("Asia/Tokyo")).strftime("%Y%m%d%H%M%S")
# 実行結果
image.save(f"animation_{formattedNow}.png")
50/50 [00:08<00:00, 6.72it/s]

謎。。。全然違いがわからない
出力された画像2枚を使って GIF 動画にしてみた

チカチカしているので一応違う画像が出力されてるみたい
まとめ
プロンプトが単純過ぎるのか、シードが悪いのか、違いがあまりわかりませんでした!