欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

论文笔记:FCN

发布时间:2025/3/21 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 论文笔记:FCN 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

原文:Fully Convolutional Networks for Semantic Segmentation

FCN

1、四个问题

  • 要解决什么问题?
    • 语义分割。
  • 用了什么方法解决?
    • 提出了“全卷积神经网络”,可以接收任意尺寸的输入,并给出对应大小的输出。
      • 使用一些图像分类模型(如:AlexNet、VGG、GoogLeNet)等做迁移学习。
      • 使用skip architecture的结构,结合深层的较粗糙的信息和浅层的较精细的信息,得到更精确的结果。
      • 使用反卷积做上采样。
  • 效果如何?
    • 在PASCAL VOC 2012、NYUD v2、 SIFT Flow等数据集上取得了当时(2015年)领先的效果。并且在PASCAL VOC 2012上取得了62.2%的mean IU,比之前的最优方法提高了20%。
    • 文中的FCN网络对每张图片处理耗时为0.2s。
  • 还存在什么问题?
    • FCN是深度学习用于语义分割任务的开山之作,现在来说效果不能算很好。
  • 2、论文概述

    2.1、几个知识点总结

  • 语义分割:我的理解是,像素级别的分类,判断每个像素属于哪个类(即语义)。
  • end-to-end:端到端。很好理解,一个端到端网络的输入是你的原始数据,输出就是你想要的预测结果。中间过程不需要对数据另外做处理。
  • deconvolution
  • 有的地方翻译成“反卷积”,有的地方翻译成“转置卷积”(见如何理解深度学习中的deconvolution networks?)。直观上来说,我觉得“反卷积”更合适;不过从数学形式上来说“转置卷积”更贴切。怎么叫的顺口就怎么叫吧。
  • 特征图进过普通的卷积层后,输出的特征图尺寸通常都会缩小,相当于一个下采样的过程;而反卷积就是与卷积相反的过程,会让输出的尺寸增大,相当于一个上采样的过程。这篇文章中有可视化的例子,有助于理解。
  • 论文中解释是:卷积(convolution)的forward、backward过程相互对调,就是反卷积(deconvolution)。
  • 2.2、FCN结构

    2.2.1、将分类用于dense prediction

    • 作者指出,全连接层可以修正维度并会丢弃空间坐标关系。然而这些全连接层本身也可以看做是覆盖了整个feature map的卷积核组成的卷积层。
    • 使用卷积层替代全连接层。实质上全连接层也可以看做1∗11 * 111的卷积。
      • 以图中的网络为例:
      • 普通的全连接层:假设最后倒数第二个卷积层的feature map为7∗7∗2567 * 7 * 25677256,我们令最后一个卷积层的卷积核尺寸为7∗7∗256∗40967 * 7 * 256 * 4096772564096,得到的结果是1∗1∗40961 * 1 * 4096114096。将结果flatten,展开成1维的向量,随后接全连接操作。
      • 使用1∗11 * 111卷积替代全连接:与前面一样,倒数第二个卷积层的feature map为7∗7∗2567 * 7 * 25677256,最后一个卷积层的卷积核尺寸为7∗7∗256∗40967 * 7 * 256 * 4096772564096,得到的结果是1∗1∗40961 * 1 * 4096114096。下面接上1∗11 * 111卷积,卷积核为1∗1∗4096∗40961 * 1 * 4096 * 40961140964096,其实还是等价于全连接。
      • 1∗11*111卷积操作取代全连接,其实就是对将卷积核上同一点的所有channel进行FC操作。
    • 对示例图的解释:
    • 上面的网络是一个在ImageNet上预训练的CNN网络,输入一个224∗224224 * 224224224的图像,跑完全部的卷积层后输出应该正好是1∗1∗40961* 1 * 4096114096,随后flatten得到4096维的神经元,之后再接上全连接层,输出1000维的softmax。这里为止都是常规套路。
    • 将全连接替换成1∗11 * 111卷积。
    • 上面的网络中处理的图片是下面的图片中的一部分。那么推广到处理下面这副同时有"猫狗"的图像的情况下,可以看作从中取出了m∗nm * nmn227∗227227 * 227227227的patch,分别送到FCN中,每个patch都会有一个1000维的输出。那么这些patch的输出拼在一起就可以构成一个heatmap了。
    • 就以tabby cat这个例子来看,再对应tabby cat的那个通道,只要patch里面包含了猫,那么输出的概率应该都会比较高,而其他patch则会较低,最后结果应该会像图中所示,有猫的区域在heatmap中的值明显更大吧。)
    • 我个人的看法是,直接将分类网络的全连接层改为1∗11 * 111卷积,从下图中已经可以在一定程度上进行语义分割了(见heatmap),只要再进行微调不难取得相对精确的效果。

    2.2.2、基本结构

    • 假设使用的预训练网络是VGG-16,整个FCN网络中除了最后deconv的部分都与VGG一样。
    • 以图中的网络为例,FCN网络的conv7输出的heatmap,通过deconv进行上采样32倍得到第一个预测结果FCN-32s。
    • 接着作者使用了skip layers将几个pooling层输出的结果结合起来:
      • 先将pool4的输出接上1∗11 * 111卷积层,然后对conv7的输出使用deconv进行2倍上采样,随后两个输出相加。最后再接上stride为16的deconv层进行16倍上采样。得到第二个预测结果FCN-16s。
      • 同理,将pool3的输出接上1∗11 * 111卷积与pool4以及conv7的输出组合起来,最后可以得到第三个预测结果FCN-8s。

    2.2.3、训练细节

  • 在整个网络上微调,包括预训练模型(如VGG)的全部参数。
  • 作者实验结果表明,采样多个patch进行训练和直接使用原始图片训练,发现基本上没有太大差别,并且采样patch还更费时。所以,不进行采样,直接使用整幅图片进行训练。
  • 样本均衡(class balancing),影响不大,不做处理。
  • 数据增强,给训练数据加入镜像和抖动,性能没有太大提高。
  • 2.2.4、度量指标

    2.3、其他

  • 为了给数据引入深度信息,作者最先训练了一个4通道输入(RGB-D)的网络。发现效果并没有好多少,可能是由于模型内具有此类信息的梯度较难传递。后来,尝试了对深度信息进行三位HHA编码,仅仅利用这部分的深度信息进行训练一个网络。另外使用RGB图像数据训练一个网络,最后将这两个网络的结果进行融合,效果有较大的提高。这个方法可能也可以用来处理RGB-D的一些其他任务。
  • 其他上采样方法:关于FCN 论文中的 Shift-and-stitch 的详尽解释。
  • 3、资料

  • 译文
  • 关于FCN 论文中的 Shift-and-stitch 的详尽解释
  • https://zhuanlan.zhihu.com/p/35370022
  • 总结

    以上是生活随笔为你收集整理的论文笔记:FCN的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。