全卷积网络

全卷积网络

FCN的概念由Jonathan Long等人在2015年发表的论文中首次提出,用于语义分割(根据图像所属物体的类别对图像中的每个像素点进行分类的任务)。作者指出,可以用卷积层代替CNN顶部的密集层。

假设一个具有200个神经元的密集层位于一个卷积层的顶部,该卷积层输出100个特征图,每个特征图的大小为\(7\times7\)。每个神经元将计算来自卷积层的\(100\times\times7\times7\)的加权和(加上偏差项)。如果使用200个滤波器(每个滤波器大小为\(7\times7\))并使用“valid"填充将卷积层替换为密集层。该层将输出200个特征图,每个特征图为\(1\times1\)(因为内核正好是输入特征图的大小,并且使用的是'valid'填充)。它将输出200个数字,就像密集层一样。唯一的区别是:密集层的输出是形状为[批量大小,200]的张量,而卷积层将输出形状为[批量大小, 1, 1, 200]的张量

要将密集层转换为卷积层,卷积层中的滤波器数必须等于密集层中单元数,滤波器大小必须等于输入特征图的大小,并且必须使用‘valid’填充、步幅可以设置为1或者更大

虽然密集层需要特定的输入大小(因为每个输入特征只有一个权重),但是卷积层可以愉快地处理任何大小的图像(但是,它确实希望输入具有特定数量的通道,因为每个内核为每个输入通道包含一组不同的权重)。由于FCN仅包含卷积层(以及具有相同属性的池化层),因此可以在任何大小的图像上对其进行训练和执行

例如,假设已经训练了CNN以进行花的分类和定位。它在\(224\times224\)图像上进行训练,并输出10个数字:通过softmax激活函数输出0到4,这给出了类别概率(每个类别一个);通过逻辑激活函数输出5,这给出了客观分数;不使用任何激活函数输出6到9,它们表示边界框的中心坐标及其高度和宽度。可以将其密集层转换为卷积层。实际上,甚至不需要重新训练,可以将权重从密集层复制到卷积层,或者在训练之前将CNN转换为FCN

现在假设当网络被送入一个\(224\times224\)图像时,输出层之前的最后一个卷积层(也成为bottleneck层)输出\(7\times7\)特征图。如果向FCN提供\(448\times448\)的图像,则瓶颈层将输出\(14\times14\)的特征图。由于密集层已被卷积层替换,使用了10个大小为\(7\times7\)的滤波器,填充为‘valid’且步幅为1,卷积层输出将由10个特征图组成,每个特征图的大小为\(8\times8\)(14-7+1=8)。FCN将只处理一次整个图像,并且输出一个\(8\times8\)的网格,其中每个单元包含10个数字(5个类别概率、1个客观分数和4个边界框坐标)。这就像拿一个原始的CNN,以每行8步和每列8步的方式在图像上滑动一样。

将原始图像切成\(14\times14\)的网格,然后在该网格上滑动\(7\times7\)的窗口。该窗口将有\(8\times8=64\)个可能的位置,因此有\(8\times8\)个预测。但是,由于网络只查看一次图像,因此FCN方法效率更高。

上一篇:2021-2022-1 20211304《信息安全专业导论》第十一周学习总结


下一篇:Python的从0到1(十七)-Python的input()函数1