光流估计——从传统方法到深度学习

1.摘要近年来 , 深度学习技术 , 作为一把利剑 , 广泛地应用于计算机视觉等人工智能领域 。 如今时常见诸报端的“人工智能时代” , 从技术角度看 , 是“深度学习时代” 。 光流估计是计算机视觉研究中的一个重要方向 , 然而 , 因为其不容易在应用中“显式”地呈现 , 而未被大众熟知 。 随着计算机视觉学界从图像理解转向视频理解 , 互联网用户从发布图片朋友圈转向发布短视频 , 人们对视频的研究和应用的关注不断增强 。 光流估计作为视频理解的隐形战士 , 等着我们去寻找其踪迹 。本文首先介绍了什么是视频光流估计;再介绍光流估计的算法原理 , 包括最为经典的Lucas-Kanade算法和深度学习时代光流估计算法代表FlowNet/FlowNet2;最后 , 介绍了视频光流估计的若干应用 。 希望对光流估计的算法和应用有个较为全面的介绍 。
2.介绍光流 , 顾名思义 , 光的流动 。 比如人眼感受到的夜空中划过的流星 。 在计算机视觉中 , 定义图像中对象的移动 , 这个移动可以是相机移动或者物体移动引起的 。 具体是指 , 视频图像的一帧中的代表同一对象(物体)像素点移动到下一帧的移动量 , 使用二维向量表示 。 如图2-1 。
光流估计——从传统方法到深度学习文章插图
图2-1 光流示意图
根据是否选取图像稀疏点进行光流估计 , 可以将光流估计分为稀疏光流和稠密光流 , 如图2 , 左图选取了一些特征明显(梯度较大)的点进行光流估计和跟踪 , 右图为连续帧稠密光流示意图 。
光流估计——从传统方法到深度学习文章插图
图2-2 左图 稀疏点光流 , 右图 稠密光流
稠密光流描述图像每个像素向下一帧运动的光流 , 为了方便表示 , 使用不同的颜色和亮度表示光流的大小和方向 , 如图2-2右图的不同颜色 。 图2-3展示了一种光流和颜色的映射关系 , 使用颜色表示光流的方向 , 亮度表示光流的大小 。
光流估计——从传统方法到深度学习文章插图
图2-3 稠密光流表示颜色空间
3.算法最为常用的视觉算法库OpenCV中 , 提供光流估计算法接口 , 包括稀疏光流估计算法cv2.calcOpticalFlowPyrLK() , 和稠密光流估计cv2.calcOpticalFlowFarneback() 。 其中稀疏光流估计算法为Lucas-Kanade算法 , 该算法为1981年由Lucas和Kanade两位科学家提出的 , 最为经典也较容易理解的算法 , 下文将以此为例介绍传统光流算法 。对于最新的深度学习光流估计算法 , FlowNet的作者于2015年首先使用CNN解决光流估计问题 , 取得了较好的结果 , 并且在CVPR2017上发表改进版本FlowNet2.0,成为当时State-of-the-art的方法 。 截止到现在 , FlowNet和FlowNet2.0依然和深度学习光流估计算法中引用率最高的论文 , 分别引用790次和552次 。 因此 , 深度学习光流估计算法将以FlowNet/FlowNet2.0为例介绍 。
3.1 传统算法 Lucas-Kanade为了将光流估计进行建模 , Lucas-Kanade做了两个重要的假设 , 分别是亮度不变假设和邻域光流相似假设 。
3.1.1 亮度不变假设
光流估计——从传统方法到深度学习文章插图
图3-1-1 - Lucas-Kanade 亮度不变假设
光流估计——从传统方法到深度学习文章插图
3.1.2 邻域光流相似假设
光流估计——从传统方法到深度学习文章插图
图3-1-2 - 领域光流相似假设
光流估计——从传统方法到深度学习文章插图
光流估计——从传统方法到深度学习文章插图
图3-1-3 光流求解的孔径问题
除了基于亮度不变假设和邻域光流相似假设 , 为了解决图像偏移较大的情况 , Lucas-Kanade算法还借助了图像金字塔(Pyramid)的方式 , 在高层低分辨率图像上 , 大的偏移将变为小的偏移 。 最终 , Lucas-Kanade方法给出了一种求解稀疏(明显特征的角点)光流的方法 。
3.2 深度学习算法 FlowNet/FlowNet2.0ICCV2015提出的FlowNet是最早使用深度学习CNN解决光流估计问题的方法 , 并且在CVPR2017 , 同一团队提出了改进版本FlowNet2.0 。 FlowNet2.0 是2015年以来光流估计邻域引用最高的论文 。
3.2.1 FlowNet作者尝试使用深度学习End-to-End的网络模型解决光流估计问题 , 如图3-2-1 , 该模型的输入为待估计光流的两张图像 , 输出即为图像每个像素点的光流 。 我们从Loss的设计 , 训练数据集和网络设计来分析FlowNet 。