作者:嫩芽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. C#6.0 新功能

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. Lightoj 1009 - Back to Underworld

    1009 - Back to Underworld    PDF (English) Statistics Forum Time Limit: 4 second(s) Memory Limit: 32 ...

  3. luogu 4720 【模板】扩展卢卡斯

    题目大意: 求$C_n^m \mod p$,p不一定为质数 思路: 首先可以将$p$分解为$p1^{a1}*p2^{a2}*...*pk^{ak}$,对于这些部分可以使用$CRT$合并 对于每个$p_ ...

  4. bzoj4289 PA2012 Tax——点边转化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4289 好巧妙的转化!感觉自己难以想出来... 参考了博客:https://blog.csdn ...

  5. python名片管理系统V2

    主程序: #! /usr/bin env python3 # -*- coding: utf-8 -*- # 项目三: # 1.要求:编写一个名片管理系统,功能如下: # 用户输入相对应的指令,实现对 ...

  6. zabbix 监控ssdb

    zabbix 的啥基础知识啥的,请看由本站大牛凉白开先生写的zabbix教程.这里说说如何监控ssdb.SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, ...

  7. Python Import机制备忘-模块搜索路径(sys.path)、嵌套Import、package Import

    出处:http://blog.csdn.net/kernelspirit/article/details/3381666 最近在看<Python源码剖析>,对Python内部运行机制比以前 ...

  8. (转)Sql Server 保留几位小数的两种做法

    原文地址:http://blog.csdn.net/skyandcode/article/details/23523815 问题: 数据库里的 float momey 类型,都会精确到多位小数.但有时 ...

  9. TS数据流PAT和PMT分析(转载)

    转自:http://www.cnblogs.com/hjj801006/p/3837435.html TS流,是基于packet的位流格式,每个packet是188个字节或者204个字 节(一般是18 ...

  10. windows 命令行下 切换目录

    cd D:\ 没啥用,直接D:就可以切换了,D,D:\都不行