FlowNet: Learning Optical Flow with Convolutional Networks
|
学习了一篇用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的更多相关文章
- Paper | SkipNet: Learning Dynamic Routing in Convolutional Networks
目录 1. 概括 2. 相关工作 3. 方法细节 门限模块的结构 训练方法 4. 总结 作者对residual network进行了改进:加入了gating network,基于上一层的激活值,得到一 ...
- Optical Flow 发展历程 (1)
Optical flow estimation Traditional Method Variational approach TVL-1 [1] Deep Method Supervised Flo ...
- 论文翻译——Character-level Convolutional Networks for Text Classification
论文地址 Abstract Open-text semantic parsers are designed to interpret any statement in natural language ...
- Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解
一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...
- How to do Deep Learning on Graphs with Graph Convolutional Networks
翻译: How to do Deep Learning on Graphs with Graph Convolutional Networks 什么是图卷积网络 图卷积网络是一个在图上进行操作的神经网 ...
- 模型压缩-Learning Efficient Convolutional Networks through Network Slimming
Zhuang Liu主页:https://liuzhuang13.github.io/ Learning Efficient Convolutional Networks through Networ ...
- [论文理解] Learning Efficient Convolutional Networks through Network Slimming
Learning Efficient Convolutional Networks through Network Slimming 简介 这是我看的第一篇模型压缩方面的论文,应该也算比较出名的一篇吧 ...
- 【ML】Two-Stream Convolutional Networks for Action Recognition in Videos
Two-Stream Convolutional Networks for Action Recognition in Videos & Towards Good Practices for ...
- 论文笔记之:Optical Flow Estimation using a Spatial Pyramid Network
Optical Flow Estimation using a Spatial Pyramid Network spynet 本文将经典的 spatial-pyramid formulation ...
随机推荐
- c/c++内存使用原则
1 no malloc no free 2 no new no delete 如果对象不是new出来的,那么这个对象在生命周期结束后会自动调用析构函数自己释放自己的内存,不需要delete. 但是如果 ...
- Ant 打包 问题
Ant 打包问题及解决归纳总结: 1.build.xml注意设置basedir: <project name="s2si" default="dist" ...
- Delphi全角转半角
function ToDBC( input :String):WideString;varc:WideString;i:Integer;beginc := input;for i:=1 to Leng ...
- forword 与 redirect
直接转发方式(Forward) 客户端和浏览器只发出一次请求,Servlet.HTML.JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的 ...
- mysql 转换编码方式
进入mysql 的安装文件夹找到 “ my.ini” 文件 (mysql配置文件) 一.编辑MySql的配置文件 vim /etc/my.cnf 在 [mysqld] 标签下加上三行 default ...
- java 防止表单重复提交(serlvet)
java 防止表单重复提交 ---------FormServlet.java-------------- protected void doGet(HttpServletRequest reques ...
- 并不对劲的Loj6031:「雅礼集训 2017 Day1」字符串
题目传送门:-> 看到题目的第一反应当然是暴力:对于串s建后缀自动机,每次询问中,求w对应的子串在s的SAM中的right集合.O(qmk)听上去显然过不了. 数据范围有个∑w<=1e5, ...
- HDU 4891 The Great Pan (题意题+模拟)
题意:给定一个文章,问你有多少种读法,计算方法有两种,如果在$中,如果有多个空格就算n+1,如果是一个就算2的次方,如果在{}中, 那么就是把每个空格数乘起来. 析:直接模拟,每次计算一行,注意上一行 ...
- bzoj 2257: [Jsoi2009]瓶子和燃料【裴蜀定理+gcd】
裴蜀定理:若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立. 所以最后能得到的最小燃料书就是gcd,所以直 ...
- Web Scraping with R: How to Fill Missing Value (爬虫:如何处理缺失值)
网络上有大量的信息与数据.我们可以利用爬虫技术来获取这些巨大的数据资源. 这次用 IMDb 网站的2018年100部最欢迎的电影 来练练手,顺便总结一下 R 爬虫的方法. >> Prepa ...