RAFT光流估计
RAFT Introduction
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow;观其名便知道这是一篇关于光流估计的论文。

模型介绍
为了方便理解和阅读,我写了两个版本:
先是一个网络\(Net_1\)提取两张输入\(I_1,I_2\)的特征(左上角),还有另一个网络\(Net_2\)再提取一次\(I_1\)的特征(左下角),然后通过一个
correlation layer接收\(Net_1\)的输出并建立两张图片的相似度向量。最后作者使用了自然语言处理中GRU的思想,把相似度向量,每一次迭代预测出的光流,以及\(Net_2\)的输出三者作为输入去迭代着更新光流。RAFT由三部分组成:(1)一个
feature encoder提取两张输入图片\(I_1,I_2\)在每个像素点上的特征。这里我们假设\(I_1,I_2\)的尺寸是\(H \times W\),那么经过feature encoder之后得到的特征维度就是\(H \times W \times D\);此外还有一个context encoder提取\(I_1\)的特征,也就是图片的左下角。(2)一个correlation layer负责把\(I_1,I_2\)的特征向量通过点乘的方式连接起来,那么最终输出的是一个\(H \times W \times H \times W\)的向量,此向量表示\(I_1\)每一个像素点与所有\(I_2\)像素点的相关度。然后作者也考虑到这样的表示可能比较稀疏,因此在这个输出之后做了四层的池化,并将每一层池化的输出连接起来做成了一个具有多尺度特征的相似性变量。(3)一个update operator,通过使用一个look up方法(查看4D Correlation Voulumes的值)迭代着去更新光流。当然第三点需要下面的详细介绍。
将模型拆解一下:
- 两次特征抽取

这个比较好理解,就不多说了。
Correlation Layer

这里我们得到了\(I_1\)对\(I_2\)上的多尺度4D Correlation Voulumes,那么这个值是怎么得到的,又代表什么意义呢?前面我们提到过,我们得到\(H \times W \times H \times W\)的向量之后,作者觉得这样比较稀疏,因为\(I_1\)不可能与\(I_2\)所有的像素点相关,所以作者又将这个向量进行了四层池化:

得到了如图所示的3层向量(第四层没画出来,也就是\(H \times W \times {H\over8} \times {W\over8}\)),将他们叠在一起,就构成了一个多尺度的相似性向量的金字塔。


- Look up

在这个L里,作者做了一件有趣的事情,我们知道,光流\((f^1 , f^2 )\)表达了这样一件事情, 它可以把\(I_1\)上的每一个像素\(x(u,v)\)通过$ x'=(u+ f^ {1} (u),v+ f^ {2} (v)) $与 \(I_2\)上对应像素\(x'\)建立映射。然后作者在\(x'\)附近构造了一个网格:
\]
\(r\)超参数是超参数,有点类似于圆的半径,\(d_x\)是整数,通过这个公式把\(x'\)附近的值拿到,同时这个操作会在每一层的金字塔上取值,最后将这些得到的值串联成一个向量。这个向量也就是 Look up的输出。总结一下就是光流建立了\(I_1\)的像素点到\(I_2\)像素点的映射,然后使用对应的\(I_2\)点的坐标,在对应的相似性向量的金字塔上采样得到一个输出向量。那么大胆猜测一下,对于快速移动的物体,\(r\)设置的偏大一些,效果应该更好;对于移动较慢的无题,\(r\)设置的应该偏小一些。当然这个也是Coupled Iterative Refinement for 6D Multi-Object Pose Estimation,标题中论文沿用的一个方法。
update operator

这个类似于GRU模型的结构,把context features以及Look up输出的向量(通过flow和correlation pyraid得到)作为输入\(x_t\),以及hidden state作为 \(h_{t-1}\)作为输入,然后输出\(\Delta \mathrm{f}\)和更新后的的hidden state\(h_t\)。GRU的内部结构是这样定义的:
z_t &=\sigma\left(\operatorname{Conv}_{3 \times 3}\left(\left[h_{t-1}, x_t\right], W_z\right)\right) \\
r_t &=\sigma\left(\operatorname{Conv}_{3 \times 3}\left(\left[h_{t-1}, x_t\right], W_r\right)\right) \\
\tilde{h}_t &=\tanh \left(\operatorname{Conv}_{3 \times 3}\left(\left[r_t \odot h_{t-1}, x_t\right], W_h\right)\right) \\
h_t &=\left(1-z_t\right) \odot h_{t-1}+z_t \odot \tilde{h}_t
\end{aligned}
\]
- loss function
\]
作者使用的并不只是最后的输出,而是update operator每一次迭代的光流输出\(\left\{\mathbf{f}_1, \ldots, \mathbf{f}_N\right\}\),去跟\(f_{gt}\)求loss。
\(gamma=0.9\)
最后再简单看一组对比结果:

至此我们介绍完了RAFT的相关方法。
RAFT光流估计的更多相关文章
- 机器学习进阶-光流估计 1.cv2.goodFeaturesToTrack(找出光流估计所需要的角点) 2.cv2.calcOpticalFlowPyrLK(获得光流检测后的角点位置) 3.cv2.add(进行像素点的加和)
1.cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params) 用于获得光流估计所需要的角点参数说明:old_gray表示输入图片, ...
- 目标跟踪之Lukas-Kanade光流法
转载自:http://blog.csdn.net/u014568921/article/details/46638557 光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于19 ...
- 光流法详解之一(LK光流)
Lucas–Kanade光流算法是一种两帧差分的光流估计算法.它由Bruce D. Lucas 和 Takeo Kanade提出 [1]. LK光流法有三个假设条件: 1. 亮度恒定:一个像素点随着时 ...
- 快速稀疏角点光流框架(Fast sparse corner optical flow framework)
光流适用在连续的图像系列(视频流)中,描述本身或画面目标的运动状态:在目标跟踪.运动分析.甚至slam中都有广泛应用. opencv里就有不少光流算法,其中很经典也是当前被调用最多的的Lucas-Ka ...
- 【Matlab】运动目标检测之“光流法”
光流(optical flow) 1950年,Gibson首先提出了光流的概念,所谓光流就是指图像表现运动的速度.物体在运动的时候之所以能被人眼发现,就是因为当物体运动时,会在人的视网膜上形成一系列的 ...
- 目标跟踪之Lukas-Kanade光流法(转)
光流是图像亮度的运动信息描述.光流法计算最初是由Horn和Schunck于1981年提出的,创造性地将二维速度场与灰度相联系,引入光流约束方程,得到光流计算的基本算法.光流计算基于物体移动的光学特性提 ...
- Lucas–Kanade光流算法学习
Lucas–Kanade光流算法是一种两帧差分的光流估计算法.它由Bruce D. Lucas 和 Takeo Kanade提出. 光流(Optical flow or optic f ...
- 3D深度估计
3D深度估计 Consistent Video Depth Estimation 论文地址:https://arxiv.org/pdf/2004.15021.pdf 项目网站:https://roxa ...
- o(1)复杂度之双边滤波算法的原理、流程、实现及效果。
一.引言 双边滤波在图像处理领域中有着广泛的应用,比如去噪.去马赛克.光流估计等等,最近,比较流行的Non-Local算法也可以看成是双边滤波的一种扩展.自从Tomasi et al等人提出该 ...
- CV界的明星人物们
CV界的明星人物们 来自:http://blog.csdn.net/necrazy/article/details/9380151,另外根据自己关注的地方,加了点东西. 今天在cvchina论坛上看到 ...
随机推荐
- Solution Set -「AGC 010~012」C~F
目录 「AGC 010C」Cleaning 「AGC 010D」Decrementing 「AGC 010E」Rearranging 「AGC 010F」Tree Game ^ 「AGC 011C」S ...
- 在OERV也可以玩MC(上)
最近发现一个比较有意思的事情,原来HMCL这个项目也移植到RISC-V上了,之前一直没有发现,因此在OERV(openEuler RISC-V的简称)玩MC也是可以的了.首先,HMCL是一款功能丰富的 ...
- 项目PMP之六项目进度管理
项目PMP之六--项目进度管理 一.定义:用于沟通和管理相关方期望的工具,可作为报告绩效的基础,说明项目的交付时间和方式 迭代型进度计划(敏捷模式):接受存在未完成项,滚动式规划管理 按需进度计划 ...
- js五子棋效果
任务分解 一.绘制棋盘 二.绑定事件 1.先计算出需要绘制棋子的坐标 即将来绘制的棋子在哪个单元格内 2.绘制棋子 首先判断棋子是否存在 应该添加到哪个单元格内,分四种情况: 1.1 正常情况 1.2 ...
- 基于C#实现多线程启动停止暂停继续
大家好!我是付工. 大部分初学者在学习C#上位机编程时,多线程是一个很难逾越的鸿沟,不合理地使用多线程,会导致经常出现各种奇怪的问题,这也是很多初学者不敢使用多线程的原因.但是在实际开发中,多线程是一 ...
- LeetCode刷题:343. 整数拆分的完全背包写法解析
dp的含义表示:从前i个数中挑选,满足和为j的最大乘积为多少.由于是乘积所以dp初始均为1.i为2开始是因为从1开始挑选,j为2开始应为有效数字是从2开始. 进一步空间优化,应为dp[i][j]只与其 ...
- gitblit 安装
github 私有代码库收费属于正常商业操作,毕竟现在鼓励开源,但是受到美国出口管制,这就有些不妙了. 所以有必要自己搭建一个私有的托管服务,经过比较并且,选择了gitblit(因为最近偶尔搞搞jav ...
- “翼”鸣惊人,天翼云两篇论文被ACM ICPP 2024收录!
*日,由天翼云科技有限公司弹性计算产品线天玑实验室撰写的两篇论文<PheCon: Fine-Grained VM Consolidation with Nimble Resource Defra ...
- redis启停shell脚本
启停脚本(redis-5.0.5) 一.编辑脚本 vim /u01/redis/redisServer.sh #!/bin/sh # # Simple Redis init.d script conc ...
- THUWC2025 游记
Day -C 先进入金国大臣面积群,然后发现 xyf 又在行联考学生群故事. Day -1 早上赶飞机进京.飞机上启动钢丝.到达大兴机场之后坐火车前往北京西站,然后坐地铁到海淀黄庄.非常饿,但是决定先 ...