NonMaxSuppression

バージョン名: NonMaxSuppression-5

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

簡単な説明: NonMaxSuppression は、予測スコアを持つボックスの非最大抑制を実行します。

詳細な説明: NonMaxSuppression は、以下で説明する非最大抑制アルゴリズムを実行します。

  1. B = [b_0,...,b_n] を初期検出ボックスのリスト、S = [s_0,...,s_N] を対応するスコアのリストとします。

  2. D = [] を結果として得られるボックスの初期収集とします。

  3. B が空の場合は、ステップ 8 に進みます。

  4. 最もスコアの高いボックスを選択してください。例えば、それがスコア s のボックス b であるとします。

  5. B から b を削除します。

  6. スコア sscore_threshold 以上の場合は、bD に追加します。それ以外はステップ 8 に進みます。

  7. B の各入力ボックス b_i と対応するスコア s_i に対して、s_i = s_i * func(IOU(b_i, b)) を設定し、ステップ 3 に進みます。

  8. D を返します。これは、対応するスコア S のコレクション、および D の要素の数です。

ここで、soft_nms_sigma == 0 の場合は func(iou) = 1 if iou <= iou_threshold else 0、そうでない場合は func(iou) = exp(-0.5 * iou * iou / soft_nms_sigma) if iou <= iou_threshold else 0

このアルゴリズムは、各バッチ要素の各クラスに独立して適用されます。各クラスの出力ボックスの合計数は、max_output_boxes_per_class を超えてはなりません。

属性:

  • box_encoding

    • 説明: box_encoding は、ボックスデータのエンコード形式を指定します。

    • 値の範囲: “corner” または “center”

      • corner - ボックスデータは [y1, x1, y2, x2] として指定されます。ここで (y1, x1)(y2, x2) は、ボックスの角の対角のペアの座標です。

      • center - ボックスデータは [x_center, y_center, width, height] として指定されます。

    • タイプ: 文字列

    • デフォルト値: “corner”

    • 必須: いいえ

  • sort_result_descending

    • 説明: sort_result_descending は、選択したボックスをバッチ間で並べ替えるか指定するフラグです。

    • 値の範囲: true または false

      • true - 選択したボックスをバッチ間で並べ替えます。

      • false - 選択したボックスをバッチ間で並べ替えません (ボックスはクラスごとに並べ替えられます)。

    • タイプ: ブール値

    • デフォルト値: true

    • 必須: いいえ

  • output_type

    • 説明: 出力テンソルのタイプ

    • 値の範囲: “i64” または “i32”

    • タイプ: 文字列

    • デフォルト値: “i64”

    • 必須: いいえ

入力:

  • 1: boxes - タイプ T およびボックス座標を持つ形状 [num_batches, num_boxes, 4] のテンソル。必須。

  • 2: scores - タイプ T およびボックススコアを持つ形状 [num_batches, num_classes, num_boxes] のテンソル。必須。

  • 3: max_output_boxes_per_class - クラスごとに選択されるボックスの最大数を指定する T_MAX_BOXES タイプのスカラーテンソル。オプションで、デフォルト値 0 はボックスを選択しません。

  • 4: iou_threshold - 和集合しきい値を超える交差を指定する T_THRESHOLDS タイプのスカラーテンソル。オプションで、デフォルト値 0 はすべてのボックスを保持します。

  • 5: score_threshold - 処理を考慮するボックスの最小スコアを指定する、タイプ T_THRESHOLDS の 1 要素を持つスカラーまたは 1D テンソル。オプション、デフォルト値は 0 です。

  • 6: soft_nms_sigma - Soft-NMS (Bodla らを参照) のシグマ・パラメーターを指定する T_THRESHOLDS タイプの 1 要素を持つスカラーまたは 1D テンソル。オプション、デフォルト値は 0 です。

出力:

  • 1: selected_indices - タイプ T_IND および形状 [number of selected boxes, 3] のテンソル。選択されたボックスに関する情報はトリプレット [batch_index, class_index, box_index] として含まれます。

  • 2: selected_scores - タイプ T_THRESHOLDS および形状 [選択されたボックスの数、3] のテンソル。選択された各ボックスのスコアに関する情報がトリプレット [batch_index, class_index, box_score] として含まれます。

  • 3: valid_outputs - 選択されたボックスの総数を表すタイプ T_IND の 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: 浮動小数点タイプ。

  • T_IND: int64 または int32

例:

<layer ... type="NonMaxSuppression" ... >
    <data box_encoding="corner" sort_result_descending="1" 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>
        <port id="2"/> <!-- 10 -->
        <port id="3"/>
        <port id="4"/>
    </input>
    <output>
        <port id="5" precision="I64">
            <dim>150</dim> <!-- min(100, 10) * 3 * 5 -->
            <dim>3</dim>
        </port>
        <port id="6" precision="FP32">
            <dim>150</dim> <!-- min(100, 10) * 3 * 5 -->
            <dim>3</dim>
        </port>
        <port id="7" precision="I64">
            <dim>1</dim>
        </port>
    </output>
</layer>