用卷积层替代全连接层

参考:https://blog.csdn.net/qq_30159015/article/details/79710364

  将全连接层改为卷积层,计算方式不变,但全卷积网络可以接受任意大小的图片输入,得到一个score map,对其做一个average就可以得到最终结果(one-hot label)。之所以需要这样设计,因为他们train与test的图片大小是不一样的。

  卷积层和全连接层的唯一区别在于卷积层的神经元对输入是局部连接的,并且同一个通道(channel)内不同神经元共享权值(weights). 卷积层和全连接层都是进行了一个点乘操作, 它们的函数形式相同. 因此卷积层可以转化为对应的全连接层, 全连接层也可以转化为对应的卷积层.

  比如VGGNet[1]中, 第一个全连接层的输入是77512, 输出是4096. 这可以用一个卷积核大小77, 步长(stride)为1, 没有填补(padding), 输出通道数4096的卷积层等效表示, 其输出为11*4096, 和全连接层等价. 后续的全连接层可以用1x1卷积等效替代.

  简而言之, 全连接层转化为卷积层的规则是: 将卷积核大小设置为输入的空间大小.这样做的好处在于卷 积层对输入大小没有限制, 因此可以高效地对测试图像做滑动窗式的预测.

  比如训练时对224224大小的图像得到77512的特征, 而对于384384大小的测试图像, 将得到1212512的特征, 通过后面3个从全连接层等效过来的卷积层, 输出大小是661000, 这表示了测试图像在36个空间位置上的各类分数向量. 和分别对测试图像的36个位置使用原始的CNN相比, 由于等效的CNN共享了大量计算, 这种方案十分高效而又达到了相同目的.全连接层和卷积层的等效表示最早是由[2]提出. [2]将卷积层中的线性核改成由一系列的全连接层组成的小神经网络, 用于在每个卷积层提取更复杂的特征. 在实现时, NIN是由一个传统卷积层后面加一系列1*1卷积得到的。

  由于卷积层可以处理任意大小输入, 非常适合检测, 分割等任务

猜你喜欢

转载自blog.csdn.net/qq_18644873/article/details/87915634