メインコンテンツまでスキップ

pairwise_iou

pairwise_iou(boxes1: Boxes, boxes2: Boxes) -> np.ndarray

  • 説明

    pairwise_iou は、2 つの境界ボックスリスト間で IoU(交差領域比)を計算する関数です。この関数は、すべての N x M ペアの境界ボックス間で IoU を計算します。入力される境界ボックスは Boxes 型である必要があります。

  • パラメータ

    • boxes1 (Boxes):最初の境界ボックスリスト。N 個の境界ボックスを含みます。
    • boxes2 (Boxes):2 番目の境界ボックスリスト。M 個の境界ボックスを含みます。
  • import capybara as cb

    boxes1 = cb.Boxes([[10, 20, 50, 80], [20, 30, 60, 90]])
    boxes2 = cb.Boxes([[20, 30, 60, 90], [30, 40, 70, 100]])
    iou = cb.pairwise_iou(boxes1, boxes2)
    print(iou)
    # >>> [[0.45454547 0.2]
    # [1.0 0.45454547]]

補足説明

IoU について

IoU(Intersection over Union)は、コンピュータビジョンで物体検出アルゴリズムの性能を評価するための重要な指標で、特に物体検出やセグメンテーションのタスクで使用されます。これは予測された境界ボックスと実際の境界ボックス間の重なり具合を測定します。

定義

IoU の計算式は、予測された境界ボックスと実際の境界ボックスの交差面積を、それらの和集合の面積で割ったものです。IoU の値は 0 から 1 の範囲で、値が大きいほど重なりが多く、予測結果が正確であることを示します。

計算手順

  1. 境界ボックス座標の特定:予測された境界ボックスと実際の境界ボックスの位置を画像内で特定します。通常、4 つの座標(x0, y0, x1, y1)を使用して境界ボックスを表します。ここで、(x0, y0)は左上隅の座標、(x1, y1)は右下隅の座標です。

  2. 交差面積の計算:2 つの境界ボックスの重なり部分の面積を計算します。もし 2 つの境界ボックスが完全に重なっていなければ、交差面積は 0 です。

  3. 和集合面積の計算:和集合面積は、2 つの境界ボックスそれぞれの面積の合計から交差面積を引いたものです。

  4. IoU の計算:交差面積を和集合面積で割り、IoU 値を得ます。

使用例

  • 物体検出:物体検出タスクでは、IoU を用いて予測された検出ボックスがどれだけ目標物体と一致しているかを評価します。通常、IoU がある閾値(例えば 0.5)を超えた場合、検出は成功と見なされます。

  • モデル評価:IoU は異なる物体検出モデルのパフォーマンスを評価するために使用され、IoU が高いほど、モデルが高精度で物体を検出していることを示します。

  • 非極大値抑制(NMS):物体検出後の後処理で IoU は、非極大値抑制(NMS)に使用され、重複する検出ボックスを除去して、最良の検出結果のみを保持します。

長所と短所

  • 長所

    • 直感的:IoU は予測された境界ボックスと実際の境界ボックス間の類似度を直感的に測る方法を提供します。
    • 標準化:IoU は 0 から 1 の範囲のスカラー値であり、比較と評価が簡単です。
  • 短所

    • 鈍感さ:予測されたボックスと実際のボックス間に少しのずれがある場合、IoU の変化が十分に敏感でないことがあります。
    • 閾値選択:IoU の閾値選択が最終評価に影響を与える可能性があり、異なる閾値を使用すると異なる評価基準が得られることがあります。