文章目录

  • 1 概述
    • 1.1 题目
    • 1.2 摘要
    • 1.3 代码
    • 1.4 引用
  • 2 网络架构
    • 2.1 收缩部分
    • 2.2 扩展部分
    • 2.3 变分细化 (Variational refinement)
  • 3 训练数据
    • 3.1 已有数据集
    • 3.2 Flying Chairs
    • 3.3 数据增强
  • 4 实验
    • 4.1 网络和训练细节
    • 4.2 结果

1 概述

1.1 题目

2015:卷积网络学习光流 (FlowNet: Learning optical flow with convolutional networks)

1.2 摘要

卷积神经网络 (CNN) 在计算机视觉领域取得了巨大的成功,尤其是在关于识别的应用上,而其光流评估 (Optical flow estimation) 上还需探索。本文在有监督场景下构建CNN以处理光流评估问题,提出和对比了两种架构:

  1. 通用架构;
  2. 能够将不同图像位置的特征向量相关联的架构。

由于已有的真实数据集过小不足以训练CNN,本文生成了一个大的合成数据集Flying chairs。实验表明:

  1. 在该数据上训练的网络可以很好地推广到现有的数据集,如Sintel和KITTI;
  2. 算法在5到10fps的帧速率下获得了具有竞争力的准确性。

1.3 代码

Torchhttps://github.com/ClementPinard/FlowNetPytorch

1.4 引用

@inproceedings{Dosovitskiy:2015:27582766,
author      =   {Alexey Dosovitskiy and Philipp Fischer and Eddy Ilg and Philip Hausser and Caner Hazirbas and Vladimir Golkov and Patrick Van-Der-Smagt and Daniel Cremers and Thomas Brox},
title       =   {{FlowNet}: {L}earning optical flow with convolutional networks},
booktitle   =   {{CVPR}},
pages       =   {2758--2766},
year        =   {2015}
}

2 网络架构

在足量有标签数据下,CNN擅长学习输入与输出的相关性。因此本文采用端到端学习方法来预测光流:给定包含图像对和真实光流的数据集,训练神经网络从图像直接预测x−yx-yx−y光流。而什么才是能够达到这个目标的好架构呢?

CNN中的池化使网络训练在计算上更可行,更根本的是,允许在输入图像大面积内聚合信息。然而池化会降低分辨率,因此为了提供单像素预测,需要对粗池化表示进行细化。为此网络中包含一个扩展部分 (Expanding part) 以智能提升流的分辨率。收缩部分 (Contracting part) 和扩展部分将共同组成网络,如图2和图3。

图2:两个网络架构:FlowNetSimple和FlowNetCorr。绿色漏斗是图3所示的扩展细化部分

图3:粗特征图到高分辨率预测的细化

2.1 收缩部分

一个简单的选择是将两个输入图像堆叠在一起,并传递给一个通用网络,允许网络自行决定如何处理图像对以提取运动信息,如图2顶部。本文将只包含卷积层的网络架构称为FlowNetSimple

另一个方法是两张图像创建分离的处理流,并在后继集合它们,如图2顶部。使用这种架构,网络被限制为首先分别生成两个图像的有意义表示,然后在更高级别上将它们组合起来。这大致类似于标准匹配方法,即首先从两个图像的块中提取特征,然后比较这些特征向量。然而,给定两张图像的特征表示,网络如何寻找一致性呢?

为了在匹配过程中协助网络,引入相关层 (Correlation layer) 以在两个特征图之间执行乘法区块比较 (Multiplicative patch comparisons)。FlowNetCorr架构包含了该层,如图2底部。给定两个多通道特征图f1,f2:R2→Rc\mathbf{f}_1,\mathbf{f}_2: \mathbb{R}^2\to\mathbb{R}^cf1​,f2​:R2→Rc,其中w,h,cw,h,cw,h,c是它们的宽、高,以及通道数。相关层则用于比较两个特征图中每个区块。

以只考虑两个区块之间的单次比较为例,第一个特征图中以x1\mathbf{x}_1x1​为中心和第二个特征图中以x2\mathbf{x}_2x2​为中心的两个区块的相关性定义为:
c(x1,x2)=∑o∈[−k,k]×[−k,k]⟨f1(x1+o),f2(x2+o)⟩(1)\tag{1} c(\mathbf{x}_1,\mathbf{x}_2)=\sum_{\mathbf{o}\in[-k,k]\times[-k,k]}\left\langle \mathbf{f}_1(\mathbf{x}_1+\mathbf{o}), \mathbf{f}_2(\mathbf{x}_2+\mathbf{o}) \right\rangle c(x1​,x2​)=o∈[−k,k]×[−k,k]∑​⟨f1​(x1​+o),f2​(x2​+o)⟩(1)其中方形区块的大小为K:2k+1K:2k+1K:2k+1。公式1与卷积中的一个步骤类似,不同在于其将数据与其他数据进行卷积,而非数据与过滤器。因此,它没有可训练权重。

c(x1,x2)c(\mathbf{x}_1,\mathbf{x}_2)c(x1​,x2​)的计算涉及c⋅K2c\cdot K^2c⋅K2次乘法操作。比较所有的区块需要计算w2⋅h2w^2\cdot h^2w2⋅h2,这将导致很大的结果,在前向与反向时难以进行。因此,出于计算原因,我们限制了比较的最大位移 (Maximum displacement),并在两个特征图中引入了步幅

给定最大位移ddd,对于每一个定位x1\mathbf{x}_1x1​,通过限制x2\mathbf{x}_2x2​的范围,c(x1,x2)c(\mathbf{x}_1,\mathbf{x}_2)c(x1​,x2​)计算只在大小D:=2d+1D:=2d+1D:=2d+1的领域内进行。步幅s1s_1s1​和s2s_2s2​被用于量化x1\mathbf{x}_1x1​,并在以x1\mathbf{x}_1x1​为中心的邻域内量化x2\mathbf{x}_2x2​。

理论上,相关性的计算是四维的:对于两个2D位置的每一个组合获得一个相关性值,即两个向量的标量积,两个标量分别包含裁剪后区块的值。实际上,相对位移发生在通道上,意味着输出的大小为(w×h×D2)(w\times h\times D^2)(w×h×D2)。对于反向传递,本文相应实现了关于每个底部blob的导数。

2.2 扩展部分

扩展部分的主要组成是上卷积层 (Upconvolutinal layers),其包括反池化 (Unpooling) (扩展特征图,而非池化) 和卷积。为了实现细化 (Refinement),上卷积被应用于特征图,并将其与来自收缩部分的相应特征图和上采样的较粗流预测 (如果可用) 连接起来。通过这种方式,我们既保留了从较粗特征图传递的高级信息,也保留了在较低层特征图中提供的精细局部信息。每一步都会将分辨率提高两次。我们重复444次,得到一个预测流,其分辨率仍然比输入小444倍。整体架构如图3所示。我们发现,与计算成本较低的双线性上采样到全图像分辨率相比,从该分辨率进一步细化并不会显着改善结果。

2.3 变分细化 (Variational refinement)

在替代方案的最后阶段,我们使用没有匹配项的变分方法代替双线性上采样:从四次下采样分辨率开始,然后使用粗到细方案进行20次迭代,从而使得流场 (Flow field) 达到全分辨率。最后,以完整的图像分辨率再运行五次迭代。还使用一些方法来计算图像边界,并通过将平滑系数替换为α=exp⁡(λb(x,y)κ)\alpha=\exp(\lambda b(x,y)^\kappa)α=exp(λb(x,y)κ)来检测边界,其中b(x,y)b(x,y)b(x,y)表示在相应尺度和像素之间重新采样的细边界强度。这种放大方法比简单的双线性上采样在计算上更昂贵,但增加了变分方法,可以获得平滑和亚像素精度的流畅。后继通过"+v"后缀来表示该结果是变分细化的,其一个示意如图4。

图4:变分细化的效用。第一行为小位移情况,预测流将剧烈变化。第二行为大位移情况,尽管大的错误不会被纠正,但是流更平滑,其EPE (*Endpoint error*) 也更低。

3 训练数据

与传统方法不同,神经网络不仅需要具有基本事实的数据来优化多个参数,还需要学习从头开始执行任务。一般而言,获取真是标签的困难的,因为与现实世界场景一致的正确像素并不能简单确定。一些可用数据集的基本信息如表1。

表1:可用数据集的大小,以及Flying Chairs数据集的信息

3.1 已有数据集

  1. Middlebury
  • 训练集仅包含8个图像对;
  • 使用4种技术生成真实光流;
  • 位移非常小,通常低于10像素。
  1. KITTI
  • 194个图像对;
  • 包含大位移,但只有一种特殊的动作类型;
  • 通过使用相机和3D激光扫描仪同时记录场景,从现实世界场景中获得基本事实;
  • 假设场景刚性,动作流是因为观察者的移动;
  • 无法捕捉到天空等远处物体的运动,导致光流基础事实稀疏。
  1. MPI Sintel
  • 从渲染的人工场景中获取真实图像,格外注重图像属性的真实性;
  • 包含两个版本:a) 包含动作模糊和大气效应 (例如雾) 的最终版本;b) 不包含任何效应的清洁版本;
  • 每个版本均有1041图像对;
  • 为小和大位移提供了稠密真实标签。

3.2 Flying Chairs

Sintel数据集对于训练大型CNN来说太小了。为了提供充足的训练数据,通过对从Flickr收集的图像和一组公开可用的3D椅子模型渲染应用仿射变换创建了一个简单的合成数据集Flying Chairs:

  1. 从Flickr中的城市 (321)、景观 (129),以及山脉 (514) 类型中检索共964张分辨率为1,024×7681,024\times7681,024×768的图像;
  2. 每张图像被裁剪为四个象限,裁剪后分别为512×384512\times384512×384,并作为背景;
  3. 前景为多个椅子;
  4. 去除了相似的椅子后,椅子类型数为809,每个椅子有62个视图;
  5. 为了生成动作,对背景和椅子使用随机2D仿射变换参数;
  6. 椅子的变换与背景的变换相关,这可以被解释为相机和物体都在移动;
  7. 每个图像对、椅子的初始位置,以及变换参数都是随机的。这些参数的随机分布被调整,使生成的位移直方图类似于Sintel的直方图 (详细信息可在补充材料中找到);
  8. 生成22,872个图像对和流领域,每个背景被多次使用。

最终一些示意如图5。

图5:Flying Chair示意。前三列:图像对和颜色编码流领域;后三列:扩充后的图像对和相应的流领域

3.3 数据增强

尽管Flying Chairs数据集很大,但是使用数据增强来避免过拟合是关键的。增强方式包括:

  1. 平移、旋转,以及缩放;
  2. 高斯噪声;
  3. 亮度、对比度、gamma,以及颜色。

一些增强结果如图5。由于不仅要增加图像的种类,还要增加流场的种类,我们对一对图像应用相同的强几何变换,但另外在两幅图像之间应用较小的相对变换。

具体地,xxx和yyy的平移范围是图像宽的[−20%,20%][-20\%,20\%][−20%,20%];旋转角度为[−17°,17°][-17°,17°][−17°,17°];缩放比例为[0.9,2.0][0.9,2.0][0.9,2.0];高斯噪声的sigma均匀采样自[0,0.04][0,0.04][0,0.04];对比度为采样为[−0.8,0.4][-0.8,0.4][−0.8,0.4];每个图像的RGB通道的乘法颜色变化来自[0.5,2][0.5,2][0.5,2];gamma值为[0.7,1.5][0.7,1.5][0.7,1.5];亮度改变基于sigma为0.20.20.2的高斯噪声。

4 实验

实验包括四个数据集上本文网络的结果,Sintel数据集微调和预测流领域上的变分细化的结果,以及和其他对比方法的时间对比。

4.1 网络和训练细节

总体上保持不同网络的架构一致:

  1. 9个卷积层,其中6个步长为2,每层后接ReLU;
  2. 不包含全连接,这允许任意大小输入的图像;
  3. 第1个卷积层过滤器大小为7×77\times77×7,2和3设置为5×55\times55×5,余下为3×33\times33×3;
  4. 特征图的数量在更深的层中增加,每层之后大约增加一倍,步幅为 2;
  5. FlowNetC中相关层中,k=0k=0k=0、d=20d=20d=20、s1=1s_1=1s1​=1,以及s2=2s_2=2s2​=2;
  6. 训练损失使用EPE,其是用于光流评估的标准误差度量,使用预测的流向量和基础事实之间的欧式距离,在所有像素上取平均值;
  7. 为了训练 CNN,使用caffe框架的修改版本;
  8. Adam作为优化方法,其中β1=0.9\beta_1=0.9β1​=0.9,β2=0.999\beta_2=0.999β2​=0.999;
  9. 训练批次为8,因为每个像素都是一个训练样本;
  10. 学习率λ=1e−4\lambda=1e-4λ=1e−4,在300k轮后每100k减半;FlowNetCorr的学习率λ=1e−6\lambda=1e-6λ=1e−6,10k后缓慢达到1e−41e-41e−4,随后按如前所述的规律降低;
  11. FLying Chairs训练样本22,232,测试640;
  12. Sintel训练908,验证133;
  13. 发现在测试期间放大输入图像可能会提高性能。尽管最佳规模取决于特定的数据集,但为所有任务的每个网络固定了一次规模。对于FlowNetS,输入不升级,对于FlowNetC,缩放因子为1.25。

微调:所使用的数据集在它们包含的对象类型和运动方面非常不同。一个标准的解决方案是在目标数据集上微调网络。KITTI数据集很小,只有稀疏流基础事实。因此,选择在Sintel训练集上进行微调。一起使用来自Sintel的Clean和Final版本的图像,并使用低学习率λ=1e−6\lambda=1e-6λ=1e−6进行数千次迭代的微调。为了获得最佳性能,在使用验证集定义最佳迭代次数后,对整个训练集进行微调以获得相同的迭代次数。在表格中,“+ft”后缀表示的微调网络。

4.2 结果



论文阅读 (78):FlowNet: Learning Optical Flow with Convolutional Networks相关推荐

  1. 【论文简述及翻译】FlowNet: Learning Optical Flow with Convolutional Networks(ICCV 2015)

    一.论文简述 1. 第一作者:Alexey Dosovitskiy等 2. 发表年份:2015 3. 发表期刊:ICCV 4. 关键词:光流估计.端到端训练.CNNs.数据集 5. 探索动机:卷积神经 ...

  2. CNN光流计算--FlowNet: Learning Optical Flow with Convolutional Networks

    FlowNet: Learning Optical Flow with Convolutional Networks ICCV2015 Code: https://lmb.informatik.uni ...

  3. FlowNet: Learning Optical Flow with Convolutional Networks

    Abstract: 最近卷积神经网络在计算机视觉领域取得了成功,但是光流估计没有在这些任务的CNN中取得成功,这篇文章主要是用CNN以一个有监督的方式来解决光流估计,我们提出了两个网络结构:一个是普通 ...

  4. 论文阅读 R-FCN: Object Detection via Region-based Fully Convolutional Networks

    本文转载自: http://www.cnblogs.com/lillylin/p/6277094.html R-FCN论文阅读(R-FCN: Object Detection via Region-b ...

  5. 论文阅读笔记: Modeling Relational Data with Graph Convolutional Networks

    arXiv:1703.06103v4 文章目录 1.Introduction 2.神经关系建模(Neural relational modeling) 2.1 关系图卷积网络(Relational g ...

  6. 谣言检测相关论文阅读笔记:DDGCN: Dual Dynamic Graph Convolutional Networks for Rumor Detection on Social Media

    来源:AAAI2022 摘要:现有的谣言检测很少同时对消息传播结构和时序信息进行建模,与评论相关的知识信息的动态性也没有涉及.所以本文提出了一个新颖的双动态图卷积网络-DDGCN,该模型能够在一个统一 ...

  7. 论文阅读:Deep Learning in Mobile and Wireless Networking:A Survey

    论文阅读:Deep Learning in Mobile and Wireless Networking:A Survey 从背景介绍到未来挑战,一文综述移动和无线网络深度学习研究 近来移动通信和 5 ...

  8. 《论文阅读》Multi-Task Learning of Generation and Classification for Emotion-Aware Dialogue Response Gener

    <论文阅读>Multi-Task Learning of Generation and Classification for Emotion-Aware Dialogue Response ...

  9. 论文阅读笔记 1.《Open Flow: Enabling Innovation in Campus Networks》(2022.12.22)

    论文阅读笔记 1.<Open Flow: Enabling Innovation in Campus Networks>(2022.12.22) 一.论文主要内容 二.对 OpenFlow ...

最新文章

  1. quickpcb添加pcb库_quickpcb使用说明
  2. Java笔试面试总结—try、catch、finally语句中有return 的各类情况
  3. 存储在icloud云盘文件夹顶层_苹果iCloud使用技巧:去弹窗~
  4. Kafka 2.7.0服务器允许客户端远程连接
  5. 万字长文深度解析python 单元测试
  6. mysql c api 封装_封装MySQL C API 基本操作
  7. 难以摸透的直男脑回路......
  8. 单片机串口通信学号显示_触摸屏与单片机串口通信测试
  9. 寻找公共链表起始位置
  10. 分享一套比较全的Java技术栈,值得参考!
  11. Matlab的主成分分析
  12. 苹果亮度自动调节怎么关闭_笔记本黑苹果系统亮度调节驱动
  13. P5.js码绘---阿珊自画像
  14. 重磅!2022最新SCI影响因子发布,三大名刊NCS及国内期刊TOP10排名有变化(内附2022年最新影响因子)
  15. android studio内容提供者(查看短信的猫)点击查看短信,闪退,无法显示短信内容。(附程序源代码,以及解决办法)
  16. PO1382(贪心)
  17. 告别平淡(平庸)从做难事儿开始
  18. 数据结构与算法之基础概述
  19. tif转成bmp matlab,【转 】将图像转化成avi格式电影(bmp2avi,jpg2avi,tiff2avi等) - [Matlab]...
  20. 逻辑与,逻辑或,逻辑非关系

热门文章

  1. UGUI内核大探究(九)Image与RawImage
  2. php上传常见文件类型和$_FILES[file][type]
  3. 「杀不掉的」僵尸(zombie)进程
  4. java自动化测试框架基础eclipse+maven配置
  5. mysql的query_使用mysql_query()方法操纵数据库以及综合实例
  6. 如何用Python操作Excel自动化办公?一个案例教会你openpyxl——公式计算和数据处理
  7. 2018首届传神者大会:“语言+新技术”将推动语言产业生态化发展 2018首届传神者大会圆满落幕,...
  8. php的安装步骤,PHP安装流程
  9. JAVA环境变量j配置avac命令不识别不成功注意事项详细
  10. Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例