🧠

ChatGPT Visionで色々実験してみたまとめ

2024/02/18に公開

ChatGPT Visionを使ってできそうなことを色々試してみたので、そのレポート的な記事です。

ChatGPT Visionとは?

モデルが画像を取り込み、それに関する質問に答えてくれます。

https://platform.openai.com/docs/guides/vision

  • 画像をモデルに提供する方法は二つ
    • 画像のリンクを渡す
    • Base64でエンコードされた画像を渡す
  • 対応フォーマット
    • 現在、PNG (.png)、JPEG (.jpeg および .jpg)、WEBP (.webp)、および非アニメーション GIF (.gif) をサポート
  • アップロード画像のサイズ制限
    • 画像あたり20MBに制限
    • アップロードした画像を手動で削除することはできない
  • できること
    • 車の色が何色か
  • できないこと
    • 部屋のどこに椅子があるか

解像度のオプション

  • auto
    • デフォルトの設定
    • モデルが設定を後述の二択から決める
  • low
    • 低解像度モード
    • highより処理が早い
  • high
    • 高解像度モード

コストの計算

  • 解像度のオプションで決まる
  • low
    • 固定で85トークン
  • high
    • 固定で85トークン
    • 2048四方にスケーリング→最短辺が768pxになるように拡大縮小
    • 512pxの正方形何個分かを数える
    • 85 + (170 * 512pxの正方形) = 最終的なトークンコスト

highの場合の計算方法が面倒ですが、公式でシミュレーターを提供してくれているのでこれを使うのが良いかと思います。

https://openai.com/pricing#language-models

画像の管理

  • ステートレス
    • モデルに渡す画像やメッセージは自分で管理する
    • リクエストごとに画像を渡す必要がある
  • 長時間実行される会話の場合はURL経由推奨 (らしい)
  • 解像度highを使うならあらかじめ画像を小さくしておくと節約できる
  • API経由でアップロードされた画像は後に削除され、モデルの学習に使用されない

制限事項

  • CTスキャンなど特殊な医療画像の解釈には適していない(ので使うな)
  • 英語以外はうまく解釈できない
  • 小さいテキストでも拡大して拾おうとするので気をつけろ
  • 回転・上下逆のテキストや画像はうまく解釈できない
  • 色や線(実・破・点)が異なるグラフやテキストはうまく解釈できない (統一されてないってこと?)
  • 空間把握は苦手 (座標を把握すること)
  • パノラマ・魚眼はうまく解釈できない

…など。

いろいろやってみた

見出しが試してみたこと、太字がプロンプト、引用が解答です。見出しに明記がない場合、解像度のオプションはすべて「high」を指定してAPIを叩いています。

画像に枚数制限はないのか?

ドキュメントには画像は20MBまでという制限は書かれていますが、枚数については制限がかかれていませんでした。

そこで以下の画像を20枚一度のリクエストで上げることができるかを検証しました。

結果普通にレスポンスを取得できました。

おそらくですが枚数に制限はなく、画像が合計で20MB以下であればアップロードできそうではあります。

色は説明できる?

まずは「できる」とドキュメントに明記されているところから始めてみます。

「何色の服を着ていますか?」

画像の中の人物は赤いトップスと紺色のスカートを着ています。 彼女はまた、紺色の靴下またはレギンスを履いているように見えます。

ということで、着ているものの説明をしてくれました。

スカートの色が紺色かは微妙ですが、大体の色の答えは合っているように思います。

位置は説明できる?

次に苦手だと書かれている位置について聞いてみます。曖昧な答えを回避するため、5択で聞きます。

「画像のどのあたりに座っている?中央?右?左?上?下?」

女の子は画像の左側に座っています。 彼女は草と緑に覆われた丘の上に座っており、車の駐車場を含むぼやけた背景が彼女の右側に見えます。

ということで、やはり位置について答えるのは苦手なようです。

ここで気になるのが、写真の後ろに映っているぼやけたものについて言及してくれていることです。

背景について聞いてみる

次はその背景について聞いてみます。

「女の子の後ろに何が写ってる?」

女の子は、数台の車が並ぶ駐車場を含む背景の前に座っています。 このシーンは、屋外環境、おそらく公園または同様のレクリエーションエリアの印象を与えます。 焦点は女の子にあり、浅い被写界深度で背景をぼかし、被写体としての彼女を強調しています。

どうやらAIはちゃんと後ろの車らしき物体を車と認識してくれているようです。では解像度を下げた場合どうなるかを聞いてみようと思います。

背景について聞いてみる (low)

「女の子の後ろに何が写ってる?」

画像では、少女は芝生の塚に座っているように見えます。 彼女の後ろには、さまざまな車が列をなして駐車されている駐車場のように見えるものが含まれたぼやけた背景があります。 カジュアルな屋外環境を考えると、環境はややオープンで、おそらく公園またはレクリエーションエリアの近くにあるようです。 背景がぼやけた少女に焦点を当てると、ノートやスケッチブックを使って何かをしていることに夢中になっているように見え、孤立感と静けさの感覚が生まれます。

ということで、このくらいの解像度であればlowの場合でも車を車と認識しているようです。これが分かるなら大体の場合はlowを指定しておいてもよさそう。

ルビンの壺

次はAIを騙しにかかります。上下左右が逆転している画像が苦手ということで有名なルビンの壺について聞いてみます。

「何が見える?」

この画像は、2 つの方法のいずれかで知覚できる有名な錯視です。 白いスペースがあるため、中央に花瓶やゴブレットが見える人もいます。 また、両側の黒い空間によって作られた 2 人の顔が横顔でお互いを見つめている様子も見られます。 これは、図と地面の認識の優れた例であり、私たちの視覚システムが図 (花瓶または顔) と地面 (花瓶の周りの空間または顔が見える背景) を見る間をどのように切り替えることができるかを示しています。

AIの解答を見るに、すでにルビンの壺を学習済みな様子が伺えます。

AIが学習してなさそうな騙し絵

今度はAIが絶対に知らなさそうな騙し絵で実験してみます。一応補足しておくと、骸骨のように見えると同時に、猫が魚を咥えて(抱きかかえて?)いるように見える騙し絵です。

https://img.fril.jp/img/284805552/m/805675062.jpg?1576596707

「何が見える?」

これは、様式化された骸骨または頭蓋骨の横顔を描いたエナメルピンです。 デザインはかなり単純化されており、漫画のようなもので、骸骨が手に頭をもたせているように見え、熟考や退屈によく関連付けられるポーズを反映しています。 黒と白のコントラストが大胆でグラフィックな印象を与えます。

骸骨のみ認識できているようです。

文字を認識してくれる?

次は文字を認識してくれるかどうかです。まずは英語から。

そしてただ文字を認識するだけでなく、文脈も理解できるかを試したいと思います。

ここではかの有名な鋼の錬金術師1話のシーンを使わせていただいています。

一応、日本語で何を話しているかを載せておきます。

「なにについて話してる?」

この画像は漫画のページからのもので、描かれている会話には、太陽神レトの使者でレト教会の創設者であると言われているコルネロ神父という人物について登場人物が話し合っています。 彼らは、彼が本当の奇跡を起こす能力があり、人々に「神のすべての道」を示すために数年前に町に来た素晴らしい男だと考えられていると述べています。この会話は、登場人物がいるより大きなプロットの一部である可能性があります。 コルネロ神父の行動や影響について、より詳しく調べたり、理解しようとしています。

ハガレンを読んだことある人なら、AIが正しいことを言っているのがよく分かるはずです。そうでなくとも、漫画内で起きていることやこれが物語の一部であることも理解しています。またエドとアルの意図についても理解している様子です。

文字を認識してくれる? (日本語)

英語はちゃんと理解できるのがわかったので、次は日本語で試してみます。画像は自分の最推しである水瀬いのりさんです。

「何が写っているか説明せよ。文字があればテキストに起こして」

この画像は、カメラに向かってポーズをとる女性をフィーチャーしたプロモーション グラフィックです。 彼女は薄手の長袖トップを着て、その上に濃い色のベストを着ており、手でストラップを調整しています。 彼女の左側には、おそらく何かの宣伝か特別なメッセージを発表する日本語のテキストと、日本のメディアでそのようなプロモーション画像によく付随する署名や落書きが描かれています。 テキストの正確な内容と女性の身元は特定されていないが、日本の有名人や著名人が通常使用する何らかの形式のファンエンゲージメントコンテンツであると思われる。

残念ながらAIはいのりんを知りませんでした…

また文字が日本語だということはわかっていそうですが、その内容を解釈することはできていないようです。

あと、ストラップを調整しているように見えているのがジワります。

献立を考えてもらう

次は冷蔵庫の中を見せて、献立を考えてもらいます。

「献立を考えて」

冷蔵庫の中身をもとに、さまざまな食事を考えることができます。 以下に、冷蔵庫にある一般的な材料を使って作ることができるいくつかのオプションを示します。

  1. サラダ - 新鮮なレタスやその他の野菜を使ってサラダを作ることができます。 サラダドレッシングがあれば、あるいは油と酢だけでも、新鮮なおかずに混ぜることができます。
  2. 炒める - 写真のえのきなどの野菜があれば炒めることができます。 鶏肉、牛肉、豆腐などの手持ちのタンパク質とソースを加えれば、充実したメインコースが完成します。
  3. サンドイッチまたはラップ - パンまたはトルティーヤがあれば、冷蔵庫にあるレタスやその他の野菜、デリミートを使ってサンドイッチやラップを作ることができます。
  4. スープ - 野菜を使って野菜スープやスープを作り、鶏肉や牛肉があればそれを加えて肉ベースのスープを作ることができます。 風味を加えるためにハーブやスパイスで味付けします。
  5. オムレツまたはスクランブルエッグ - 卵がある場合は、オムレツまたはスクランブルエッグを作り、野菜を加えて栄養と味を加えることができます。

正確なメニューは、入手できるものと食事の好みによって異なることに注意してください。 目に見えるものを補うために、パントリーや冷凍庫に追加の材料がないかどうかを常に確認することをお勧めします。

これはサンプルに使った画像が少しイマイチで、AI(というか欧米の研究者)が納豆のパックやビヒダスをヨーグルトと認識するのは難しいでしょう。

なので下の方にある野菜のみ認識できているようです。レタスと言っていますが、実際は白菜のように見えます。えのきと言っているのはもやしでしょうか。

二枚の画像から状況を推察してもらう

最後は2枚の画像から状況を推察してもらおうと思います。

これは2023年のWBC決勝で大谷選手がマイク・トラウト選手を三振にとり世界一になったシーンです。自分がAIに期待した答えは、「ボールを投げた投手が見事三振に打ち取った」「ホームランを打たれ悔しがっている」のような答えを期待していました。

「2つの画像の状況を総合すると、何が起こったと予想できる?」

2 つの画像に基づいて、それらは 2 つの異なる野球試合のものであるように見えます。 最初の画像では、投手が打者に野球ボールを送り、スイングの準備ができているところを示しています。 この画像は、野球の試合でよくある場面、つまり投手が打者を三振にしようとしたり、弱い打球を誘発しようとしたり、打者が効果的にボールを打とうとしている場面を捉えたものです。

2 番目の画像では、別の投手がいます。 興奮した、または勝ち誇ったような表情で示されており、投球に成功した直後である可能性があり、ゲームで三振または重要なアウトにつながる可能性があります。 その人物は「日本」と書かれたジャージを着ており、おそらく国際大会やトーナメントで日本を代表するチームでプレーしている可能性があることを示しています。

選手の服装と表示されている状況に基づいて、次のことが予測できます。 どちらのシーンも、投手が重要なプレーをする野球の試合の重要な瞬間に関連しているということです。 これらの特定の投球や試合全体の結果を判断することはできませんが、画像は野球というスポーツにおける激しいパフォーマンスと競争の瞬間を示唆しています。

AIはどうもそれぞれの画像に対しての解答をしているようです。そして、それぞれの分析結果から何かしらの相関を見出そうとしています。しかし、自分が期待した文脈を埋めて結果を導き出すといった想像力はまだ持っていないようでした。

おわりに

ここからは感想です。まず画像1枚あたりを高解像度モードでリクエストを投げてもレスポンスまでの時間は3,4秒ほどで非常に早かったです。

野菜や服といった文字ではない物体を解釈することは問題なくできていそうなので、自分の業界で活用するとすればR18画像を審査する場合などに活用することができそうだなと思いました。

画像の中の文字を分析してもらうのは、日本語だとまだ厳しそうですがこれは時間の問題な気もしますね。

Discussion