コンピュータビジョンの受容野

1. 受容野の定義

受容野(受容的受容的)受信フィールドフィールド_ _ _ _フィールド)は、畳み込みニューラル ネットワークの各層によって出力される特徴マップ (特徴 feature) として定義されます特徴 地図地図_ _ _ _マップp上のピクセルによって元の入力イメージにマップされた領域のサイズより一般的な説明は、次の図に示すように、特徴マップ上の点が元の入力画像上の領域に対応するというものです。
ここに画像の説明を挿入

2. 受容野の例

受容野を簡単に説明するために、2 つの例を示します。まず、5*5 入力画像は 3*3 畳み込み演算を伴う 2 層畳み込みカーネルを経て、5*5 の受容野を取得します。ここで、畳み込みカーネル (フィルター フィルター)フィルター)ステップサイズ (ストライドstrides t r i d e ) は 1、padding パディング以下の図に示すように、 p add in g0 です。 O ut 1
ここに画像の説明を挿入
上の図のO u t 1の左上隅の最初の値は、入力入力I n p u tの左上隅にある 3 * 3 の領域の値は、畳み込みによって計算されます。つまり、Out ut 1 Out1O u t 1の左上隅の値の受容野は、入力入力In p u t左上隅にある 3*3 の領域

アウト 2 アウト 2O u t 2の値はOut 1 Out1O u t 1の 3 * 3 に相当する領域を畳み込み演算により計算します。つまり、O ut 2 Out2 とO u t 2の受容野はOut 1 Out1O u t 1の 3*3 エリア全体

このことから、 O ut 2 Out2 であることがわかります。O u t 2の値は、入力入力によって決まります。I n p u tのすべての領域は、2 つの畳み込み層、つまり、Out 2 Out2O u t 2の受容野は I 入力です入力入力のすべての5 * 5 リージョン
別の例を挙げると、7 * 7 の入力画像は、3 * 3 のコンボリューション カーネルを使用した 3 層コンボリューション演算の後に取得され、Out 3 Out3O u t 3の受容野は7 * 7 で、これはOut 3 Out3出力3値は入力入力によって決まります。入力のすべての領域の値は畳み込みによって計算されます。ここで畳み込みカーネル サイズ、ステップ サイズ、およびパディングパディング以下の図に示すように、 gpおよびddの値は上記の例と同じです。
ここに画像の説明を挿入

3. 受容野の計算

受容野を計算する際には、次の点を説明する必要があります。

(1) 最初の畳み込み層の出力特徴マップ ピクセルの受容野のサイズは、畳み込みカーネルのサイズと等しい。

(2) 深い畳み込み層の受容野サイズは、その前のすべての層のフィルター サイズとステップ サイズに関係します。

(3) 受容野のサイズを計算する際には、画像のエッジの影響は無視されます。つまり、パディングのサイズは考慮されません。

受容野の大きさの計算式は以下の通りです。

RF l + 1 = ( RF l − 1 ) ∗ ∏ i = 1 lstridesi + fl + 1 RF_{l+1} = (RF_{l}-1)*\prod_{i=1}^{l}strides_i + f_{l+1}R Fl + 1=( RF _1 )i = 1ストライド_ _ _ _ _ _私は+fl + 1

ここで、RF l + 1 RF_{l+1}R Fl + 1現在の特徴マップに対応する受容野のサイズ、つまり計算対象のターゲット受容野のサイズです、RF l RF_{l}R Fは前の層の特徴マップに対応する受容野のサイズ、f_{l+1} は現在の畳み込み層の畳み込みカーネルのサイズ、累積項目ストライドstridess t r i d es は、現在の畳み込み層の前のすべての畳み込み層のステップ サイズの積を表します。

上記の2 番目のサンプルを採取します。として十分です:

アウト 1 アウト 1O u tレイヤ1は畳み込みの最初の層の出力です。つまり、その受容野はその畳み込みカーネルのサイズに等しいです。つまり、畳み込み層の最初の層によって出力される特徴マップの受容野は次のようになります。 3、RF1 RF1RF1 = 3;

アウト 2 アウト 2出力層2の受容RF2 RF2RF 2 = 3 + (3 - 1) * 1 = 5、つまり、2 番目の畳み込み層によって出力される特徴マップの受容野は 5 です。

アウト 3 アウト 3出力層3の受容RF3 RF3RF 3 = 3 + (5 - 1) * 1 = 7、つまり、3 番目の畳み込み層によって出力される特徴マップの受容野は 7 です。

上記の方法で計算されたA lexnet Alexnet は以下のようになります。アレクネットVGG 16 VGG16 _ _ _パイソンパイソン_ __pythonコード _ _ _ _

net_struct = {
    
    
    'alexnet': {
    
    'net': [[11, 4, 0], [3, 2, 0], [5, 1, 2], [3, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1], [3, 2, 0]],
                'name': ['conv1', 'pool1', 'conv2', 'pool2', 'conv3', 'conv4', 'conv5', 'pool5']},
    'vgg16': {
    
    'net': [[3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1],
                      [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1], [2, 2, 0], [3, 1, 1], [3, 1, 1], [3, 1, 1],
                      [2, 2, 0]],
              'name': ['conv1_1', 'conv1_2', 'pool1', 'conv2_1', 'conv2_2', 'pool2', 'conv3_1', 'conv3_2',
                       'conv3_3', 'pool3', 'conv4_1', 'conv4_2', 'conv4_3', 'pool4', 'conv5_1', 'conv5_2', 'conv5_3',
                       'pool5']}}

# 输入图片size
imsize = 224

def outFromIn(isz, net, layernum):
    totstride = 1
    insize = isz
    for layer in range(layernum):
        fsize, stride, pad = net[layer]
        # outsize为每一层的输出size
        outsize = (insize - fsize + 2 * pad) / stride + 1
        insize = outsize
        totstride = totstride * stride
    return outsize, totstride


def inFromOut(net, layernum):
    RF = 1
    for layer in reversed(range(layernum)):
        fsize, stride, pad = net[layer]
        # 感受野计算公式
        RF = ((RF - 1) * stride) + fsize
    return RF


if __name__ == '__main__':
    print("layer output sizes given image = %dx%d" % (imsize, imsize))

    for net in net_struct.keys():
        print('************net structrue name is %s**************' % net)
        for i in range(len(net_struct[net]['net'])):
            p = outFromIn(imsize, net_struct[net]['net'], i + 1)
            rf = inFromOut(net_struct[net]['net'], i + 1)
            print("Layer Name = %s, Output size = %3d, Stride = % 3d, RF size = %3d" % (net_struct[net]['name'][i], p[0], p[1], rf))

4. 受容野の役割

(1) 一般業務タスクタスク、受容野が大きいほど良いことが求められます。たとえば、画像分類における最後の畳み込み層の受容野は、入力画像よりも大きい必要があります。ネットワークの深さが深いほど、受容野は大きいほど良いですパフォーマンス;

(2) 密集予測タスクタスクこのタスクでは、出力ピクセルの受容野が、意思決定の際に重要な情報が無視されないよう十分に大きいことが必要であり、一般的には深ければ深いほど良いです

(3) ターゲット検出タスクタスクタスクアンカー設定するan c h or は受容野、アンカーアンカーchが大きすぎる、受容野から逸脱すると、検出性能に重大な影響を与えます

5. 有効受容野

理解する 理解する準備です_ _ _ _ _効果効果 効果受容受容_ _受信フィールドフィールド_ _ _ _フィールドイン_ _ _ _ ディープディープディープコン ボリューション コンボリューション継続ニューラルニューラル_ _ _ _ _ _ _ _ _ニューラルネットワークネットワーク_ _ _ _記事「ネットワーク」では有効受容野( Effective 、 Effective効果受容受容_ _受信フィールドフィールド_ _ _ _フィールド ERFERF _ _ _ERF ) 理論に基づくと、論文では、受容野領域内のすべてのピクセルが出力ベクトルに等しく寄与するわけではなく、多くの場合、受容野領域内のピクセルの影響分布はガウス分布であり、有効受容野は出力ベクトルの一部のみを占めることがわかります。理論的な受容野、ガウス分布は中心から始まり端に向かって急速に減衰、下の 2 番目の写真はCNN CNNCNNの典型的な有効受容野
ここに画像の説明を挿入
この図に戻ると、緑色の領域に注目します。黄色は画像です。緑色のボックスがスキャンされるとき、最初の列は 1 回だけスキャンされます。つまり、1 つの操作に参加し、後続の列は次の操作に関与します。複数の操作、計算。したがって、最終的な実際の受容野はガウス分布を示します。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_52302919/article/details/131649361