为什么用全卷积代替全连接?

之前看过这个问题,但是后来又忘记了,所以写一下加深印象

什么是全连接?

在之前的一些网络中,经常用全连接层做收尾,一般放在卷积和池化的后面

比如说最后生成的是 3 × 3 × 2 3 \times 3 \times 2 的特征图,需要得到10个数值的输出

那么全连接就是先将这个特征图reshape成一维的(如 18 × 1 18 \times 1 ),在用 18 × 10 18 \times 10 个参数来生成最后的10个数值,类似下图:
在这里插入图片描述

什么是卷积?

这个嘛,就不谈了

卷积和全连接的关系

  1. 在输入的大小正好符合全连接层接收的大小的时候,其实卷积和全连接是差不多的。
    继续用上面的例子,全连接可以看成是10个 3 × 3 × 2 3 \times 3 \times 2 大小的卷积核,结果也是一样的

  2. 在卷积核size小于全连接的时候,卷积可以看成是全连接的子集,比如 2 × 2 × 2 2 \times 2 \times 2 的卷积核,把 3 × 3 × 2 3 \times 3 \times 2 的和全连接相同的卷积核中,把比 2 × 2 × 2 2 \times 2 \times 2 多出来的部分都置为0,就是 2 × 2 × 2 2 \times 2 \times 2 的卷积核

卷积和全连接的比较

先假设一个会对图片进行 2 5 2^5 缩小的网络,在最后的特征图的后面有 7 × 7 × 512 7 \times 7 \times 512 的卷积层和一个能接受 7 × 7 × 512 7 \times 7 \times 512 的全连接层。

假定在处理 224 × 224 224 \times 224 大小的图片时backbone的卷积需要时间为 t c t_c ,处理 2 × 2 2\times 2 池化时需要的时间是 t p t_p

现在给网络一个 384 × 384 384\times 384 大小的输入:

全连接 卷积 结论
输入处理 将图片按照32的步长分成36张图片输入(步长是有网络的最后的特征图的缩放决定的) 直接输入 卷积更简单,不需要切分图片就能直接得到 6 × 6 6\times 6 的输出
第一个卷积和池化的前向传播耗时 6 × ( t c + 112 × t p ) 6\times(t_c+112\times t_p) 6 × t c + 192 × t p 6 \times t_c + 192\times t_p 672 t p < 192 t p 672t_p <192t_p ,卷积更省时

所以,卷积对于全连接,不仅不用固定输入的大小,而且速度更快,所以现在都用卷积代替全连接。

参考博客园
参考知乎

发布了63 篇原创文章 · 获赞 2 · 访问量 8034

猜你喜欢

转载自blog.csdn.net/McEason/article/details/104101540