1.DALL·E Flow:複数のモデルを組み合わせて入力文に基づいたHD画像を作成(1/2)まとめ
・DALL·E Flowは幾つかのモデルを連携させてDALL·Eの性能や表現力を底上げする試み
・DALL·E と拡散モデルとSwinIRを組み合わせて1024×1024の画像を文章から生成可能
・クライアント・サーバー型設計であるためクライアントはColabでも動くが混んでいる
2.DALL·E Flowとは?
以下、github.comより「A Human-in-the-Loop workflow for creating HD images from text」の意訳です。
先日取り上げたDALL·E miniをちょっと試してみたい方はhuggingfaceの公式へどうぞ。スマートフォンでも動きますが、とても混んでいるので場合によってはタイムアウトするかもしれません。また、日本語入力でも動きますが、下記のように読解力は各段に落ちるようなので出来れば英語入力が良いと思います。
今回意訳した記事はDALL·E Flowと言って、幾つかのモデルを連携させてDALL·Eの性能を底上げしようとする試みでColabでも動くのですが、これも現在とても混んでいるので30分くらい待っても応答がない事もあります。
アイキャッチ画像はDALL·E FLOWでプロンプトは「STUDIO GHIBLI movies style illustration of nausicaa riding Möwe in the castle of the sky.」。メーヴェ(Möwe)はドイツ語でカモメなので左下もあってると言えばあってるし、全体的に雰囲気は出てますね。
DALL-E Flowは、テキストの入力を元に高精細な画像を生成する対話型ワークフローです。
まず、DALL-E-Megaを利用して画像の候補を生成し、CLIP-as-serviceを呼び出してテキストの入力に対してもっとも適切であると思われる候補順に画像をランク付けします。
貴方はCLIPのランク付けにこだわらず、好ましい画像を選ぶことができます。次に好ましい画像はGLID-3 XLに渡され質感や背景をより豊かにするため拡散(diffusion)が行われます。
最後に、候補はSwinIRを介して1024×1024に解像度が向上されます。
DALL-E FlowはJinaで構築されており、クライアント・サーバ型のアーキテクチャで、高いスケーラビリティ、ノンブロッキングストリーミング、最新のPythonicインターフェイスを実現しています。クライアントは、gRPC/Websocket/HTTP with TLSを介してサーバーと対話することができます。
ギャラリー
なぜ作業に人間が介入(Human-in-the-Loop)するのでしょうか?
生成芸術(Generative art)は創造的なプロセスです。最近のDALL-Eの進化は、人々の創造力を解き放ちますが、一文を入力して1つの画像が出力される操作方法は、想像力を一つの可能性に閉じ込めるため、その一つの結果がいかに素晴らしくても、それは悪いことです。
DALL-E Flowは、生成アートを反復的な手順として定式化することで、一文のみの入力に代わるものとなっています。
使い方
DALL·E Flowはクライアント・サーバー型の設計です。
クライアントの動かし方
クライアントの使い方は超簡単です。以下のステップは、Jupyter notebookまたはGoogle Colabで実行するのが最適です。
DocArrayとJinaを先にインストールする必要があります。
pip install "docarray[common]>=0.13.5" jina
デモサーバーを用意しましたので、ぜひ遊んでみてください。
大量のリクエストのため、サーバーの応答が遅れることがあります。しかし、私たちは高い稼働率を維持することに非常に自信を持っています。また、こちらの手順に従って、お客様ご自身でサーバーを構築していただくことも可能です。
server_url = 'grpc://dalle-flow.jina.ai:51005'
ステップ1:DALL-E Mega経由で生成する
では、プロンプトを定義してみましょう。
prompt = 'an oil painting of a humanoid robot playing chess in the style of Matisse'
それをサーバーに送信し、結果を可視化してみましょう。
from docarray import Document da = Document(text=prompt).post(server_url, parameters={'num_images': 8}).matches da.plot_image_sprites(fig_size=(10,10), show_index=True)
ここでは、DALLE-megaから8個、GLID3 XLから8個の計16個の候補を生成していますが、これはnum_imagesで定義した数で、約2分かかります。もし、時間がかかりすぎるようであれば、もっと小さな値を使ってもよいでしょう。
ステップ2:GLID3 XLによる選択と絞り込み
16個の候補をCLIP-as-serviceでソートし、index-0をCLIPが判断した最良の候補としています。もちろん、違う考え方もできるかもしれません。左上の数字に注目してください。一番好きなものを選んで、もっと見栄えを良くしてみましょう。
fav_id = 3 fav = da[fav_id] fav.display()
では、選択された候補をサーバーに送信して拡散(diffusion)させましょう。
diffused = fav.post(f'{server_url}', parameters={'skip_rate': 0.5, 'num_images': 36}, target_executor='diffusion').matches diffused.plot_image_sprites(fig_size=(10,10), show_index=True)
これは、選択された画像に基づいた36枚の画像を提供します。skip_rateにゼロに近い値を与えたり、与えられた画像に近づけるために1に近い値を与えることで、モデルにもっと即興性を持たせることができます。全体の処理時間はおよそ2分です。
ステップ3: SwinIRによる選択とアップスケール
最も気に入った画像を選択し、よく見てみましょう。
dfav_id = 34 fav = diffused[dfav_id] fav.display()
最後に、サーバーに送信して、1024 x 1024px に解像度を上げます。
fav = fav.post(f'{server_url}/upscale') fav.display()
これで完了です。これで決まりです。満足できない場合は、この手順を繰り返してください。
DocArrayは、非構造化データのための強力で使いやすいデータ構造です。クロス/マルチモーダル領域で働くデータサイエンティストにとって、非常に生産的なツールです。DocArrayの詳細については、docsを参照してください。
3.DALL·E Flow:複数のモデルを組み合わせて入力文に基づいたHD画像を作成(1/2)関連リンク
1)github.com
jina-ai / dalle-flow
2)colab.research.google.com
client.ipynb