Deep learning 深度学习中的接受域大小和对象大小

Deep learning 深度学习中的接受域大小和对象大小,deep-learning,caffe,conv-neural-network,Deep Learning,Caffe,Conv Neural Network,我可以为VGGNet计算500 x 500输入图像的感受野大小 感受野大小如下 Layer Name = conv1, Output size = 500, Stride = 1, RF size = 3 Layer Name = relu1_1, Output size = 500, Stride = 1, RF size = 3 Layer Name = conv1_2, Output size = 500, Stride = 1, RF size = 5 Layer

我可以为VGGNet计算500 x 500输入图像的感受野大小

感受野大小如下

Layer Name = conv1, Output size = 500, Stride =   1, RF size =   3
Layer Name = relu1_1, Output size = 500, Stride =   1, RF size =   3
Layer Name = conv1_2, Output size = 500, Stride =   1, RF size =   5
Layer Name = relu1_2, Output size = 500, Stride =   1, RF size =   5
Layer Name = pool1, Output size = 250, Stride =   2, RF size =   6
Layer Name = conv2_1, Output size = 250, Stride =   2, RF size =  10
Layer Name = relu2_1, Output size = 250, Stride =   2, RF size =  10
Layer Name = conv2_2, Output size = 250, Stride =   2, RF size =  14
Layer Name = relu2_2, Output size = 250, Stride =   2, RF size =  14
Layer Name = pool2, Output size = 125, Stride =   4, RF size =  16
Layer Name = conv3_1, Output size = 125, Stride =   4, RF size =  24
Layer Name = relu3_1, Output size = 125, Stride =   4, RF size =  24
Layer Name = conv3_2, Output size = 125, Stride =   4, RF size =  32
Layer Name = relu3_2, Output size = 125, Stride =   4, RF size =  32
Layer Name = conv3_3, Output size = 125, Stride =   4, RF size =  40
Layer Name = relu3_3, Output size = 125, Stride =   4, RF size =  40
Layer Name = pool3, Output size =  62, Stride =   8, RF size =  44
Layer Name = conv4_1, Output size =  62, Stride =   8, RF size =  60
Layer Name = relu4_1, Output size =  62, Stride =   8, RF size =  60
Layer Name = conv4_2, Output size =  62, Stride =   8, RF size =  76
Layer Name = relu4_2, Output size =  62, Stride =   8, RF size =  76
Layer Name = conv4_3, Output size =  62, Stride =   8, RF size =  92
Layer Name = relu4_3, Output size =  62, Stride =   8, RF size =  92
Layer Name = pool4, Output size =  31, Stride =  16, RF size = 100
Layer Name = conv5_1, Output size =  31, Stride =  16, RF size = 132
Layer Name = relu5_1, Output size =  31, Stride =  16, RF size = 132
Layer Name = conv5_2, Output size =  31, Stride =  16, RF size = 164
Layer Name = relu5_2, Output size =  31, Stride =  16, RF size = 164
Layer Name = conv5_3, Output size =  31, Stride =  16, RF size = 196
Layer Name = relu5_3, Output size =  31, Stride =  16, RF size = 196
我只看了高达5_3的照片

例如,如果对象大小为150 x 150,图像大小为500 x 500

我可以说,从conv1到conv4_2的早期图层的特征贴图只包含我的对象的部分特征,从conv5_2到conv5_3,它们包含几乎整个对象的特征

我的考虑是真的吗

但在conv5_3上,我的输出大小仅为31 x 31,因此我无法想象它如何表示图像中的整个对象,但conv5_3层中的每个像素表示原始500 x 500图像的196 x 196大小

我的考虑是真的吗?

理论上。。。 我可以说,从conv1到conv4_2的早期图层的特征贴图只包含我的对象的部分特征,从conv5_2到conv5_3,它们包含几乎整个对象的特征。我的考虑是真的吗

对!!您甚至计算了自己的感受野(在CNN的情况下,是图像中的像素,理论上可以影响特征图中一个单元格的值)

但在conv5_3上,我的输出大小仅为31 x 31,因此我无法想象它如何表示图像中的整个对象,但conv5_3层中的每个像素表示原始500 x 500图像的196 x 196大小。我的考虑是真的吗

对!!但别忘了,尽管功能图的大小只有31x31,但功能的步幅是16。因此,
conv5_3
feature map的每个单元格表示图像中的一个区域196x196(请记住,如果“输入窗口”不适合图像内部,“输入窗口”的其余部分将为黑色,例如填充为零),并且彼此之间的跨距为16x16。因此,31x31功能图仍然完全捕获图像(只是步幅很大)


实际上。。。 好的,上面我们讨论的是理论感受野,即图像中概率大于0的像素影响特征图中的一个细胞(或像素)(在这种情况下为31x31)。然而,在实践中,这在很大程度上取决于卷积核的权重

看一看CNN的有效感受野(ERF)(或者,如果您有足够的时间,请直接访问)

理论上,当你堆叠更多的层时,你可以线性地增加你的感受野,然而,在实践中,事情并不像我们想象的那样简单:感受野中的所有像素对输出单元的响应的贡献并不相等

更有趣的是,这种感受野是动态的,在训练过程中会发生变化。这对反向传播的影响是,与边界像素相比,中心像素将具有更大的梯度幅度

以下是代表ERF的文件中的一些数字:

正如你所看到的,感受野根本没有覆盖整个贴片!因此,如果
conv5_3
的ERF远小于196x196,不要感到惊讶


也。。。 除了感受野的大小,基本上是说“特征图上的这个细胞压缩了图像中这个区域的有价值的数据”,你还需要这些特征足够的表达能力。因此,在谷歌上查看或搜索“vgg可视化”,对功能本身的表达能力有一些直觉