rich-text-to-image:イラスト生成AI向けのプロンプトをリッチテキスト形式にして表現力を向上

入門/解説

1.rich-text-to-image:イラスト生成AI向けのプロンプトをリッチテキスト形式にして表現力を向上まとめ

・rich-text-to-imageはMicrosoftのWordのような文字の色を一部だけ変えたり、太文字にできるリッチテキストをプロンプトに使う新手法
・プロンプト内で色を変えた部分が画像内でその色になったり、スタイル、注釈、脚注などで捕捉の説明を行う事ができるようになる
・現時点では動かす際にメモリ要件が厳しいが無料で試せるSpaceもあるので今後のプロンプト発展の方向性の一つとして体感をお勧め

2.rich-text-to-imageとは?

アイキャッチ画像は↓のサンプルプロンプトを元にカスタムStable Diffusion先生に作って貰ったイラスト

タイトルの「リッチテキスト形式」とは何だろう?と思う人かもいれませんが、Microsoft WordやGoogleドキュメント等、文字の色を一部だけ変えたり、太文字にしたり、テキストの一部にコメントをつけたりできる文書形式の事です。

で、それがイラスト生成AI向けのプロンプトとどんな関係があるんじゃーい?と言う方はまずは公式サイトの以下の動画をご覧ください。

なるほど、「Cabin(小屋)」と言う単語をオレンジにする事で画像内の小屋部分をオレンジにしたり、「lake(湖)」に「(A crystal-clear blueish lake, glistening in the sunlight)青みがかった透明な湖が、太陽の光を受けてキラキラと輝いています」と注釈をつける事で湖が注釈に沿って実際に変化し、wildflowers(野草)のスタイルを「Base(基本)」から睡蓮などで有名な印象派を代表するフランスの画家「Claude Monet(クロード・モネ)」にする事でモネっぽいスタイルになると言う事ですね。

他にも「パインアップルとペパロニ(サラミの一種)とマッシュルームのピザ」というイラストを各具材のフォントサイズを大きくする事で、その具材の量が増えるというデモや、footnote(脚注)に各物体の捕捉詳細を記述する使い方なども示されていました。

現在の所は単体のコマンドラインプログラム(リッチテキストはJson形式でコマンドライン引数として与える)、及び単体のgradioを使ったWebアプリが提供されています。現時点ではAUTOMATIC1111の拡張機能などは存在しませんが、モデルそのものは素のstable diffusion v1.5を使っているので、1.5ベースであればカスタマイズしたモデルにも容易に差し替えが可能です。

それゆえ、そんなに遠くないうちにAUTOMATIC1111にも移植されるかもしれません。(ただし、直近2週間以上AUTOMATIC1111の更新が止まっているので正式採用されるのはかなり先になってしまうかもしれません)

うーん、面白いアプローチですね。

イラスト生成AIの世界は職人芸が発達している側面もあって、イラストとの意味的関連性があまり感じられないけれどもイラスト生成時に有効なプロンプトを見つけようとするアプローチもあります。日本でもプロンプトを「呪文」と読んだりプロンプトを研究する職人さんを「AI術師」と呼んだりしているのを見かけます。

それに対して、本手法は文章自体の表現力を上げて、より構造化して正確にモチーフを伝えられるようにしようというアプローチですね。後者は最終的にHTMLのような構造化言語に行きつくような気がします。

セットアップ/インストール

細かいミスはあったのですが、基本は公式サイトの手順通りで動きます。しかし、メモリ要件が厳しくRTX 3060 12GBだとあまり沢山の編集効果を組み込んだリッチテキストですとメモリ不足エラーになってしまいました。

git clone https://github.com/SongweiGe/rich-text-to-image.git
cd rich-text-to-image/
conda env create -f environment.yaml
conda activate rich-text
pip install git+https://github.com/openai/CLIP.git

追加した手順


pip install accelerate #入れないと起動もできませんでした。
mkdir results #作らないとCan't open でエラーになります
python ./gradio_app.py #RTX 3060では起動はしますがメモリ不足でRuntimeError: CUDA out of memory.になりました。

# 以下のコマンドラインプログラムでRTX 3060でも起動します。しかし、あまり複雑なjsonですとやはりメモリ不足エラーになります。
python sample.py --rich_text_json '{"ops":[{"insert":"a "},{"attributes":{"font":"mirza"},"insert":"beautiful garden"},{"insert":" with a "},{"attributes":{"font":"roboto"},"insert":"snow mountain in the background"},{"insert":"\n"}]}' --seed 3

リッチテキスト用のJsonは以下のページで作成できます。
https://rich-text-to-image.github.io/rich-text-to-json.html

なお、内部的にはdiffusersを使っているため、
models/region_diffusion.py
内で定義されている
model_id = ‘runwayml/stable-diffusion-v1-5’
の部分を書き換えて、models配下にdiffusers形式にした1.5ベースのカスタムモデルをおけば、簡単に差し替えて動かす事ができます。

rich-text-to-image vs ニコラス・ケイジ

あ~、失敗しました。

こういう変化がわかりにくくなるかもしれないケースはニコラス・ケイジの出番だ!と思ったのですが、逆にわかりにくくなりました。

考えてみればニコラス・ケイジの周辺にある物体に対して編集効果を付与すれば良かったのですが、不用意にニコラス・ケイジ本体を対象してしまったので、編集効果を確認するというよりは「何をやってもニコラス・ケイジはニコラス・ケイジになる」というニコラス・ケイジの概念の強さを再確認する結果に終わりました。

無編集

ヴァン・ゴッホスタイル

Cyber Punkスタイル

PopArtスタイル

Pixel Artスタイル

クロード・モネスタイル

もう少し色々と試せればよかったのですが、前述のとおり、メモリ喰いなので効果を付け加えすぎるとRTX 3060ではメモリ不足でエラーになってしまうので断念しました。

現時点では動かす際のメモリ要件が厳しいという制約がありますが、将来のプロンプトの向かう方向性の一つとして有望に思えます。無料で試せるSpaceもあるので今後のプロンプトの発展の方向性の一つとして体感しておくことをお勧めします。

3.rich-text-to-image:イラスト生成AI向けのプロンプトをリッチテキスト形式にして表現力を向上関連リンク

1)arxiv.org
Expressive Text-to-Image Generation with Rich Text

2)github.com
SongweiGe / rich-text-to-image

3)huggingface.co
Expressive Text-to-Image Generation with Rich Text (Spaceのデモ。気軽に動かしてみたい方はこちら)

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