美文网首页
FCN的理解

FCN的理解

作者: 乔大叶_803e | 来源:发表于2020-01-16 10:50 被阅读0次

论文地址

开源代码地址

接下来进入正文。

FCN是语义分割的鼻祖,在他出来之前像素级别的分割是个解决不了的问题。

FCN 的核心点

我们以Alexnet为例,他是把最后的三个全连接层都改成了卷积层,也是让网络从原来的标签信息,上升到了二维的图像,又通过最后的上采样也就是转置卷积,把最后的feature map(fcn中叫做heatmap)放到原来的倍数。

在传统的cnn网络模型中

通常cnn网络在卷积之后会接上若干个全连接层,将卷积层产生的特征图(feature map)映射成为一个固定长度的特征向量。一般的CNN结构适用于图像级别的分类和回归任务,因为它们最后都期望得到输入图像的分类的概率,如ALexNet网络最后输出一个1000维的向量表示输入图像属于每一类的概率。

与传统的cnn网络的

FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN在卷积层使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后奇偶在上采样的特征图进行像素的分类。
全卷积网络(FCN)是从抽象的特征中恢复出每个像素所属的类别。即从图像级别的分类进一步延伸到像素级别的分类。

FCN与传统CNN网络的对比

至于两者的区别

  • 就是FCN把CNN后边的全连接换成了卷积层,并输出一张已经label好的图

在网络结构中

FCN的网络结构

全卷积提取特征

虚线上半部分为全卷积网络。(蓝:卷积,绿:max pooling)。对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。
这部分由深度学习分类问题中经典网络AlexNet1修改而来。只不过,把最后两个全连接层(fc)改成了卷积层。

在论文中是基于vgg16的模型精度是最高的。
但是图中截取的是Alexnet的网络为主干进行改进的FCN

逐像素的预测

例如
第一个预测模块
输入16*16*4096,卷积模板尺寸1*1,输出16*16*21

相当于对每个像素施加一个全连接层,从4096维特征,预测21类结果。

怎么具体逐像素点预测分类的:

采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

具体过程:
经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像到

过程

最后的输出是21张heatmap经过upsampling变为原图大小的图片,为了对每个像素进行分类预测label成最后已经进行语义分割的图像

这里有一个小trick,就是最后通过逐个像素地求其在21张图像该像素位置的最大数值描述(概率)作为该像素的分类。因此产生了一张已经分类好的图片,如下图右侧有狗狗和猫猫的图。

反卷积

这个在其他章节中讲过

跳级链接

看到FCN的跳级连接我想到的就是FPN的结构,当然感觉FPN应该是借鉴这里的,不过他是最终融合了一张feature map 也就结合了低级的语义信息和高层抽象结果。

如下图所示:对原图进行卷积conv1、pool1后图像缩小为1/2;对图像进行第二次卷积conv2、pool2后图像缩小为1/4;对图像进行第三次卷积conv3、pool3后图像缩小为1/8,此时保留pool3的featuremap;对图像进行第四次卷积conv4、pool4后图像缩小为1/16,此时保留pool4的featuremap;对图像进行第五次卷积conv5、pool5后图像缩小为1/32,然后把原来CNN操作过程中的全连接编程卷积操作的conv6、conv7,图像的featuremap的大小依然为原图的1/32,此时图像不再叫featuremap而是叫heatmap。

其实直接使用前两种结构就已经可以得到结果了,这个上采样是通过反卷积(deconvolution)实现的,对第五层的输出(32倍放大)反卷积到原图大小。但是得到的结果还上不不够精确,一些细节无法恢复。于是将第四层的输出和第三层的输出也依次反卷积,分别需要16倍和8倍上采样,结果过也更精细一些了。这种做法的好处是兼顾了local和global信息。

跳层连接

整个训练过程

第一阶段
第一阶段

以经典的分类网络为初始化。最后两级是全连接(红色),参数弃去不用。

第2阶段

从特征小图(16164096)预测分割小图(161621),之后直接升采样为大图。
反卷积(橙色)的步长为32,这个网络称为FCN-32s。
这一阶段使用单GPU训练约需3天。
第三阶段
第三阶段

升采样分为两次完成(橙色×2)。
在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。
第二次反卷积步长为16,这个网络称为FCN-16s。
这一阶段使用单GPU训练约需1天。

第四阶段
第4阶段

升采样分为三次完成(橙色×3)。
进一步融合了第3个pooling层的预测结果。
第三次反卷积步长为8,记为FCN-8s。
这一阶段使用单GPU训练约需1天。

较浅层的预测结果包含了更多细节信息。比较2,3,4阶段可以看出,跳级结构利用浅层信息辅助逐步升采样,有更精细的结果。

4步出来的结果

总体来说,本文的逻辑如下:

  • 想要精确预测每个像素的分割结果
  • 必须经历从大到小,再从小到大的两个过程
  • 在升采样过程中,分阶段增大比一步到位效果更好
  • 在升采样的每个阶段,使用降采样对应层的特征进行辅助

相关文章

网友评论

      本文标题:FCN的理解

      本文链接:https://www.haomeiwen.com/subject/vyatzctx.html