MMFlow :帧与帧之间的追光者

简介: 光流(Optical Flow),字面理解为“光的流动”,更准确的说法为:时变图像上的二维运动场,是视频数据的重要视觉线索,在动作识别、视频理解、视频分割、目标跟踪以及全景拼接等领域,都有广泛应用。

光流(Optical Flow),字面理解为“光的流动”,更准确的说法为:时变图像上的二维运动场,是视频数据的重要视觉线索,在动作识别、视频理解、视频分割、目标跟踪以及全景拼接等领域,都有广泛应用。

640.png从2015年的 FlowNet 起,和其他视觉任务一样,基于深度学习的光流估计算法开始成为研究热点,并且性能“碾压”传统算法。但是,至今一直没有通用的算法库来支持辅助光流算法的研究。


今天,OpenMMLab 为填补这一空白隆重推出 MMFlow !

640.png

(那用实力让你信——)


MMFlow 为当下流行的基于深度学习的光流算法提供了统一的训练、推理、评估的算法框架;简洁的用户接口与高效、强大的基准模型,部分实现精度超出官方版本!


同时,我们更延续了 OpenMMLab 系列的模块化风格,继承了高度灵活 config 功能。目前,MMFlow 代码库已于11月16日全面开源!

等不及了吗!

先来看看 MMFlow 的惊人效果吧!

640.png


首个开源基于深度学习算法的光流估计工具箱



传统光流算法,例如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 评价结果,均高论文(*)公布结果

640.png

对于PWC-Net 方法,同样,不论是预训练模型还是 Fine-tune 模型,其结果都优于论文发布结果(*)

640.png


模块化设计和丰富灵活的配置文件



模块化设计:同 OpenMMLab 其他算法库一样,我们使用统一框架和模块化设计实现了各个算法


一方面可以尽量实现代码复用,另一方面,方便大家基于此框架实现新的算法。以下是 MMFlow 的大致框架:

640.png

MMFlow 主要由 4 个部分组成datasets、models、core 和 apis。datasets 用于数据集加载和预处理,其中包含训练所需的数据集,光流数据增广的pipelines,和加载数据时的 samplers。models是最关键的部分,光流模型在这里实现。


如图所示,我们把光流算法的模型,抽象成flow_estimators ,并将它分解为 encoders 和 decoders 两个模块。


encoder 的主要作用是提取输入图像的特征信息;decoder 的功能包括计算图像之间的相关性、计算 loss,预测输出的光流等。在 apis 中,我们为模型训练、测试和推理提供一键启动的接口。core 中实现了用于模型训练的评估工具和定制的 hooks 。


丰富灵活的配置文件:得益于 OpenMMLab 强大的且高度灵活的 cfg 模式和注册器机制, MMFlow 可以做到不改动代码只编辑配置文件便可实施消融实验。

640.png


相比于更接近产品应用的视觉任务,光流估计这一任务更类似计算机视觉中的“基础学科”,尽管不能直接被应用,但是对它的研究能促进多个领域的发展。


我们希望 MMFlow 可以提高大家对光流的关注度,降低该领域的研究门槛,使之成为新一代cv助力板。


文章来源:公众号【OpenMMLab】

 2021-11-16 20:01

目录
相关文章
|
3天前
|
网络协议
计算机网络四种帧介绍,广播帧、未知帧、同网帧、异网帧
计算机网络四种帧介绍,广播帧、未知帧、同网帧、异网帧
|
机器学习/深度学习 缓存
【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★
461 0
解码H264帧要注意的两个问题
解码H264帧要注意的两个问题
193 0
|
C++
ffmpeg编码h264只包含I帧P帧的方法
ffmpeg使用avcodc_encode_video编码,默认产生的h264包含B帧,在安防行业很多地方是不需要用到B帧的。   1.基础知识充电 这就涉及到h264的各种profile格式了,参考 h264各种profile h264分4种等级(profile):Baseline、Main、Extended、High Baseline profile:支持I帧P帧 Main profile:支持I/P/B/SP/SI帧 Extended profile:支持I/P/B帧 High profile:。
4588 0
|
存储 Java 索引
运行时栈帧结构
栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。
830 0
|
编解码 自然语言处理 存储
h264 流、帧结构
H264元素的分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素。句法元素被组织成有层次的结构,分别描述各个层次的信息。           在H.264 中,句法元素共被组织成  序列、图像、片、宏块、子宏块五个层次。
1147 0