1.UnCLIP:画像生成人工知能DALL·E 2のオープンソース実装が動かしやすくなる
・画像生成人工知能の先駆けとなったDALL·E 2のオープンソース実装が改装
・Diffusersライブラリに統合されたためStableDiffusionと同様な操作感になった
・Stable Diffusionよりも画像品質のブレ幅が小さいが創造性の範囲も狭くなる
2.karloとは?
DALL·E 2は画像生成人工知能として約2年前(2021年)に話題になったDALL·Eの後継で、昨今のトレンドになっている画像生成人工知能の先駆けとなったモデルです。
DALL·E 2は現在、毎月15枚まで無料枠が付与される有料サービスとして一般利用可能になっています。私もアイキャッチ画像のアウトペインティングなどで利用する事がありますが、プロンプトを画像に落とし込む能力はStable Diffusionより一歩先んじているなぁ、と感じる事があります。
DALL·E 2をオープンソース形式で再現しようという試みは半年くらい前から公開されているプロジェクト(DALLE2-pytorch、 dalle2-laion、etc)が存在するので、今回のお話が初のオープンソース実装と言うわけではないのですが、karloと言うモデルがより動かしやすくなったと言うアナウンスを読んだので、早速、StableDiffusion 2.1と比較してみました。
StableDiffusion 2.1とkarloの比較
Huggingfaceのアナウンスから引用すると以下です。
・そのため、求められていないものを画像に追加しないことで、Stable Diffusionよりも「精密」な画像を与える傾向があります。しかし、「クリエイティビティが低くなる」傾向があるように思えます。
では、早速、画像を比較してみましょう。各画像、上段がkarlo(DALL·E 2)、下段がStable Diffusion 2.1です。各主題について各モデルで各50枚の画像を生成してそのなかから選んだ5枚を掲載しています。
比較に使ったプロンプトは主にStable Diffusion Prompt Bookで公開されているプロンプトから取得したものです。ただし、ネガティブプロンプトはkarloで有効になっているのかがわからなかったので除いています。
1)VRヘッドセットを付けたmetaverseのサンタ
こちら、成功例だけ見るとStable Diffusion 2.1の方が全画像でVRヘッドセットを装着しており良く見えてしまいますが、50枚中、19枚が「そもそもサンタが画像内にいない」状況です。karloにはVRヘッドセットと言う単語を伝える事が出来ていませんが、サンタが画像内に写っていないケースは0件でした。
2)馬に乗った宇宙飛行士
こちらも同様。Stable Diffusion 2.1では14/50枚はそもそも馬、もしくは宇宙飛行士が画像内に写っていません。karloには主題が映っていない画像はありませんでした。
3)青々とした緑の丘の上にある大きな水域
Stable Diffusion 2.1では綺麗だけれども、物理的にあり得ない画像が結構な割合で含まれており、karloの安定性は高いです。
4)白いドレスを着た金髪の女性の肖像画
こちらも同様。Stable Diffusion 2.1ではそもそも顔/上半身/人が映ってない画像が20枚近くできてしまいます。karloは顔が崩れていても上半身は全て写っています。
5)植物やその他の自然の要素を使用した収納空間と化粧台
風景画と同様です。Stable Diffusion 2.1では綺麗だけれども、物理的にあり得ない画像が結構な割合で含まれており、karloの安定性は高いです。
6)海に浮かぶ海賊船の絵、デジタルペイント
karloは安定していて甲乙つけがたい絵が多かったです。Stable Diffusion 2.1はそもそも海賊船が映っていなかったり、そんな船は物理的に水に浮かばん!と突っ込みたくなるような船が多いです。
7)古代日本のサムライ、サイバーパンク アート
これもkarloは安定していて甲乙つけがたい絵が多かったです。Stable Diffusion 2.1はギリギリ5枚選べましたが、残りは言語による形状説明が困難なよくわからない絵やぼやけた絵、サムライと言い張るのは無理がある絵になってしまいました。
8)剣を持った長い髪の女性、3Dレンダリング、黄色い隊服
karloにとっても顔を描くのは難しいようですが、題材である剣をもった女性全員が黄色い服を着て画像内にいます。Stable Diffusion 2.1はギリギリ5枚選べましたが、残りはそもそも人の形状をしていないものや人が映っていないもの、ぼやけた画像、歪んだ画像になってしまいました。
技術的なお話
呼称に少し迷います。
厳密には、kakaobrainがkarloと言うモデル(OpenAIのunCLIPアーキテクチャに基づくテキスト条件付き画像生成モデル)を開発しており、そのモデルが拡散モデルを扱いやすくするDiffusersライブラリにUnCLIPPipelineとして移植され、且つ事前学習済みモデルも公開されたと言うお話です。
ですので、アーキテクチャはDALL·E 2と同じであっても、学習に使用したデータは全く違うのでDALL·E 2ではないですし、元モデル名称はkarloですが、PipelineとしてはUnCLIP、うーん、開発元に敬意を表してkarloでしょうかね。
Diffusersに統合されたのは初で、Diffusersに慣れている人にとってはより扱いやすくなりました。そのため、今後はstable diffusionと同様に様々な事前学習済みモデルが派生していく事になるかもしれません。
実際、私のdiffusers 0.09インストール済みのConda環境では、
pip install --upgrade diffusers[torch] pip install --upgrade transformers
だけで下記のスクリプトを動かす事ができました。
from diffusers import UnCLIPPipeline pipe = UnCLIPPipeline.from_pretrained("kakaobrain/karlo-v1-alpha", torch_dtype=torch.float16) pipe = pipe.to("cuda") prompt = [ "Santa Claus wearing a VR headset delivering presents in the metaverse.", "a photo of an astronaut riding a horse on mars" ] for i in range(len(prompt)): image = pipe(prompt[i]).images[0] image.save("karlo_prompt_" + str(i) + ".png")
その他に気が付いた事
・諸々含めるとファイルサイズは26G超なのでStableDiffusionより大きいです。
・画像生成時はpythonがGPUメモリを9361MiB使っていたので、8GBだと厳しいかもしれません。
・ディフォルトで生成される画像は256 x 256です。widthやheightがパラメータとして指定できないので現時点での制限かもしれません
画像サイズを上げるとメモリ要件はもっと厳しくなるはずなので、ここをクリアできればkarloは人気が出る可能性はあるのかな、と思います。
3.UnCLIP:画像生成人工知能DALL·E 2のオープンソース実装が動かしやすくなる関連リンク
1)github.com
kakaobrain / karlo
LAION-AI / dalle2-laion
lucidrains / DALLE2-pytorch
2)huggingface.co
unCLIP