Qwen2-VLとFLUX.1を組み合わせた伝言ゲームを作ってみた

2024/09/23に公開

はじめに

どんな人向けの記事?

  • 画像生成AIやVLMに興味のある方
  • 画像生成AIとVLMを直列に繋ぐことに興味のある方
  • 生成AI同士でGartic Phone風ゲームをしたときの挙動が気になる方
実行環境
1. Mac Studio(M2 Ultra 128GB)
2. Windows 11 (メインメモリ 96GB + RTX 3060 12GB) ← 一部の試験で使用

概要

みなさんは、Gartic Phoneというゲームをご存知ですか?
Gartic Phonetとは、簡単に言うとお題を見て絵を描く絵を見てお題を予想するいうことを繰り返すパーティーゲームで「文章→絵→文章→絵…」のように絵と文章を交互に伝えていく伝言ゲームです。

にじさんじに興味ない方はサムネイルだけ見ていただければと思いますが、イメージとしてはこんな感じです。
https://www.youtube.com/watch?v=baOgK9E2Il4&t=6948s

今回は、このGartic Phonet風の伝言ゲームを生成AIだけでプレイできる環境を実装し、どのような結果になるか検証してみました。

背景

FLUX.1やQwen2-VLを(主にMacの)ローカル環境で動かす方法については、以前記事で紹介しました。

https://zenn.dev/robustonian/articles/flux1_apple_silicon

https://zenn.dev/robustonian/articles/qwen2_vl_mac

これらを組み合わせてなにか面白いことができないかな?と思ったときに、数年前にじさんじの動画内で遊んでいたGartic Phoneというゲームを思い出し、生成AIでやらせてみようと思い立ちました。まあ、これらを組み合わせるためにはAPI的な機能を持たせる必要があり、半分はそういった使い方を出来るようにするのが目的でした。

モデル選定

画像生成AI

画像生成AIとして、私のローカル環境で導入済なものはSDXLとFLUX.1だけでした。今回はプロンプト追従性が良さそうなFLUX.1を採用しました。また、精度よりも速さを重視したかったのでFLUX.1-schnellの方を選択しました。

VLM

VLMモデル自体も選択肢はいくつかあります。今回の記事では、最近登場したばかりのQwen2-VLを採用しました。Qwen2-VLは日本語OCR性能が高いのですが、今回は文字の出力をしないしそもそもFLUX.1は日本語の文字を描画できないです。そういった状況での性能評価も兼ねることになります。

お題生成、翻訳用LLM

こちらは最初、gemini-1.5-flash-exp-0827を使っていたのですが、パラメータを変えてもお題が似たようなものばかりになったので、小型ながら高性能なモデルとしてEZO-Common-9B-gemma-2-it-f16を採用しました。

プログラムの流れ

今回のプログラムも、例によってローカル環境で実装しました。ソースコードは記事では記載しませんが、参考までに簡易的なシーケンス図を載せておきます。

Comfy UIのローカルAPI環境構築

FLUX.1はMac上のComfyUIで動かしていたのですが、これをAPIとしてpythonで使用する必要がありました。具体的な方法についてはここでは述べませんが、Makiさんの記事を参考にさせていただきました。

https://note.com/sunwood_ai_labs/n/na5d84c217f5b

Qwen2-VLのローカルAPI環境構築

ここは正直かなり苦戦しました。Qwen2-VLのGitHubのページにOpenAI API互換サービスを始めるためのサンプルコードが公開されており、最初はすぐに使えるだろうと高を括っていました。しかし、このコードの実行にはvLLMが必須であり、Mac環境ではそのままで使うことができませんでした。

https://github.com/QwenLM/Qwen2-VL?tab=readme-ov-file#start-an-openai-api-service

そこで、MacでvLLMを使えるようにvLLMのソースコードの改修を始めたのですが、そう簡単に行くはずもなく、1時間ほど格闘した後、根が深そうな問題にぶつかり断念しました。。。

仕方がないのでWindows環境で実行しようとしたものの、確かuvloopが無いと言われて実行できず、最終的にWSL上で環境を整えました。さらにその後、MacからWSLにアクセス出来るようにポートフォワーディング設定をすることで、ようやくAPIとして機能するようになりました。

ただ一点問題がありまして、それはWindows PCはRTX 3060 (12GB)であり、Qwen2-VL-7BはVRAM不足で(量子化しても)動かすことができないということです。そういうわけで、Qwen2-VL-2Bを動かすことになりました。

実行例

上記のプログラムを動かして、早速Gartic Phone風ゲームを実行してみました。実行結果の例は以下のとおりです。

VLMにQwen2-VL-2Bを用いた場合

生成AI モデル名
LLM EZO-Common-9B-gemma-2-it-f16
VLM Qwen2-VL-2B
画像生成 FLUX.1-schnell

お題:ジェットコースターに乗るハムスター

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VLの予想したお題
    "ハンモックの上の幸せなハムスター"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-2Bの予想したお題
    "ハムスターのリラクゼーション: カラフルなキャンディーアート"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-2Bの予想したお題
    "甘いハムスターと色とりどりのボール"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-2Bの予想したお題
    "ハムスターのボール遊び"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:ロボットが作るケーキ 🍰🤖

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-2Bの予想したお題
    "ロボットのお誕生日ケーキ"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-2Bの予想したお題
    "ロボットとbirthday cake"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-2Bの予想したお題
    "ロボットとバースデーケーキ"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-2Bの予想したお題
    "ロボットと誕生日ケーキ"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:満月の夜に木立の中で踊る幽霊

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-2Bの予想したお題
    "満月と幽霊の森"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-2Bの予想したお題
    "月夜の森:神秘と静けさ"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-2Bの予想したお題
    "夜の森の夢"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-2Bの予想したお題
    "幽霊森林の夜"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:空を飛ぶカエルと、宝物を求めるウサギ

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-2Bの予想したお題
    "幻想の冒険:蛙とウサギの対面"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-2Bの予想したお題
    "森林的秘密:青蛙和兔子的对话"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-2Bの予想したお題
    "木と動物たちの秘密"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-2Bの予想したお題
    "森の冥想:猫と羊と狼の暮らす木々"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


VLMにQwen2-VL-7Bを用いた場合

生成AI モデル名
LLM EZO-Common-9B-gemma-2-it-f16
VLM Qwen2-VL-7B
画像生成 FLUX.1-schnell

お題:温泉で体を休めるロボットとドラゴン

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-7Bの予想したお題
    "ロボットとドラゴンの不思議な会話"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-7Bの予想したお題
    "ロボットとドラゴンの会話"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-7Bの予想したお題
    "ロボットとドラゴンの会話"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-7Bの予想したお題
    "ロボットとドラゴンの会話"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:宇宙飛行士が月面でピザを食べる。

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-7Bの予想したお題
    "月面でのピザタイム"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-7Bの予想したお題
    "月面のピザ"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-7Bの予想したお題
    "月面の冒険"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-7Bの予想したお題
    "月光の旅人"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:ロボットがケーキを焼いている

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-7Bの予想したお題
    `"ロボットと誕生日ケーキ"``

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-7Bの予想したお題
    "ロボットたちの誕生日パーティー"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-7Bの予想したお題
    "ロボットの誕生日パーティー"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-7Bの予想したお題
    "ロボットの誕生日パーティー"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像


お題:🚀 月面でカレーを作る宇宙人👽 `

  • ラウンド 1: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 2: Qwen2-VL-7Bの予想したお題
    "月面の異星人の料理時間"

  • ラウンド 2: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 3: Qwen2-VL-7Bのの予想したお題
    "異星人の夜の魔法の鍋"

  • ラウンド 3: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 4: Qwen2-VL-7Bのの予想したお題
    "魔女の鍋と夜の森"

  • ラウンド 4: FLUX.1-schnellの生成画像
    生成画像

  • ラウンド 5: Qwen2-VL-7Bの予想したお題
    "魔女の小屋と夜の森"

  • ラウンド 5: FLUX.1-schnellの生成画像
    生成画像

所感など

いくつかの出力を確認した所感を書き留めておきます。

  • FLUX.1のschnellでも(英語)プロンプト追従性能はかなり高い。
  • Qwen2-VL-2Bはの場合は画像をうまく表現できておらず、ラウンドを重ねるごとに元の絵から離れる傾向が強い。
    →画像を端的に説明する能力では、やはり7Bモデルに劣る(日本語OCR性能は良かったが。。。)
  • Qwen2-VL-7Bも少し元の絵からずれることもあるが、全体的に2Bモデルよりも情報の欠落等が少ない印象。

また、本来のGartic Phoneには下記のようなところに面白さがあると思ってます。

  • 絵が下手な人や絵から意図を読み取るのが苦手な人が一人でもいると、そこから全然違うものが出力されるようになる。
  • 時間切れで中途半端な絵になることがある。
  • そもそも線画なので情報が少ない。

今回は特にFLUX.1を用いたことで、人間が1分程度で書ける絵とは言えないような情報量の多い絵が書けているため、本来のゲームの面白さは体感できなかったかと思います。

まとめ

今回は、画像生成AI、VLM、LLMを組み合わせて*Gartic Phone**風のお絵描き伝言ゲームを作り、遊んでみました。半分はお遊びなのですが、これまで記事にしてきた生成AIを組み合わせてなにか新しいプログラムを作るための下地は作れたので、今後は新しいアイデアが浮かんだときはまた記事にしたいと思います。

ここまで見ていただきありがとうございました。次回もぜひ、よろしくお願いします。

Discussion