BinaryConvolution¶
バージョン名: BinaryConvolution-1
カテゴリー: 畳み込み
簡単な説明: バイナリー入力とバイナリー・カーネル・テンソルの 2D 畳み込みを計算します。
詳細な説明: この操作は通常の畳み込みとして動作しますが、バイナリーデータの計算には特殊なアルゴリズムを使用します。詳しい説明は、バイナリー・ニューラル・ネットワークとビットごとのニューラル・ネットワークを参照してください。
xnor-popcount モードの計算アルゴリズム:
X = XNOR(input_patch, filter)
、XNOR は 2 つのビットストリームに対するビット単位の演算ですP = popcount(X)
、popcount はX
ビットストリーム内の1
ビットの数ですOutput = 2 * P - B
、B
はP
ビットストリームの合計ビット数です
属性:
-
strides
説明: strides は、2D 畳み込みの
(y, x)
軸上で特徴マップ上のフィルターをスライドさせる距離 (ピクセル単位) です。例えば、strides が2,1
に等しい場合は、フィルターを高さ方向に 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[]
必須: はい
-
mode
説明: mode は、入力テンソル
0/1
値と重み0/1
がどのように実数として解釈されるか、および結果がどのように計算されるか定義します。-
値の範囲:
xnor-popcount
タイプ:
string
必須: はい
注: 入力の値
0
は-1
として解釈され、値1
は次のように解釈されます:1
-
pad_value
説明: pad_value は、パッド領域を埋めるために使用される浮動小数点値です。
値の範囲: 浮動小数点数
タイプ:
float
必須: はい
-
auto_pad
-
説明: auto_pad パディングの計算方法。
設定可能な値:explicit - pads_begin と pads_end からの明示的なパディング値を使用します。
same_upper - 入力は出力サイズに一致するようにパディングされます。奇数のパディング値の場合、最後にパディングが追加されます。
same_lower - 入力は出力サイズに一致するようにパディングされます。パディング値が奇数の場合、先頭にパディングが追加されます。
valid - パディングを使用しません。
タイプ: 文字列
デフォルト値: explicit
必須: いいえ
注: auto_pad が指定されている場合、pads_begin と pads_end 属性は無視されます。
-
入力:
1: タイプ T1 およびランク 4 の入力テンソル。レイアウトは、
[N, C_IN, Y, X]
(バッチ数、チャネル数、空間軸 Y、X) です。必須。2: タイプ T2 およびランク 4 のカーネルテンソル。レイアウトは、
[C_OUT, C_IN, Y, X]
(出力チャネル数、入力チャネル数、空間軸 Y、X) です。必須。注: テンソル値の解釈は、mode 属性によって定義されます。
出力:
1: タイプ T3 およびランク 4 の出力テンソル。レイアウトは、
[N, C_OUT, Y, X]
(バッチの数、カーネル出力チャネルの数、空間軸 Y、X) です。
タイプ:
T1: 値
0
または1
を持つ任意の数値タイプ。T2:
u1
タイプはバイナリー値0
または1
を持ちます。T3: 全範囲の値を備えた T1 タイプ。
例:
2D 畳み込み
<layer type="BinaryConvolution" ...>
<data dilations="1,1" pads_begin="2,2" pads_end="2,2" strides="1,1" mode="xnor-popcount" pad_value="0" 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>