NMSRotated¶
バージョン名: NMSRotated-13
カテゴリー: ソートと最大化
簡単な説明: NMSRotated は、予測されたスコアを持つ回転ボックスの非最大抑制を実行します。
詳細な説明: NMSRotated は通常の非最大抑制を実行しますが、IoU の値は、対応する角度だけ回転された境界ボックスに対して計算されます。
一般的なアルゴリズムを以下に説明します。
B = [b_0,...,b_n]
を初期検出ボックスのリスト、S = [s_0,...,s_N]
を対応するスコアのリストとします。D = []
を結果として得られるボックスの初期収集とします。B
が空の場合は、ステップ 8 に進みます。最もスコアの高いボックスを選択してください。例えば、それがスコア
s
のボックスb
であるとします。B
からb
を削除します。スコア
s
がscore_threshold
以上の場合は、b
をD
に追加します。それ以外はステップ 8 に進みます。B
の各入力ボックスb_i
と対応するスコアs_i
に対して、s_i = s_i * func(rotated_iou(b_i, b))
を設定し、ステップ 3 に進みます。D
を返します。これは、対応するスコアS
のコレクション、およびD
の要素の数です。
ここで、func(rotated_iou(b_i, b)) = 1 if rotated_iou(b_i, b) <= iou_threshold else 0
です。
2 つの境界ボックス B1
と B2
がある場合、rotated_iou(B1, B2)
を計算するのに次の手順が実行されます。
clockwise 属性で指定された方向に従って、回転した頂点、つまりラジアン単位の対応する角度で変換された各ボックスの 4 つの角の (x, y) 座標を計算します。
B1
とB2
のエッジ間のすべての交点を見つけます。それらをintersection_points
に追加します。B2
のエリア内でB1
のすべてのコーナーを検索し、B1
のエリア内でB2
のすべてのコーナーを検索します。それらをintersection_points
に追加します。intersection_points
で記述される多角形のintersection_area
を計算します (Sholeace の式を参照)。union_area
(B1
とB2
の共通領域)、union_area = B1_area + B2_area を計算します。ユニオン
rotated_iou = intersection_area / (union_area - intersection_area)
の交差を返します。
このアルゴリズムは、各バッチ要素の各クラスに独立して適用されます。各クラスの出力ボックスの合計数は、max_output_boxes_per_class
を超えてはなりません。
属性:
-
sort_result_descending
説明: sort_result_descending は、選択したボックスをバッチ間で並べ替える必要があるかどうか指定するフラグです。
-
値の範囲: true または false
true - 選択したボックスをバッチ間で並べ替えます。
false - 選択したボックスをバッチ間で並べ替えません (ボックスはクラスごとに並べ替えられます)。
タイプ: ブール値
デフォルト値: true
必須: いいえ
-
output_type
説明: 出力テンソルのタイプ
値の範囲: “i64” または “i32”
タイプ: 文字列
デフォルト値: “i64”
必須: いいえ
-
clockwise
説明: 角度の方向
-
値の範囲: true または false
true - 角度の正の値は時計回り (clockwise) です。
false - 角度の正の値は反時計回り (counterclockwise) です。
タイプ: ブール値
デフォルト値: true
必須: いいえ
入力:
1:
boxes
- タイプ T および形状[num_batches, num_boxes, 5]
のテンソル。ボックスデータは、[x_center, y_center, width, height, angle]
、中心の座標、幅 (x)、高さ (y)、およびラジアン単位の角度として指定されます。必須。2:
scores
- タイプ T およびボックススコアを持つ形状[num_batches, num_classes, num_boxes]
のテンソル。必須。3:
max_output_boxes_per_class
- クラスごとに選択されるボックスの最大数を指定する T_MAX_BOXES タイプのスカラーテンソル。必須。4:
iou_threshold
- 和集合しきい値を超える交差を指定する T_THRESHOLDS タイプのスカラーテンソル。必須。5:
score_threshold
- 処理を考慮するボックスの最小スコアを指定する、タイプ T_THRESHOLDS の 1 要素を持つスカラーまたは 1D テンソル。必須。
出力:
1:
selected_indices
- タイプ output_type および形状[number of selected boxes, 3]
のテンソル。選択されたボックスに関する情報はトリプレット[batch_index, class_index, box_index]
として含まれます。2:
selected_scores
- タイプ T_THRESHOLDS および形状[number of selected boxes, 3]
のテンソル。選択された各ボックスのスコアに関する情報がトリプレット[batch_index, class_index, box_score]
として含まれます。3:
valid_outputs
- 選択されたボックスの総数を表すタイプ output_type の 1 要素を持つ 1D テンソル。
動的出力テンソルをサポートしないプラグインは、選択可能なボックスの数の上限である形状 [min(num_boxes, max_output_boxes_per_class) * num_batches * num_classes, 3]
の selected_indices
テンソルと selected_scores
テンソルを生成します。実際に選択されたボックスに続く出力テンソル要素は、値 -1 で埋められます。
タイプ:
T: 浮動小数点タイプ。
T_MAX_BOXES: 整数タイプ。
T_THRESHOLDS: 浮動小数点タイプ。
例:
<layer ... type="NMSRotated" ... >
<data sort_result_descending="true" output_type="i64" clockwise="true"/>
<input>
<port id="0">
<dim>3</dim>
<dim>100</dim>
<dim>5</dim>
</port>
<port id="1">
<dim>3</dim>
<dim>5</dim>
<dim>100</dim>
</port>
<port id="2"/> <!-- 10 -->
<port id="3"/>
<port id="4"/>
</input>
<output>
<port id="6" precision="I64">
<dim>150</dim> <!-- min(100, 10) * 3 * 5 -->
<dim>3</dim>
</port>
<port id="7" precision="FP32">
<dim>150</dim> <!-- min(100, 10) * 3 * 5 -->
<dim>3</dim>
</port>
<port id="8" precision="I64">
<dim>1</dim>
</port>
</output>
</layer>