首先需要理解的是改fc层为conv层实际上的计算方式没有发生任何变化。但是其结果
全卷积网络可以接收任意大小的图片输入,得到一个score map,对其做一个average就可以得到最终结果(one-hot label)。
之所以需要这样设计,因为他们train与test的图片大小是不一样的。
卷积层和全连接层的唯一区别在于卷积层的神经元对输入是局部连接的,并且同一个通道(channel)内不同神经元共享权值(weights). 卷积层和全连接层都是进行了一个点乘操作, 它们的函数形式相同. 因此卷积层可以转化为对应的全连接层, 全连接层也可以转化为对应的卷积层.
比如VGGNet[1]中, 第一个全连接层的输入是7*7*512, 输出是4096. 这可以用一个卷积核大小7*7, 步长(stride)为1, 没有填补(padding), 输出通道数4096的卷积层等效表示, 其输出为1*1*4096, 和全连接层等价. 后续的全连接层可以用1x1卷积等效替代.
简而言之,
全连接层转化为卷积层的规则是: 将卷积核大小设置为输入的空间大小.这样做的好处在于卷 积层对输入大小没有限制, 因此可以高效地对测试图像做滑动窗式的预测.
比如训练时对224*224大小的图像得到7*7*512的特征, 而对于384*