半自動のAI・人ループの画像生成システムを作った話

今年の流行語が発表されましたが、個人的な流行語は「画像生成AI」です。

生成したい画像を表現したテキストをAIに入力すると、そのテキストに合わせた画像を生成してくれます。これは、呪文またはプロンプトと呼ばれるテキスト(text)から画像(image)を生成するので、text2imageまたは、t2iなどと呼ばれます。

画像生成AIにはt2i以外にも、画像から別の画像を生成するimage2image(i2i)や、高解像度化を行うextraといった機能もあります。

現在は、これらの3つの機能を連携して、画像生成をし続けるシステムを作り、24時間新しい画像を生成し続けています。この記事では、このシステムについて紹介します。

考え方

基本的に画像生成の処理には、それなりに時間がかかります。また、同じ呪文からでも生成される画像にはランダム性があったり、あともうちょっと足りないなみたいな画像が生成されることがあります。

そのため、画像生成では、ある程度の数の画像生成を行なってバリエーションを確保することと、ちょっといいなと思ったものを中心に似たような画像でバリエーションを広げることのバランスを取ることが重要です。つまり、機械学習でいうところの「探索と活用」の問題が生じます。

探索のプロセスは主に呪文からある程度自由に連想された画像を生成するt2iが担い、活用のプロセスは画像の微調整を行うi2iが担うのが自然でしょう。そして、その中で選ばれたものだけをextraで超解像度化して最終的な仕上げを行います。

この時、画像の良し悪しの判断は人間の手で行いますが、画像生成の手は止めたくないので、人間が判断するプロセスと、自動的な画像生成・処理のプロセスを並列で動かすようにします。

そこで、人とAIの間にデータベースを挟んで情報のやり取りをすることにしました。今回はnotionのデータベースを使って呪文と生成画像を管理しています。

仕組み

システムの全体像は下の図の通りです。

graph TD jumon[(呪文_notion)] -- prompt --> auto_t2i --> image[(画像_notion)] image -- close --> auto_i2i --> image image -- good --> auto_extra --> local[(ストレージ)] human(human) --> jumon human -- feedback --> image image --> human

呪文_notionと画像_notionの二つのデータベースを介して人とAIがやり取りを行います。大まかな流れは以下のようになります。

  1. 人が呪文をデータベースに登録する
  2. データベースから呪文を拾ってt2iで画像生成を行う(自動)
  3. 生成された画像をデータベースから閲覧して、人がフィードバックを行う
  4. データベースから惜しい(close)画像を拾ってi2iで画像を修正する(自動)
  5. データベースから良い(good)画像を拾ってextraで超画質化する(自動)

人が寝ていて入力がなくなっても、既にデータベースに入力されている情報をもとに、t2iの画像自動生成と、i2iの画像修正が常に回り続けるところがポイントです。

notionを使うメリット

データベースはnotionでなくても良いのですが、notionを使うメリットをいくつか挙げておきます。

無料で使える

基本的に無料のツールしか使いたがらない私にとって最も重要なポイントです。notionは無料でも無制限にページが作れて、APIも利用できます。

複数のデバイス間で共有できる

notionはオンラインのデータベースなので、生成された画像をPCでみたりスマホでみたりと、デバイスを選ばずに画像の閲覧とフィードバック入力が行えます。隙間時間で確認したい時はスマホ、じっくり見たい時はPCなど、目的に応じてデバイスを変えられるのが便利です。

UIが秒で作れる

通常、データベースに人の入力を渡そうと思うと、UIを作る必要があります。ところが、notionのギャラリービューを使うと、それだけで十分にUIとして機能してくれます。

例えば、下のように生成した画像を一覧で表示して、フィードバックをチェックボックスのボタンとして与えるようなUIができます。notionでは、どのプロパティを表示するかを選択するだけで、このような表示をカスタマイズできます。

notionでの表示

Stable Diffusion web UIのAPIを利用

t2i, i2i, extraはそれぞれ並列で動作していますが、いずれもStable Diffusion web UIのAPIを叩いて画像生成・処理を行なっています。web UIでは、一つのタスクを実行中に他のタスクが到着すると待ち合わせるようなので、処理の順番はweb UIに任せて、t2i, i2i, extra側では、他のプロセスを意識せずにただただ自分のAPIを叩きに行くだけで動いてくれます。

graph LR auto_t2i -- API --> sd_web_ui auto_i2i -- API --> sd_web_ui auto_extra -- API --> sd_web_ui

まとめ

画像生成AIを使ってテキストから画像を生成し、生成画像をもとに画像をブラッシュアップし、最終的に高解像度化するというプロセスを自動化するシステムを紹介しました。

人の入力をデータベース経由で受け取ることで、人が休んでいる間も、画像生成を続けることができ、画像生成している隣で、人が画像に対してフィードバックをかけたりできるようにしました。また、notionを使うことで、UIと一体のデータベースを利用して、開発コストを下げました。

このシステムのプロトタイプ版(i2iが無い版)を使って作成したのが、「画像生成AI呪文図鑑シリーズ」です。

コメント

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