BinaryConvolution

バージョン名: BinaryConvolution-1

カテゴリー: 畳み込み

簡単な説明: バイナリー入力とバイナリー・カーネル・テンソルの 2D 畳み込みを計算します。

詳細な説明: この操作は通常の畳み込みとして動作しますが、バイナリーデータの計算には特殊なアルゴリズムを使用します。詳しい説明は、バイナリー・ニューラル・ネットワークビットごとのニューラル・ネットワークを参照してください。

xnor-popcount モードの計算アルゴリズム:

  • X = XNOR(input_patch, filter)、XNOR は 2 つのビットストリームに対するビット単位の演算です

  • P = popcount(X)、popcount は X ビットストリーム内の 1 ビットの数です

  • Output = 2 * P - BBP ビットストリームの合計ビット数です

属性:

  • strides

    • 説明: strides は、2D 畳み込みの (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[]

    • 必須: はい

  • mode

    • 説明: mode は、入力テンソル 0/1 値と重み 0/1 がどのように実数として解釈されるか、および結果がどのように計算されるか定義します。

    • 値の範囲:

      • xnor-popcount

    • タイプ: string

    • 必須: はい

    • 注: 入力の値 0-1 として解釈され、値 1 は次のように解釈されます: 1

  • pad_value

    • 説明: pad_value は、パッド領域を埋めるために使用される浮動小数点値です。

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

    • タイプ: float

    • 必須: はい

  • auto_pad

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

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

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

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

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

    • タイプ: 文字列

    • デフォルト値: explicit

    • 必須: いいえ

    • 注: auto_pad が指定されている場合、pads_beginpads_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>