D-CLOSE - 物体検出モデルのためのXAI技術

近年の目覚ましいAI技術の発展に伴い、画像認識分野における物体検出モデルの活用が、医療や自動運転をはじめとする多岐にわたる分野で急速に拡大しています。しかしながら、これらの高性能な深層学習モデルが、どのように物体を検出し、どのような根拠で判断したのかという意思決定プロセスは、しばしばブラックボックスと見なされ、エンドユーザーにとって透明性が低いという課題が存在します。

特に、ユーザーからの信頼が不可欠なアプリケーションや、欧州一般データ保護規則(GDPR)のような透明性を求める規制の高まりを背景に、モデルの判断根拠を説明するExplainable AI(XAI)技術へのニーズがますます高まっています。

現在、多くのXAI手法が提案されていますが、その多くは画像分類タスクを主な対象としており、物体検出モデル特有の構造的な違いから、その説明はより困難とされています。本記事では、このような背景を踏まえ、あらゆる物体検出モデルに対して、その予測結果を説明することを目的としたXAI技術である「D-CLOSE」を紹介します。

既存の物体検出モデル向けXAI技術

物体検出モデルと透明性の課題

近年、深層学習を用いた物体検出モデルは、その卓越した性能により、自動運転、医療画像解析、安全監視システムなど、多岐にわたる分野で不可欠な技術となっています。これらの応用領域では、モデルの予測精度だけでなく、その判断根拠を理解し、信頼性を確保することが極めて重要です。

しかしながら、深層ニューラルネットワーク(DNN)の複雑性の増大に伴い、モデルがどのようにして物体を検出し、どのような根拠で判断したのかという内部の挙動や意思決定プロセスは、しばしばブラックボックスと見なされます。この透明性の欠如は、特に以下の場合に問題となります。

  • ユーザーからの信頼が求められる分野での活用時
  • GDPRのような透明性を義務付ける規制の存在下での運用時

このような透明性の欠如は、AI技術の広範な普及にとって大きな障壁となっています。

XAI技術の分類と特徴

このような背景から、Explainable AI(XAI)技術への関心が高まっており、多くの研究者がその開発に取り組んでいます。現在、様々なXAI手法が提案されていますが、その多くは主に画像分類タスクを対象としたものです。物体検出モデルは、画像内の複数のオブジェクトの位置とクラスを同時に予測するという、分類モデルとは異なる構造と出力を持つため、既存の分類向けXAI技術をそのまま適用することは困難です。

物体検出モデル向けの説明技術は、大きく分けて以下の2種類があります。

  1. ピクセルベースのSaliency Map
    • 入力画像の各ピクセルの重要度をスコア化
    • 課題:個々のピクセルのスコアだけでは、人間にとって直感的で理解しやすい説明とならない場合がある
  2. 領域ベースのSaliency Map
    • 入力画像内の重要な領域をヒートマップやセグメントとして表示
    • 利点:エンドユーザーにとってより理解しやすい傾向がある

画像分類モデルからの拡張アプローチ

初期の研究では、分類モデルの最終的な活性化層が予測に必要な特徴情報を保持していることに着目した手法が開発されました。

  • CAM(Class Activation Mapping)ベースの手法:
    • 主に分類モデルを対象としており、物体検出への直接適用は難しい
  • 複数の中間層活用型手法(SISE:Semantic Input Sampling for Explanationなど):
    • より高い空間分解能と説明の完全性を目指す
    • 物体検出モデルへの適用時の課題:プーリング層の位置などの構造的な違いから、最終的な畳み込み層の選択が難しい

モデル非依存型(Model-agnostic)手法

モデルのアーキテクチャに依存しないアプローチも研究されています:

図1. RISEの概要

物体検出モデル特化型XAI手法

物体検出モデルに特化したXAI手法も提案されています:

図2. D-RISEの概要

既存手法の課題

D-RISEをはじめとする既存手法にはいくつかの重要な課題が存在します:

  1. オブジェクト形状への対応
    • 各オブジェクトの幾何学的形状に関する情報がないため、最適なハイパーパラメータを個々のオブジェクトに対して調整することが困難
    • 矩形に近いオブジェクトには比較的良い結果が得られるが、複雑な形状のオブジェクトには性能が低下する傾向
  2. 計算効率
    • 大規模なデータセットに対して適用した場合、計算コストが増大
    • 実行時性能が低下するという問題
  3. 汎用性
    • モデル構造やタスク特性によって性能が変化

このように、既存の物体検出モデル向けXAI技術は、それぞれの利点を持つ一方で、解釈性、適用範囲、計算効率、複雑な形状への対応、ハイパーパラメータの調整の難しさといった様々な課題を抱えており、より汎用的で、効率的で、信頼性の高い説明技術が求められています。

D-CLOSEの概要

基本コンセプトと目的

D-CLOSE(Detector-Cascading multiple Levels of Segments to Explain)は、あらゆる物体検出モデルの予測を説明するために提案された、新しいモデル不問型のXAI手法です。既存の物体検出モデル向けXAI技術が抱える課題、特に以下の点を改善することを目指して開発されました。

  • より少ない計算コストでの高品質な説明の提供
  • 多様な形状やサイズのオブジェクトに対する安定した説明性能の実現
図3. D-CLOSEの概要

マルチレベルセグメンテーションによるマスク生成

D-CLOSEの開発は、MFPP(Morphological Fragmental Perturbation Pyramid for Black-Box Model Explanations)のマスク生成アプローチからインスピレーションを受けています。具体的なマスク生成プロセスは以下の通りです。

  1. 複数レベルのセグメンテーション生成
    • SLIC(Simple Linear Iterative Clustering)アルゴリズムを使用
    • \(L\)個の異なるセグメンテーションレベル(\([F_1, F_2, \cdots, F_L]\))を生成
    • 各レベルで異なる数のスーパーピクセルを設定
  2. バイナリマスクの作成
    • 各セグメンテーションレベルで画像サイズのN個のバイナリマスクを生成
    • セグメントを確率\(p\)で\(1\)、残りを\(0\)に設定
    • バイリニア補間によるアップサンプリング
    • ランダムなインデントで元の画像サイズにクロップ
図4. セグメンテーションの生成

高効率な説明生成メカニズム

D-CLOSEの核となる技術的な利点は、少ないデータサンプルで高品質な説明を提供できる点です。この効率性は以下の要素によって実現されています。

  • 類似度計算プロセス
    • 各マスクを適用した画像を物体検出器に入力
    • 得られた予測ベクトルとターゲットベクトル(説明したいオブジェクトの予測結果)との類似度を計算
    • D-RISEと同様のIoU(Intersection over Union)、オブジェクトネススコア、クラス予測スコアを活用
  • 密度マップによる正規化
    • ランダムマスクの偏りを補正するための密度マップを導入
    • 各ピクセルのマスクにおける出現回数を集計し分布を可視化
    • 重要度スコアを対応する密度マップの値で正規化
    • 結果:ノイズが少なく、より滑らかな説明の生成

多段階特徴融合アプローチ

D-CLOSEのもう一つの重要な特徴は、複数のセグメンテーションレベルから得られた特徴マップを融合する点です。

  • 異なる粒度の情報の活用
    • 異なるセグメンテーションレベルにより、オブジェクトの細かい特徴から大まかなコンテキストまでを捉える
    • 詳細な局所特徴と広範な文脈情報の両方を取り込み
  • 柔軟な段階的融合フレームワーク
    • SISE(Semantic Input Sampling for Explanation)からインスピレーションを獲得
    • より詳細な特徴を優先し、より一般的な特徴へと段階的に融合
    • モデル内部構造に依存しない設計
    • 物体検出モデルのようなプーリング層の位置が一定でない複雑なアーキテクチャでも有効

性能

D-CLOSEは、上記の要素(マルチレベルセグメンテーション、類似度スコア計算、密度マップによる正規化、多段階特徴融合)を組み合わせることで、以下の優れた特性を示しています。

  • 定性的・定量的にD-RISEを上回る説明品質
  • より少ない計算時間での実行が可能
  • 単一のパラメータセットで様々なサイズ(小・中・大)のオブジェクトに対して効果的
  • 入力画像の各ピクセルがオブジェクト予測における重要度を示す高品質なサリエンシーマップの生成

D-CLOSEの性能

応用と実用性

D-CLOSEは、実世界における様々な条件下において、物体検出モデルの説明能力の強みを発揮します。

  • 困難な環境条件への対応
    • 低光量環境や霧のかかった状況下で撮影された画像においても、検出オブジェクトの判断根拠となる重要領域を明確に表示可能
    • 監視カメラの映像解析など、現実世界の多くの応用シナリオにおいて非常に重要な利点
  • 多様なイメージング技術への適用性
    • 異なるスペクトルの画像に対しても効果的に適用可能
      • 熱赤外(FIR)
      • 近赤外(NIR)
      • 中赤外(MIR)
    • 自動運転車における悪天候下での認識や、特殊センサーを用いた物体検出など、多様なセンシング技術と連携するシステムでの汎用性を証明
  • 透明性向上によるメリット
    • モデルの予測に対する信頼性を高め、判断根拠を理解しやすく提示
    • クライアントやエンドユーザーとのより良いコミュニケーションに貢献
    • GDPRのような透明性を義務付ける規制への適応を支援
図5. 悪条件の下におけるD-CLOSEとD-RISEの性能比較

実験結果

評価結果

D-CLOSEの性能は、MS-COCO検証データセットを用いて、既存の最先端XAI手法であるD-RISEと比較評価されています。

  • 処理効率の向上
    • D-RISEと比較して1.4倍高速に動作することを確認
    • より少ないデータサンプルで高品質な説明を提供できるという技術的利点を実証
  • 定量的評価指標での優位性
    • 複数の評価指標においてD-RISEを上回る性能を達成
      • Sparsity(スパシティ)
      • Energy-based pointing game (EBPG)
      • Deletion
      • Insertion
      • Over-all スコア
  • オブジェクトサイズへの対応
    • 異なるオブジェクトサイズ(小、中、大)ごとの評価において、一つのパラメータセットで安定した性能を発揮
    • D-RISEがオブジェクトごとにハイパーパラメータの調整を必要とする課題を克服
表1. 様々なXAI技術との評価指標の比較

今後の課題

以下、D-CLOSEのさらなる発展に向けた課題となります。

  • 計算効率の最適化
    • マスキング処理における冗長なデータサンプルの削減
    • より効率的なXAI技術の開発を目指す
  • 実用化に向けた研究方向
    • 他の様々な物体検出モデルへの適用可能性の検証
    • より多様な現実世界のシナリオへの応用研究
    • 高度なデータ処理フローの構築
    • モデルのパフォーマンス向上に貢献するワークフローの開発

以上のように、D-CLOSEは実世界での応用可能性を示しつつ、実験結果においても既存手法を凌駕する性能を持つ、有望な物体検出モデル向けXAI技術であると言えます。今後の研究開発によって、さらなる性能向上と広範な実用化が期待されます。

D-CLOSEを使ってみる

D-CLOSEはGitHubリポジトリで実装が公開されています。今回は、GitHubに公開されているコードを利用していきます。まずは、リポジトリをクローンして仮想環境を作成し、必要なPythonパッケージをインストールします。

# D-CLOSEのリポジトリを取得
$ git clone https://github.com/Binh24399/D-CLOSE
$ cd D-CLOSE

# 仮想環境を作成して必要なパッケージをインストールする
$ pip venv --prompt "D-CLOSE" .venv
$ source .venv/bin/activate
$ pip install -r requirements.txt
$ pip install scipy scikit-image

D-CLOSEの使用例はJupyter Notebookのファイルであるdemo.ipynbに記載されています。これをもとに、YOLOXの物体検出結果を説明するスクリプトを作成すると次のようになります。

import os

import cv2
import numpy as np
import torch

from d_close import DCLOSE
from tool import visual
from yolox import models
from yolox.data import data_augment
from yolox.utils import postprocess

# デバイスの設定 (GPUが利用可能であればGPUを使用し、そうでなければCPUを使用)
DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"

# YOLOXモデルのパラメータ
YOLOX_INPUT_SIZE = (640, 640)
CONFIDENCE_THRESHOLD = 0.25
NMS_THRESHOLD = 0.45
NUM_CLASSES = 80

# 画像処理関連の定数
IMAGE_PATH = "./images/000000504635.jpg"
OUTPUT_DIR = "./results/yolox"


def load_yolox_model():
    """YOLOXモデルをロードし、評価モードに設定する関数."""
    model = models.yolox_l(pretrained=True)
    model.eval()
    return model


def preprocess_image(image_path, input_size):
    """画像の読み込み、前処理を行う関数."""
    original_image = cv2.imread(image_path)
    original_image_rgb = cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB)

    # 画像のリサイズと正規化
    transform = data_augment.ValTransform(legacy=False)
    resized_image, _ = transform(original_image_rgb, None, input_size)
    tensor_image = torch.from_numpy(resized_image).unsqueeze(0).float()
    numpy_image = tensor_image.squeeze().numpy().transpose(1, 2, 0).astype(np.uint8)
    image_name = image_path.split("/")[-1].split(".")[0]
    return tensor_image, numpy_image, image_name


def postprocess_prediction(model_output, num_classes, conf_threshold, nms_threshold):
    """モデルの出力に対してpostprocessを実行する関数."""
    boxes, _ = postprocess(
        model_output,
        num_classes=num_classes,
        conf_thre=conf_threshold,
        nms_thre=nms_threshold,
        class_agnostic=True,
    )
    return boxes[0] if boxes is not None else None


def run_dclose(model, tensor_image, bounding_boxes, input_size, num_samples=4000):
    """DCLOSE処理を実行する関数."""
    dclose_processor = DCLOSE(
        arch="yolox", model=model, img_size=input_size, n_samples=num_samples
    )
    with torch.no_grad():
        dclose_results = dclose_processor(tensor_image, bounding_boxes)
    return dclose_results


def visualize_results(numpy_image, dclose_results, bounding_boxes, output_path):
    """検出結果とDCLOSEの結果を可視化し、保存する関数."""
    visual(
        numpy_image,
        dclose_results,
        bounding_boxes.cpu(),
        arch="yolox",
        save_file=output_path,
    )


def main():
    """メイン処理を実行する関数."""
    # YOLOXモデルのロード
    yolox_model = load_yolox_model().to(DEVICE)

    # 画像の前処理
    tensor_image, numpy_image, image_name = preprocess_image(
        IMAGE_PATH, YOLOX_INPUT_SIZE
    )

    # YOLOXによる推論
    with torch.no_grad():
        model_output = yolox_model(tensor_image.to(DEVICE))

    # 推論結果の後処理
    bounding_boxes = postprocess_prediction(
        model_output, NUM_CLASSES, CONFIDENCE_THRESHOLD, NMS_THRESHOLD
    )

    if bounding_boxes is not None:
        # DCLOSEの実行
        dclose_results = run_dclose(
            yolox_model, tensor_image, bounding_boxes, YOLOX_INPUT_SIZE
        )

        # DCLOSEの結果を保存
        np.save(f"{image_name}.npy", dclose_results)

        # 出力ディレクトリが存在しない場合は作成
        os.makedirs(OUTPUT_DIR, exist_ok=True)
        output_path = os.path.join(OUTPUT_DIR, image_name)

        # 結果の可視化
        visualize_results(numpy_image, dclose_results, bounding_boxes, output_path)
        print(f"結果を {output_path}.jpg に保存しました。")
    else:
        print("物体が検出されませんでした。")


if __name__ == "__main__":
    main()

上記のスクリプトで生成された結果を表示すると以下のようになります。

おわりに

D-CLOSEは、あらゆる物体検出モデルの判断根拠を可視化する革新的なXAI手法として提案されました。マルチレベルのセグメンテーションを活用することで、安定かつ滑らかな説明を提供し、MS-COCOデータセットを用いた実験では、既存の最先端手法であるD-RISEを計算時間と説明の質の両面で上回ることが示されました。特に、異なるサイズのオブジェクトに対しても一つのパラメータセットで有効である点は、実用的な利点と言えるでしょう。

今後のAI技術の進化において、モデルの透明性はますます重要になると考えられます。D-CLOSEのような説明可能な技術は、AIシステムの信頼性を高め、エンドユーザーとのより良いコミュニケーションを促進する上で重要な役割を果たすと期待されます。AI技術者は、D-CLOSEの実装と活用を通じて、物体検出モデルの挙動をより深く理解し、より信頼性の高い、改善されたAIシステムを構築できる可能性があります。今後の研究では、計算時間の最適化や、より多様なモデルや状況への適用性の検証が進められることが期待されます。

More Information

  • arXiv:2306.02744, Van Binh Truong, Truong Thanh Hung Nguyen, Vo Thanh Khang Nguyen, Quoc Khanh Nguyen, Quoc Hung Cao, 「Towards Better Explanations for Object Detection」, https://arxiv.org/abs/2306.02744