1.怎样将全连接层转换为卷积层?
首先,我们需要了解全连接层和卷积层之间有啥区别。
卷积层与全连接层
卷积层的特点:稀疏连接,权值共享
全连接层的特点:每个神经元都和上一层的所有神经元相连接
两者的共同点:都是由上一层的输出与参数矩阵相乘从而得到下一层的输入
所以我们得以得到结论,全连接层和卷积层实际上是可以相互转换的。
我们来看下面的这个例子:
如下图所示:卷积层的输出为 7×7×512,即每个 feature map 的大小为 7×7,共有 512 个 feature map,然后通过一个全连接层得到了 1×1×4096 的输出。
上图是经过全连接层FC得到的输出结果,假设我们将全连接层替换为卷积层,会得到怎样的输出呢?这个问题关键在于卷积核的参数的设置。
如下图所示,输入为4×4,卷积核为3×3,其他参数默认,最终得到的输出为2×2。如果我们把卷积核调整为4×4,那最终的输出是1×1,这样就和全连接层一样的效果。
得出结论:把卷积核尺寸设置成和输入尺寸一样大小,就能将卷积层转换为全连接层。
2.为什么要将全连接层转化为卷积层?
1.全连接层可以视作一种特殊的卷积
2.网络改成全卷积形式后在某些场景可以提升效率
对于传统的 CNN(即包含全连接层),一个确定的网络其输入图像的大小是固定的,比如 CaffeNet 的输入须是 227×227,那么对于更大的图像,在检测时就需要裁剪出很多 227×227 的小图像分别送入 CNN 网络中,使得检测任务十分耗时。
而网络需要输入固定大小图像的主要原因就是有全连接层,当把全连接层替换成了卷积层后,就可以不限制输入图像的大小,一次性输入网络即可获得一张图片所有位置的检测目标概率,形成一幅 heatmap。
固定大小是说送入网络训练的每一个数据大小需要一样,可以全都是 227*227,也可以全都是 224*224,只要统一就行。
这样要求的原因是全连接层与前一层连接时,参数数量需要预先设定好。不同于卷积操作,卷积核的参数数量就是卷积核大小,它与前一层的 feature map 多大没有关系,但是全连接层的参数是随着前一层 feature map 的大小变化而变化的,当输入图像大小不同,全连接层之前得到的 feature map 大小也不一样,那么全连接层的参数数量就不能确定,所以必须固定输入图像的大小。