MulticlassNonMaxSuppression

バージョン名: MulticlassNonMaxSuppression-9

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

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

詳細な説明: MulticlassNonMaxSuppression は、複数フェーズの操作です。以下に説明する非最大抑制アルゴリズムを実装します。

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

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

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

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

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

  6. スコア sscore_threshold 以上の場合、bD に追加し、そうでない場合はステップ 9 に進みます。

  7. nms_eta < 1 および adaptive_threshold > 0.5 の場合、adaptive_threshold *= nms_eta を更新します。

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

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

このアルゴリズムは、各バッチ要素の各クラスに独立して適用されます。この操作は、最大で nms_top_k 個のスコアリング候補ボックスをこのアルゴリズムにフィードします。各バッチ要素の出力ボックスの総数は keep_top_k を超えてはなりません。background_class のボックスはスキップされるため、削除されます。

属性:

  • 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

    • 必須: いいえ

  • 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>