MatrixNonMaxSuppression¶
バージョン名: MatrixNonMaxSuppression-8
カテゴリー: ソートと最大化
簡単な説明: MatrixNonMaxSuppression は、予測スコアを使用してボックスの行列非最大抑制 (NMS) を実行します。
詳細な説明: この操作では次が実行されます。
スコアが
score_threshold
よりも高い境界ボックスの候補を選択します。各クラスに対して、最大で
nms_top_k
個の候補ボックスを選択します。マトリックス NMS アルゴリズムによる候補ボックスの減衰スコア (Wang らなど.) このアルゴリズムは、各クラスおよび各バッチ要素に独立して適用されます。
background_class
のボックスはスキップされるため、処理中に削除されます。post_threshold
よりも高い減衰スコアを持つボックスを選択し、バッチ要素ごとに最大でもkeep_top_k
個のスコア候補ボックスを選択します。
マトリックス NMS アルゴリズムについては以下で説明します。
候補ボックスをスコアで降順に並べ替え、上位
n
ボックスのn*n
ペアごとの IOU (IntersectionOverUnion) 行列X
を計算します。n
が候補ボックスの数であるとします。X
の下三角形と対角線を 0 に設定します。そのため、上三角行列X
を取得します。X
の列方向の最大値を取得し、各候補ボックスの最大 IOU のベクトルK
を計算します。K
の要素値を軸 1 に沿って繰り返します。これが行列X_cmax
を取得するとします。減衰係数を計算します:
decay_function
がgaussian
関数の場合は、decay_factor = exp((X_cmax**2 - X**2) * gaussian_sigma)
、それ以外の場合は、decay_factor = (1 - X) / (1 - X_cmax)
です。decay_factor
の列方向の最小値を取得し、要素方向にスコアを乗算して減衰します。
属性:
-
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
必須: いいえ
-
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
必須: いいえ
-
decay_function
説明: スコアを減衰する減衰関数。
値の範囲:
gaussian
、linear
タイプ:
string
デフォルト値:
linear
必須: いいえ
-
gaussian_sigma
説明: ガウス Decay_function の gaussian_sigma パラメーター。
値の範囲: 浮動小数点数
タイプ:
float
デフォルト値:
2.0
必須: いいえ
-
post_threshold
説明: 減衰後に信頼スコアの低いボックスを除外するためのしきい値。
値の範囲: 浮動小数点数
タイプ:
float
デフォルト値:
0
必須: いいえ
入力:
1:
boxes
- タイプ T およびボックス座標を持つ形状[num_batches, num_boxes, 4]
のテンソル。ボックスの座標は[xmin, ymin, xmax, ymax]
としてレイアウトされます。必須。2:
scores
- タイプ T およびボックススコアを持つ形状[num_batches, num_classes, num_boxes]
のテンソル。テンソルのタイプは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="MatrixNonMaxSuppression" ... >
<data decay_function="gaussian" sort_result="score" output_type="i64"/>
<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>