作者:嫩芽33
出处:http://www.cnblogs.com/nenya33/p/7122701.html
版权:本文版权归作者和博客园共有 
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

学习了一篇用CNN做光流的paper,简称FlowNet。

1. 论文题目  FlowNet: Learning Optical Flow with Convolutional Networks

2.背景

  • 为什么想到用CNN做光流:最近提出的CNN架构可以做逐像素预测,比如,语义分割和从单图估计深度。所以本文提出end-to-end训练CNNs用于从图像对中预测光流场。
  • 光流和其他任务的区别:光流估计需要精确的逐像素定位,也需要找到两个输入图像的对应。这不仅涉及到学习图像特征表达,也要学习在两个图像的不同位置匹配这些特征表达。所以从这方面来看,光流估计和CNNs的以前应用基本上不一样。

3. 本文提出构建CNNs,以有监督的学习方式解决光流估计任务。提出两种架构,并做了对比实验:

  • 一种是通用的架构
  • 另外一种是包含一个不同图像位置的特征向量关联层。因为不确定用标准的CNN架构能否解决这个问题,就提出了一个有关联层的架构,用来显式地提供匹配功能。这个架构采用end-to-end训练。思想是利用卷积网络学习多级尺度和抽象化的强大特征的能力,然后帮助他基于这些特征找到实际的对应。关联层上面学习如何从这些匹配中来预测流。令人惊讶的是,用这种方式帮助网络并不是 必要的,甚至是原始的网络都能学会以具有竞争力的准确性来预测光流。

4. 已有光流数据集太小,很多没有标注真实值,本文创建了一个新的光流数据集Flying Chairs,用来充分训练CNN。

5. 网络架构

给定足够的有标签数据,CNN 擅长学习输入-输出关系。所以我们采用end-to-end的学习方法预测光流:给定一个包含图像对真实流的数据集,我们训练一个网络直接从图像中预测x-y流场。但是需要设计合适的架构来实现这个目的。

一个简单的选择是把输入图像堆叠起来,把他们通过一个相当普通网络,让网络自己决定怎样处理图像对从而抽取出运动信息,如图2(top)所示,这个只有卷积组成的架构称为“FlowNetSimple”

原则上,如果这个网络足够大,就能学习预测光流,然而,我们无法保证像SGD那样的局部梯度优化能让网络达到全局最优点,因此,手工设计一个不那么通用、但能用给定数据和优化技巧得到好的性能的架构是有好处的。

一个直接的想法就是:针对两个图像,创建两个独立但相同的处理流,然后在后续进程中把他们结合到一起,如图2(bottom)。在这个架构中,网络需要要先分别产生两个图像的有意义的表达,然后在更高级别把他们结合,这类似于标准的匹配方法中一个先从两个图像的patches抽取特征,然后结合这些特征向量。然而,得到两个图像的特征表达后,网络怎么找二者的对应呢?

在匹配进程,我们在网络中引入了一个“correlation layer”(关联层),在两个特征图中做乘法patch比较,包含这个层的网络结构在图2(bottom)中。给定两个多通道的特征图f1、f2,w、h和c是他们的宽度、高度和通道数,我们的关联层就是让网络比较f1中的每个patch和f2中的每个patch。

现在我们只考虑两个patch的单独比较。第一个图的以x1为中心的patch和第二个图的以x2位中心的patch之间的关联就定义为:

方形patch的尺寸为K=2k+1  (k=0)。公式1等同于神经网络中的一个卷积,但不是用滤波器卷积数据,而是用数据卷积数据,所以,没有可训练的权重。

计算c(x1,x2)涉及到cKK次乘法,比较所有的patch组合涉及到wwhh次计算,所以很难处理前向后向过程。为了计算,我们限制最大位移d用于比较,而且在两个特征图中也引入了步长stride。这样通过限制x2的范围,只在D=2d+1 (d=20)的邻域中计算关联c(x1,x2)。我们用步长s1(1)和s2(2),来全局quantize x1,在以x1为中心的邻域内quantize x2。

理论上,关联的结果是4D的:对两个2D位置的每个组合,我们得到一个关联值,即两个分别包含截取patches值的向量的内积。实际上,我们把相对位置用通道表示,这就意味着我们得到了w*h*D*D大小的输出。在反向过程中,我们求关于每个对应底层blob的导数。

6. Refinement

Pooling会导致分辨率减少,为了提供密集的像素预测,我们需要一种方法来refine  pool后的coarse表达。我们refine的方法如图3所示,主要的是upconvolutional 上卷积层,由unpooling(与pooling相反,扩展特征图)和卷积组成。为了做refinement,我们在特征图上用上卷积,然后把它和网络的收缩部分’contractive’ 得到的对应特征图、以及一个上采样的coarses流预测连接起来。这样就能既保留coarser特征图的高层信息,又能保留低层特征图的好的局部信息。每个步骤两次增加分辨率,我们重复这个过程4次,得到预测的流,此时的特征图还是原图的四分之一。

我们发现,与对全图像分辨率做计算量更少的双线性上采样相比,从这个分辨率上做更多的refinement并不能显著提升结果,这个双线性上采样的结果就是网络的最终流预测。

我们替换双线性上采样,采用没有匹配项的变分方法:我们在4次下采样分辨率后开始,迭代20次做coarse-to-fine,把流场变为全分辨率。最后,在全图像分辨率上又做了5次迭代。然后把平滑系数换为,用文献【26】的方法计算图像边界和对应的检测边界,b(x,y)是各自尺度和像素之间的重采样的thin边界的strength。这种放大方法比简单的双线性上采样计算量大,但是增加了变分方法的优点,得到平滑和亚像素准确的流场。在下文中,用变分法refine的结果加后缀+v。变分结果见图4

7. 训练的参数设置

  • k=0  d=20  s1=1  s2=2
  • loss: endpoint error (EPE) ,是光流估计中标准的error measure,是预测光流向量与真实光流向量的欧氏距离在所有像素上的均值。
  • 优化方法:Adam ,无需momentum就能比SGD快速收敛。固定了一些参数: 
  • mini-batches :8
  • learning rate:开始 λ = 1e-4,在第300k次迭代后,每100k次迭代除以2。在FlowNetCorr中λ = 1e-4 会出现梯度爆炸,从较小的学习率λ = 1e-6开始, 在10k次迭代后慢慢增加
    达到 λ = 1e-4 ,然后再按照刚刚说的减少。
  • 发现测试过程中扩大输入图像能提升性能,尽管最优尺度取决于数据集,我们在所有的任务的每个网络固定了尺度,FlowNetS 没做扩大,FlowNetC 选择1:25的参数

FlowNet: Learning Optical Flow with Convolutional Networks的更多相关文章

  1. Paper | SkipNet: Learning Dynamic Routing in Convolutional Networks

    目录 1. 概括 2. 相关工作 3. 方法细节 门限模块的结构 训练方法 4. 总结 作者对residual network进行了改进:加入了gating network,基于上一层的激活值,得到一 ...

  2. Optical Flow 发展历程 (1)

    Optical flow estimation Traditional Method Variational approach TVL-1 [1] Deep Method Supervised Flo ...

  3. 论文翻译——Character-level Convolutional Networks for Text Classification

    论文地址 Abstract Open-text semantic parsers are designed to interpret any statement in natural language ...

  4. Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解

    一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...

  5. How to do Deep Learning on Graphs with Graph Convolutional Networks

    翻译: How to do Deep Learning on Graphs with Graph Convolutional Networks 什么是图卷积网络 图卷积网络是一个在图上进行操作的神经网 ...

  6. 模型压缩-Learning Efficient Convolutional Networks through Network Slimming

    Zhuang Liu主页:https://liuzhuang13.github.io/ Learning Efficient Convolutional Networks through Networ ...

  7. [论文理解] Learning Efficient Convolutional Networks through Network Slimming

    Learning Efficient Convolutional Networks through Network Slimming 简介 这是我看的第一篇模型压缩方面的论文,应该也算比较出名的一篇吧 ...

  8. 【ML】Two-Stream Convolutional Networks for Action Recognition in Videos

    Two-Stream Convolutional Networks for Action Recognition in Videos & Towards Good Practices for ...

  9. 论文笔记之:Optical Flow Estimation using a Spatial Pyramid Network

    Optical Flow Estimation using a Spatial Pyramid Network   spynet  本文将经典的 spatial-pyramid formulation ...

随机推荐

  1. (16)ServletContext详解

    1,作用: ServletContext对象 ,叫做Servlet的上下文对象.表示一个当前的web应用环境.一个web应用中只有一                                   ...

  2. 配置JDK环境变量配置及path和classpath的作用

    1.环境变量配置 用鼠标右击“我的电脑”->属性->高级->环境变量 JAVA_HOME :D:\Program Files\Java\jdk1.6.0_12(JDK安装路径) Pa ...

  3. QQ拼音输入法的人机交互

    一.从用户的角度出发: 1.界面简洁,简单 2.在我们有输入要求的时候,上述界面才会出现,当我们不用输入时,他就自动隐藏了 3.具有个性,每个人都能有自己独特的汉字库,也能够显示自己每天输入汉字的个数 ...

  4. 客户端与服务器持续同步解析(轮询,comet,WebSocket)

    在B/S模型的Web应用中,客户端常常需要保持和服务器的持续更新.这种对及时性要求比较高的应用比如:股票价格的查询,实时的商品价格,自动更新的twitter timeline以及基于浏览器的聊天系统( ...

  5. Java Socket实战之一:单线程通信

    转自:http://developer.51cto.com/art/201202/317543.htm 现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用sprin ...

  6. LayUI table表格控件 如何显示 对象中的属性(针对Mybatis的级联查询--一对一情况)

    1.entity如下: 2.Mybatis的Mapper.xml文件如下 <resultMap id="BaseResultMapPlus" type="dicIt ...

  7. Ubuntu 16.04安装Wireshark进行抓包

    技巧: 1.可以通过tcpdump抓取某个网卡的包,然后输出日志文件,通过Wireshark进行分析. 2.可以设置Wifi热点,然后通过手机连接这个热点,然后进行tcpdump的分析,然后输出日志文 ...

  8. adb: command not found 解決方法(转载)

    转自:http://a7419.pixnet.net/blog/post/59806205-adb%3A-command-not-found--%E8%A7%A3%E6%B1%BA%E6%96%B9% ...

  9. bzoj 3676: [Apio2014]回文串【后缀自动机+manacher】

    用manacher找出本质不同的回文子串放在SAM上跑 #include<iostream> #include<cstdio> #include<cstring> ...

  10. jquery的validate的用法

    //引入js文件 //jquery 文件 <script src="__PUBLIC__/static/wap/js/jquery.min.js?v=2.1.4">&l ...