ExperimentalDetectronDetectionOutput

バージョン名: ExperimentalDetectronDetectionOutput-6

カテゴリー: 物体検出

簡単な説明: ExperimentalDetectronDetectionOutput 操作は、位置とスコアの予測に関する情報を使用して非最大抑制を実行し、検出出力を生成します。

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

  1. デルタをボックスサイズ [x 1, y 1, x 2, y 2] に適用し、次の式に従ってボックスの座標を取得します。

    x1_new = ctr_x + (dx - 0.5 * exp(min(d_log_w, max_delta_log_wh))) * box_w

    y0_new = ctr_y + (dy - 0.5 * exp(min(d_log_h, max_delta_log_wh))) * box_h

    x1_new = ctr_x + (dx + 0.5 * exp(min(d_log_w, max_delta_log_wh))) * box_w - 1.0

    y1_new = ctr_y + (dy + 0.5 * exp(min(d_log_h, max_delta_log_wh))) * box_h - 1.0

    • box_wbox_h はそれぞれボックスの幅と高さです。

      box_w = x1 - x0 + 1.0

      box_h = y1 - y0 + 1.0

    • ctr_xctr_y はボックスの中心位置です。

      ctr_x = x0 + 0.5f * box_w

      ctr_y = y0 + 0.5f * box_h

    • dxdyd_log_wd_log_h は以下の式に従って計算されたデルタであり、deltas_tensor は 2 番目の入力です。

      dx = deltas_tensor[roi_idx, 4 * class_idx + 0] / deltas_weights[0]

      dy = deltas_tensor[roi_idx, 4 * class_idx + 1] / deltas_weights[1]

      d_log_w = deltas_tensor[roi_idx, 4 * class_idx + 2] / deltas_weights[2]

      d_log_h = deltas_tensor[roi_idx, 4 * class_idx + 3] / deltas_weights[3]

  2. class_agnostic_box_regressiontrue の場合、バックグラウンド・クラスの予測が削除されます。

  3. ボックスを画像にクリップします。

  4. 検出スコアに score_threshold を適用します。

  5. nms_threshold を使用してクラスごとに非最大抑制を適用し、クラスごとに post_nms_count 以下の検出を返します。

  6. 検出の合計数が max_detections_per_image を超える場合は、max_detections_per_image 検出数を返します。それ以外の場合は、検出の合計数を返し、出力テンソルは残りの出力テンソル要素の未定義の値で埋められます。

属性:

  • score_threshold

    • 説明: score_threshold 属性は、スコアがしきい値よりも大きい検出のしきい値を指定します。

    • 値の範囲: 負でない浮動小数点数

    • タイプ: float

    • デフォルト値: なし

    • 必須: はい

  • nms_threshold

    • 説明: nms_threshold 属性は、NMS ステージで使用されるしきい値を指定します。

    • 値の範囲: 負でない浮動小数点数

    • タイプ: float

    • デフォルト値: なし

    • 必須: はい

  • num_classes

    • 説明: num_classes 属性は、検出されたクラスの数を指定します。

    • 値の範囲: 負でない整数

    • タイプ: int

    • デフォルト値: なし

    • 必須: はい

  • post_nms_count

    • 説明: post_nms_count 属性は、クラスごとの検出の最大数を指定します。

    • 値の範囲: 負でない整数

    • タイプ: int

    • デフォルト値: なし

    • 必須: はい

  • max_detections_per_image

    • 説明: max_detections_per_image 属性は、画像ごとの検出の最大数を指定します。

    • 値の範囲: 負でない整数

    • タイプ: int

    • デフォルト値: なし

    • 必須: はい

  • class_agnostic_box_regression

    • 説明: class_agnostic_box_regression 属性は、バックグラウンド・クラスを削除するかを決定するフラグです。

    • 値の範囲:

      • true バックグラウンド・クラスを削除する必要があることを意味します

      • false バックグラウンド・クラスを削除すべきではないことを意味します

    • タイプ: boolean

    • デフォルト値 : false

    • 必須: いいえ

  • max_delta_log_wh

    • 説明: max_delta_log_wh 属性は、幅と高さの対数の最大デルタを指定します。

    • 値の範囲: 浮動小数点数

    • タイプ: float

    • デフォルト値: なし

    • 必須: はい

  • deltas_weights

    • 説明: deltas_weights 属性は、境界ボックス・サイズ・デルタの重みを指定します。

    • 値の範囲: 負でない浮動小数点数のリスト

    • タイプ: float[]

    • デフォルト値: なし

    • 必須: はい

入力:

  • 1: 入力 ROI を持つタイプ T の 2D テンソル。形状 [number_of_ROIs, 4] で、ROI を 4 つのタプル [x 1, y 1, x 2, y 2] として提供します。1 番目、2 番目、および 3 番目の入力のバッチ次元は同じである必要があります。必須。

  • 2: 入力ボックスのデルタを提供する、形状 [number_of_ROIs, num_classes * 4] を持つタイプ T の 2D テンソル。必須。

  • 3: 検出スコアを提供する形状 [number_of_ROIs, num_classes] を持つタイプ T の 2D テンソル。必須。

  • 4: 形状 [1, 3] のタイプ T の 2D テンソルには、入力画像サイズ情報を提供する 3 つの要素 [image_height, image_width, scale_height_and_width] が含まれています。必須。

出力:

  • 1: ボックス・インデックスを提供する形状 [max_detections_per_image, 4] を持つタイプ T の 2D テンソル。

  • 2: クラス・インデックスを提供する形状 [max_detections_per_image] を持つタイプ T_IND の 1D テンソル。

  • 3: スコア・インデックスを提供する形状 [max_detections_per_image] を持つタイプ T の 1D テンソル。

タイプ:

  • T: サポートされている浮動小数点タイプ。

  • T_IND: int64 または int32

例:

<layer ... type="ExperimentalDetectronDetectionOutput" version="opset6">
    <data class_agnostic_box_regression="false" deltas_weights="10.0,10.0,5.0,5.0" max_delta_log_wh="4.135166645050049" max_detections_per_image="100" nms_threshold="0.5" num_classes="81" post_nms_count="2000" score_threshold="0.05000000074505806"/>
    <input>
        <port id="0">
            <dim>1000</dim>
            <dim>4</dim>
        </port>
        <port id="1">
            <dim>1000</dim>
            <dim>324</dim>
        </port>
        <port id="2">
            <dim>1000</dim>
            <dim>81</dim>
        </port>
        <port id="3">
            <dim>1</dim>
            <dim>3</dim>
        </port>
    </input>
    <output>
        <port id="4" precision="FP32">
            <dim>100</dim>
            <dim>4</dim>
        </port>
        <port id="5" precision="I32">
            <dim>100</dim>
        </port>
        <port id="6" precision="FP32">
            <dim>100</dim>
        </port>
        <port id="7" precision="I32">
            <dim>100</dim>
        </port>
    </output>
</layer>