MatrixNonMaxSuppression

バージョン名: MatrixNonMaxSuppression-8

カテゴリー: ソートと最大化

簡単な説明: MatrixNonMaxSuppression は、予測スコアを使用してボックスの行列非最大抑制 (NMS) を実行します。

詳細な説明: この操作では次が実行されます。

  1. スコアが score_threshold よりも高い境界ボックスの候補を選択します。

  2. 各クラスに対して、最大で nms_top_k 個の候補ボックスを選択します。

  3. マトリックス NMS アルゴリズムによる候補ボックスの減衰スコア (Wang らなど.) このアルゴリズムは、各クラスおよび各バッチ要素に独立して適用されます。background_class のボックスはスキップされるため、処理中に削除されます。

  4. post_threshold よりも高い減衰スコアを持つボックスを選択し、バッチ要素ごとに最大でも keep_top_k 個のスコア候補ボックスを選択します。

マトリックス NMS アルゴリズムについては以下で説明します。

  1. 候補ボックスをスコアで降順に並べ替え、上位 n ボックスの n*n ペアごとの IOU (IntersectionOverUnion) 行列 X を計算します。n が候補ボックスの数であるとします。

  2. X の下三角形と対角線を 0 に設定します。そのため、上三角行列 X を取得します。

  3. X の列方向の最大値を取得し、各候補ボックスの最大 IOU のベクトル K を計算します。

  4. K の要素値を軸 1 に沿って繰り返します。これが行列 X_cmax を取得するとします。

  5. 減衰係数を計算します: decay_functiongaussian 関数の場合は、decay_factor = exp((X_cmax**2 - X**2) * gaussian_sigma)、それ以外の場合は、decay_factor = (1 - X) / (1 - X_cmax) です。

  6. decay_factor の列方向の最小値を取得し、要素方向にスコアを乗算して減衰します。

属性:

  • sort_result

    • 説明: sort_result は出力要素の順序を指定します。

    • 値の範囲: classscorenone

      • 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

    • 説明: スコアを減衰する減衰関数。

    • 値の範囲: gaussianlinear

    • タイプ: 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>