MulticlassNonMaxSuppression¶
バージョン名: MulticlassNonMaxSuppression-9
カテゴリー: ソートと最大化
簡単な説明: MulticlassNonMaxSuppression は、予測スコアを持つボックスのマルチクラス非最大抑制を実行します。
詳細な説明: MulticlassNonMaxSuppression は、複数フェーズの操作です。以下に説明する非最大抑制アルゴリズムを実装します。
B = [b_0,...,b_n]
を初期検出ボックスのリスト、S = [s_0,...,s_N]
を対応するスコアのリストとします。D = []
を結果として得られるボックスの初期収集とします。adaptive_threshold = iou_threshold
とします。B
が空の場合は、ステップ 9 に進みます。最もスコアの高いボックスを選択してください。例えば、それがスコア
s
のボックスb
であるとします。B
からb
を削除します。スコア
s
がscore_threshold
以上の場合、b
をD
に追加し、そうでない場合はステップ 9 に進みます。nms_eta < 1
およびadaptive_threshold > 0.5
の場合、adaptive_threshold *= nms_eta
を更新します。B
の各入力ボックスb_i
と対応するスコアs_i
に対してiou(b, b_i) > adaptive_threshold
を設定し、ステップ 3 に進みます。D
を返します。これは、対応するスコアS
のコレクション、およびD
の要素の数です。
このアルゴリズムは、各バッチ要素の各クラスに独立して適用されます。この操作は、最大で nms_top_k
個のスコアリング候補ボックスをこのアルゴリズムにフィードします。各バッチ要素の出力ボックスの総数は keep_top_k
を超えてはなりません。background_class
のボックスはスキップされるため、削除されます。
属性:
-
sort_result
説明: sort_result は出力要素の順序を指定します。
-
値の範囲:
class
、score
、none
class - 選択したボックスをクラス ID で (昇順) に並べ替えます。
score - 選択したボックスをスコア順に並べ替えます (降順)。
none - 順序を保証しません。
タイプ:
string
デフォルト値:
none
必須: いいえ
-
sort_result_across_batch
説明: sort_result_across_batch は、選択したボックスをバッチ間で並べ替えるかどうかを指定するフラグです。
-
値の範囲: true または false
true - 選択したボックスをバッチ間で並べ替えます。
false - 選択したボックスをバッチ間で並べ替えません (ボックスはバッチ要素ごとに並べ替えられます)。
タイプ: ブール値
デフォルト値 : false
必須: いいえ
-
output_type
説明: 出力
selected_indices
およびvalid_outputs
のテンソルタイプ。値の範囲:
i64
またはi32
タイプ:
string
デフォルト値:
i64
必須: いいえ
-
iou_threshold
説明: 交差が和集合のしきい値を超えています。
値の範囲: 浮動小数点数
タイプ:
float
デフォルト値:
0
必須: いいえ
-
score_threshold
説明: 処理を考慮する最小スコアボックス。
値の範囲: 浮動小数点数
タイプ:
float
デフォルト値:
0
必須: いいえ
-
nms_top_k
説明: クラスごとに選択されるボックスの最大数。
値の範囲: 整数。
タイプ:
int
デフォルト値:
-1
はすべてのボックスを保持することを意味します必須: いいえ
-
keep_top_k
説明: バッチ要素ごとに選択されるボックスの最大数。
値の範囲: 整数。
タイプ:
int
デフォルト値:
-1
はすべてのボックスを保持することを意味します必須: いいえ
-
background_class
説明: バックグラウンド・クラス ID。
値の範囲: 整数。
タイプ:
int
デフォルト値:
-1
は、すべてのクラスを維持することを意味します。必須: いいえ
-
normalized
説明: normalized は、
boxes
が正規化されているかどうかを示すフラグです。-
値の範囲: true または false
true - ボックスの座標は正規化されます。
false - ボックスの座標は正規化されません。
タイプ: ブール値
デフォルト値: true
必須: いいえ
-
nms_eta
説明: 適応型 NMS の eta パラメーター。
値の範囲: 近い範囲
[0, 1.0]
の浮動小数点数。タイプ:
float
デフォルト値:
1.0
必須: いいえ
入力:
入力形式は 2 種類あります。最初は 2 つの入力です。ボックスは全クラスで共有されます。
1:
boxes
- タイプ T およびボックス座標を持つ形状[num_batches, num_boxes, 4]
のテンソル。ボックスの座標は[xmin, ymin, xmax, ymax]
としてレイアウトされます。必須。2:
scores
- タイプ T およびボックススコアを持つ形状[num_batches, num_classes, num_boxes]
のテンソル。テンソルのタイプはboxes
と同じである必要があります。必須。
2 番目の形式は 3 つの入力です。各クラスには共有されていない独自のボックスがあります。
* 1: boxes
- タイプ T およびボックス座標を持つ形状 [num_classes, num_boxes, 4]
のテンソル。ボックスの座標は [xmin, ymin, xmax, ymax]
としてレイアウトされます。必須。
2:
scores
- タイプ T およびボックススコアを持つ形状[num_classes, num_boxes]
のテンソル。テンソルのタイプはboxes
と同じである必要があります。必須。3:
roisnum
- タイプ T_IND およびボックススコアを持つ形状[num_batches]
のテンソル。num_batches
は画像の数です。このテンソルの各要素は、対応する画像のボックスの数です。すべての要素の合計はnum_boxes
です。必須。
出力:
1:
selected_outputs
- タプル[class_id, box_score, xmin, ymin, xmax, ymax]
としてスコアとクラスを持つ選択されたボックスを含む、ボックスと形状[選択されたボックスの数, 6]
と同じである必要がある T タイプのテンソル。2:
selected_indices
- T_IND タイプのテンソルで、平坦化されたboxes
内の選択されたインデックスを[選択されたボックスの数、1]
形状にします。これはバッチ間の絶対値です。したがって、有効な値は[0, num_batches * num_boxes - 1]
の範囲になります。3:
selected_num
- T_IND タイプおよび各バッチ要素に対して選択されたボックスの数を表す形状[num_batches]
の 1D テンソル。
ボックスが選択されていないと、selected_num
には 0
が入ります。selected_outputs
形状 [0, 6]
の空のテンソルであり、selected_indices
は形状 [0, 1]
の空のテンソルです。
タイプ:
T: 浮動小数点タイプ。
T_IND:
int64
またはint32
。
例:
<layer ... type="MulticlassNonMaxSuppression" ... >
<data sort_result="score" output_type="i64" sort_result_across_batch="false" iou_threshold="0.2" score_threshold="0.5" nms_top_k="-1" keep_top_k="-1" background_class="-1" normalized="false" nms_eta="0.0"/>
<input>
<port id="0">
<dim>3</dim>
<dim>100</dim>
<dim>4</dim>
</port>
<port id="1">
<dim>3</dim>
<dim>5</dim>
<dim>100</dim>
</port>
</input>
<output>
<port id="5" precision="FP32">
<dim>-1</dim> <!-- "-1" means a undefined dimension calculated during the model inference -->
<dim>6</dim>
</port>
<port id="6" precision="I64">
<dim>-1</dim>
<dim>1</dim>
</port>
<port id="7" precision="I64">
<dim>3</dim>
</port>
</output>
</layer>
3 つの入力で考えられる別の例は次のようになります。
<layer ... type="MulticlassNonMaxSuppression" ... >
<data sort_result="score" output_type="i64" sort_result_across_batch="false" iou_threshold="0.2" score_threshold="0.5" nms_top_k="-1" keep_top_k="-1" background_class="-1" normalized="false" nms_eta="0.0"/>
<input>
<port id="0">
<dim>3</dim>
<dim>100</dim>
<dim>4</dim>
</port>
<port id="1">
<dim>3</dim>
<dim>100</dim>
</port>
<port id="2">
<dim>10</dim>
</port>
</input>
<output>
<port id="5" precision="FP32">
<dim>-1</dim> <!-- "-1" means a undefined dimension calculated during the model inference -->
<dim>6</dim>
</port>
<port id="6" precision="I64">
<dim>-1</dim>
<dim>1</dim>
</port>
<port id="7" precision="I64">
<dim>3</dim>
</port>
</output>
</layer>