生成AIと絵しりとりをしてみる

2023年12月18日掲載

キービジュアル

この記事は、ソフトバンクアドベントカレンダー2023 18日目の記事です。

最近は生成AI周りの技術が目まぐるしいスピードで発展しており、その技術の素晴らしさには目を見張るばかりです。最新動向を追いかけるだけでも大変ですが、ある程度は自分で手を動かさないと雰囲気も掴みづらいとも思っていたりします。

そこで今回は生成AI周辺の技術をいくつかピックアップして、「生成AIと絵しりとりをしてみる」というテーマを通じて、技術の外観や実装周りについての理解を深めてみたいと思います。

非常にツッコミどころが多い内容ですが、楽しんでやっていきたいと思います!

目次

この記事では
  • この記事では生成AIでしりとりをする仕組みを作成して、実際にしりとりをして見ます
  • どなたでも楽しく読んで貰えるレベルで書いています
  • 生成AIを活用していく過程を疑似体験できます

絵しりとりについて

「絵しりとり」と一言で言っても色んな種類の絵しりとりがあるかと思いますが、ここでは授業中にやっていたような、落書きに近い絵を使ったものの再現を目指してやっていきたいと思います。例えば次の絵のようなものです。

生成AI_絵しりとり

これは自分で描いてみたのですが、猫とも犬とも似つかないような生き物になりました(猫のつもりです)。こういった落書きをリレーしていくような絵しりとりができたらいいなと思っています。

 余談ですが、実は「絵しりとり AI」などのキーワードで検索すると

というサービスが既にあり、マウスなどでスケッチを書くと AI モデルが何かを判定してくれるという楽しいものでした。しりとりではないですが、ユーザーが描いた絵を認識するという技術はすでに確立されているようです。この様な技術を参考に作っていきたいと思います。

補足

 Quick, Draw! が収集したデータは huggingface で提供されており、描く際のストロークごとに描画情報が保存されています。世界中の方が描いた絵が見れると同時に興味深いデータセットであるので、また別の機会にでも使ってみたいと思いました。

システムの概要

システムと称すると大袈裟ですが、絵しりとりを実装するために以下の様なパイプラインを実装しました。

  1. ユーザーが絵を描く

  2. 何の絵であるか認識する

  3. 次に続く単語名を推論する

  4. 単語から新しい絵を描く

  5. 新しい絵を表示する

システムの UI画面は gradio と呼ばれるライブラリを使用しており、画像の認識(手順.2)や生成部分(手順.4)で AI モデルを利用しています。

フロントエンド

 前述の通り、UI 部分は gradio と呼ばれる python ライブラリを使用します。huggingface のデモ画面として使用されたりしているもので、最近よく目にすることも多いことと思います。ローコードで簡単に UI を作成できる便利なライブラリです。今回はユーザーがスケッチする部分と生成された絵を表示する部分の実現のために用いています。

入力画像の認識

 ユーザーが描いた絵を認識するために、huggingface で公開されている事前学習済みモデル(beit-sketch-classifier ライセンス:apach-2.0 )を使用しました。このモデルは Google の webサービスである「Quick, Draw!」が収集したデータセットを用いて学習しているもので、スケッチ画像を入力として 345 クラスの分類を行えるものです。モデルカードには Accuracy 0.8098 と記されており、100%の識別精度とはいかないまでもそこそこの認識精度を持ったモデルでした。例えば冒頭の生き物を識別させてみると、ちゃんと「cat」として識別されています、中々凄いです。

生成AI_絵しりとり_入力画像の認識

しりとり用の単語生成

前段の処理でスケッチ画像の識別・単語化は済んでいるので、実際にしりとりをして後に続く単語を決定する必要があります。本当はここで大規模言語モデル(Large Language Model;LLM)を使いたかったのですが、どうしても出力形式が一定せず、またしりとりの挙動が不安定であったため、泣く泣く使用を断念しました。時間があれば色々と調査・試行錯誤して、再度挑戦してみたいなと思っています。

そのため今回は潔く英単語のままで、事前に a 〜 z のアルファベットをキーにして、値としてそのアルファベットから始まる動物名を保持した辞書を用意しておき、その中から次に続く文字を選択・生成する手法を採りました。

画像生成

今回の絵しりとり機能の肝の部分ですが、画像生成AI である Stable Diffusion を使用しました。Stable Diffusion は画像生成ブームの火付け役ともいえるモデルで、高精度ながら使い勝手の良いライセンスであることも魅力的なモデルです。また最近では fine-tuning 手法なども様々に考案されており、自分好みの Stable Diffusion モデルを作成することも可能になってきています。

今回は Low-Rank Adaptation(LoRA)と呼ばれる手法を用いて fine-tuning を行い、落書きに近い絵しりとりを実現させるための学習を行ってみました。LoRA は初め LLM の fine-tuning のために考案された手法なのですが、その効果の高さから Diffusion model の fine-tuning にも応用されています。

LoRA を用いた学習のための主なライブラリとして

などがあります。これらを用いた fine-tuning 手法の様々なノウハウはネット上に公開されているので生成AIブームを身近に感じるとともに、見ているだけで色んなアイデアが浮かんできたりもします。今回は時間的制約などもありましたので簡単に、diffusers ライブラリに内包されているサンプルコードを用いて学習を進めました。

使用するモデル

Stable Diffusion は様々なバージョンがあるのですが、ここでは Stable Diffusion v2 モデルを使用しました。huggingface 上で公開されており、diffusers ライブラリから簡単に使用することができます。

学習用画像の作成

LoRA の学習のためにその対象となる画像を用意する必要があります。今回は私が iPad で描いた適当な20枚の画像を使いたいと思います。実際に使った絵の一例は次のとおりです。

生成AI_絵しりとり_学習用画像の作成

学習スクリプト実行

環境構築は diffusers ライブラリ(Apache-2.0)の該当の README.md に従って必要ライブラリ等をインストールしました。README.md ではチュートリアル用に犬の画像が用意されていたりしますので、正しく動作するかどうか検証することができます。 

学習に使用したスクリプトは train_dreambooth_lora.py です。ハイパーパラメータなどは特に値を変更せず学習させました。唯一変更したものは学習に使用するプロンプトで、「a sketch of sks」というプロンプトを与えて学習させました。どういったプロンプトを与えるのがよいかなど、様々なノウハウが発生する部分だと思いますが、今回は大きなチューニングは実施せずに簡単なプロンプトでのみ学習を行いました。

生成AI_絵しりとり_学習スクリプト実行

実演

前置きが長くなりましたが、早速作ったシステムで AI と絵しりとりを楽しんでみたいと思います!

まずは気の向くままにクマを描いてみます。

生成AI_絵しりとり_実演

おお!クマが bear として正しく認識され、r から始まる単語の reindeer(トナカイ)が味わい深く描かれています。では、次に r から始まる単語で、rabit(ウサギ)を描いてみようと思います。

生成AI_絵しりとり_実演2

お。。。。tortorise(リクガメ)らしいです。では最後に

ん。。。? eel(うなぎ)らしいですが、何とも趣深い絵だなと思います。どことなく自分の描く絵に似ていなくもないといった印象でした。「これ何??」というのを推測するというのも、絵しりとりの醍醐味の一つだと思うこととして終わりにしたいと思います。最後は eye(目)からウナギ(eel)へとしりとりをすることができました。

おわりに

絵しりとりの各処理段階での精度の粗さが合わさり、システム自体も何とも趣深いものとなりました。少し真面目な感想を言うと、本当に LoRA の影響が出ているのかどうかは検証したかったなと思っています。

どんなデータを与えるか、どんなプロンプトを与えるか、生成時のパラメータはどう設定するか、等など考えることは沢山あると思います。作成している中で薄々感じていたことではありますが、生成AI を使いこなすというだけでも技術的な難しさを痛感しましたが、非常に面白かったです。常に「おお、やっぱり凄いな」とつぶやきながら作業をしていました。これに懲りず色んなことに挑戦していきたいと思います。

皆さんもアイデアを形にする仕組みを作ってみると理解が深まるので是非やってみてください。

画像を入力とするサービスは既に、 GPT-4V として OpenAI から公開されていたり、直近では Google がマルチモーダルな生成AIである Gemini を公開したりと、技術発展・サービス化が一段と加速していると感じます。今後も目が離せません。

関連ソリューション

生成AI(ジェネレーティブAI)

生成AI(ジェネレーティブAI)は、コンピュータが学習したデータを元に、新しいデータや情報をアウトプットする技術です。これまで人間が実施していた「考える」や「計画する」をAIが実行し、アイディアやコンテンツを生み出します。

おすすめの記事

条件に該当するページがございません