基隆市网站建设_网站建设公司_JSON_seo优化
2026/1/7 13:33:24 网站建设 项目流程

光流模型 (Optical Flow) 完全指南:让机器看懂“运动”的魔法

📚专为深度学习与计算机视觉初学者打造
🎯目标:用最通俗的语言,拆解“光流”(Optical Flow)这个听起来很高大上,但实际上无处不在的概念。
🎧核心问题:光流到底是什么?为什么它是视频压缩(NVC)和自动驾驶的基石?现在的深度学习模型(如 RAFT, PWC-Net)是怎么算出光流的?


📋 目录

  • 1. 为什么要学习光流?
  • 2. 光流是什么?(核心直觉)
  • 3. 光流长什么样?(可视化)
  • 4. 光流模型的发展史:从数学公式到深度学习
  • 5. 深度学习光流模型的王者:RAFT 与 PWC-Net
  • 6. 光流在 NVC(神经视频编码)中的关键角色
  • 7. 代码视角的“计算光流”
  • 8. 常见误区与问答

1. 为什么要学习光流?

你可能觉得:“我只要能识别出图里有一辆车就行了,为什么要关心它怎么动?”

但对于视频处理来说,“动”“是什么”更重要:

领域光流的作用
视频压缩 (NVC)90% 的视频数据是冗余的,算出光流,就能复用上一帧的像素 。
自动驾驶仅仅识别出前方有车不够,必须通过光流判断它是在靠近还是远离
动作识别区分“挥手”和“举手”,靠的是手臂运动的轨迹(光流)。
视频插帧想要 30fps 变 60fps?需要用光流算出中间那一帧该长什么样。

2. 光流是什么?(核心直觉)

一句话定义:

📌光流就是描述图像中每一个像素点,在时间 到 之间移动了多少距离的向量场。

通俗类比:

想象你在看一场大规模的团体操表演(每个演员代表一个像素)。

  • 时刻 1:所有人站成一个方阵。
  • 时刻 2:方阵整体向右移动了两步。

光流就是给每个演员发一张纸条,上面写着:(dx=+2, dy=0)

  • dx: 水平移动距离
  • dy: 垂直移动距离

如果所有人的纸条都拼起来,就是一张光流图


3. 光流长什么样?(可视化)

光流本身是一堆数字 ,人类看不懂。所以我们通常用颜色来画出它。

标准配色方案(Color Wheel):

  • 颜色(色相):代表方向

  • 红色 🔴 = 向右动

  • 蓝色 🔵 = 向左动

  • 黄色 🟡 = 向下动

  • 深浅(饱和度):代表速度

  • 颜色越鲜艳 = 动得越快

  • 颜色越淡(接近白色) = 动得越慢

举个例子:
如果图中有辆车从左往右飞驰,那么在光流图里,这辆车的区域就是鲜艳的红色


4. 光流模型的发展史:从数学公式到深度学习

1. 传统派 (Lucas-Kanade, 1981)

  • 核心假设亮度恒定假设。即假设物体怎么动,它的颜色是不会变的。
  • 方法:解微分方程。
  • 缺点:一遇到光照变化、阴影、大动作,马上歇菜。

2. 深度学习派 (FlowNet, PWC-Net, RAFT)

  • 核心思想:不再解方程,而是喂给神经网络两张图,让它直接“猜”出光流。
  • 优势
  • 即使物体被遮挡、光照变化,AI 也能根据上下文猜出大概率的运动。

精度极高,是目前 NVC 中“显式运动建模”的首选 。


5. 深度学习光流模型的王者:RAFT 与 PWC-Net

虽然这篇论文主要讲 DCVC-RT,但它提到了目前最强的光流评估工具SEA-RAFT。理解这些模型有助于你理解 NVC 里的“运动估计”模块。

🌊 RAFT (Recurrent All-Pairs Field Transforms)

这是目前的霸主架构。

  • 原理:它像一个画师修图一样,先画一个粗糙的光流,然后通过一个循环神经网络 (GRU) 不断微调(Iterative Refinement)。
  • 特点:精度极高,能处理非常细微的运动。

在 NVC 中的角色:虽然很强,但计算量大。DCVC-RT 论文中用它来评估运动幅度(作为 Ground Truth 工具) 。

🕸️ PWC-Net (Pyramid Warping)

这是 NVC 中最常用的结构原型。

  • 原理:金字塔结构。先在缩略图上算个大概(大运动),再在高清图上算细节(小运动)。
  • 特点:速度和精度的平衡。

6. 光流在 NVC(神经视频编码)中的关键角色

这部分直接联系到你正在阅读的论文。

🎯 传统 NVC 的“显式运动建模” (Explicit Motion Modeling)

在传统的 NVC(如 DCVC-FM)中,光流模型是核心组件 。

流程如下:

  1. 输入F r a m e t − 1 Frame_{t-1}Framet1F r a m e t Frame_tFramet。。

  2. 运动估计 (Motion Estimation):跑一遍光流模型,算出像素位移 。

  3. 运动补偿 (Motion Compensation):根据光流,把 的像素“搬运”过来,生成预测帧 。

⚠️ 为什么 DCVC-RT 要“砍掉”光流?

尽管光流很有用,但在实时任务中它是累赘:

  1. 层数太多:光流网络通常很深(例如 123 层),虽然计算量 (FLOPs) 可能不大,但函数调用开销极大 。

  2. 操作复杂度高:导致了所谓的Operational Complexity瓶颈 。

所以,DCVC-RT 提出了“隐式时域建模”,不再显式计算光流,而是让网络自己去领悟运动 。


7. 代码视角的“计算光流”

如果你想在 PyTorch 中调用一个光流模型(比如 RAFT),流程非常简单:

importtorchimporttorchvision.transforms.functionalasFfromtorchvision.models.optical_flowimportraft_large# 1. 加载预训练的光流模型 (RAFT)model=raft_large(pretrained=True).cuda().eval()# 2. 准备两张相邻的图片 (Batch, 3, H, W)img1=load_image("frame_0.jpg").cuda()img2=load_image("frame_1.jpg").cuda()# 3. 前向传播:计算光流withtorch.no_grad():# output 是 list,最后一个元素是最终光流list_of_flows=model(img1,img2)predicted_flow=list_of_flows[-1]# predicted_flow 的形状是 (Batch, 2, H, W)# Channel 0 是 dx (水平位移)# Channel 1 是 dy (垂直位移)

🎉祝你天天开心,我将更新更多有意思的内容,欢迎关注!

最后更新:2026年1月
作者:Echo

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询