论文阅读 (78):FlowNet: Learning Optical Flow with Convolutional Networks
文章目录
- 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以处理光流评估问题,提出和对比了两种架构:
- 通用架构;
- 能够将不同图像位置的特征向量相关联的架构。
由于已有的真实数据集过小不足以训练CNN,本文生成了一个大的合成数据集Flying chairs。实验表明:
- 在该数据上训练的网络可以很好地推广到现有的数据集,如Sintel和KITTI;
- 算法在5到10fps的帧速率下获得了具有竞争力的准确性。
1.3 代码
Torch:https://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 已有数据集
- Middlebury:
- 训练集仅包含8个图像对;
- 使用4种技术生成真实光流;
- 位移非常小,通常低于10像素。
- KITTI:
- 194个图像对;
- 包含大位移,但只有一种特殊的动作类型;
- 通过使用相机和3D激光扫描仪同时记录场景,从现实世界场景中获得基本事实;
- 假设场景刚性,动作流是因为观察者的移动;
- 无法捕捉到天空等远处物体的运动,导致光流基础事实稀疏。
- MPI Sintel:
- 从渲染的人工场景中获取真实图像,格外注重图像属性的真实性;
- 包含两个版本:a) 包含动作模糊和大气效应 (例如雾) 的最终版本;b) 不包含任何效应的清洁版本;
- 每个版本均有1041图像对;
- 为小和大位移提供了稠密真实标签。
3.2 Flying Chairs
Sintel数据集对于训练大型CNN来说太小了。为了提供充足的训练数据,通过对从Flickr收集的图像和一组公开可用的3D椅子模型渲染应用仿射变换创建了一个简单的合成数据集Flying Chairs:
- 从Flickr中的城市 (321)、景观 (129),以及山脉 (514) 类型中检索共964张分辨率为1,024×7681,024\times7681,024×768的图像;
- 每张图像被裁剪为四个象限,裁剪后分别为512×384512\times384512×384,并作为背景;
- 前景为多个椅子;
- 去除了相似的椅子后,椅子类型数为809,每个椅子有62个视图;
- 为了生成动作,对背景和椅子使用随机2D仿射变换参数;
- 椅子的变换与背景的变换相关,这可以被解释为相机和物体都在移动;
- 每个图像对、椅子的初始位置,以及变换参数都是随机的。这些参数的随机分布被调整,使生成的位移直方图类似于Sintel的直方图 (详细信息可在补充材料中找到);
- 生成22,872个图像对和流领域,每个背景被多次使用。
最终一些示意如图5。
图5:Flying Chair示意。前三列:图像对和颜色编码流领域;后三列:扩充后的图像对和相应的流领域
3.3 数据增强
尽管Flying Chairs数据集很大,但是使用数据增强来避免过拟合是关键的。增强方式包括:
- 平移、旋转,以及缩放;
- 高斯噪声;
- 亮度、对比度、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 网络和训练细节
总体上保持不同网络的架构一致:
- 9个卷积层,其中6个步长为2,每层后接ReLU;
- 不包含全连接,这允许任意大小输入的图像;
- 第1个卷积层过滤器大小为7×77\times77×7,2和3设置为5×55\times55×5,余下为3×33\times33×3;
- 特征图的数量在更深的层中增加,每层之后大约增加一倍,步幅为 2;
- FlowNetC中相关层中,k=0k=0k=0、d=20d=20d=20、s1=1s_1=1s1=1,以及s2=2s_2=2s2=2;
- 训练损失使用EPE,其是用于光流评估的标准误差度量,使用预测的流向量和基础事实之间的欧式距离,在所有像素上取平均值;
- 为了训练 CNN,使用caffe框架的修改版本;
- Adam作为优化方法,其中β1=0.9\beta_1=0.9β1=0.9,β2=0.999\beta_2=0.999β2=0.999;
- 训练批次为8,因为每个像素都是一个训练样本;
- 学习率λ=1e−4\lambda=1e-4λ=1e−4,在300k轮后每100k减半;FlowNetCorr的学习率λ=1e−6\lambda=1e-6λ=1e−6,10k后缓慢达到1e−41e-41e−4,随后按如前所述的规律降低;
- FLying Chairs训练样本22,232,测试640;
- Sintel训练908,验证133;
- 发现在测试期间放大输入图像可能会提高性能。尽管最佳规模取决于特定的数据集,但为所有任务的每个网络固定了一次规模。对于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相关推荐
- 【论文简述及翻译】FlowNet: Learning Optical Flow with Convolutional Networks(ICCV 2015)
一.论文简述 1. 第一作者:Alexey Dosovitskiy等 2. 发表年份:2015 3. 发表期刊:ICCV 4. 关键词:光流估计.端到端训练.CNNs.数据集 5. 探索动机:卷积神经 ...
- CNN光流计算--FlowNet: Learning Optical Flow with Convolutional Networks
FlowNet: Learning Optical Flow with Convolutional Networks ICCV2015 Code: https://lmb.informatik.uni ...
- FlowNet: Learning Optical Flow with Convolutional Networks
Abstract: 最近卷积神经网络在计算机视觉领域取得了成功,但是光流估计没有在这些任务的CNN中取得成功,这篇文章主要是用CNN以一个有监督的方式来解决光流估计,我们提出了两个网络结构:一个是普通 ...
- 论文阅读 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 ...
- 论文阅读笔记: Modeling Relational Data with Graph Convolutional Networks
arXiv:1703.06103v4 文章目录 1.Introduction 2.神经关系建模(Neural relational modeling) 2.1 关系图卷积网络(Relational g ...
- 谣言检测相关论文阅读笔记:DDGCN: Dual Dynamic Graph Convolutional Networks for Rumor Detection on Social Media
来源:AAAI2022 摘要:现有的谣言检测很少同时对消息传播结构和时序信息进行建模,与评论相关的知识信息的动态性也没有涉及.所以本文提出了一个新颖的双动态图卷积网络-DDGCN,该模型能够在一个统一 ...
- 论文阅读:Deep Learning in Mobile and Wireless Networking:A Survey
论文阅读:Deep Learning in Mobile and Wireless Networking:A Survey 从背景介绍到未来挑战,一文综述移动和无线网络深度学习研究 近来移动通信和 5 ...
- 《论文阅读》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 ...
- 论文阅读笔记 1.《Open Flow: Enabling Innovation in Campus Networks》(2022.12.22)
论文阅读笔记 1.<Open Flow: Enabling Innovation in Campus Networks>(2022.12.22) 一.论文主要内容 二.对 OpenFlow ...
最新文章
- quickpcb添加pcb库_quickpcb使用说明
- Java笔试面试总结—try、catch、finally语句中有return 的各类情况
- 存储在icloud云盘文件夹顶层_苹果iCloud使用技巧:去弹窗~
- Kafka 2.7.0服务器允许客户端远程连接
- 万字长文深度解析python 单元测试
- mysql c api 封装_封装MySQL C API 基本操作
- 难以摸透的直男脑回路......
- 单片机串口通信学号显示_触摸屏与单片机串口通信测试
- 寻找公共链表起始位置
- 分享一套比较全的Java技术栈,值得参考!
- Matlab的主成分分析
- 苹果亮度自动调节怎么关闭_笔记本黑苹果系统亮度调节驱动
- P5.js码绘---阿珊自画像
- 重磅!2022最新SCI影响因子发布,三大名刊NCS及国内期刊TOP10排名有变化(内附2022年最新影响因子)
- android studio内容提供者(查看短信的猫)点击查看短信,闪退,无法显示短信内容。(附程序源代码,以及解决办法)
- PO1382(贪心)
- 告别平淡(平庸)从做难事儿开始
- 数据结构与算法之基础概述
- tif转成bmp matlab,【转 】将图像转化成avi格式电影(bmp2avi,jpg2avi,tiff2avi等) - [Matlab]...
- 逻辑与,逻辑或,逻辑非关系
热门文章
- UGUI内核大探究(九)Image与RawImage
- php上传常见文件类型和$_FILES[file][type]
- 「杀不掉的」僵尸(zombie)进程
- java自动化测试框架基础eclipse+maven配置
- mysql的query_使用mysql_query()方法操纵数据库以及综合实例
- 如何用Python操作Excel自动化办公?一个案例教会你openpyxl——公式计算和数据处理
- 2018首届传神者大会:“语言+新技术”将推动语言产业生态化发展 2018首届传神者大会圆满落幕,...
- php的安装步骤,PHP安装流程
- JAVA环境变量j配置avac命令不识别不成功注意事项详细
- Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例