エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

画像を理解するGPT-4 Visionで、既存の画像認識モデルを説明可能にする ~ 新宿の特徴は"ビル群"だが、日本橋の特徴は"密集したビル"? ~

特化型モデルで識別・ピクセル重要度抽出した後に、GPTで自然言語に変換する

画像認識モデルを作ったら、そのモデル自体から"こういうオブジェクトがあるから私はこう認識したんだよ"と教えてほしくありませんか? 今回作るのは、図のように、写真が東京都中央区で撮られているとわかるのは、"照明と配管"が特徴的で、"箱やパッケージが多い"から市場らしさがあるんだよ、と自分で説明してくれるAIです。

背景ですが、機械学習が、それを本業とする人以外にも幅広く使われるようになってくるのに伴い、モデルの説明可能性も重要視されているように思います。 テーブルデータからの識別問題であれば重要な項目を特徴重要度などから測ることはできなくはない *1ですし、自然言語処理であればどういうトークンが重要だったかというところである程度解釈できるように思います。 それらに比べても、画像処理・信号処理の分野での特徴重要度というのは、ピクセル単位での重要度は出せても、だから何?となっちゃうことが多くありませんか?

本稿では、LLMで画像が解釈できるようになったなら、画像の特徴重要度を解釈させることで、既存の特化モデルの説明可能性をLLMに任せようという取り組みを紹介します。

こんにちは、AI・機械学習チームリーダーの大垣(id:Hi_king)です。 これは エムスリー Advent Calendar 2023 の4日目の記事です。 前日は藤原さんによる、スマートフォンアプリのA/Bテスト実装例 - エムスリーテックブログ でした。

さてさてついにGPT-4での画像入力機能が公開されましたね。 コンピュータビジョンの業界にいるものの端くれとしてめちゃめちゃ楽しみにしていました。 GPT-4Vでできる・やるべきことは、当然と言えば当然ながら既存の画像認識モデルで解けるあらゆるタスクをうまく解いてくれる、というわけでは(現状)ありませんね。 しかし、自前のモデルを作らずともvision&languageの分野に触れやすくなるのは確実です。

特に、Microsoft Researchからも既に研究が出ているように、既存のComputerVisionタスクの出力を画像としてGPT-4Vに入れることで新たなタスクが解けるようにする、というのはワクワクする話ですよね*2

論文Fig2より引用。画像にセグメンテーションを施してから入力することでVisual Q&Aの精度が上がる

本稿でも、LLMで既存の画像認識モデルができることを増やそう!がテーマとします。具体的には、既存の画像認識モデルから出力したピクセル単位での重要度を入力とし、それを自然言語で説明させることで、既存の画像認識モデルの説明可能性を向上させます。

画像認識モデルの説明可能性はまだ職人技

このタスクに着手したモチベーションとしては、画像認識モデルの説明可能性、特に、このモデルは全体としてどういう特徴を見ているんだ?の理解にはまだまだ職人芸が必要とされているのが現状に思います。

例えば、私の過去のブログで行った、写真を入力にして撮影場所を当てる"逆ストリートビュー"モデルでも、その作成後の解析は

  • 写真から撮影場所がどこかを予測するモデルを作る
  • 江東区と予測される確信度が高いTOP7を見る
  • なんとなく全部柵が映ってないか? <- 人間の職人芸
  • 他の区の上位も見てみる
  • 柵には地域の特徴が出るぞ

という論理展開をしています。ある程度納得できる結論(柵が特徴として重要!)を導けたとは思うものの、ここには重要と思われる画像のピックアップや、そこに映る重要なオブジェクトを想像する、という一種の職人芸的なプロセスが必要となります。

www.m3tech.blog

そこで今回はこの既存モデルをテーマに、このプロセスをLLMで支援し、職人芸的ドメイン知識をより少なく結論を導くことを目標とします。大きく言うなら、機械学習の"解釈"の民主化に迫ります。 詳しく知りたい方は、ぜひこの先に進む前にこちらの記事もお読みになっていただけるとより理解が進むと思います!

1枚の画像についての説明可能性

入力画像に対して、学習済みの撮影場所予測モデルが重要とするピクセルをGradCAMにより算出

画像認識モデルの説明可能性を考える時に、最も一般的に取られる方法としては、ピクセル単位での重要度を算出する方法です。 例えば手法の一つであるGradCAMを適用すると、前述の撮影場所予測モデルがどこのピクセルに注目したかがわかります。

私が解釈するなら、この築地市場の写真から中央区であると判断している根拠が、段ボールが剥き出しで積まれていること、天井にハシゴ状の配管が剥き出しではられている事、剥き出しの照明が複数あること、などを見ているんだろうなーと推測します。 とはいえ、このステップにはまだ人間の解釈が必要になってますよね。。。

お。。。?つまり?

このGradCAMから注目オブジェクトの特徴に翻訳する部分をLLMに任せられないか、という方向性が今回の研究テーマです。

特化型モデルの出力とGradCAMがぞうをGPT-4Vに入力して自然言語に翻訳するパイプライン

[再掲]特化型モデルで識別・ピクセル重要度抽出した後に、GPTで自然言語に変換する

ということで、このようなパイプラインを作成します。

  • 撮影場所を判定したい画像を与える
  • 認識モデルで撮影場所を判定する
  • さらに認識モデルが重要とするピクセルをGradCAMで抽出する
  • (判定結果、入力画像、GradCAM画像)の3つを後述のプロンプトに入力する

コードはGithubで公開してますので、詳細が気になった方はこちらをご覧ください。 tokyo_photo2geo/notebook/description_wih_gpt_vision.ipynb at main · Hi-king/tokyo_photo2geo · GitHub

GPT-4Vに入力する、画像・テキストプロンプトの作成と出力例

画像認識の部分やGradCAMの部分は以前のブログの延長です。今回新しく追加したGPT-4Visionに入力しているプロンプトは、

  • わたしは画像から撮影場所を特定する機械学習モデルを開発しました
  • 入力画像は <入力画像> です
  • GradCAMを用いてピクセル単位での画像の重要度を計算した画像は <GradCAM画像> です
  • なぜこの画像が <予測撮影場所> と判別されたかの理由を、その根拠となるオブジェクトの特徴について述べてください。

というものです。

このプロンプトに先の築地市場の画像とGradCAM画像を入れるとこのような返答が出力されます。

GradCAMを用いた画像から、モデルが注目していたオブジェクトを特定し、それらの特徴を基にしてなぜこの画像が東京都中央区と判別されたかを考察します。以下にその理由を箇条書きで説明します。

  1. 狭い通路と両側の店舗: GradCAMの画像では、通路の中央部分と両側にある店舗が赤く強調されています。これは、モデルが通路の形状と両側に並ぶ店舗の配置に注目していることを示しています。東京都中央区には、特に築地市場のような狭い通路と両側に店舗が並ぶ市場が存在し、このような特徴は中央区の特定の場所を連想させる可能性があります。

  2. 箱やパッケージの多さ: 画像には多くの箱やパッケージが積まれており、これらが市場や商業施設でよく見られる光景であることを示しています。中央区は商業活動が盛んな地域であり、このような環境は中央区の特徴と一致しています。

  3. 屋根の構造: GradCAMの画像で屋根部分が強調されていることから、モデルは屋根の構造にも注目していると考えられます。中央区の市場などでは、特有の屋根構造が見られることがあり、これが判別の手がかりになっている可能性があります。

  4. 照明と配管: 画像の上部には照明設備と配管が見られ、これらが市場や商業施設特有のインフラであることを示しています。中央区の市場ではこのような設備が典型的であり、モデルがこれらの特徴を重要な手がかりとしている可能性があります。

  5. 看板や文字: 画像には小さな看板や文字が見えますが、GradCAMの画像ではこれらが特に強調されているわけではありません。しかし、これらの存在自体が商業施設や市場の特徴であり、中央区の特定の場所を示唆する情報を含んでいる可能性があります。

無事に、箱やパッケージの多さ 屋根の構造 など、人間の解釈に近いような観点がテキストとして得られました!

頻出単語の解析

前項までで、1つの画像についてはモデルがどこを見ているかの言語化が自動でできるようになりましたね。 では、ここから、1つの画像だけではなく、総体としてモデルは何を学習したのかをもう少し掘っていきます。

先に見通しを述べると、1画像 -> 1説明文 -> 1ラベル(撮影場所)という状況ができたので、ここからは1説明文 -> 1ラベル(撮影場所)の関係に注目して、NLPの解析の話に持っていきます。 一度画像認識で撮影場所を当てているものを、さらに言葉に翻訳して、もう一度当てられるか?当てられるならどういう言葉が重要か?という問題に落とすわけですね。

前段のGradCAM + GPTで、"重要な説明文"に十分要約されていると考えるので、後段の処理は非常にシンプルなモデルを利用します。具体的には、先のパイプラインの後段から

  • 説明文を形態素解析して単語出現頻度ベクトルに
  • 単語出現頻度ベクトルから
  • 線形識別器によって、各クラスに重要な単語を抜き出す

という流れです。

説明文からさらに特徴語を絞り込むパイプライン

なお、ちょっとした変更として、こちらのパイプラインではモデルからGPTには識別結果を渡さないようにしました。渡している状況だと、gptはほぼ正解がわかっちゃうため、後段の線型識別が簡単になり、生成する特徴語にバイアスがかかるからです。

下記のテーブルが、"言葉から撮影場所を当てる"後段タスクで重要とされた特徴語です。

表: 地域ごとに、その地域を当てるための識別器が重要としている特徴語。カッコ内は適合率(そのワードが入っていてその地域である写真数/そのワードが入っている写真数)。赤字のセルは次項で注目する面白いワード。

特徴語順位 北海道旭川市 東京都中央区 東京都千代田区 東京都新宿区 東京都江東区 東京都渋谷区 東京都港区
1 低層(143/157) 有無(6/11) アーチ(9/28) 群(12/63) マンション(8/12) 強(6/27) 一角(6/8)
2 広い(165/331) 密集(11/27) 非常(6/17) 面し(5/18) 水面(7/13) アンテナ(5/11) ない(6/23)
3 庭(38/58) られ(38/111) 地面(10/57) レーン(14/68) 自転(56/283) 植え込み(8/41) タワー(5/6)
4 空(172/341) 乗用(6/10) 空(19/341) 路(119/1080) サイン(7/29) 材質(7/44) 板(85/404)
5 雲(54/82) テクスチャ(8/24) 座(5/11) 多層(9/32) 標示(9/28) 外観(15/71) 掲示(8/16)
6 低い(36/47) カーテン(6/15) タクシー(6/20) 塀(8/28) 公共(9/40) バルコニー(27/117) ガラス(81/245)
7 青空(62/129) 取り付け(23/53) パネル(5/12) バルコニー(28/117) 取り付け(8/53) 装飾(8/40) 駅(6/15)
8 看板(65/383) ビル(185/579) 幅広い(9/39) 人(11/78) ガードレール(8/39) 石造り(6/20) 大きな(14/33)
9 住宅(75/174) 隙間(24/54) 駅(6/15) 日差し(8/61) 駐輪(18/65) 広告(6/61) タクシー(8/20)
10 影(36/136) 角(31/99) 青い(10/69) 商業(5/22) コーン(8/49) 雰囲気(8/44) 室外(6/38)

面白い特徴を探す

ガードレール

まさに江東区の特徴8位に、前回のブログの結論であった"ガードレール"が出てきました。この、波形のガードレールが江東区のシンボルですな。 1位じゃない理由は、フェンスと言い換えられてるとか、他の区でも特徴的なガードレールがある、とかですね。

"高層ビル","歩道橋","緑の植栽","道路標識","自動車","自転車駐輪場","街灯","ガードレール","横断歩道","交通信号"

タワー

港区3位のタワーは言うまでもない例のタワー🗼ですね。

"東京タワー","公園の遊歩道","木々","芝生","街灯","遠景のビル群","空と雲","人々"

北海道の特徴は。。。低層、広い、空、雲。。。まぁせやなと言う感じです。空よりも雲の方がprecisionが高いのは、東京でもビルの隙間の空は見えるものの、雲の広がりを見ることって確かに少ないのかなーと思いました。

"広い駐車場","低層の建物","青い壁の建物","広い空と雲","遠くの山々","横断歩道の白線","駐車された車","道路の標識","緑の樹木","広い道路"

ところで、ニトリは北海道発の企業なんでこれはいい写真ですね*3!

"自転"

江東区3位 "自転"これは面白かったです。自転車が他の区よりも多いのか?とも思ったのですが、それはあるかもですが、詳しくみると、 "自転車専用道路のマーク" でした。確かに江東区に限らずですが湾岸に行くと自転車専用道路多くなってきますよね。

"路上の白い線画","自転車専用レーンのマーク","アスファルトの質感","建物のファサード","窓の配置とデザイン","バルコニーの手すり","道路標識","街灯のデザイン","地上の配管やユーティリティーカバー","横断歩道のマーク","路肩のコンクリートブロック"

面し

新宿区2位"面し"は"路地に面した(住宅・シャッター)"でした。確かに。

"高層ビルのシルエット","電柱と電線","狭い路地","ビルの間の隙間","路上の白線","建物の壁面","窓の配置","路地の舗装状態","ビルの外壁材質","路地に面したシャッター","ビルの屋上設備"

密集 vs 群

中央区2位"密集"、新宿区1位"群"これはどちらもビルのことであるとは想像していたんですが、区によって使われる言葉が違うのはちょっと腑に落ちませんよね???

しかし、画像を見てみると確かに、新宿区はビル群と言えるかもって気持ちになってきます。 一方で中央区の日本橋の写真は密集してますね。 つまり、新宿は、ビルが多いところはどうやら道も開けてるところが多い、一方で日本橋はビルとビルの間が狭いってことなんでしょう。また、新宿には高くて見晴らしのいい建物が作られているので俯瞰写真があるのも違いかもしれません。

"多層のビル群","道路標識","車両","歩道","街路樹"

"高層ビル群","広い公園や緑地","海や湾岸に近い地形","独特の建築様式を持つビル","広範囲に広がる市街地"

"ビルの密集","狭い道路","オフィスビルの外観","地上の標識","駐車された車","歩道橋の一部","都市的な窓の配置","直線的な道路標示","ビルの間の隙間","建築のモダンなデザイン"

まとめ

どの語をピックアップするかにはまだまだ手作業があるものの(そこに面白さもあるのですが)、画像認識モデルを作る -> モデルが見ていそうな特徴を特徴語として抽出するまでの一連の流れをなるべく自動化・主観の排除をできました。

  • GPT-Visionは既に持っている画像認識モデルの解釈のサポートに使える
  • 言語化することで、俯瞰的に見られるため、1枚1枚をみるよりも広く特徴をひろえる
  • 逆に、画像的に似ていても、言語にすると細かな違いも発見できる(密集したビルとビル群は違う)

モデルの解釈にLLMが便利・楽、ということ以上に、画像を知るのに言語化は重要だなとあらためて認識できました。

We are hiring!

エムスリーでは、精度の高いモデルを作った後に、そこから現実の問題への示唆を与えられるエンジニアを募集中です。

社内外問わず、基盤を使ったシステムの開発や施策により世の中にインパクトを与える機会が多数ありますので、是非我こそは!という方はカジュアル面談、ご応募お待ちしています!

jobs.m3.com

基本的にはwebサービスのチームなのですが、ちょうど最近コンピュータビジョンのプロダクトもリリースされてます。研究レベルの知識も活かしつつ幅広くMLエンジニアリングやるぜと言うメンバーを募集中です!

インターンも通年募集してますので興味のある学生の皆さん一緒にMLで問題解決やりましょう!

【新卒】機械学習エンジニア(インターン) / エムスリー株式会社

*1:実際には特徴次元が高すぎるとか集約特徴を作ったりとかで一筋縄ではないかないことも多い

*2:Set-of-Mark Prompting Unleashes Extraordinary Visual Grounding in GPT-4V, arxiv.org

*3:調べてみたけど北海道にめちゃめちゃ多いというわけでもないので、特徴にはならないかもですw