コンテンツに移動
AI & 機械学習

画像データに対するモデル予測の説明

2020年5月7日
https://storage.googleapis.com/gweb-cloudblog-publish/images/gcp_explainable_ai.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2020 年 4 月 28 日に、Google Cloud blog に投稿されたものの抄訳です。

編集部注: このブログは、AI Explanations でさまざまなデータ型を使用する方法について取り上げているシリーズの第 2 回目のブログ投稿です。

念のためにご説明させていただくと、Google では昨年 11 月に Explainable AI の提供を開始しました。Explainable AI は、機械学習モデルが予測を行う方法を人間が理解するのに役立つツールです。本稿では、説明が画像分類モデルで機能する仕組みと、Cloud AI Platform にデプロイされた画像モデルについて AI Explanations を使用して理解を深める方法について詳しく説明していきます。また、本日リリースした新しい画像アトリビューション方式の XRAI についてもご紹介します。

XRAI は、アトリビューションを表示する新しい方法であり、個々のピクセルだけでなく、画像のどの特徴がモデルに最も影響を与えているかをハイライト表示します。次の画像は、モデルがこの画像をハスキー犬として予測した際に、どの部分がその判断に貢献したかを示しており、一目でその結果を確認できます。このスケールで示されているように、XRAI は viridis カラーパレットに基づいて、最も影響力のある部分を黄色、そして最も影響力が少ない部分を青色でハイライト表示します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_NqyBcom.max-1200x1200.jpg

XRAI についての詳細は、Google の PAIR チームによるこちらの論文をご覧ください。Explainable AI に関するさまざまな情報については、このシリーズの前回の投稿や Google のホワイトペーパーをご確認ください。 

画像モデルに Explainable AI を使用する理由

モデルの誤った分類をデバッグしたり、その予測が信頼に足るかどうかを判断したりするうえで、モデルがその予測を行った理由を理解することが非常に役立ちます。説明可能性は、画像のどの部分がモデルに特定の分類を行わせたのかを示します。

画像の説明は、モデル作成者とモデル関係者の両者にとって役立つものといえるでしょう。また、モデルを作成するデータ サイエンティストや ML エンジニアにとって、説明はモデルが画像内の適切なシグナルを拾っていることを確認するのに便利です。アパレルの分類モデルの場合は、ハイライト表示されたピクセルによってモデルがある衣服固有の特徴を捉えていることが確認されることで、特定の画像に対して正しく動作していることを確信できます。一方、ハイライト表示されたピクセルが画像の背景にある場合、モデルがトレーニング データから適切な特徴を学習していない可能性があります。このような場合に、データの不均衡を識別して修正できるようにするのが説明です。

説明を使用したモデル動作のデバッグの例として、モデルが適切に「カヌー / カヤック」に分類したこの画像のアトリビューションを見てみましょう。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_Ss3LxhE.max-1100x1100.jpg

写真は正しく分類されていますが、モデルの予測を最も良く示しているのが船体ではなくオールであることがアトリビューションから確認できます。オールだけを含むように画像を切り抜いて、カヤックが表示されていない場合でも、モデルはこれを「カヌー / カヤック」として分類しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_uWZZ3Hk.max-1100x1100.jpg

こうした知識を活用してトレーニング データを改善し、オールの有無にかかわらず、さまざまな角度からカヤックの画像をより多く含めるようにします。また、前景と背景にオールが見える画像をトレーニング データに追加することで、「オール」ラベルも改善できます。

モデルの予測について、外部関係者に説明しなくてはならない場面は多々あります。たとえば、製造会社がモデルを使用して欠陥製品を識別している場合、モデルによって欠陥とラベル付けされた製品を廃棄する前に、その分類をそのまま受容せず何とか対応したいことがあります。このような場合、モデルが特定の分類を行うことになった画像内の部分を認識しておくことが特に有用です。 

前回の投稿をお読みであれば、表形式モデルの説明が画像モデルの説明にどのように関連するのか疑問に思われるかもしれません。実はこの 2 つは、同じ方式を採用しているのですが、結果の表示が異なるのです。表形式データでは、各特徴がモデルの予測にどの程度影響を及ぼしたかを示すアトリビューション値が、それぞれの特徴に割り当てられます。画像モデルでは、各ピクセルを個別の特徴と考えることができ、説明方式によってアトリビューション値が画像内のすべてのピクセルに割り当てられます。画像アトリビューションをよりわかりやすくするために、後処理のレイヤを上に追加して分析情報をより際立たせるように工夫しています。

Cloud AI Platform での画像の説明

AI Platform Explanations は現在、Google Research が発行した論文に基づき、画像モデルのアトリビューションの取得に統合勾配(IG)と、本日リリースした  XRAI の 2 つの方式を提供しています。統合勾配はモデルの予測を示す個々のピクセルを返しますが、XRAI は部分ベースのアトリビューションのヒートマップを提供します。ここで前述のハスキー犬の画像を使って 2 つの技術を比較してみましょう。左側が統合勾配を使用した結果です。
https://storage.googleapis.com/gweb-cloudblog-publish/images/4_ISWcnwQ.max-1100x1100.jpg

使用する画像データの種類に応じて、それぞれのアプローチに独特の長所があります。統合勾配は、医療用画像やラボで撮影された画像など、非自然環境で撮影された画像に最適ですが、XRAI は現時点では、家屋や動物など自然な画像で最高のパフォーマンスを発揮します。統合勾配は、画像内のピクセルごとに異なるアトリビューション値を返すため、より粒度が細かくなります。一方 XRAI は、ピクセルを該当部分に結合し、画像内のさまざまな領域の相対的重要性を示します。これは自然な画像には効果的であり、「犬の目の下の左上のピクセル」よりも、「犬の顔の形」といった分析情報で、より上位のレベルでまとめる方が良いでしょう。

AI Platform でモデル バージョンを作成する場合、使用するアトリビューション方式を 1 つのパラメータでしか指定できないため、使用する画像データにどちらが適しているか、両方を試してみることをおすすめします。次のセクションでは、説明付きの画像モデルをデプロイする方法を説明します。

デプロイする画像モデルを準備する

TensorFlow モデルに画像分類のトレーニングを行ったら、AI Platform Explanations にデプロイするために explanation_metadata.json ファイルを作成する必要があります。これにより、説明を行うモデルのグラフの入力と、モデルに使用するベースラインが Explanations のサービスに通知されます。 

表形式のモデルが各特徴のベースライン値を提供するのと同じように、画像モデルではベースライン画像を提供します。一般的に画像モデルは、情報がないベースライン、つまり追加情報が表示されていないベースラインを使用します。画像モデルの共通ベースラインには、黒一色か白一色の画像、またはピクセル値がランダムな画像が含まれます。AI Explanations でベースラインとして黒一色と白一色の両方の画像を使用する場合、メタデータの input_baselines キーの値として [0,1] を渡すことができます。ランダムな画像を使用するには、モデルが想定するサイズと同じサイズで、ランダムに生成されたピクセル値のリストを渡します。たとえば、モデルが 192×192 ピクセルのカラー画像を受け取った場合、これが説明のメタデータでピクセルがランダムなベースライン画像を使用する方法になります。

“input_baselines”: [np.random.rand(192,192,3).tolist()]

画像モデルの完全な explanation_metadata.json ファイルの例は、こちらで確認できます。メタデータ ファイルの準備ができたら、同じ Cloud Storage バケットに SavedModel としてアップロードします。

TensorFlow 画像モデルを AI Platform Explanations にデプロイする場合、モデルの提供関数が文字列を入力として受け取るように設定されていることを確認します(クライアントによる base64 でエンコードされた画像文字列の送信など)。その後、予測のためにモデルに送信する前にサーバーでピクセルの配列に変換します。このアプローチは、サンプル ノートブックで使用されています。

AI Platform Explanations に画像モデルをデプロイする

AI Platform API または Google Cloud の gcloud CLI のいずれかを使用して AI Platform Explanations にモデルをデプロイできます。ここでは gcloud を使った例を紹介します。説明方式は、以下の --explanation-method フラグを変更するだけで変えられます。次の例では、XRAI を使用したモデルをデプロイします。
読み込んでいます...

上記の origin フラグには、保存したモデルアセットとメタデータ ファイルの GCS パスを含める必要があります。num-integral-steps フラグは、モデルの積分計算を近似するために、勾配経路に沿って使用されるステップ数を決定します。詳細については XRAI に関する論文をご確認ください。

上記のコマンドを実行すると、5~10 分以内にモデルがデプロイされます。説明の取得には、gcloud または AI Platform Prediction API を使用できます。説明のレスポンスは次のようになります。

読み込んでいます...

最終的に、次のように返された画像の説明を確認できます。

読み込んでいます...

説明の可視化方法をカスタマイズする

XRAI を新たな説明方式として追加することに加え、画像の説明の可視化方法をカスタマイズするための構成オプションも追加しました。可視化は、画像内の予測ピクセルまたは該当部分をハイライト表示するのに役立ちますが、可視化の設定は、使用している画像の種類によって変わる場合があります。以前、アトリビューションは最も重要な上位 60% のピクセルがハイライト表示された画像を返していましたが、今回の改善により、返されるピクセルの割合、正または負のピクセルを表示するかどうか、オーバーレイのタイプなどを指定できるようになりました。 

可視化の設定の変更を確認するには、Kaggle の目視検査データセットでトレーニングしたモデルの予測を確認してみましょう。これは 2 項分類モデルで、欠陥のある鋳造金属を識別するために製造業で使用されています。次の画像は欠陥のある鋳造物で、右側に円形のくぼみがあるのがわかります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5_yt1Qksw.max-300x300.jpg

ピクセルのアトリビューションが可視化される方法をカスタマイズするには、explanation_metadata.json に次のパラメータを設定します。

読み込んでいます...

色覚特性のある方に対応したカラー マッピングの pink_green オプションに加えて、red_green も利用できます。可視化の構成オプションについて詳しくは、ドキュメント(TODO リンク)をご覧ください。

次に、これらのカスタマイズ オプションを使って何ができるかを確認するには、clip_below_percentile と可視化 type パラメータの変更を試してみます。clip_below_percentile は、予測のために送信する画像に対して返されるアトリビューション ピクセルの数を指定します。これを 0 にして、clip_above_percentile をデフォルトの 100 のままにすると、画像全体がハイライト表示されます。上記のコード スニペットで行ったように clip_below_percentile を 98 に設定すると、アトリビューション値が上位 2% のピクセルのみがハイライト表示されます。 

次の写真は、左から右に向かって、今回の画像に対するこのモデルの「欠陥」予測で、正のアトリビューション ピクセルが上位 2%、10%、30% の統合勾配を説明したものです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/6_AKKfrpR.max-800x800.jpg

可視化構成の polarity パラメータは、アトリビューション値の符号または方向を参照します。上記の画像では polarity: positive を使用しましたが、最も高い正のアトリビューション値を持つピクセルを示しています。言い換えれば、これらのピクセルが、この画像の「欠陥」モデルの予測において最も影響力のあるピクセルということになります。反対に polarity を negative に設定した場合、ハイライト表示されたピクセルは、モデルが画像を「欠陥」ラベルに関連付けないようにする領域を示します。負の polarity アトリビューションは、画像内の偽陰性領域を特定することで、モデルが誤って予測した画像をデバッグするのに役立ちます。

一方、低い polarity のピクセル(0 に近いアトリビューションの絶対値)は、特定の予測においてモデルにとって重要度が最も低いピクセルを示します。モデルが正しく動作している場合、重要度が最も低いピクセルは画像の背景または鋳造物の滑らかな部分になります。

画像の説明に対するサニティ チェック

画像アトリビューションは、モデルをデバッグして適切なシグナルを確実に取得できるようにするのに役立ちますが、モデルが返した説明が信頼できるかを確認するには、依然としていくつかのサニティ チェックを行うことが重要です。それぞれの説明の正確さを伝えるために、説明からの JSON レスポンスに approx_error フィールドを追加しました。一般に、approx_error 値が低いほど、モデルの説明の信頼度が高まります。approx_error が 5% を超える場合は、説明方式のステップ数を増やすか、情報のないベースラインを選択していることを確認してください。たとえば、ベースラインとして白一色の画像を選択したものの、トレーニング画像の多くが白い背景である場合は、別のものを選択したほうがよいでしょう。

また、正しいベースラインを使用していることを確認する必要もあります。行おうとしている比較を反映しているかだけでなく、全般的に「情報がない」ことも確認すべきです。つまり、モデルがベースライン画像で何も「見えない」という状態です。これを簡単にチェックする方法の一つは、ベースラインの予測クラスごとのスコアが 1/k に近いか確認することです(k はクラス数を示します)。

approx_error を調べてさまざまなベースラインを試すことは、説明の信頼度を把握することには役立ちますが、説明の精度を評価する唯一の基準としては使用すべきではありません。トレーニング データやモデル アーキテクチャなど、その他の多くの要因が説明の品質に影響を与えているためです。

次のステップ

今回は、画像の説明で実現できるほんの一部についてご紹介しました。画像の説明の詳細情報については、以下の参考資料をご覧ください。

この投稿に対するご意見やご感想がありましたら、@SRobTweets の Twitter アカウントまでお寄せください。本シリーズの次回の投稿では、モデルの説明を要約して外部関係者に提示する方法について取り上げる予定です。引き続きブログにご注目ください。

- By デベロッパー アドボケイト Sara Robinson

投稿先