非最大抑制(NMS)
メニューを表示するにはスワイプしてください
オブジェクト検出モデルは、同じオブジェクトに対して複数の重複するバウンディングボックスを予測することがよくあります。これは、モデルが異なるスケールや位置で画像をスキャンするため、冗長な予測が生じるためです。**Non-Max Suppression (NMS)**は、これらの検出結果を洗練させ、最も関連性の高いバウンディングボックスを選択し、不要なものを除外する重要な後処理ステップです。
なぜ複数の重複ボックスが発生するのか
オブジェクト検出器は、以下の理由により1つのオブジェクトに対して複数のバウンディングボックスを予測します。
- アンカーボックス:Faster R-CNNやYOLOのような一部のモデルは、異なるサイズのあらかじめ定義されたアンカーボックスを使用するため、同じオブジェクトに対して複数の検出が発生します。
- スライディングウィンドウ手法:一部の検出手法は画像を小さな領域ごとにスキャンするため、重複する領域内でオブジェクトが繰り返し検出されます。
- 高い信頼度スコア:モデルは各予測に信頼度スコアを割り当て、類似した高信頼度の予測が大きく重複する場合があります。
これらの冗長なボックスがフィルタリングされない場合、計算コストの増加やオブジェクト数の信頼性低下など、オブジェクト検出のパフォーマンスに悪影響を及ぼします。
Non-Max Suppression(NMS)の仕組み
NMSは、重複する検出結果を除去し、最も信頼度の高いバウンディングボックスのみを残すために適用されます。手順は以下の通りです。
- スコアのソート:予測されたすべてのバウンディングボックスを信頼度スコアの降順で並べ替え;
- 最良ボックスの選択:最もスコアの高いボックスを選び、最終的な検出リストに追加;
- IoUの計算:選択したボックスと残りのすべてのボックスとの間でIntersection Over Union(IoU)を計算;
- しきい値処理:設定したしきい値(例:0.5)を超えるIoUを持つボックスを抑制(除去)。これらは同じ物体を表している可能性が高い;
- 繰り返し:すべてのボックスが処理されるまで、このプロセスを次にスコアの高いボックスで繰り返す。
import numpy as np
def non_max_suppression(boxes, scores, iou_threshold=0.5):
# Sort boxes by confidence scores in descending order
sorted_indices = np.argsort(scores)[::-1]
selected_boxes = []
while len(sorted_indices) > 0:
# Pick the highest confidence box
best_idx = sorted_indices[0]
selected_boxes.append(boxes[best_idx])
# Compute IoU with the remaining boxes
remaining_boxes = boxes[sorted_indices[1:]]
ious = np.array([compute_iou(boxes[best_idx], box) for box in remaining_boxes])
# Suppress boxes with IoU above threshold
sorted_indices = sorted_indices[1:][ious < iou_threshold]
return selected_boxes
Soft-NMS:より賢い代替手法
標準的なNMSは、指定したIoUしきい値を超えるすべての重複ボックスを除去しますが、有用な検出結果まで消してしまう場合があります。Soft-NMSは、重複ボックスを完全に除去するのではなく、その信頼度スコアを減衰させることで改善を図ります。この手法により、より滑らかな抑制処理が可能となり、物体が密集した状況での検出性能向上が期待できます。
標準NMSとSoft-NMSの主な違い:
- 標準NMS:IoUしきい値を超える重複ボックスを除去;
- Soft-NMS:重複ボックスの信頼度スコアを減衰させ、完全に除去せず、部分的に隠れた物体の検出にも柔軟に対応。
NMSにおける精度と速度のバランス
適切なIoUしきい値の選択は非常に重要です。
- 高いしきい値(例:0.6~0.7):より積極的なフィルタリングとなり、最も信頼度の高いボックスのみを残しますが、一部の有効な検出を見逃す可能性があります;
- 低いしきい値(例:0.3~0.4):重複するボックスを多く残すため、混雑したシーンで有効ですが、誤検出が増える可能性があります。
TensorFlowやOpenCVの組み込みNMS関数など、最適化された実装を利用することで、リアルタイムアプリケーション向けの処理速度を向上させることができます。
**Non-Max Suppression(NMS)**は、物体検出において冗長なバウンディングボックスを除去し、モデルの精度を向上させる重要な手法。標準NMSは重複する検出結果を効率的に排除し、Soft-NMSは信頼度スコアを調整することで除去の過程を洗練させる。IoUしきい値を調整することで、検出精度と計算効率の最適なバランスを実現可能。
1. 物体検出におけるNon-Max Suppression(NMS)の主な目的は何か?
2. 標準NMSはどのようにして抑制するバウンディングボックスを決定するか?
3. 標準NMSとSoft-NMSの主な違いは何ですか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください