当前位置: 首页 > 编程日记 > 正文

MaskFlownet:基于可学习遮挡掩模的非对称特征匹配丨CVPR 2020

来源 | 微软研究院AI头条(ID: MSRAsia)

编者按:在光流预测任务中,形变带来的歧义与无效信息会干扰特征匹配的结果。在这篇 CVPR 2020 Oral 论文中,微软亚洲研究院提出了一种可学习遮挡掩模的非对称特征匹配模块 ,它可以被轻松结合到端到端的基础网络中,无需任何额外数据和计算开销就可以学习到遮挡区域,从而显著改进光流预测的结果。

光流预测任务(opticalflow estimation)即给定一张原始图像与一张目标图像,希望建立一个表示从原始图像的每个像素到目标图像的对应关系的流场(flow field)。在理想情况下,目标图像通过流场形变得到的形变图像应该与原始图像非常相似。但是,前景与背景之间的相对位移产生的遮挡区域(occlusions)给形变图像带来了歧义与无效信息(如图1),使得光流预测任务变得更加困难。

图1:可学习遮挡掩模作用于形变图像

近年来,基于卷积神经网络的深度学习正在被广泛地应用于光流预测领域,而特征形变(feature warping)则是其中最关键的一步。原始图像与目标图像首先通过同一个特征提取器得到不同层级的特征图,为了找到原始特征图与目标特征图之间的对应关系,特征形变将目标特征图通过当前预测的流场形变到与原始特征图相似的位置,再通过互相关层得到局部区域内两两像素之间的相关程度。然而,形变后的特征图同样在遮挡区域留下了歧义与无效信息,会干扰特征匹配的结果,这也是光流问题中尚未解决的主要问题之一。

本文提出一种可学习遮挡掩模(learnable occlusion mask)的非对称特征匹配模块,不需要任何显式的监督信息就可以预测遮挡区域、过滤特征形变带来的无效信息。如图1,目标图像通过流场形变之后,可学习遮挡掩模预测的遮挡(黑色)区域准确地过滤了重影部分的干扰信息,得到了干净的掩模图像(masked image)。在这个简单的例子中就可以看到,原始图像与目标图像并非完全对等——后者在形变之后产生了重影,需要利用掩模信息进行过滤。

可学习遮挡掩模的非对称特征匹配模块可以轻松结合到任何已有的基础网络上,通过端到端的方式自动学习到遮挡掩模,仅仅引入可忽略不计的额外计算量就可以显著提升网络的表现。

除此之外,我们还发现学习到的掩模可以和形变图像一起送入之后的级联网络中,进一步提升网络的整体表现。我们在 MPI Sintel、KITTI 2012 和 KITTI 2015 的光流数据集上都做了算法评测,截至投稿时间,均达到所有不使用额外信息的公开方法中最好的结果。

模型介绍

图2:可学习遮挡掩模的非对称特征匹配模块(AsymOFMM)

可学习遮挡掩模的非对称特征匹配模块的结构如图2所示。首先,我们非对称地引入了变形卷积(deformable convolution),即在根据当前流场对目标特征图进行形变的同时做一次额外的卷积,目的在于打破原始特征图与目标特征图的对称性。此时,网络预测的可学习遮挡掩模作用在形变后的特征图上(相乘),过滤重影现象带来的干扰信息,得到掩模特征图。最后,由于遮挡区域原本携带的信息在过滤之后有所缺失,因此需要与一个权衡项相加作为弥补,而这个权衡项,也是无监督学习到良好掩模的关键。

从图3中的对比可以看出,该模块不需要任何额外的监督信息就可以学习到反映真实遮挡区域的掩模。

图3:可学习遮挡掩模与遮挡区域真值(取反)对比

在该模块的基础上,我们还提出了可以充分利用掩模信息的双特征金字塔级联网络结构,进一步提升整个网络的表现。结合以上模块设计的MaskFlownet 的整体结构如图4所示。

图4:MaskFlownet 完整网络结构

实验评估与结果展示

表1:总体实验结果

我们在 MPISintel、KITTI 2012 和 KITTI 2015 数据集上进行了广泛的实验。表1总结了我们的方法与其它方法相比的总体表现。其中,MaskFlownet-S 不使用级联部分、以 PWC-Net 为基础网络,仅仅将所有特征匹配部分替换为我们提出的可学习遮挡掩模的非对称特征匹配模块,就在所有数据集上都取得了实质性的提升。MaskFlownet 则进一步受益于级联网络,在所有测试集上都取得了所有方法中的最佳结果。

表2:不同特征匹配模块之间的对比

表3:对称与非对称卷积的对比

表2证明了可学习遮挡掩模的非对称特征匹配模块相对于普通设计的优越性。表3证明了增加一个对称的额外卷积层(sym-conv)对结果的影响并不显著,而简单的非对称设计就可以带来明显的提升。我们在实验中发现,经过非对称卷积的目标特征与原始特征的确可以学习到完全不同的特征表示进而从中受益,如图5所示。

图5:特征图中的非对称性

表4:掩模与权衡项的作用

表5:级联与双特征金字塔的作用

表4说明了掩模与权衡项需要同时存在才会提升网络的表现。一个可能的解释是,只有质量良好的掩模才可以帮助特征匹配,而缺少权衡项将会导致网络无法学习到质量良好的掩模,如图6所示。表5证明了级联网络与双特征金字塔结构的作用。

图6:有无权衡项(右上无,右下有)所学习到的掩模对比

结语

我们提出了可学习遮挡掩模的非对称特征匹配模块,该模块可以被轻松结合到端到端的基础网络中,不需要任何额外数据就可以学习到遮挡区域,并且能显著改进光流预测的结果。

凭借其整体表现的优越性、不带来额外计算开销的便捷性、无需遮挡区域真值的普遍适用性、以及独立于基础网络的一般性,我们期望该模块可以在光流预测与特征匹配任务中得到广泛的应用。

GitHub连接:

https://github.com/microsoft/MaskFlownet

推荐阅读

  • 360金融首席科学家张家兴:别指望AI Lab做成中台

  • 我们想研发一个机器学习框架,6 个月后失败了

  • 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?

  • 中国 App 出海“变形记”

  • 詹克团反攻比特大陆:一场失去人心的自我挽留

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

GDB调试--以汇编语言为例

#rpm -qa |grep gdb 下载: 安装 #tar -zxvf #./configure #make 使用GDB 以汇编语言调试为例 汇编语言实现CPUID指令 CPUID cpuid是Intel Pentinum以上级CPU内置的一个指令(486级以下的CPU不支持),他用于识别某一类型…

汇编语言系统调用过程

以printf为例,详细解析一个简单的printf调用里头,系统究竟做了什么,各寄存器究竟如何变化。 如何在汇编调用glibc的函数?其实也很简单,根据c convention call的规则,参数反向压栈,call&#xf…

switch语句中在case块里声明变量会遇到提示“Expected expression before...的问题

switch语句中在case块里声明变量会遇到提示“Expected expression before..."的问题 例如在如下代码中 1case constant:2 int i 1;3 int j 2;4 self.sum i j;5 break;GCC在case语句之后的第一行中声明变量时遇到问题。 这时需要在case块两端添加花括号&am…

帮AI体检看病一条龙服务,阿里发布“AI安全诊断大师”

如同一些出生免疫力就有缺陷的人一样,AI也存在免疫力缺陷。基于从源头打造安全免疫力的新一代安全架构理念,最近,阿里安全研究发布了一项核心技术“AI安全诊断大师”,可对AI模型全面体检,“看诊开方”,让AI…

Spring学习总结(7)——applicationContext.xml 配置文详解

web.xml中classpath:和classpath*: 有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找. 存放位置: 1:src下面 需要在web.xml中定义如下&…

GDB查看栈信息

栈:是程序存放数据内存区域之一,特点是LIFO(后进先出)。 PUSH:入栈 POP:出战 使用场景: 1.保存动态分配的自动变量使用栈 2.函数调用时,用栈传递函数参数,半寸返回地址…

数据库学习之路

今天迎来入冬的第二场雪,闲来无事就整理了下总结下工作以来所有数据库方面的书籍和资料,发现了不少,很多已经读过或者正在读的书籍,oracle真的很强大,直到现在发现才入门的水平,当然很多书读一遍是不行的&a…

为什么铺天盖地都是Python的广告?

最近,知乎关于Python有一个热议问题: 甚至在抖音上,笔者有一次还看到Python占领了热搜!应该有很多不懂技术的吃瓜群众也被Python的热度炒懵了……但是,Python真的值得学吗?真的值得花这么多钱去学吗&#x…

python3正则表达式符号和用法

转载于:https://www.cnblogs.com/wumac/p/5441322.html

从寄存器看I386和x64位中函数调用中参数传递

x86_64基本使用寄存器存储函数参数,寄存器不够才入栈; 而i386将所有参数保存在栈上,通过gcc的扩展功能__attribute__((regparm()))即可实现部分参数的寄存器传递。 调试语法: --《深入理解计算机系统(原书第2版)》 代码 #incl…

转:去掉Flex4生成的SWF加载时的进度条

方法一&#xff1a; <?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.adobe.com/mxml/2009" xmlns:s"library://ns.adobe.com/flex/spark" xmlns:mx"library://ns.adobe.com/f…

饿了么交易系统5年演化史

作者 | 挽晴来源 | 阿里巴巴中间件&#xff08;ID&#xff1a;Aliware_2018&#xff09;个人简介:2014年12月加入饿了么&#xff0c;当时参与后台系统的研发(WalisJavis>Walle)&#xff0c;主要面向客服和BD。2015年5月开始接触订单系统的研发&#xff0c;7月负责订单研发组…

Python迁移MySQL数据到MongoDB脚本

MongoDB是一个文档数据库&#xff0c;在存储小文件方面存在天然优势。随着业务求的变化&#xff0c;需要将线上MySQL数据库中的行记录&#xff0c;导入到MongoDB中文档记录。 一、场景&#xff1a;线上MySQL数据库某表迁移到MongoDB&#xff0c;字段无变化。 二、Python模块&am…

使用valgrind分析C程序调用线路图

Valgrind可以检测内存泄漏和内存违例&#xff0c;但是用Valgrind生成的日志信息结合kcachegrind就可以查看C程序的执行线路图&#xff0c;调用时间&#xff0c;是做性能优化和查看代码的非常好的工具。 1.下载安装 Valgrind 安装 到www.valgrind.org下载最新版valgrind # wg…

纯CSS实现蓝色圆角下拉菜单

代码简介&#xff1a; 这个菜单没有使用任何的图片&#xff0c;完全是用CSS实现的&#xff0c;包括圆角效果也同样是&#xff0c;而且还考虑了多浏览器的兼容性&#xff0c;可以说非常不错&#xff0c;既兼容性好&#xff0c;又外观漂亮&#xff0c;下拉导航菜单目前比较流行&a…

生产型机器学习已经没那么困难了?

作者 | Caleb Kaiser译者 | 香槟超新星出品 | CSDN&#xff08;ID:CSDNnews&#xff09;封面图源自视觉中国在软件工程的诸多领域内&#xff0c;生产用例是相当标准化的。以Web开发为例&#xff0c;要在Web应用中实现身份认证&#xff0c;你不会去创造一个数据库&#xff0c;自…

poj1330Nearest Common Ancestors 1470 Closest Common Ancestors(LCA算法)

LCA思想&#xff1a;http://www.cnblogs.com/hujunzheng/p/3945885.html 在求解最近公共祖先为问题上&#xff0c;用到的是Tarjan的思想&#xff0c;从根结点开始形成一棵深搜树&#xff0c;非常好的处理技巧就是在回溯到结点u的时候&#xff0c;u的子树已经遍历&#xff0c;这…

干货 | 时间序列预测类问题下的建模方案探索实践

作者 | 陆春晖责编 | Carol出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;背景时间序列类问题是数据分析领域中一类常见的问题&#xff0c;人们有时需要通过观察某种现象一段时间的状态&#xff0c;来判断其未来一段时间的状态。而时间序列就是该种现象某一个统计指…

Redis安装与源码调试

linux版本&#xff1a;64位CentOS 6.5 Redis版本&#xff1a;redis-3.0.6 (更新到2016年1月22日) Redis官网&#xff1a;http://redis.io/ Redis常用命令&#xff1a;http://redis.io/commands 1.安装Redis # wget http://download.redis.io/releases/redis-3.2.6.tar.g…

system pause in C#

方法一&#xff1a; Console.Write("Press any key to continue . . . "); Console.ReadKey(true); 注&#xff1a;也可用ReadLine()或Read()&#xff0c;但是只能对回车进行响应&#xff0c;不能达到anykey的效果。 方法二&#xff1a; 1) 在源文件using处加入using…

C#设置当前程序通过IE代理服务器上网

注意&#xff1a;以下设置只在当前程序中有效&#xff0c;对IE浏览器无效&#xff0c;且关闭程序后&#xff0c;自动释放代码。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices;public static …

计算机科学精彩帖子收集

linux源码 LXR 源自“the Linux Cross Referencer”&#xff0c;中间的“X”形象地代表了“Cross”。与 Source Navigator 类似&#xff0c;它也是分析阅读源代码的好工具。不同的是&#xff0c;它将源代码借助浏览器展示出来&#xff0c;文件间的跳转过程成了我熟悉的点击超链…

挑战王者荣耀“绝悟” AI,我输了!

作者 | 马超责编 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;腾讯 AI Lab 与王者荣耀联合研发的策略协作型AI&#xff0c;“绝悟”首次开放大规模开放&#xff1a;5月1日至4日&#xff0c;玩家从王者荣耀大厅入口&#xff0c;进入“挑战绝悟”测试&…

java 注解类说明

一、类中注解 SuppressWarnings ("serial"); 关键字 用途deprecation使用了不赞成使用的类或方法时的警告unchecked执行了未检查的转换时的警告&#xff0c;例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。fallthrough当 Switch 程序块直接通往下一种…

《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图...

1、前言 http://mt2.google.cn/vt/lyrsm225000000&hlzh-CN&glcn&x420&y193&z9&sGalil 通过图层扩展类的方式加载Google地图的是我们通常获取Google地图的一种方式&#xff0c;根据这种方式我们可以通过拼接地图瓦片Url字符串获取瓦片数据&#xff0c;关…

调试JDK源码-一步一步看HashMap怎么Hash和扩容

调试JDK源码-一步一步看HashMap怎么Hash和扩容 调试JDK源码-ConcurrentHashMap实现原理 调试JDK源码-HashSet实现原理 调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 还是调试源码最好。 开发环境 JDK1.8NetBeans8.1 说明&#xff1a;调试HashMap的 publ…

开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布

在经过充分的行业调研后&#xff0c;阿里淘系技术部认为当时的推理引擎如TFLite不足以满足手机淘宝这样一个亿级用户与日活的超级App。于是&#xff0c;他们从零开始自己搭建了属于阿里巴巴的推理引擎MNN。1年前&#xff0c;MNN在Github上开源&#xff0c;截止目前获得了3.9k S…

人生在成败中进步

参考文献《佛经》 人生在成败中进步佛经中有云&#xff1a;“菩萨者&#xff0c;福慧深利&#xff0c;道观双流。”“福慧双修”、“福慧双全”是众生成佛的必由之道&#xff0c;也是众生修行的理想追求。人生中&#xff0c;虽然不可能人人都能成佛&#xff0c;但是佛经有云&am…

【原】YUI压缩与CSS media queries下的bug

大概是上个月&#xff0c;使用YUI压缩一个css文件后&#xff0c;发现只要是被压缩后的css文件有部分根本无法工作&#xff0c;一直都不知啥问题引起的&#xff0c;让我感到头疼。 今天发现了只要是在媒体查询中的样式无法起作用&#xff0c;于是才开始怀疑是media被压缩后引起的…

Spring源码分析【4】-Spring扫描basePackages注解

org.springframework.beans.factory.support.DefaultListableBeanFactory 重要数据结构 /** Map of bean definition objects, keyed by bean name */private final Map<String, BeanDefinition> beanDefinitionMap new ConcurrentHashMap<String, BeanDefinition&…