论文笔记:FCN_class balancing-程序员宅基地

技术标签: 论文阅读  FCN  深度学习  论文笔记  

原文:Fully Convolutional Networks for Semantic Segmentation

FCN

1、四个问题

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

2、论文概述

2.1、几个知识点总结

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

2.2、FCN结构

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

在这里插入图片描述

2.2.2、基本结构

在这里插入图片描述

  • 假设使用的预训练网络是VGG-16,整个FCN网络中除了最后deconv的部分都与VGG一样。
  • 以图中的网络为例,FCN网络的conv7输出的heatmap,通过deconv进行上采样32倍得到第一个预测结果FCN-32s。
  • 接着作者使用了skip layers将几个pooling层输出的结果结合起来:
    • 先将pool4的输出接上 1 ∗ 1 1 * 1 11卷积层,然后对conv7的输出使用deconv进行2倍上采样,随后两个输出相加。最后再接上stride为16的deconv层进行16倍上采样。得到第二个预测结果FCN-16s。
    • 同理,将pool3的输出接上 1 ∗ 1 1 * 1 11卷积与pool4以及conv7的输出组合起来,最后可以得到第三个预测结果FCN-8s。
2.2.3、训练细节
  1. 在整个网络上微调,包括预训练模型(如VGG)的全部参数。
  2. 作者实验结果表明,采样多个patch进行训练和直接使用原始图片训练,发现基本上没有太大差别,并且采样patch还更费时。所以,不进行采样,直接使用整幅图片进行训练。
  3. 样本均衡(class balancing),影响不大,不做处理。
  4. 数据增强,给训练数据加入镜像和抖动,性能没有太大提高。
2.2.4、度量指标

在这里插入图片描述

2.3、其他

在这里插入图片描述

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

3、资料

  1. 译文
  2. 关于FCN 论文中的 Shift-and-stitch 的详尽解释
  3. https://zhuanlan.zhihu.com/p/35370022
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hongbin_xu/article/details/83382678

智能推荐

笔记本一直提示计算机内存不足怎么办,笔记本电脑内存不足怎么解决-程序员宅基地

文章浏览阅读4k次。笔记本电脑内存不足怎么解决所谓“内存不足”就是指在启动或运行DOS应用程序和Windows应用程序时,系统报“Out of memory"或“内存不足"的错误信息。那么笔记本电脑内存不足怎么办呢?下面是笔记本电脑内存不足的解决方法,希望小编整理的对你有用,欢迎阅读:笔记本电脑内存不足的解决方法:检查内存使用情况首先打开系统的任务管理器,点击上方的“性能”,查看当前内存使用情况,如果内存空间不是很多..._内存不足怎么解决

使用STM32CubeMX开发二:按键实验_配置key-up按键管脚的工作模式(-程序员宅基地

文章浏览阅读4k次。简单的按键程序,只是为了熟悉STM32CubeMx开发环境的开发流程。_配置key-up按键管脚的工作模式(

电脑无法进入bios_bios进不去-程序员宅基地

文章浏览阅读3.1k次。bios_bios进不去

windows docker使用CentOS7装宝塔后,服务不会自动启动问题解决_宝塔面板开启没有自启-程序员宅基地

文章浏览阅读1.7k次。windows docker使用centos7装宝塔后,服务不会自动启动问题解决_宝塔面板开启没有自启

设置对话框显示位置_帆软弹窗只能在中间吗-程序员宅基地

文章浏览阅读1.8k次。原文地址:http://blog.sina.com.cn/s/blog_455245fc01000a43.html今天想写个程序,需要对话框在屏幕的右下角。懒得想就去网上搜搜,不过却没找到什么好的。大部分都是给个函数MoveWindow,或者SetWindowPos却不给大家写用法。比如怎么的到对话框的大小等等!反正就是不方便向我一样新手学习。 所以我今天就献丑了,把这写出来。虽然没..._帆软弹窗只能在中间吗

判断素数(C++版)_c++判断素数-程序员宅基地

文章浏览阅读4.1w次,点赞29次,收藏69次。参考博文:https://blog.csdn.net/Jonms/article/details/804646221.简单粗暴法对于判断一个数n是否为素数,按素数的定义,试除以从2开始到m-1的整数,如果都不能整除,则该数一定是素数。#include <iostream>#include <algorithm>using namespace std;bool ..._c++判断素数

随便推点

HDOJ 1312 Red and Black (深搜 DFS)_hdoj 1312 red and black 深搜-程序员宅基地

文章浏览阅读423次。HDOJ 1312 Red and Black (深搜 DFS) 思路:深搜 (DFS),通过四向搜索将 可走的点 变为 不可走的点 ,直到全部,不可再走,记录所有可走的点数。_hdoj 1312 red and black 深搜

Windows登录日志详解_microsoft windows security auditing.-程序员宅基地

文章浏览阅读10w+次,点赞8次,收藏44次。日志在很多时候是非常重要的,尤其是登录日志。从登录日志中可以发现很多有价值的信息,window2008及以后的日志基本一致,2003由于时间太长,微软都停止更新了,所以重点介绍2008的登录日志。_microsoft windows security auditing.

Three.js讲解以及WEBGL实例(转)_three.js (webg)-程序员宅基地

文章浏览阅读6.3k次,点赞3次,收藏4次。webGL可以让我们在canvas上实现3D效果。而three.js是一款webGL框架,由于其易用性被广泛应用。如果你要学习webGL,抛弃那些复杂的原生接口从这款框架入手是一个不错的选择。自己虽然在去年6月份接触过一段时间,但是一直没有时间研究一下,对webGL了解的也不是很多,近来有些时间,总结一下自己掌握的这些WEBGL的东西,也给大家分享一下。在本篇文章当中,会以一个demo为例,读_three.js (webg)

js获取视频缩略图-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏2次。原理:播放视频,canvas截图,base64转文件播放视频:input file选择文件,video播放视频 &lt;video :src="file.src" id="video" controls="controls" style="width:100%;max-height:400px;"&gt; &lt;/video&gt;截图_js获取视频缩略图

cache缓存_cachebuilder.newbuilder()-程序员宅基地

文章浏览阅读591次。一、使用CacheBuilder.newBuilder() .方法包:package com.google.common.cachemaven依赖:<dependency><groupId>com.geogle.guava</groupId><artifactId>guava</artifactId><version>11.0.2</version>..._cachebuilder.newbuilder()

跨交换机VLAN配置和验证_*跨交换机配置vlan的目的是什么,步骤和命令是什么?-程序员宅基地

文章浏览阅读1.5k次。实验配置拓扑1:配主机IP地址2:在交换机1和2上创建vlan10,vlan20,把相应拓扑图示端口加入vlan中SW1配置:使用show vlan命令查看端口是否加入vlan中SW2配置:SW3配置:此时交换机划分vlan,但交换机之间没有打trunk模式,测试此时pc能否联通。3:对交换机打上trunk模式交换机3在f0/1-2两个接口先进行封装协议,再打trunk此时发现pc端相同vlan间能够ping通。配置步骤:创建vlan划分端口设置交换机之间t_*跨交换机配置vlan的目的是什么,步骤和命令是什么?