DeformableConvolution

バージョン名: DeformableConvolution-1

カテゴリー: 畳み込み

簡単な説明: 入力テンソルとカーネルテンソルの 2D 変形可能な畳み込みを計算します。

詳細な説明: 変形可能な畳み込み (Deformable Convolution) は通常の畳み込みに似ていますが、入力サンプリング中に追加の空間オフセットが使用されるため、受容野が変形します。より詳しい説明は、変形可能な畳み込みの謎を解くおよび変形可能な畳み込みネットワークを参照してください。

出力は次の式で計算されます。

\[y(p) = \displaystyle{\sum_{k = 1}^{K}}w_{k}x(p + p_{k} + {\Delta}p_{k})\]

説明:

  • K はサンプリング位置の数です。例えば、カーネル 3x3 および拡張 = 1 の場合、K = 9。

  • \(x(p)\)\(y(p)\) は、入力特徴マップ x と出力特徴マップ y からの位置 p の特徴を示します。

  • \(w_{k}\) は、k 番目の位置の重みです。

  • \(p_{k}\) は、k 番目の位置に対して事前に指定されたオフセットです。例えば、K = 9 および \(p_{k} \in { (-1, -1),(-1, 0),. . . ,(1, 1) }\)

  • \({\Delta}p_{k}\) は、k 番目の位置の学習可能なオフセットです。

属性:

  • strides

    • 説明: strides は、特徴マップ上のフィルターを (y,x) 軸上でスライドさせる距離 (ピクセル単位) です。例えば、strides2,1 に等しい場合は、フィルターを高さ方向に 2 ピクセルずつ、幅方向に 1 ピクセルずつスライドさせることを意味します。

    • 値の範囲: 次から始まる整数値: 0

    • タイプ: int[]

    • 必須: はい

  • pads_begin

    • 説明: pads_begin は、各軸に沿って先頭に追加するピクセル数です。例えば、pads_begin1,2 に等しい場合は、入力の上部に 1 ピクセル、入力の左側に 2 ピクセルを追加することを意味します。

    • 値の範囲: 次から始まる整数値: 0

    • タイプ: int[]

    • 必須: はい

    • 注: auto_pad 属性が指定されている場合、この属性は無視されます。

  • pads_end

    • 説明: pads_end は、各軸に沿って終了点に追加するピクセル数です。例えば、pads_end1,2 に等しい場合は、入力の下部に 1 ピクセル、入力の右側に 2 ピクセルを追加することを意味します。

    • 値の範囲: 次から始まる整数値: 0

    • タイプ: int[]

    • 必須: はい

    • 注: auto_pad 属性が指定されている場合、この属性は無視されます。

  • dilations

    • 説明: dilations は、フィルター内の要素 (重み) 間の幅と高さの距離を示します。例えば、dilation1,1 に等しいということは、フィルター内のすべての要素が隣接していることを意味するため、通常の畳み込みと同じになります。dilation2,2 に等しい場合は、フィルター内のすべての要素が入力行列内の隣接する要素ではなく、距離 1 で隣接する要素と照合されることを意味します。

    • 値の範囲: 次から始まる整数値: 0

    • タイプ: int[]

    • 必須: はい

  • auto_pad

    • 説明: auto_pad パディングの計算方法。
      設定可能な値:

      • explicit - pads_beginpads_end からの明示的なパディング値を使用します。

      • same_upper - 入力は出力サイズに一致するようにパディングされます。奇数のパディング値の場合、最後にパディングが追加されます。

      • same_lower - 入力は出力サイズに一致するようにパディングされます。パディング値が奇数の場合、先頭にパディングが追加されます。

      • valid - パディングを使用しません。

    • タイプ: string

    • デフォルト値: explicit

    • 必須: いいえ

    • 注: auto_pad が指定されている場合、pads_beginpads_end 属性は無視されます。

  • group

    • 説明: group は、outputinput を分割するグループの数です。例えば、group が 1 の場合は、すべてのフィルターが入力全体 (通常の畳み込み) に適用されることを意味し、group が 2 の場合は、input チャネルと output チャネルの両方が 2 つのグループに分離され、i 番目の output グループが i 番目の input グループチャネルに接続されることを意味します。出力特徴マップの数に等しい group は、深さ方向の分離可能な畳み込みを意味します。

    • 値の範囲: 次から始まる整数値: 1

    • タイプ: int

    • デフォルト値: 1

    • 必須: いいえ

  • deformable_group

    • 説明: deformable_group は、offsets 入力と output をチャネル軸に沿って分割するグループの数です。i 番目の出力のオフセットの i 番目の部分を使用して、変形可能な畳み込みを適用します。

    • 値の範囲: 次から始まる整数値: 1

    • タイプ: int

    • デフォルト値: 1

    • 必須: いいえ

入力:

  • 1: タイプ T およびランク 4 の入力テンソル。レイアウトは、NCYX (バッチ数、チャネル数、空間軸 Y、X) です。必須。

  • 2: タイプ T およびランク 4 のオフセットテンソル。レイアウトは、NCYX (バッチ数、deformable_group * kernel_Y * kernel_X * 2、空間軸 Y、X) です。必須。

  • 3: タイプ T およびランク 4 のカーネルテンソル。レイアウトは、OIYX (出力チャネル数、入力チャネル数、空間軸 Y、X) です。必須。

出力:

  • 1: タイプ T およびランク 4 の出力テンソル。レイアウトは、NOYX (バッチの数、カーネル出力チャネルの数、空間軸 Y、X) です。

タイプ:

  • T: 任意の数値タイプ。

例:

2D DeformableConvolution (deformable_group=1)

<layer type="DeformableConvolution" ...>
    <data dilations="1,1" pads_begin="0,0" pads_end="0,0" strides="1,1" auto_pad="explicit"  group="1" deformable_group="1"/>
    <input>
        <port id="0">
            <dim>1</dim>
            <dim>4</dim>
            <dim>224</dim>
            <dim>224</dim>
        </port>
        <port id="1">
            <dim>1</dim>
            <dim>50</dim>
            <dim>220</dim>
            <dim>220</dim>
        </port>
        <port id="2">
            <dim>64</dim>
            <dim>4</dim>
            <dim>5</dim>
            <dim>5</dim>
        </port>
    </input>
    <output>
        <port id="2" precision="FP32">
            <dim>1</dim>
            <dim>64</dim>
            <dim>220</dim>
            <dim>220</dim>
        </port>
    </output>
</layer>

2D DeformableConvolution (deformable_group=4)

<layer type="DeformableConvolution" ...>
    <data dilations="1,1" pads_begin="0,0" pads_end="0,0" strides="1,1" auto_pad="explicit"  group="1" deformable_group="4"/>
    <input>
        <port id="0">
            <dim>1</dim>
            <dim>4</dim>
            <dim>224</dim>
            <dim>224</dim>
        </port>
        <port id="1">
            <dim>1</dim>
            <dim>200</dim>
            <dim>220</dim>
            <dim>220</dim>
        </port>
        <port id="2">
            <dim>64</dim>
            <dim>4</dim>
            <dim>5</dim>
            <dim>5</dim>
        </port>
    </input>
    <output>
        <port id="2" precision="FP32">
            <dim>1</dim>
            <dim>64</dim>
            <dim>220</dim>
            <dim>220</dim>
        </port>
    </output>
</layer>