光流(Optical Flow),字面理解为“光的流动”,更准确的说法为:时变图像上的二维运动场,是视频数据的重要视觉线索,在动作识别、视频理解、视频分割、目标跟踪以及全景拼接等领域,都有广泛应用。
从2015年的 FlowNet 起,和其他视觉任务一样,基于深度学习的光流估计算法开始成为研究热点,并且性能“碾压”传统算法。但是,至今一直没有通用的算法库来支持辅助光流算法的研究。
今天,OpenMMLab 为填补这一空白隆重推出 MMFlow !
(那用实力让你信——)
MMFlow 为当下流行的基于深度学习的光流算法提供了统一的训练、推理、评估的算法框架;简洁的用户接口与高效、强大的基准模型,部分实现精度超出官方版本!
同时,我们更延续了 OpenMMLab 系列的模块化风格,继承了高度灵活 config 功能。目前,MMFlow 代码库已于11月16日全面开源!
GitHub 链接:
https://github.com/open-mmlab/mmflow
等不及了吗!
先来看看 MMFlow 的惊人效果吧!
👇
(点击图片跳转小程序观看~)
首个开源基于深度学习算法的光流估计工具箱
传统光流算法,例如TV-L1、L-K 算法,在 OpenCV 中都有支持,但基于深度学习的光流估计算法,依然缺少统一的代码框架;并且,由于时代的局限、和关键算子的限制,不同光流算法所依赖的深度学习算法框架都不一致,这给代码复现、借鉴、公平对比都带来了很大的困难。
MMFlow 中包含了 8 种光流算法,从经典的FlowNet、FlowNet2、PWC-Net,到2020年的RAFT都有实现;另有 FlyingChairs、Sintel、KITTI 等 7 个光流数据集;以及多种光流的评价方法,光流文件读写和可视化方法。
此外,在 OpenMMLab 的 MMCV 中,实现了 Correlation,DCN 等高性能 CUDA 算子,因此 OpenMMLab 的 MMFlow 真正是史上最全、最统一的光流算法框架。
高效、强大的基准模型
在 MMFlow 中,我们复现了光流领域的经典深度学习算法,部分模型,例如 FlowNet PWC-Net 等,超过官方公布精度。
FlowNetC 和 FlowNetS 模型在 FlyingChairs 数据集上的预训练模型和 Sintel 数据集上的 Fine-tune 模型,在 Sintel (training) 数据集上的 Average EPE 评价结果,均高论文(*)公布结果:
对于PWC-Net 方法,同样,不论是预训练模型还是 Fine-tune 模型,其结果都优于论文发布结果(*)。
模块化设计和丰富灵活的配置文件
模块化设计:同 OpenMMLab 其他算法库一样,我们使用统一框架和模块化设计实现了各个算法。
一方面可以尽量实现代码复用,另一方面,方便大家基于此框架实现新的算法。以下是 MMFlow 的大致框架:
MMFlow 主要由 4 个部分组成:datasets、models、core 和 apis。datasets 用于数据集加载和预处理,其中包含训练所需的数据集,光流数据增广的pipelines,和加载数据时的 samplers。models是最关键的部分,光流模型在这里实现。
如图所示,我们把光流算法的模型,抽象成flow_estimators ,并将它分解为 encoders 和 decoders 两个模块。
encoder 的主要作用是提取输入图像的特征信息;decoder 的功能包括计算图像之间的相关性、计算 loss,预测输出的光流等。在 apis 中,我们为模型训练、测试和推理提供一键启动的接口。core 中实现了用于模型训练的评估工具和定制的 hooks 。
丰富灵活的配置文件:得益于 OpenMMLab 强大的且高度灵活的 cfg 模式和注册器机制, MMFlow 可以做到不改动代码只编辑配置文件便可实施消融实验。
相比于更接近产品应用的视觉任务,光流估计这一任务更类似计算机视觉中的“基础学科”,尽管不能直接被应用,但是对它的研究能促进多个领域的发展。
我们希望 MMFlow 可以提高大家对光流的关注度,降低该领域的研究门槛,使之成为新一代cv助力板。