Convolution¶
バージョン名: Convolution-1
カテゴリー: 畳み込み
簡単な説明: 入力テンソルとカーネルテンソルの 1D、2D、または 3D 畳み込み (正確には相互相関) を計算します。
詳細な説明: 畳み込みの基本構成要素は、入力パッチとカーネルのドット積です。全体の操作は、複数の入力パッチとカーネルに対する複数の計算で構成されます。より詳しい説明は、畳み込みニューラル・ネットワークと畳み込み操作を参照してください。
畳み込みレイヤーの場合、各次元の出力特徴の数は次の式で計算されます。
各レイヤーの受容野は次の式で計算されます。
-
出力特徴マップにジャンプします。
\[j_{out} = j_{in} \cdot s\] -
出力特徴の受容野のサイズ:
\[r_{out} = r_{in} + ( k - 1 ) \cdot j_{in}\] -
最初の出力特徴の受容野の中心位置:
\[start_{out} = start_{in} + ( \frac{k - 1}{2} - p ) \cdot j_{in}\] -
出力は次の式で計算されます。
\[out = \sum_{i = 0}^{n}w_{i}x_{i} + b\]
属性:
-
strides
説明: strides は、3D 畳み込みの場合は
(z, y, x)
軸上、2D 畳み込みの場合は(y, x)
軸上で特徴マップ上のフィルターをスライドさせる距離 (ピクセル単位) です。例えば、strides が4,2,1
に等しい場合は、フィルターを奥行き次元で 4 ピクセル、高さ次元で 2 ピクセル、幅次元で 1 ピクセルずつスライドさせることを意味します。値の範囲: 0 から始まる整数値
タイプ:
int[]
必須: はい
-
pads_begin
説明: pads_begin は、各軸に沿って先頭に追加するピクセル数です。例えば、pads_begin が
1,2
に等しい場合は、入力の上部に 1 ピクセル、入力の左側に 2 ピクセルを追加することを意味します。値の範囲: 0 から始まる整数値
タイプ:
int[]
必須: はい
注: auto_pad 属性が指定されている場合、この属性は無視されます。
-
pads_end
説明: pads_end は、各軸に沿って終了点に追加するピクセル数です。例えば、pads_end が
1,2
に等しい場合は、入力の下部に 1 ピクセル、入力の右側に 2 ピクセルを追加することを意味します。値の範囲: 0 から始まる整数値
タイプ:
int[]
必須: はい
注: auto_pad 属性が指定されている場合、この属性は無視されます。
-
dilations
説明: dilations は、フィルター内の要素 (重み) 間の幅と高さの距離を示します。例えば、dilation が
1,1
に等しいということは、フィルター内のすべての要素が隣接していることを意味するため、通常の畳み込みと同じになります。dilation が2,2
に等しい場合は、フィルター内のすべての要素が入力行列内の隣接する要素ではなく、距離 1 で隣接する要素と照合されることを意味します。値の範囲: 0 から始まる整数値
タイプ:
int[]
必須: はい
-
auto_pad
-
説明: auto_pad パディングの計算方法。
設定可能な値:explicit - pads_begin と pads_end からの明示的なパディング値を使用します。
same_upper - 入力は出力サイズに一致するようにパディングされます。奇数のパディング値の場合、最後にパディングが追加されます。
same_lower - 入力は出力サイズに一致するようにパディングされます。パディング値が奇数の場合、先頭にパディングが追加されます。
valid - パディングを使用しません。
タイプ:
string
デフォルト値: explicit
必須: いいえ
注: auto_pad が指定されている場合、pads_begin と pads_end 属性は無視されます。
-
入力:
1: タイプ T およびランク 3、4 または 5 の入力テンソル。レイアウトは、
[N, C_IN, Z, Y, X]
(バッチ数、チャネル数、空間軸 Z、Y、X) です。必須。2: タイプ T およびランク 3、4、または 5 のカーネルテンソル。レイアウトは、
[C_OUT, C_IN, Z, Y, X]
(出力チャネル数、入力チャネル数、空間軸 Z、Y、X) です。必須。-
注: 畳み込みのタイプ (1D、2D、または 3D) は入力テンソルのランクで決定され、属性によって指定されません。
1D 畳み込み (入力テンソルのランク 3) は、空間軸 X が 1 つだけであることを意味します
2D 畳み込み (入力テンソルのランク 4) は、2 つの空間軸 Y、X があることを意味します
3D 畳み込み (入力テンソルのランク 5) は、3 つの空間軸 Z、Y、X があることを意味します
出力:
1: タイプ T およびランク 3、4、または 5 の出力テンソル。レイアウトは、
[N, C_OUT, Z, Y, X]
(バッチの数、カーネル出力チャネルの数、空間軸 Z、Y、X) です。
タイプ:
T: 任意の数値タイプ。
例:
1D 畳み込み
<layer type="Convolution" ...>
<data dilations="1" pads_begin="0" pads_end="0" strides="2" auto_pad="valid"/>
<input>
<port id="0">
<dim>1</dim>
<dim>5</dim>
<dim>128</dim>
</port>
<port id="1">
<dim>16</dim>
<dim>5</dim>
<dim>4</dim>
</port>
</input>
<output>
<port id="2" precision="FP32">
<dim>1</dim>
<dim>16</dim>
<dim>63</dim>
</port>
</output>
</layer>
2D 畳み込み
<layer type="Convolution" ...>
<data dilations="1,1" pads_begin="2,2" pads_end="2,2" strides="1,1" auto_pad="explicit"/>
<input>
<port id="0">
<dim>1</dim>
<dim>3</dim>
<dim>224</dim>
<dim>224</dim>
</port>
<port id="1">
<dim>64</dim>
<dim>3</dim>
<dim>5</dim>
<dim>5</dim>
</port>
</input>
<output>
<port id="2" precision="FP32">
<dim>1</dim>
<dim>64</dim>
<dim>224</dim>
<dim>224</dim>
</port>
</output>
</layer>
3D 畳み込み
<layer type="Convolution" ...>
<data dilations="2,2,2" pads_begin="0,0,0" pads_end="0,0,0" strides="3,3,3" auto_pad="explicit"/>
<input>
<port id="0">
<dim>1</dim>
<dim>7</dim>
<dim>320</dim>
<dim>320</dim>
<dim>320</dim>
</port>
<port id="1">
<dim>32</dim>
<dim>7</dim>
<dim>3</dim>
<dim>3</dim>
<dim>3</dim>
</port>
</input>
<output>
<port id="2" precision="FP32">
<dim>1</dim>
<dim>32</dim>
<dim>106</dim>
<dim>106</dim>
<dim>106</dim>
</port>
</output>
</layer>