😎

OpenAIのVision APIのdetailパラメータに関するメモ

2024/07/23に公開

最近、画像をLLMに見てもらうのが便利なことに気付きました。こういうことをやりたい場面って色々あります。画像を食わすのにいろいろ考えて、ドキュメントを読んで知ったことを書いておきます。

最初に今回の記事概要説明すると、画像サイズはトークン数に関係してくるので、できるだけ減らしてやりたいとか、色々思って自分でいじったけど、detailパラメータでその辺上手くやってくれたり、逆にめちゃくちゃ減らしたりできるそうなー。

利用モデルは GPT-4o です。

最初の段階

この時点でドキュメントはノールック。
画像をLLMに渡し始めて、思いました。

「画像サイズは結局プロンプトに含まれるので、小さくした方が価格やすくなるんでは?」

ということで、いろいろ画像を小さくしてみたりしました。

すると、かなり認識の精度が悪くなってきました。小さくて読めませんとか返答も帰ってきます。面白いのは、一か所間違うとその画像全体で間違いが多くなることです。なんでだろうか。

うーむ。それにしても、画像はどの辺のサイズが良いのだろうか?ドキュメントを読んでみることにしました。

ドキュメントを観察する

まずはお値段の方から観察しました。

https://platform.openai.com/docs/guides/vision/calculating-costs

これを見ると予想通り、画像がでかけりゃtokens数もでかくなる。
一方で、detailというパラメータがあり、それにlowを渡したり、highを渡したりすることが出来る。画像のベースコストは85token + α とコストは計算される。という感じです。
これ以上の解説はclaudeによるものをどうぞ。

まずはhighから。

はい、できるだけ簡単に説明しましょう。「detail: high」の運用は次のような感じです:

大きすぎる画像は縮小:

まず、画像が2048x2048より大きければ、この大きさに収まるよう縮小します。


768ピクセルに合わせる:

次に、画像の短い方の辺を768ピクセルにします。
例えば、横長の画像なら高さが768ピクセルになります。


512ピクセル四角で数える:

その後、画像を512ピクセルの正方形で何個分あるか数えます。


コスト計算:

512ピクセル四角1つにつき170トークン
最後に85トークンを足す



つまり、大きな画像ほど多くの512ピクセル四角で構成されるので、コストが高くなります。でも、とても大きな画像でも最初に縮小されるので、コストが際限なく高くなることはありません。

画像が大きかったらリサイズしてくれるってことで、なるほどなるほど。

つぎはlow。

「detail: low」の場合は非常にシンプルです:

固定コスト:

画像のサイズに関係なく、常に85トークンです。


サイズ無関係:

小さな画像でも大きな画像でも、同じ85トークンです。


簡単な計算:

計算する必要はありません。常に85トークンです。


つまり、「detail: low」は:

画像の大きさを気にする必要がない
コストが予測しやすい
大きな画像を送る場合でも、コストを抑えられる

ただし、AIモデルが画像の細かい部分を見るのが難しくなる可能性があります。細部が重要でない場合や、コストを最小限に抑えたい場合に適しています。

という感じです。

なるほど。detail、設定してなかったわ。初期値は何でしょうか?気になったので、ドキュメントを読み続けます。

初期値は auto

ということで、上の方を見てみるとすぐに初期値は書かれていました。

なんと auto です。

https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding

はい。ここは短かったので英語のままです。

By default, the model will use the auto setting which will look at the image input size and decide if it should use the low or high setting.

autoにしてたら、良い感じにどっちか選んでくれるとのこと。渡す画像サイズは大きかったらリサイズしてくれて上限あるので、そんなに気にしなくてもよいかもねーという気持ちになりました。

それより、ケチって画像を渡すと、小さいからできないとかで、いろいろ試さないといけなかったので、まぁもうあんじょうやってくれって気持ちになれます。

まとめ

ということで、ビジョンのAPIのdetailパラメータを調べてみました。

ビジョンとかマルチモーダルとか必要なのか???、って思ってたんですけど、やってみるとめちゃくちゃ面白いですね。あと、こっちの方が正解・不正解が容易に分かるのも面白いです。画像をくるくる回転させてみたりもしていたのですが、正しく見える方向の方がやっぱり精度が良かったりと、ここでも、データの整理が大事なんだなぁと遠い目になりました。

次は前処理エージェントでも作ってみようか(完)

Discussion