一、运动估计
(一)运动场(Motion Field)
-
定义与物理意义
运动场是三维场景中物体或相机运动在二维图像平面上的投影,表现为图像中每个像素点的运动速度矢量。其本质是场景点三维运动(平移、旋转、缩放等)通过透视投影在图像平面的映射,反映了物体在空间中的相对运动关系。例如,当相机向前移动时,图像中近处物体的运动场矢量较大,远处物体的矢量较小,且方向背离相机光心。 -
数学建模与投影关系
设场景点坐标为 r o = ( x , y , z ) r_o = (x, y, z) ro=(x,y,z),其三维运动速度为 v o = ( v x , v y , v z ) v_o = (v_x, v_y, v_z) vo=(vx,vy,vz),相机焦距为 f f f,则图像点运动速度 v i = ( u , v ) v_i = (u, v) vi=(u,v) 可通过针孔相机模型推导得出:
v i = f ( r o ⋅ z ) ⋅ v o − ( v o ⋅ z ) ⋅ r o ( r o ⋅ z ) 2 = f ( r o × v o ) × z ( r o ⋅ z ) 2 v_{i}=f \frac{\left(r_{o} \cdot z\right) \cdot v_{o}-\left(v_{o} \cdot z\right) \cdot r_{o}}{\left(r_{o} \cdot z\right)^{2}} = f \frac{\left(r_{o} \times v_{o}\right) \times z}{\left(r_{o} \cdot z\right)^{2}} vi=f(ro⋅z)2(ro⋅z)⋅vo−(vo⋅z)⋅ro=f(ro⋅z)2(ro×vo)×z
其中, r o ⋅ z r_o \cdot z ro⋅z 表示场景点深度, r o × v o r_o \times v_o ro×vo 为叉乘运算。该公式表明,图像点速度与场景点的深度成反比(近处物体运动更快),且与运动方向相关。例如,当场景点沿相机光轴方向( v z v_z vz)运动时,图像点速度会呈现放射状分布。 -
典型运动场景分析
- 相机平移:图像中所有点的运动场矢量指向平移反方向,且幅度随深度增加而减小。
- 相机旋转:运动场呈现旋转对称分布,中心点(光心投影)运动矢量为零。
- 物体缩放:当物体靠近或远离相机时,运动场矢量从中心向外扩散或向中心汇聚。
(二)光流(Optical Flow)
-
定义与直观理解
光流是图像中亮度模式的表观运动,即相邻两帧图像中同一物体点的像素位移矢量 ( u , v ) (u, v) (u,v)。例如,视频中行走的人,其像素在连续帧中的位移构成光流场。光流不直接等于运动场,但在理想条件下(亮度不变、无遮挡)可近似表示运动场。 -
光流的双重属性
- 局部性:每个像素的光流仅依赖于其邻域的亮度变化,适用于局部运动分析。
- 全局性:整体光流场反映场景的运动结构,可用于场景理解(如自动驾驶中的障碍物检测)。
(三)运动场与光流的关系
-
理想等价性
当场景满足以下条件时,光流等于运动场:- 物体表面亮度恒定且均匀;
- 相机曝光瞬间完成,无运动模糊;
- 场景点深度一致(如平面场景)。
此时,光流直接对应场景点的二维投影运动。
-
非理想情况对比
- 有运动场无光流(亮度不变但模式不变):
例:固定光源下的旋转球体,表面亮度模式(如纯色)不随旋转改变,光流估计为零,但实际存在运动场(球面切线方向运动)。 - 无光运动场有光流(亮度变化但物体静止):
例:固定球体被移动的聚光灯照射,像素亮度随光照变化而变化,光流检测到伪运动,但物体实际未移动。 - 孔径问题导致的不一致:
当观察窗口仅包含单一方向边缘(如水平线),光流只能检测到垂直于边缘的运动分量,平行分量丢失,导致光流与实际运动场方向不一致。
- 有运动场无光流(亮度不变但模式不变):
二、光流估计(Optical Flow Estimation)
(一)定义与目标
给定连续两帧图像 I ( x , y , t ) I(x, y, t) I(x,y,t)(t时刻)和 I ( x , y , t + 1 ) I(x, y, t+1) I(x,y,t+1)(t+1时刻),光流估计的核心目标是计算每个像素点 ( x , y ) (x, y) (x,y)的位移矢量 ( u , v ) (u, v) (u,v),使得:
I ( x , y , t ) = I ( x + u , y + v , t + 1 ) I(x, y, t) = I(x+u, y+v, t+1) I(x,y,t)=I(x+u,y+v,t+1)
该问题本质是通过图像亮度变化推断像素运动,是一个典型的逆问题,需依赖先验假设求解。
(二)关键假设
-
亮度一致性假设(Brightness Constancy Assumption)
- 数学表达:
I ( x , y , t ) = I ( x + u , y + v , t + 1 ) I(x, y, t) = I(x+u, y+v, t+1) I(x,y,t)=I(x+u,y+v,t+1) - 物理意义:假设物体表面反射率不变,且光照条件稳定,同一物体点在不同帧中的亮度值相同。这是光流估计的基石,但在实际中易受光照变化、物体遮挡、镜面反射等因素破坏。
- 数学表达:
-
小运动假设(Small Motion Assumption)
- 假设两帧间像素位移 ( u , v ) (u, v) (u,v) 足够小(通常小于1像素),使得泰勒展开的高阶项可忽略,仅保留一阶线性项。若运动幅度过大(如快速运动物体),该假设失效,需通过迭代或金字塔方法补偿。
-
空间连续性假设(Spatial Continuity Assumption)
- 假设相邻像素的运动矢量相似,即像素 ( x , y ) (x, y) (x,y)的光流 ( u , v ) (u, v) (u,v)与邻域像素的光流差异较小。该假设通过引入平滑约束,将单像素的欠定问题转化为邻域的超定问题。
(三)光流基本方程推导
- 泰勒展开与线性近似
对于 I ( x + u , y + v , t + 1 ) I(x+u, y+v, t+1) I(x+u,y+v,t+1)在 ( x , y , t ) (x, y, t) (x,y,t)处进行一阶泰勒展开:
I ( x + u , y + v , t + 1 ) = I ( x , y , t ) + I x u + I y v + I t + O ( u 2 , v 2 , u v ) I(x+u, y+v, t+1) = I(x, y, t) + I_x u + I_y v + I_t + \mathcal{O}(u^2, v^2, uv) I(x+u,y+v,t+1)=I(x,y,t)+Ixu+Iyv+It+O(u2,v2,uv)
忽略高阶小项 O ( u 2 , v 2 , u v ) \mathcal{O}(u^2, v^2, uv) O(u2,v2,uv),结合亮度一致性假设 I ( x , y , t ) = I ( x + u , y + v , t + 1 ) I(x, y, t) = I(x+u, y+v, t+1) I(x,y,t)=I(x+u,y+v,t+1),得到光流基本方程:
I x u + I y v + I t = 0 I_x u + I_y v + I_t = 0 Ixu+Iyv+It=0
其中:
- I x = ∂ I ∂ x I_x = \frac{\partial I}{\partial x} Ix=∂x∂I为空间x方向梯度
- I y = ∂ I ∂ y I_y = \frac{\partial I}{\partial y} Iy=∂y∂I为空间y方向梯度
- I t = ∂ I ∂ t I_t = \frac{\partial I}{\partial t} It=∂t∂I为时间梯度
- ∇ I = [ I x , I y ] T \nabla I = [I_x, I_y]^T ∇I=[Ix,Iy]T表示空间梯度矢量
这个方程表明,在时间间隔 Δ t \Delta t Δt内,图像亮度变化 I t I_t It可以表示为空间梯度 ∇ I \nabla I ∇I与像素位移 ( u , v ) (u,v) (u,v)的点积。
- 向量形式与几何意义
光流基本方程可表示为:
∇ I ⋅ [ u , v ] T + I t = 0 \nabla I \cdot [u, v]^T + I_t = 0 ∇I⋅[u,v]T+It=0
几何上,该方程表明光流矢量 [ u , v ] [u, v] [u,v]位于以 − I t / ∇ I -I_t / \nabla I −It/∇I为法向量的直线上,即光流矢量在梯度方向上的投影为 − I t / ∣ ∇ I ∣ -I_t / |\nabla I| −It/∣∇I∣,垂直于梯度方向的分量无法确定,导致孔径问题。
(四)孔径问题(Aperture Problem)
- 问题本质与数学解释
当观察窗口内的图像模式为均匀区域( ∇ I = 0 \nabla I = 0 ∇I=0)或单一方向边缘(如水平线, ∇ I = [ I x , 0 ] T \nabla I = [I_x, 0]^T ∇I=[Ix,0]T),光流方程无法唯一确定 ( u , v ) (u, v) (u,v):
- 均匀区域:梯度为零,方程退化为 0 ⋅ u + 0 ⋅ v + I t = 0 0 \cdot u + 0 \cdot v + I_t = 0 0⋅u+0⋅v+It=0,无解(若 I t ≠ 0 I_t \neq 0 It=0)或无穷解(若 I t = 0 I_t = 0 It=0)。
- 边缘区域:梯度方向为 θ \theta θ,光流方程仅约束垂直于边缘的运动分量 u cos θ + v sin θ = − I t / ∣ ∇ I ∣ u \cos\theta + v \sin\theta = -I_t / |\nabla I| ucosθ+vsinθ=−It/∣∇I∣,平行于边缘的分量自由,导致多解。
- 经典示例:理发店三色柱错觉
三色柱表面为垂直条纹,当柱子旋转时,观察窗口(孔径)仅包含垂直条纹,光流检测到的运动方向为水平方向(垂直于条纹),而实际运动方向为切线方向(包含垂直分量),形成感知运动与实际运动的差异。孔径形状(如圆形、矩形)和条纹方向决定了感知运动的主导方向,圆形孔径下感知运动方向为条纹法线方向。
(五)Lucas Kanade方法(Lucas-Kanade Method)
-
核心思想:邻域约束求解欠定问题
Lucas Kanade(LK)方法假设像素邻域内的运动矢量相同,将单像素的1个方程扩展为邻域的(n)个方程(通常取5x5邻域,(n=25)),通过最小二乘法求解超定方程组,增强解的稳定性。 -
数学推导步骤
- 步骤1:构建超定方程组
设邻域内第 i i i个像素点 p i = ( x i , y i ) p_i = (x_i, y_i) pi=(xi,yi)满足光流方程:
I x ( p i ) u + I y ( p i ) v = − I t ( p i ) , i = 1 , 2 , … , n I_x(p_i) u + I_y(p_i) v = -I_t(p_i), \quad i = 1, 2, \dots, n Ix(pi)u+Iy(pi)v=−It(pi),i=1,2,…,n
写成矩阵形式:
A d = b A \mathbf{d} = \mathbf{b} Ad=b
其中
A = [ I x ( p 1 ) I y ( p 1 ) I x ( p 2 ) I y ( p 2 ) ⋮ ⋮ I x ( p n ) I y ( p n ) ] A = \begin{bmatrix} I_x(p_1) & I_y(p_1) \\ I_x(p_2) & I_y(p_2) \\ \vdots & \vdots \\ I_x(p_n) & I_y(p_n) \end{bmatrix} A= Ix(p1)Ix(p2)⋮Ix(pn)Iy(p1)Iy(p2)⋮Iy(pn)
d = [ u v ] \mathbf{d} = \begin{bmatrix} u \\ v \end{bmatrix} d=[uv]
b = − [ I t ( p 1 ) I t ( p 2 ) ⋮ I t ( p n ) ] \mathbf{b} = -\begin{bmatrix} I_t(p_1) \\ I_t(p_2) \\ \vdots \\ I_t(p_n) \end{bmatrix} b=− It(p1)It(p2)⋮It(pn)
- 步骤2:最小二乘求解
超定方程的最优解为最小化误差平方和:
d ^ = arg min d ∥ A d − b ∥ 2 \hat{\mathbf{d}} = \arg\min_{\mathbf{d}} \| A \mathbf{d} - \mathbf{b} \|^2 d^=argmind∥Ad−b∥2
对 d \mathbf{d} d求导并令导数为零,得正规方程:
A T A d = A T b A^T A \mathbf{d} = A^T \mathbf{b} ATAd=ATb
其中, A T A A^T A ATA为二阶矩矩阵(Structure Tensor):
A T A = [ ∑ I x 2 ∑ I x I y ∑ I x I y ∑ I y 2 ] A^T A = \begin{bmatrix} \sum I_x^2 & \sum I_x I_y \\ \sum I_x I_y & \sum I_y^2 \end{bmatrix} ATA=[∑Ix2∑IxIy∑IxIy∑Iy2]
A T b = − [ ∑ I x I t ∑ I y I t ] A^T \mathbf{b} = -\begin{bmatrix} \sum I_x I_t \\ \sum I_y I_t \end{bmatrix} ATb=−[∑IxIt∑IyIt]
当 A T A A^T A ATA可逆时,解为:
d = ( A T A ) − 1 A T b \mathbf{d} = (A^T A)^{-1} A^T \mathbf{b} d=(ATA)−1ATb
-
适用条件:特征值分析
二阶矩矩阵 A T A A^T A ATA 的特征值 ( λ 1 , λ 2 ) (\lambda_1, \lambda_2) (λ1,λ2) 决定了光流解的稳定性:- 角点区域: ( λ 1 ≈ λ 2 ) (\lambda_1 \approx \lambda_2) (λ1≈λ2) 且值较大,矩阵良态,解唯一且稳定(适合LK方法)。
- 边缘区域: ( λ 1 ≫ λ 2 ) (\lambda_1 \gg \lambda_2) (λ1≫λ2) 或 ( λ 2 ≫ λ 1 ) (\lambda_2 \gg \lambda_1) (λ2≫λ1),矩阵病态,仅能确定一个方向的运动(孔径问题)。
- 平滑区域: ( λ 1 ≈ λ 2 ≈ 0 ) (\lambda_1 \approx \lambda_2 \approx 0) (λ1≈λ2≈0),矩阵不可逆,无法求解(无梯度信息)。
-
失效场景与改进策略
场景1:大幅运动( ∣ u ∣ , ∣ v ∣ > 1 |u|, |v| > 1 ∣u∣,∣v∣>1 像素)
- 问题:小运动假设(泰勒展开一阶近似)失效,导致线性化误差显著。
- 解决方案:
-
迭代精修(Iterative Refinement)
- 初始化光流 ( u 0 , v 0 ) = ( 0 , 0 ) (u_0, v_0) = (0, 0) (u0,v0)=(0,0),通过迭代优化逐步逼近真实位移:
d k = ( A T A ) − 1 A T b k , b k = − [ I t ( x + u k − 1 , y + v k − 1 ) ] \mathbf{d}_k = (A^T A)^{-1} A^T \mathbf{b}_k, \quad \mathbf{b}_k = -\left[ I_t(x+u_{k-1}, y+v_{k-1}) \right] dk=(ATA)−1ATbk,bk=−[It(x+uk−1,y+vk−1)] - 核心思想:每次迭代后对图像进行扭曲(Warping),重新计算残差 b k \mathbf{b}_k bk,直至收敛。
- 初始化光流 ( u 0 , v 0 ) = ( 0 , 0 ) (u_0, v_0) = (0, 0) (u0,v0)=(0,0),通过迭代优化逐步逼近真实位移:
-
由粗到细金字塔方法(Coarse-to-Fine Pyramid)
- 步骤:
- 构建高斯金字塔(多尺度图像层),从最粗分辨率开始估计光流。
- 将粗尺度的光流上采样并作为下一层的初始值,逐层优化至原始分辨率。
- 优势:将大位移分解为多层小位移,避免局部极小值并扩大捕捉范围。
- 步骤:
-
场景2:光照变化(亮度一致性假设失效)
- 问题:因光照变化导致 I ( x , y , t ) ≠ I ( x + u , y + v , t + 1 ) I(x, y, t) \neq I(x+u, y+v, t+1) I(x,y,t)=I(x+u,y+v,t+1),数据项误差增大。
- 解决方案:
-
特征点匹配
- 检测稳定特征点(如Harris角点、SIFT),对特征邻域应用LK方法,减少对全局亮度一致的依赖。
-
鲁棒损失函数
- 替换L2损失为对异常值不敏感的损失函数:
- L1范数: E data = ∑ ∣ I x u + I y v + I t ∣ E_{\text{data}} = \sum |I_x u + I_y v + I_t| Edata=∑∣Ixu+Iyv+It∣
- Huber损失:
L ( e ) = { 1 2 e 2 if ∣ e ∣ ≤ δ , δ ( ∣ e ∣ − 1 2 δ ) otherwise. L(e) = \begin{cases} \frac{1}{2} e^2 & \text{if } |e| \leq \delta, \\ \delta (|e| - \frac{1}{2} \delta) & \text{otherwise.} \end{cases} L(e)={21e2δ(∣e∣−21δ)if ∣e∣≤δ,otherwise.
- 替换L2损失为对异常值不敏感的损失函数:
-
多帧约束
- 前向-后向一致性检查:计算前向光流 ( u f , v f ) (u_f, v_f) (uf,vf) 和后向光流 ( u b , v b ) (u_b, v_b) (ub,vb),剔除不满足 ∥ ( u f + u b , v f + v b ) ∥ < ϵ \| (u_f + u_b, v_f + v_b) \| < \epsilon ∥(uf+ub,vf+vb)∥<ϵ 的不可靠点。
-
(六)光流平滑性约束(Smoothness Constraint)
1. 动机:抑制噪声与不连续解
仅依赖邻域约束可能导致光流场出现噪声或局部不连续,需引入全局约束强制光流在空间上平滑变化,尤其在无纹理区域(如天空、墙面)维持一致性。
2. 数学模型
基本平滑项(Basic Smoothness Term)
惩罚光流 ( u , v ) (u, v) (u,v) 的梯度变化,使相邻像素的光流尽可能接近:
E smooth = ∑ x , y ( ( ∂ u ∂ x ) 2 + ( ∂ u ∂ y ) 2 + ( ∂ v ∂ x ) 2 + ( ∂ v ∂ y ) 2 ) E_{\text{smooth}} = \sum_{x, y} \left( \left( \frac{\partial u}{\partial x} \right)^2 + \left( \frac{\partial u}{\partial y} \right)^2 + \left( \frac{\partial v}{\partial x} \right)^2 + \left( \frac{\partial v}{\partial y} \right)^2 \right) Esmooth=x,y∑((∂x∂u)2+(∂y∂u)2+(∂x∂v)2+(∂y∂v)2)
图像梯度加权平滑项(Gradient-Weighted Smoothness Term)
在边缘区域降低平滑约束(避免模糊边界),在平滑区域增强约束(抑制噪声):
E smooth = ∑ x , y w ( ∇ I ) ( ( ∂ u ∂ x ) 2 + ( ∂ u ∂ y ) 2 + ( ∂ v ∂ x ) 2 + ( ∂ v ∂ y ) 2 ) E_{\text{smooth}} = \sum_{x, y} w(\nabla I) \left( \left( \frac{\partial u}{\partial x} \right)^2 + \left( \frac{\partial u}{\partial y} \right)^2 + \left( \frac{\partial v}{\partial x} \right)^2 + \left( \frac{\partial v}{\partial y} \right)^2 \right) Esmooth=x,y∑w(∇I)((∂x∂u)2+(∂y∂u)2+(∂x∂v)2+(∂y∂v)2)
其中权重函数:
w ( ∇ I ) = 1 1 + ∣ ∇ I ∣ 2 w(\nabla I) = \frac{1}{1 + |\nabla I|^2} w(∇I)=1+∣∇I∣21
- 边缘区域( ∣ ∇ I ∣ |\nabla I| ∣∇I∣ 大): w ( ∇ I ) w(\nabla I) w(∇I) 较小,放松平滑约束。
- 平滑区域( ∣ ∇ I ∣ |\nabla I| ∣∇I∣ 小): w ( ∇ I ) w(\nabla I) w(∇I) 较大,强制平滑。
3. 与数据项的联合优化
光流估计的完整能量函数为数据项和平滑项的加权和:
E = E data + α E smooth E = E_{\text{data}} + \alpha E_{\text{smooth}} E=Edata+αEsmooth
- 数据项(基于亮度恒定假设):
E data = ∑ p ∈ 邻域 ( I x u + I y v + I t ) 2 E_{\text{data}} = \sum_{p \in \text{邻域}} (I_x u + I_y v + I_t)^2 Edata=p∈邻域∑(Ixu+Iyv+It)2 - 平衡参数 α \alpha α:需通过实验或学习确定,控制平滑强度。
(七)光流可视化
-
彩色轮盘编码(Color Wheel Encoding)
光流方向和幅度的可视化通常采用HSV颜色空间:- 色调(Hue):编码运动方向,0°(红色)表示向右,90°(绿色)表示向上,180°(蓝色)表示向左,270°(黄色)表示向下,中间角度对应混合颜色。
- 饱和度(Saturation):编码运动幅度,饱和度越高表示位移越大。
- 亮度(Value):通常设为常数,或根据梯度强度调整,突出高纹理区域的光流。
-
示例:相机平移光流场
当相机向右平移时,光流场的色调分布为左侧区域偏蓝(向左运动),右侧区域偏红(向右运动),中心区域色调过渡自然;饱和度随距离相机光心的距离增加而升高(远处物体运动幅度小,饱和度低;近处物体运动幅度大,饱和度高)。
(八)光流估计评价标准
1. 角度误差(Angular Error, AE)
- 定义:估计光流 ( u , v ) (u, v) (u,v) 与真值光流 ( u GT , v GT ) (u_{\text{GT}}, v_{\text{GT}}) (uGT,vGT) 的夹角,衡量方向一致性:
A E = cos − 1 ( 1 + u u GT + v v GT 1 + u 2 + v 2 1 + u GT 2 + v GT 2 ) AE = \cos^{-1} \left( \frac{1 + u u_{\text{GT}} + v v_{\text{GT}}}{\sqrt{1 + u^2 + v^2} \sqrt{1 + u_{\text{GT}}^2 + v_{\text{GT}}^2}} \right) AE=cos−1(1+u2+v21+uGT2+vGT21+uuGT+vvGT) - 范围: [ 0 , π ] [0, \pi] [0,π],值越小表示方向越接近(理想情况为 0 0 0)。
2. 端点误差(Endpoint Error, EE)
- 定义:估计光流与真值光流的欧氏距离,反映位移精度:
E E = ( u − u GT ) 2 + ( v − v GT ) 2 EE = \sqrt{(u - u_{\text{GT}})^2 + (v - v_{\text{GT}})^2} EE=(u−uGT)2+(v−vGT)2 - 物理意义:直接测量像素点的定位误差,单位为像素(值越小越准确)。
3. 插值误差(Interpolation Error, IE)
- 定义:将第二帧图像通过光流扭曲(Warp)到第一帧后,与第一帧的像素均方根误差:
I E = 1 N ∑ ( x , y ) ( I ( x , y , t ) − I warped ( x , y , t ) ) 2 IE = \sqrt{\frac{1}{N} \sum_{(x, y)} \left( I(x, y, t) - I_{\text{warped}}(x, y, t) \right)^2} IE=N1(x,y)∑(I(x,y,t)−Iwarped(x,y,t))2
其中扭曲图像 I warped I_{\text{warped}} Iwarped 定义为:
I warped ( x , y , t ) = I ( x + u , y + v , t + 1 ) I_{\text{warped}}(x, y, t) = I(x+u, y+v, t+1) Iwarped(x,y,t)=I(x+u,y+v,t+1) - 意义:评估光流对帧间亮度变化的还原能力(IE 越小越一致)。
(九)光流真值获取(Ground-Truth Acquisition)
-
合成数据集(Synthetic Datasets)
- 方法:通过计算机图形学生成虚拟场景,精确控制相机和物体运动,直接计算光流真值。
- 典型数据集:
- Flying Chairs:合成椅子在不同背景中的运动,包含22,872对训练图像,光流真值通过三维模型投影计算。
- Middlebury:早期经典数据集,包含静态场景中物体的平移、旋转、缩放运动,真值通过立体匹配和三维重建生成。
-
物理实验获取
- 设备:使用高精度运动平台(如六自由度机械臂)固定相机或物体,记录连续帧并通过激光测距仪或结构光获取深度信息,结合三维运动参数计算真实光流。
- 优势:真值精度高,可模拟真实场景中的光照变化和遮挡,用于验证算法的鲁棒性。
(十)基于深度学习的光流估计
-
传统方法的局限性
- 依赖手工设计的特征(如梯度、二阶矩矩阵),对复杂场景(如非刚性运动、大位移、低纹理)鲁棒性不足。
- 优化过程计算量大,难以满足实时性需求(如自动驾驶需要100+ FPS)。
-
FlowNet系列(2015-2017)
-
FlowNet(ICCV 2015):
- 结构:首个端到端卷积神经网络,采用U-Net架构,包含收缩路径(Conv1-Conv5)和解码路径(Deconv1-Deconv5),通过跳跃连接融合多尺度特征。
- 创新点:引入匹配代价体(Cost Volume),计算参考帧与目标帧在不同位移下的特征相似性。例如,FlowNetS架构中,对每个像素点,在±4像素范围内计算17x17的代价体,通过3D卷积提取匹配特征。
- 训练:使用合成数据集Flying Chairs,损失函数为端点误差(EE)的均值,开启深度学习在光流领域的先河。
-
FlowNet2.0(CVPR 2017):
- 改进:提出级联网络(Cascade Network),将FlowNet与另一个细化网络结合,先估计粗光流,再通过扭曲操作细化,提升大位移场景的精度;引入循环一致性损失(Cycle Consistency Loss),确保前向光流与后向光流的一致性。
-
-
PWC-Net(CVPR 2018)
- 核心设计:
- 金字塔特征提取:构建图像金字塔,从低分辨率层(粗尺度)到高分辨率层(细尺度)逐步估计光流,适应大幅运动。
- 可变形扭曲(Deformable Warping):使用可变形卷积对目标帧特征进行扭曲,增强非刚性运动的适应性。
- 代价体与3D卷积:在每个金字塔层计算局部代价体(Local Cost Volume),通过3D卷积高效提取匹配特征,降低计算复杂度。
- 性能:在Middlebury数据集上首次超越传统方法,且推理速度达到25 FPS(GTX 1080),兼顾精度与实时性。
- 核心设计:
-
无监督光流学习(Unsupervised Learning)
- 核心思想:无需光流真值,仅利用单目视频训练,通过光度损失和几何约束优化网络。
- 损失函数设计:
- 光度重建损失(Photometric Reconstruction Loss):
L photo = ∑ t ∑ x , y ∣ I t ( x , y ) − I t + 1 ( x + u , y + v ) ∣ L_{\text{photo}} = \sum_{t} \sum_{x, y} \left| I_t(x, y) - I_{t+1}(x+u, y+v) \right| Lphoto=∑t∑x,y∣It(x,y)−It+1(x+u,y+v)∣
强制估计光流扭曲后的图像与原图像一致。 - 平滑损失(Smoothness Loss):
L smooth = ∑ x , y ( ∣ ∇ u ∣ + ∣ ∇ v ∣ ) ⋅ e − ∣ ∇ I ∣ L_{\text{smooth}} = \sum_{x, y} \left( |\nabla u| + |\nabla v| \right) \cdot e^{-|\nabla I|} Lsmooth=∑x,y(∣∇u∣+∣∇v∣)⋅e−∣∇I∣
利用图像梯度加权,避免边缘区域的过度平滑。
- 光度重建损失(Photometric Reconstruction Loss):
- 代表方法:
- UnFlow(ECCV 2016):提出双向光流一致性约束,即前向光流与后向光流的复合应等于恒等变换,提升无监督训练的稳定性。
- GeoNet(CVPR 2018):结合几何先验(如平面扫描),通过生成对抗网络(GAN)优化光流估计,适应无纹理场景。
-
当前挑战与前沿方向
- 挑战:复杂光照变化(如夜间运动)、透明/反射物体(如玻璃、水面)、多运动目标(如拥挤场景)的光流估计。
- 前沿:
- 自监督学习与对比学习:利用大量无标注视频数据,通过对比损失学习通用光流特征。
- 多模态融合:结合RGB、深度、惯性传感器数据,提升光流估计的鲁棒性。
- 轻量化模型:设计高效网络架构(如MobileFlow),满足移动端实时应用需求。
总结与未来展望
光流估计作为计算机视觉的基础任务,从早期基于梯度的LK方法到当前的深度学习模型,经历了从手工特征到数据驱动的范式转变。传统方法依赖严格假设,在理想场景下高效准确,但对复杂环境鲁棒性不足;深度学习方法通过端到端训练,显著提升了复杂场景的性能,但仍面临数据依赖强、物理解释性弱等问题。未来研究需在以下方向突破:
- 无监督与自监督学习:减少对合成数据的依赖,利用真实世界视频提升泛化能力。
- 多尺度与多任务融合:结合语义分割、目标跟踪等任务,构建统一的运动理解框架。
- 实时性与轻量化:设计高效网络结构,推动光流算法在移动设备和嵌入式系统中的应用。
- 物理可解释性:将光流估计与三维重建、动力学模型结合,赋予算法更强的场景理解能力。
通过持续创新,光流估计将在自动驾驶、视频分析、机器人视觉等领域发挥更关键的作用,成为连接二维图像与三维世界的桥梁。