参考视频:FCN网络结构详解(语义分割)_哔哩哔哩_bilibili
FCN是首个端对端的针对像素级预测的全卷积网络
![](https://i-blog.csdnimg.cn/blog_migrate/ac5c5dc917bb5ed4cc00fa9f5ebfdb12.png)
这是作者提出的网络中的输出对比图,可以看到当FCN-8s效果接近真实分割图。
普通卷积分类网络与FCN对比
在这个模型提出之前,我们来看一下普通的卷积分类网络模型结构如下图。
![](https://i-blog.csdnimg.cn/blog_migrate/314784b9936dedf1395d9a98d9839ca2.png)
图片中的数字表示的是输出图片的通道数,网络通过卷积下采样得到图片特征,从4096那层开始为全连接层,21是因为使用的PASCAL VOC数据集有20个种类,加上背景一共21个分类,再对这个输出进行上采样,得到与原图相同大小的图片,对它进行softmax处理,输出每一个像素的最大概率分类。
这个网络在当时有一个弊端就是输入图片大小必须相同。有人就想用卷积层去替代后面的三层全连接层,FCN也就是这样产生的。
FCN
![](https://i-blog.csdnimg.cn/blog_migrate/80da0034eee46b1e9662f960b4017b99.png)
如图,将全连接层替换为卷积层后,实际上最后一层4096那一层输出特征会是1000通道的二维图片,高和宽大于1,这样对于每一个通道的数据实际就是2D的数据,这样就能对其可视化了。
为了说明白是如何替换成卷积层的,我们先来看4096通道前面那部分模型结构,也就是VGG16模型,如下图:这里的VGG16指D的配置
![](https://i-blog.csdnimg.cn/blog_migrate/2380509c23f3462c7d5717f2c5151819.png)
分析:从224*224到7*7图片下采样了32倍
全连接层如何转化为卷积层
第一个全连接层转化为卷积层
![](https://i-blog.csdnimg.cn/blog_migrate/f48288aa655d66931f80f99c0e2063bf.png)
为了方便连接我们忽略偏执:
如图上面为全连接层,有4096个结点,当上一层展平时得到7*7*512=25088个参数
下面为卷积层,使用的是7*7*4096的卷积核,这样得到1*1*4096的输出,对于一个卷积,参数也为25088
因为参数相同,所以我们可以对上面全连接层的参数进行reshape处理,这样就能构建卷积层,同时因为这样,卷积层处理过的特征相比全连接层保留了高和宽。
(注:图片中的padding可调是指可以对7*7*512输出图片进行处理,一般这个padding为3是为了防止全连接层之前的输出为1*1,这样padding后也能继续处理了。)
接下来的第二个第三个全连接层的处理一样。
FCN-32s、FCN-16s、FCN-8s模型详细讲解
我们先看一张原论文中的一张表如下:
![](https://i-blog.csdnimg.cn/blog_migrate/5c87ce72f923b3eba4ee279258f15bc0.png)
从表中可以看到从FCN-32s到FCN-8s模型,准确率是逐渐提高的。
下图为一张FCN-32s、FCN-16s、FCN-8s的模型整体结构图
![](https://i-blog.csdnimg.cn/blog_migrate/adacb978e06c31bf7ed63ca4bbf44211.png)
图中的FCN-32s其实是对输出的图片进行上采样32倍得到的,因此成为FCN-32s,其他同理也是上采样16倍和上采样8倍。
FCN-32s
![](https://i-blog.csdnimg.cn/blog_migrate/b853c3cd68564c642cc37d7bbf4a6a10.png)
分析:图中VGG16Backbone指7 * 7 * 512那一层包括那一层之前的网络结构,经过前面的网络我们得到的是下采样了32倍的特征图。FC6为全连接层改成的第一个卷积层,这一层会padding = 3,所以经过这层图像大小还是h/32,w/32,又采用了4096个卷积所以又4096个通道,然后经过1 * 1的卷积层,输出特征图大小不变,再输入一层大小为1*1卷积核为要分类个数大小的卷积层,接下来用转置卷积上采样32倍,这里括号里面有双线性插值(双线性插值_太阳花的小绿豆的博客-CSDN博客_双线性插值)来初始化转置卷积。
FCN-16s
![](https://i-blog.csdnimg.cn/blog_migrate/3d72e86a82ca8344ca50fc00160b2918.png)
分析:前面基本和FCN-32s一样,只是上面输出时先对其上采样2倍得到[h/16,w/16,num_cls]大小的特征图,下面Maxpool4(这是VGG16 14 * 14 *512那一层的输入特征图)的输出经过一个1*1num_cls大小的卷积层,得到[h/16,w/16, num_cls]大小的特征图,最后将上面和下面的输出相加进行16的上采样得到最后的heatmap。
FCN-8s
![](https://i-blog.csdnimg.cn/blog_migrate/c43b5a1705347b28cf6a1c0afdf67433.png)
分析:前面基本与FCN-8s和FCN-16s基本相同,基本类似。