基于空间金字塔网络的光流估计

article/2025/10/6 14:38:02

Optical Flow Estimation using a Spatial Pyramid Network

我们学习通过结合经典的空间金字塔公式和深度学习来计算光流。通过当前流量估计和计算流量更新,在每个金字塔级别扭曲一对图像,通过从粗到细的方法估计大型运动。我们不是在每个金字塔层上对目标函数进行标准的最小化,而是在每层训练一个深度网络来计算流更新。与最近FlowNet方法不同,该网络不需要处理大型运动;这些都由金字塔来处理。这有几个好处。首先,我们的空间金字塔网络(SPyNet)要简单得多,在模型参数方面比FlowNet小96%。这使得它更高效,更适合于嵌入式应用程序。其次,由于每个金字塔层的流量都很小(< 1像素),因此适用于一对扭曲图像的卷积方法是合适的。第三,与FlowNet不同的是,学习到的卷积滤波器看起来与经典时空滤波器相似,这让我们深入了解了该方法以及如何改进它。在大多数标准基准测试中,我们的结果比FlowNet更准确,这表明经典流程方法与深度学习相结合的新方向。

1. Introduction

近年来,在精确估计光流的问题上取得了显著进展,在日益具有挑战性的基准上提高了性能。尽管如此,大多数流方法都来自于一个“经典公式”,它对图像做了各种各样的假设,从亮度恒定到空间平滑。这些假设只是粗略地接近现实,这可能会限制性能。该领域最近的研究重点是改进这些假设,或使它们对违反[7]的情况更加可靠。

另一种方法完全放弃了经典的公式,重新开始使用最新的神经网络架构。这种方法需要一对(或序列)图像并学习直接从它们计算流。理想情况下,这样的网络将学会解决对应问题(短范围和长范围),学习与问题相关的滤波器,了解序列中什么是恒定的,了解流的空间结构以及它如何与图像结构相关。最初的尝试是有希望的,但还没有传统方法那么精确。

目标:我们认为,存在一种替代方法,它结合了这两种方法的优点。对流的数十年研究已经产生了设计良好的系统和有效的原理。但是在有些地方,这些方法的假设限制了它们的性能。因此,在保持工程架构的同时,我们应用机器学习来解决弱点,目的是:1)提高现有神经网络和我们工作所基于的经典方法的性能;2)实现实时流量估算,精度优于速度慢得多的经典方法;3)减少内存需求,使流更适用于嵌入式、机器人和移动应用。

问题:最近用于学习流[16]的方法的关键问题是,它们通常采用两个帧,将它们堆叠在一起,并应用卷积网络架构。当帧间的运动大于一个(或几个)像素时,时空卷积滤波器将得不到有意义的响应。换句话说,如果一个图像中的卷积窗口在下一个时间点没有与相关图像像素重叠,就无法学习到有意义的时间滤波器。

有两个问题需要解决。一种是解决远程相关性,另一种是解决细节、亚像素、光流和精确运动边界。FlowNet[16]试图同时学习这两种方法。相比之下,我们使用深度学习来解决后者,依靠现有的方法来解决前者。

方法:为了处理大的运动,我们采用传统的由粗到细的方法,使用空间金字塔。在金字塔的顶层,我们希望帧之间的运动小于几个像素,因此,卷积滤波器可以学习有意义的时间结构。在金字塔的每一层,我们用卷积网络求解流,并对下一层的流进行上采样。作为标准,使用经典公式[36],我们使用当前流将一个图像向另一个图像弯曲,并在每个金字塔级别重复此过程。我们学习了卷积网络来预测该级别的流量增量,而不是在每个级别最小化经典目标函数。我们从粗到细训练网络,学习每一级的流量修正,并将其添加到上面网络的流量输出中。这个想法是,在每个金字塔层次上,位移总是小于几个像素。

我们将该方法称为SPyNet,即空间金字塔网络,并使用与FlowNet[16]相同的飞椅数据来训练它。我们报告了与FlowNet在Flying Chairs和Sintel[11]上相似的性能,但经过微调后,明显比FlowNet在Middlebury[4]和KITTI[18]上更准确。SPyNet的总尺寸比FlowNet小96%,这意味着它运行得更快,使用的内存也少得多。用神经网络的非迭代计算代替了经典方法昂贵的迭代传播

我们不声称用SPyNet解决全光流问题——我们处理的是与传统方法相同的问题,并继承了它们的一些局限性。例如,众所周知,小的或薄的物体的大运动很难用金字塔表示。我们将大型运动问题视为独立的,需要不同的解决方案。相反,我们所展示的是传统问题可以被重新表述,它的部分内容可以被学习,并且在许多场景中性能会得到提高

此外,因为我们的方法将过去的方法与新的工具联系起来,它提供了如何前进的见解。特别是,我们发现SPyNet可以学习类似于传统时空导数或Gabor滤波器的时空卷积滤波器[2,23]。学习到的过滤器类似于MT和V1[35]中运动处理过滤器的生物模型。这与FlowNet学习到的高度随机的过滤器形成了对比。这表明,现在是时候用新工具重新检查旧的时空过滤方法了

综上所述,我们的贡献是:1)将传统的由粗到细的金字塔方法与深度学习相结合,用于光流估计;2)新的SPyNet模型比FlowNet小96%,速度快96%;3) SPyNet在标准基准(Sintel, KITTI和Middlebury)上的误差与FlowNet相当或更低;4)学习到的时空滤波器为流量估计需要什么滤波器提供了洞见;5)训练过的网络和相关代码可公开用于研究:GitHub - anuragranj/spynet: Spatial Pyramid Network for Optical Flow

2. Related Work

我们的公式有效地结合了“经典”光流和最近的深度学习方法的思想。我们的回顾集中在与此最相关的工作上。

空间金字塔和光流:光流问题的经典公式可以追溯到Horn和Schunck[24],涉及到基于亮度恒定的数据项和空间平滑项的优化和。经典方法的缺点是它们对图像亮度变化和流的空间结构做了非常近似的假设。许多方法都侧重于通过改变假设来提高鲁棒性。全面审查将有效地涵盖该领域的历史;对此,我们建议读者参阅[36]。学习计算流的关键优势,正如我们在这里所做的,是我们不手工修改这些假设。相反,图像亮度和空间平滑度的变化体现在学习网络中。使用空间金字塔的想法有着同样悠久的历史,可以追溯到[10],它第一次用于经典的流公式中出现在[19]。典型的高斯或拉普拉斯金字塔用于流量估计,主要动机是处理大的运动。众所周知,当小物体快速移动时,这些方法会出现问题。Brox等[8]将远程匹配纳入传统光流目标函数。这种结合图像匹配捕捉大运动的方法,用变分[31]或离散优化[20]捕捉细微运动,可以产生精确的结果。当然,空间金字塔广泛应用于计算机视觉的其他领域,最近被用于深度神经网络[15]学习生成图像模型

Spatio-temporal filters

Burt和Adelson[2]提出了运动估计的时空模型理论,Heeger[23]提供了计算实施例。虽然受到人类感知的启发,但这些方法在当时的[6]表现不佳。各种方法表明,时空过滤器产生于学习,例如使用独立成分分析[41],稀疏[30]和多层模型[12]。Memisevic和Hinton学习了用受限玻尔兹曼机[28]进行简单的空间变换,找到了各种各样的滤波器。Taylor等人[39]使用受限玻尔兹曼机使用合成数据学习“类流”特征,但不评估流的准确性。

Dosovitskiy等人[16]学习使用深度网络进行流量估计的时空过滤器,但这些过滤器与神经科学启发的经典过滤器不同。通过使用金字塔方法,我们在这里学习了视觉上类似于经典时空过滤器的过滤器,但因为它们是从数据中学习的,所以产生了良好的流量估计。

Learning to model and compute flow

可能第一次尝试学习一个模型来估计光流是工作Freeman等[17]使用MRF。他们考虑一个简单的合成世界的一致移动的斑点与地面真值流。训练数据不真实,他们没有将该方法应用到真实的图像序列。Roth和Black[32]学习了一个专家场(FoE)模型来捕获光流的空间统计。FoE可以被看作是一个(浅的)卷积神经网络。该模型使用激光扫描真实场景和自然相机运动产生的流场进行训练。它们没有场景的图像(只有它们的流),因此该方法只学习空间成分。

.......

深度学习:上述学习方法训练数据有限,使用的模型较浅。相比之下,深度卷积神经网络已经成为解决识别[22,38]和密集估计[13,27]问题的一类强大模型

FlowNet[16]代表了首个端到端进行流量估计训练的深度卷积体系结构。尽管该网络是在随机选择的图像上飞行的椅子的人工数据集上训练的,但它显示出了有希望的结果。尽管结果很有希望,但该方法在准确性方面落后于目前的技术水平。深度匹配方法[20,31,42]并不能完全解决问题,因为它们诉诸于经典方法来计算最终流场。哪些体系结构最适合这个问题,以及如何最好地训练这些体系结构,这仍然是一个开放的问题。

......

Fast flow:

最近的一些方法试图平衡速度和准确性,以实时处理和合理的(虽然不是最高的)准确性为目标。GPU-flow[43]开始了这一趋势,但现在有一些方法优于它。PCA-Flow[44]运行在CPU上,比帧速率慢,产生过于平滑的流场。EPPM[5]更小,在intel(测试)上有类似的中等水平的性能,在GPU上有类似的速度。最近的DIS-Fast[26]是一种GPU方法,它明显比以前的方法快,但也明显不准确。

我们的方法也明显比以前最好的CNN流方法(FlowNet)快,后者报告FlowNetS的运行时为每帧80ms。提高速度的关键是创建一个完全适合GPU的小型神经网络。此外,我们所有的金字塔操作都是在GPU上实现的。规模是一个重要的问题,但没有速度那么受关注。为了让光流在嵌入式处理器、飞行器、手机等上存在,该算法需要较小的内存占用。我们的网络比FlowNetS小96%,只使用9.7MB,,使其易于小到适合移动手机GPU。

3. Spatial Pyramid Network

我们的方法使用[15]从粗到细的空间金字塔结构来学习每个金字塔层次上的残余流量。这里我们描述了网络和训练过程.

3.1. Spatial Sampling

设d(·)为下采样函数,将m ×n的图像I抽取为大小为m/2×n/2的对应图像d(I)。设u(·)为对图像进行上采样的反向运算。这些算符还用于光流场V的水平和垂直分量的下采样和上采样。我们还定义了一个翘曲算子w(I, V),它根据流场V对图像I进行翘曲,使用双线性插值。

3.2. Inference

3.3. Training and Network Architecture

 

 


http://chatgpt.dhexx.cn/article/hmBVtWEt.shtml

相关文章

《金字塔原理》读书笔记

0 前言 《金字塔原理》基本是每一位职场人的必修书目&#xff0c;在实习期间也是leader和师兄的强力推荐&#xff0c;在工作的软能力上提升自己。”想清楚&#xff0c;说明白&#xff0c;知道说什么、怎么说“&#xff0c;是我们希望达到的境界。我们在与人沟通时&#xff0c;需…

《腾讯数字生活报告2019》发布,互联网时代新马斯洛需求金字塔预示什么?

来源&#xff1a;腾讯研究院 5月22日&#xff0c;腾讯研究院、腾讯应用宝、腾讯开放平台联合出品的《腾讯数字生活报告2019》在腾讯全球数字生态大会应用生态主题论坛上发布&#xff0c;报告从生存、关系、发展三个层级解读了大众数字生活版图中的新趋势及核心洞察。透过这份数…

产品能力提升|《金字塔原理》

「金字塔原理」芭芭拉明托 2021/3/28 我们希望达到的境界&#xff1a;想清楚&#xff0c;说明白&#xff0c;知道说什么、怎么说。所以在和人沟通的时候需要明确三件事&#xff1a;谁是我的听众、他们想听什么、他们想怎样听。 金字塔原理的基本概念 金字塔原理是一种重点突出…

马斯洛金字塔的大秘密

废话不多说&#xff0c;直接切主题&#xff1a; &#xff08;以上图片为UCD课件内容&#xff09; 亚伯拉罕马斯洛在1943年在《人类激励理论》论文中所提出。人类需求像阶梯一样从低到高&#xff0c;按层分为五种&#xff1a;生理需求、安全需求、社交需求、尊重需求和自我实现…

代码的马斯洛金字塔理论

马斯洛曾提出了著名的需求层次理论&#xff08;马斯洛需求金字塔理论&#xff09;&#xff1a; 人们需要动力实现某些需要&#xff0c;其中的一些需求优先于其他需求。我们可以把人类的需求划分为五个层次&#xff08;如图1所示&#xff09;&#xff0c;从层次结构的底部往上&…

从特岗教师的需求金字塔,重新理解乡村、教育和科技

教师节刚刚过去&#xff0c;尊师重道&#xff0c;可以说是中国文化中亘古不变的话题。 尤其是在乡村振兴、农村现代化的过程中&#xff0c;都离不开乡村教育发展&#xff0c;而诸多特岗教师、乡村教师&#xff0c;更是被寄予厚望的奉献者&#xff0c;是放弃城市繁华的苦行僧&am…

马斯洛需求层次理论

马斯洛人类需求金字塔理论把需求分成 生理需求、 安全需求、 社交需求、 尊重需求和 自我实现需求 五大类&#xff0c;依次由低层次到高层次&#xff0c;如下图。

马斯诺需求金字塔

美国著名心理学家马斯洛对人的需要进行了系统的、独到的研究&#xff0c;对心理学和行为科学产生了巨大的影响。把人的需要描述成具有五个层次的“金字塔”&#xff0c;已满足的需要达到了什么层次&#xff0c;与人的心理健康程度是有关联的。人的基本需要按优势或力量的强弱排…

金字塔原理

当你在听别人讲话或者看文章时&#xff0c;会时不时用某种逻辑模式&#xff0c;试图把接收到的内容组织起来&#xff0c;让自己理解更加深刻。这种逻辑最优化的选择就是金字塔原理&#xff0c;因为金字塔原理指导下的金字塔结构符合人类的思维模式。 那人类的用脑机制是怎样的呢…

马斯洛人类需求金字塔理论

马斯洛人类需求金字塔理论把需求分成生理需求、安全需求、社交需求、尊重需求和自我实现需求五类&#xff0c;依次由较低层次到较高层次。

Xavier(6):ubuntu18.04安装casadi 报错与解决(recompile with -fPIC)

报错&#xff1a; relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol N_VClone_Serial which may bind externally can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: ../../../lib/libcasadi_sundials.a(nvector_serial.c.o): relocati…

编译FCL库报错:recompile with -fPIC

报错如下: Make error relocation R_X86_64_32 against .text’ can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libccd.a: error adding symbols: Bad value 仔细看一下, 可以发现, 是因为之前安装另一个库引起的, libccd, 因为FCL需要调…

Matlab2019b.Warning: The CUDA driver must recompile the GPU librariesbecause your device is more

项目场景&#xff1a; 内容报错&#xff1a; Warning: The CUDA driver must recompile the GPU librariesbecause your device is more recent than the libraries. Recompiling can take several minutes. 使用环境&#xff1a;1. Matlab2019b 2.系统Win11&#xff0c;Win1…

cmake报错:xxx can not be used when making a shared object; recompile with -fPIC

一、问题描述 最近在cmake一个项目时&#xff0c;链接库时报错&#xff0c;如下图&#xff1a; 通过报错信息看出&#xff0c;需要加上编译选项-fPIC&#xff0c;定位到ntl库。猜测是在编译ntl库时出错。 二、解决方案 ntl库的文件结构如下&#xff1a; 进入src目录下&…

【ffmpeg编译问题】recompile with -fPIC /usr/bin/ld: 最后的链结失败: 错误的值

安装流程参考 最新版本ffmpeg6.0源码安装vscode开发环境搭建&#xff01; 1、配置 下好ffmpeg后&#xff0c;设置配置 sudo ./configure --prefix/usr/local/ffmpeg --enable-gpl --enable-shared --enable-version3 --enable-nonfree --enable-pthreads --enable-libx264 --…

idea jrebel recompile总是编译整个项目问题处理(如何快速编译)

问题&#xff1a;idea里面安装了jrebel&#xff0c;布置好热部署之后&#xff0c;每次recompile单个java文件或者前端文件时总是会编译整个项目&#xff0c;每次recompile非常的慢。这里的情况是gradle下的项目&#xff0c;下面是解决方式(亲测mac,windows有效)1&#xff1a;设…

BLESS的安装---一个问题recompile with -fPIC的解决

BLESS安装方法 首先新建一个目录 mkdir bless_c cd bless_c然后把源码克隆到本地 git clone https://github.com/thirtyeggs/bless.git进入目录,执行编译 cd bless make -j8编译报错 mpicxx kmc/kmc_api/kmc_file.o kmc/kmc_api/kmer_api.o kmc/kmc_api/mmer.o murmurhash…

gcc报错 can not be used when making a shared object; recompile with -fPIC

问题1&#xff1a;gcc报错 can not be used when making a shared object&#xff1b; recompile with -fPIC -fPIC 作用于编译阶段&#xff0c;告诉编译器产生与位置无关代码(Position-Independent Code)&#xff0c; 则产生的代码中&#xff0c;没有绝对地址&#xff0c;全…

WRF——hdf编译报错 recompile with -fPIC

错误&#xff1a; 解决办法&#xff1a;重新编译zlib relocation R_X86_64_32 against .rodata can not be used when making a shared object; recompile with -fPIC 解决方案&#xff1a;以64位的方式重新编译zlib cd zlib CFLAGS"-fPIC" ./configure make …

mysql 存储过程 compile_SQLSERVER临时表导致存储过程重编译(recompile)的一些探讨_MySQL...

SQLSERVER为了确保返回正确的值&#xff0c;或者处于性能上的顾虑&#xff0c;有意不重用缓存在内存里的执行计划&#xff0c;而重新编译执行计划的这种行为&#xff0c;被称为重编译(recompile)。那么引发存储过程重编译的条件有哪一些呢&#xff1f;下面罗列了一些导致重编译…