矩形領域とは
Bounding Box / バウンディングボックス
物体検出タスクにおいて、画像内の対象物の位置と範囲を囲んで示す矩形の座標情報
ひとことで言うと
画像の中の物体の位置を示すために囲む、四角い枠のこと。
概要
矩形領域(バウンディングボックス)とは、物体検出タスクにおいて、画像内に写る対象物の位置と範囲を示すために用いられる、対象物を囲む矩形の座標情報。 一般に、矩形の左上と右下の座標、または中心座標と幅・高さの組み合わせで表現される。 物体検出モデルは、画像内の各候補物体についてこの矩形領域の座標とクラス(物体の種類)を予測するタスクとして定式化されることが多く、予測した矩形領域と正解の矩形領域の重なり具合(IoU: Intersection over Union)が、検出精度を評価する代表的な指標として使われる。
背景
画像内の物体の位置を表現するには、物体の輪郭を正確に切り出すよりも簡便な表現が必要とされる場面が多かった。 矩形領域は、物体の輪郭そのものではなく、物体を囲む矩形という単純な形状で位置と範囲を近似的に表現するために広く採用されてきた。
アーキテクチャ
矩形領域は主に2つの形式で表現される。 1つは左上と右下の座標(x_min・y_min・x_max・y_max)、もう1つは中心座標と幅・高さ(x_center・y_center・width・height)で、後者はYOLO系のモデルでよく使われる。 予測した矩形領域と正解の矩形領域の重なり具合は、共通部分の面積を和集合の面積で割った値がIoU(Intersection over Union)であり、これが一定の閾値(0.5等)を超えれば正しく検出したとみなす評価が一般的。
コード例
PythonでIoU(Intersection over Union)を計算する
def iou(box1, box2):
# box: (x_min, y_min, x_max, y_max)
xa, ya = max(box1[0], box2[0]), max(box1[1], box2[1])
xb, yb = min(box1[2], box2[2]), min(box1[3], box2[3])
inter = max(0, xb - xa) * max(0, yb - ya)
area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
return inter / (area1 + area2 - inter)利点
- 座標4つの数値だけで物体の位置と範囲を表現でき、データとして扱いやすい
- IoU等、矩形同士の重なりに基づく評価指標が確立されており、モデルの精度を定量的に比較しやすい
- アノテーション(正解データ作成)が輪郭の指定より簡単で、データセットを構築しやすい
欠点
- 物体の正確な輪郭までは表現できず、細長い物体や斜めの物体では矩形内に背景が多く含まれてしまう
- 物体同士が密集・重なっている場面では、矩形領域だけでは個々の物体を正確に区別しにくい場合がある
- より精密な形状把握が必要な場合は、画素単位で領域を示すセグメンテーションのほうが適する
比較
- YOLO — YOLOは、画像内の物体の矩形領域とクラスを同時に予測する代表的な物体検出モデル
関連用語
よくある質問
IoUの値はどう解釈する?
0〜1の値を取り、1に近いほど予測した矩形領域と正解の矩形領域がよく一致していることを示す。物体検出の評価では、IoUが0.5以上を正しい検出とみなすことが多い。