FCN 全卷积网络

1. FCN介绍

1.1 简介

全卷积网络(Fully Convolutional Networks,FCN)是首个端对端的针对像素级预测的 全卷积网络

FCN将传统CNN后面的全连接层换成了卷积层,这样**网络的输出将是热力图(也就是特征图)**而非类别,这样对图片的尺寸不再加以限制。
在这里插入图片描述

同时,为解决卷积和池化导致图像尺寸的变小,使用上采样方式对图像尺寸进行恢复
在这里插入图片描述

1.2 核心思想

  • 不含全连接层的全卷积网络,可适应任意尺寸输入
  • 反卷积层增大图像尺寸,也就是上采样,得到一个与原图同样大小的结果。
  • 结合不同深度层结果的跳级结构,确保鲁棒性和精确性

2. 尾部卷积化 Convalutionalization

本章节介绍如何将全连接层替换为卷积层。

这里使用VGG中的D类网络作为传统CNN例子,之后会利用到第三个和第四个最大池化层的特征图。
在这里插入图片描述

第一个全连接层的运行过程如图所示,先进行展开,然后进行全连接操作,将25088个元素映射成4096个元素。
这个过程中需要使用 25088x4096=102760448个权重参数(忽略偏移)
在这里插入图片描述
若不使用全连接层,而是使用卷积层。这里使用4096个7x7x512的卷积核,在步长=1,padding=0(padding可调)的情况下进行卷积操作,最终得到一个1x1x4096的结果。虽然与使用全连接层的结果是一样,都是4096个且值相同,但使用卷积层会保留高宽信息

这个过程中,一个卷积核需要使用7x7x512=25088个参数,所有一共需要25088x4096个参数,这与使用全连接层的参数个数相同
在这里插入图片描述
而且在全连接层中计算一个节点所需的权重个数=卷积层中一个卷积核的参数个数,因此可以将全连接层中各个节点的所需权重参数分别重构成对应的卷积核,所以这里会有4096个卷积核=4096个全连接层节点
在这里插入图片描述

3.FCN模型类别

FCN常用的类别有FCN-32s、FCN-16s、FCN-8s,其中它们的上采样倍率是不同,分别为32、16、8。
下图是三类的结构。
在这里插入图片描述

3.1 FCN-32s

FCN-32s的网络结构如图所示,将对各个部分进行介绍:
在这里插入图片描述

3.1.1 VGG16 Backbone

如图所示,由VGG网络的前面部分构成了Backbone。会将输入图像从h×w×3h \times w \times 3h×w×3变为h32×w32×512\frac{h}{32}\times\frac{w}{32}\times51232h×32w×512
在这里插入图片描述

在这里插入图片描述

3.1.2 中间的卷积部分

包含三个卷积层,其中:

  • FC6:卷积核=7x7x512;有4096个卷积核;padding=3,;步长=1
    会得到一个h32×w32×4096\frac{h}{32}\times\frac{w}{32}\times409632h×32w×4096的结果(输出矩阵的大小不变的原因:计算得到)
  • FC7:卷积核=1x1x4096;有4096个卷积核;padding=0;步长=1
    会得到一个h32×w32×4096\frac{h}{32}\times\frac{w}{32}\times409632h×32w×4096的结果,高宽未变
  • 卷积核=1x1x4096;有**num_cls(分类的类别个数,包含背景)**个卷积核;步长=1;
    会得到一个h32×w32×\frac{h}{32}\times\frac{w}{32}\times32h×32w×num_cls的结果,深度改变了
    在这里插入图片描述

3.1.3 最后的转置卷积

最后进行转置卷积,进行32倍的上采样来恢复原图的高宽,深度为类别个数。
这里使用了双线性插值的方法来初始化转置卷积的参数
在这里插入图片描述
而在论文中,作者冻结了转置卷积的参数,因此实际上就是一个简单的双线性插值,可以直接使用双线性插值。原因是两种方法的性能差不多,但可以加速训练过程。

3.1.4 总结

最终每个像素都有num_cls个数值,对它们进行softmax操作就可以知道该像素最有可能属于哪个类别。
在FCN-32S中,VGG16、FC6与FC7使用的权重就是VGG中的权重。

3.2 FCN-16S

FCN-16S与FCN-32S存在相同的地方,如Backbone/FC6/FC,也存在不同的地方。
在这里插入图片描述

3.2.1 两倍的上采样

前面执行完卷积操作后,执行转置卷积来进行两倍的上采样
这里使用了双线性插值的方法来初始化转置卷积的参数

会得到h16×w16×\frac{h}{16}\times\frac{w}{16}\times16h×16w×num_cls的结果,深度不变,
在这里插入图片描述

3.2.2 使用VGG的MaxPool4的输出

在VGG中,MaxPool4的下采样率是16,因此会得到h16×w16×512\frac{h}{16}\times\frac{w}{16}\times51216h×16w×512的特征图。
在这里插入图片描述
在FCN-16S中,使用MaxPool4的特征图进行卷积操作:卷积核大小=1x1x512;有num_cls个卷积核;步长=1。
最后得到h16×w16×\frac{h}{16}\times\frac{w}{16}\times16h×16w×num_cls的特征图,这与前面进行转置卷积的大小是一样的。
在这里插入图片描述

3.2.3 相加最后16倍上采样

将前面得到的两个h16×w16×\frac{h}{16}\times\frac{w}{16}\times16h×16w×num_cls的特征图进行相加,然后通过转置卷积进行16倍的上采样,还原到原图的大小
在这里插入图片描述

3.2.4 总结

FCN-16S使用了VGG中MaxPool4的特征图进行运算。

3.3 FCN-8S

FCN-8S与FCN-16S存在相同的地方,如Backbone/FC6/FC等,也存在不同的地方。
在这里插入图片描述

3.3.1 两倍上采样

将前面两个h16×w16×\frac{h}{16}\times\frac{w}{16}\times16h×16w×num_cls的特征图求和所得的结果执行转置卷积进行2倍的上采样
最后得到h8×w8×\frac{h}{8}\times\frac{w}{8}\times8h×8w×num_cls的特征图
在这里插入图片描述

3.3.2 使用VGG中MaxPool3

使用VGG中MaxPool3的特征图,会得到h8×w8×256\frac{h}{8}\times\frac{w}{8}\times2568h×8w×256的特征图。
在这里插入图片描述
在FCN-8S中,使用MaxPool3的特征图进行卷积操作:卷积核大小=1x1x256;有num_cls个卷积核;步长=1。
最后得到h8×w8×\frac{h}{8}\times\frac{w}{8}\times8h×8w×num_cls的特征图,这与前面的上采样结果的大小相同
在这里插入图片描述

3.3.3 前面相加最后8倍上采样

将前面得到的两个h8×w8×\frac{h}{8}\times\frac{w}{8}\times8h×8w×num_cls的特征图进行相加,然后通过转置卷积进行8倍的上采样,还原到原图的大小
在这里插入图片描述

3.3.4

同时融合了VGG中的MaxPool3与MaxPool4这些底层信息。

4 损失计算

每个像素进行softmax计算,然后利用真实标签计算交叉熵损失Cross Entropy Loss
在这里插入图片描述
交叉熵损失:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值