Stable Diffusion v2-1-unclip:画像から意味的に似た画像を作成するImage2Imageとは異なる手法

入門/解説

1.Stable Diffusion v2-1-unclip:画像から意味的に似た画像を作成するImage2Imageとは異なる手法まとめ

・Stable Diffusion v2-1-unclipとは、Stable Diffusionの開発元であるstabilityai社が喧伝していたStable diffusion Reimagineの事
・「元画像に意味的に近い画像を再生成する機能」であって、元画像は意味を得るために参照するだけで構成やポーズは参考にしない
・人物に適用するのは少しコツが必要そうなので車や部屋、建築物などの再デザインなどに使用するのが良い使い方かもしれない

2.Stable Diffusion v2-1-unclipとは?

アイキャッチ画像はstable diffusionのカスタムモデルによる生成で、ReimagineでTransformな感じを目指していたら何となく原作っぽい雰囲気も出てきた画像

二日前に発表されたStable Diffusion v2-1-unclipとは、少し前にStable Diffusionの開発元であるstabilityai社が大きく喧伝していた「Stable diffusion Reimagine」の事なのですが、実のところ、呼び名が結構混乱していて、以下のような呼ばれ方を見かけています。

・「Stable diffusion Reimagine」(プロジェクト名?プレスリリースなどで見かけます)

・「Stable Diffusion v2-1-unclip」(githubなど技術的な文章内で見かけます。Stable Diffusion v2.1とUnclipを使っている事が明確になるからと思います)

・「Stable unCLIP」(Diffusersのマニュアルなどで。Stable Diffusion v2.1に限定したくない場面でしょうか)

で、どんな機能なのかというと、私の理解では「元画像に意味的に近い画像を再生成する機能」ですかね。

I2I、すなわちImage2Imageととても似ているのですけれども、あちらは元画像に何が描かれているか等の画像の意味までは理解していません。そして、ポーズや構成をあまり変更せずにプロンプトに従って元画像から新たに画像を作ります。例えば、元画像内に白いドアがあったら、プロンプトで「白い服を着た女性」と指示をしてドアを女性に作り替えてしまう事などもできます。元画像のポーズや構成をそのまま拝借する事にも繋がるので、好ましく思わない人もいるようです。

逆にStable Diffusion v2-1-unclipは、元画像のポーズや構成などはほぼ保てません。しかし、元画像に猫が描かれていたら再構成された画像内にいるのは猫です。ヤマネコ等意味的に猫に近い動物くらいには出来るかもですが、ほぼ猫です。「入力画像をプロンプトとして使う機能」という解釈も出来るので「言葉で説明しにくい物体を画像で与えて再デザインして貰う機能」とみなす事も出来そうですが、後述しますが、Stable Diffusionが知らない物体を与えると意味的な類似性を保てないので元画像から大きく意味的に離れてしまいます。

ここまで読んで「うん?」と思った方もいるかもしれませんが、はい、今のところ、私も良い感じの使い方をまだ見つける事が出来ていません。

ポーズが保てない時点で「ControlNet」の方が使いやすいのかな?と思ってしまうのですが、デザインや工業製品のバリエーションを作るという使い道はありそうです。Image2Imageと違って元画像は意味的に参照されるだけで、内部で新たに再構成されるため、参照画像を拝借した感じにはならない事も優位点です。

なお、現時点ではDiffusersを使った実装だけが公開されていますが、AUTOMATIC用に取り込む作業をしている人を見かけたので数日中にAUTOMATICでも使えるようにはなりそうです。

それでは、以下、あまり参考になっていない感じもするのですが、試してみた結果をお楽しみください。

Stable Diffusion v2-1-unclipの生成したサンプル

左端が元画像で、その他がReimagineしたものです。

誰ですか、元画像が一番良いと思った人は! 私です。

 

左端が元画像で、その他がReimagineしたものです。

誰ですか、元画像が一番良いと思った人は! 私です。

 

やってみたかったのは、「ナウシカの画像+プロンプトを与えてリアル系にReimagine出来るか?」なのですが、「意味的に近い」の「意味」の中にナウシカ要素がおそらく含まれていないため、微妙な感じになってしまいます。

趣向を変えて、例えば、白黒写真をカラー化などが出来ないか確かめてみたのが以下です。もう少し何枚も作れば良い感じのも出てくるのかもしれませんがフレームから外れてしまったり、カラー化するのも一部だけなど、使いどころが中々難しく思えます。

 

静物も、おそらくStable Diffusionが知らない、つまり意味的に近いものを探し出せない物体を与えてしまった場合、だいぶ変形してしまうようでした。

 

やはり、公式のデモがやっていたように車や部屋、家具、建築物などの再デザインなどに使用するのが良いのかもしれません。関連リンク内に公式が提供しているデモサイトのリンクを貼っておくので興味を持った方は試してみてください。

 

Stable Diffusion v2-1-unclipインストール/セットアップメモ

以下、Diffuser用です。少なくとも私の環境では公式サイトのドキュメント通りでは動きませんでしたので以下でフォローしておきます。

pip install git+https://github.com/huggingface/diffusers.git transformers accelerate scipy safetensors
pip install pyyaml importlib-metadata

スクリプト。こちらも公式サイトのサンプルやマニュアルには「画像だけ与えればよい、promptはオプションなので与えずとも良い」と書いてあるのですが、現時点ではpromptを与えてないと「ValueError: `prompt` has to be of type `str` or `list` but is <class ‘PIL.Image.Image’>」というエラーが出て動きませんでしたのでそこを変えてあります。


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

from diffusers import StableUnCLIPImg2ImgPipeline

#Start the StableUnCLIP Image variations pipeline
pipe = StableUnCLIPImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1-unclip", torch_dtype=torch.float16, variation="fp16"
)
pipe = pipe.to("cuda")

#Get image from URL
url = "https://upload.wikimedia.org/wikipedia/commons/8/8d/Marilyn_Monroe_photo_pose_Seven_Year_Itch.jpg"
response = requests.get(url)
init_image = Image.open(BytesIO(response.content)).convert("RGB")

# or file
#init_image = Image.open("test.jpg").convert("RGB")

#Pipe to make the variation
prompt = "photo"

images = pipe(prompt, init_image).images
images[0].save("test.png")

3.Stable Diffusion v2-1-unclip:画像から意味的に似た画像を作成するImage2Imageとは異なる手法関連リンク

1)huggingface.co
stabilityai / stable-diffusion-2-1-unclip(公式)
Stable unCLIP(パイプラインマニュアル)

2)clipdrop.co
Stable diffusion Reimagine(StabilityAIによるデモサイト)

タイトルとURLをコピーしました