本文目的在于记录无监督光流估计中遮挡区域的相关问题

本博文是光流估计的第二篇文章,因此一些提及的内容不再赘述。

第一篇文章为无监督损失

目录

无监督光流估计中的遮挡区域

估计遮挡区域

前后流一致性检查 checking for consistent forward and backward flow

基于后向流的范围图 using the range map of the backward flow

基于学习的遮挡区域估计 learning a model for occlusion estimation

遮挡区域的处理

数据蒸馏 / 增强正则化损失(排除遮挡区的影响)

多帧约束(加强对齐约束)

其余方法


无监督光流估计中的遮挡区域

本文依然是以《What Matters in Unsupervised Optical Flow》[1] 为主要参考。首先说说什么是遮挡区域,如下面这张图,假如三角形是一个固定不动的前景,而圆形则是一个移动的物体,左右分别是前后两帧。可以发现,左半部分圆有一部分在第二帧中找不到了,同样右半部分圆也有一部分在第一帧是找不到的,相互找不到的部分就可以说是遮挡区域。

那么接下来谈谈遮挡区域为什么重要。首先物体的运动是通过光度的明显变化反映在图像上的,因此光流估计是反向利用这种关系建立流场的,因此这也是为什么无监督学习中光度损失是基础的原因。那么基于以上内容,无监督光流的一个核心思想就是物体在移动过程中外观保持不变。而遮挡区域通俗一些理解就是某块区域在下一帧突然消失或者突然出现了,这一问题对于光流估计是很麻烦的,首先它会错误的引导光度损失,另外还会影响密集光流的估计。遮挡区域也由此成为了几乎每篇无监督学习论文都需要考虑的地方(做的人多了就渐渐有了通用解法,另外也是提创新点的好地方)。


估计遮挡区域

前面一部分讨论了感知区域的重要性,那么下一步就是要估计遮挡区域,要知道那一部分是遮挡区域。估计的方法目前有三类:

前后流一致性检查 checking for consistent forward and backward flow

在具体说明该方法之前我们要知道:光流估计的估计结果是不对称的。从第一帧到第二帧估计的光流为前向流,而反过来就是后向流。没接触过的小白有可能认为,我估计出来了前向流,那相反数不就是后向流了吗?其实并不是,想一想我前面提到的遮挡区域。

利用上述原理就可以查找遮挡区域。对于非遮挡像素,前向流应该是第二帧中相应像素处的后向流的相反数。每当这两个流之间的不匹配太大时,我们可以将像素标记为被遮挡。相对应的内容可参照论文:Occlusion aware unsupervised learning of optical flow》[2]。下面给出具体的公式:

其中分别是估计的前向光流和后向光流,注意,计算时是相应像素。 和  分别是两个常量参数。这是一个约束公式,对于非遮挡像素,相应像素处的前向流和后向流为相反数,其向量加和应该是为0的,那么对于这个公式左侧应该是越小说明两向量越趋于相反。而公式右侧则是一个判断阈值。

这个方法理解起来很容易,并且效果也很好,现在的很多研究都是采用这个方法(甚至参数都固定了)。

基于后向流的范围图 using the range map of the backward flow

还是先补充一些前置的知识,warp翻译过来叫翘曲,在图像重建中非常重要,光流估计也离不开它。正如光度损失中需要计算图像与翘曲得到的图像比较,光流的估计结果往往是浮点数,因此需要使用双线性插值(也有使用三次插值,高斯插值的),基本原理就是用周围四个网格上的点估计结果。那同样可以利用后向流反向估计,即将一个点扩散到周围的四个点上,这也就是范围图的由来。

该方法的原理在论文:《Occlusion aware unsupervised learning of optical flow》[3]。如下图,I1和I2之间只有第一行水平上的移动,先创建一个遮挡mask,全1填充。根据后向流将该mask重建(下面公式为重建公式,其中表示后向流,x,y分别表示水平和垂直方向),得到Range Map。原图中A移动到了右上角遮盖了B,范围图中右上角也变为了0。得到了Range Map后需要设置一个阈值用来判断谁是遮挡,原文很简单的采用了1。

该方法同样是遮挡区域估计的很常用的一个方法,这个和前后流一致检查的方法具体哪个更好也没有明确的比较,只能说自己都试试。在 [1] 中作者默认使用了范围图的方法,但在KITTI数据集中使用的前后流一致性检查,据说效果有显著提升。

基于学习的遮挡区域估计 learning a model for occlusion estimation

这个方法我就不想多说了,我认为单在光流估计中这个没什么太大意义。明明有简单易操作的方法为什么还要不断增加新的网络呢(时间和算力在深度学习中都很重要)。


遮挡区域的处理

其实遮挡区域的处理大体分为两步:排除遮挡区域的影响、改善加强对齐约束下的学习。从我看过的论文来讲,这两步既可以融合使用也可以独立使用,大家也不用分的那么清。可能往往你都用了以后效果会更好,多进行消融研究试试。

数据蒸馏 / 增强正则化损失(排除遮挡区的影响)

这是一种数据导向的训练方法。因为这一方法属于自监督的内容,这里就简单提一提。这一方法往往同时使用教师网络和学生网络,光度损失对非遮挡像素的效果非常好,因此教师网络用来训练对非遮挡像素,并且将其当做监督信号用于指导学生网络。学生网络的网络结构往往和教师网络相同,但是在数据输入和损失函数构建会有不同。具体内容后面的文章详细介绍。(又挖了一遍自监督的坑)

增强正则化损失在前一篇文章也简单提过了,这里不多说的原因和数据蒸馏一样,它也是自监督的方法。其实这里可以看出自监督是处理遮挡区域非常好用的一种方法。

多帧约束(加强对齐约束)

原文:《Unsupervised learning of multi-frame optical flow with occlusions》[4]。大多数光流估计都是只考虑了相邻两帧,这其实也是为了鲁棒性考虑。这篇文章提出了多帧约束,即考虑了不止一帧,其实就是考虑了连续多对图像的光流。而因为这个特点其实提出了两种新的损失。网络结构如下:

从上面的网络结构可以看出其估计了两个光流Up和Uf,另外值得一提的是这篇论文使用的就是基于学习的遮挡区域估计。其首先提出的一个损失就是等速损失,文章假设在进行一个线性运动,因此其过去流和未来流在长度上应该是相等的。

文章提出的第二个损失是针对遮挡区域的 ,该文章的遮挡Mask是H*W*2的,即可以表示在两个流的遮挡情况,例如(0.5, 0.5)表示在两帧中均未被遮挡,(1, 0) 表示在前一帧被遮挡。可以看出这个函数的目的是让像素尽可能都可以被看见。

这个解决方法确实有效,假设条件在短时是可以被肯定的,但是在长时间下是否会累计较大的误差不好确定,另外在高速运动(且速度变化)的情况下,就会存在问题。

其余方法

关于加强对齐的方法这里就不一一介绍了,因为它们太多了。遮挡区域本就是无监督光流估计的核心瓶颈,目前绝大部分相关研究其实也是在针对这个问题,而它又不像光度损失那样在一个基本函数上不断改进,因此方法还有太多了。本文这里详细说明多帧约束不代表这个方法就是最好或是使用最多的,仅仅是因为理解起来会更快更容易,旨在能给各位研究者一个清晰的实例。

下面给出一些其余方法的相关文献,各位如果有兴趣深入研究,可自行阅读:

  • 极线约束:《Unsupervised deep epipolar flow for stationary or dynamic scenes》[5]
  • 深度约束:《Df-net: Unsupervised joint learning of depth and flow using cross-task consistency》[6]
  • 相似性约束:《Unsupervised learning of optical flow with deep feature similarity》[7]

这一部分到这里也算结束了,其实写这篇博客我重点是想说无监督光流估计中的遮挡区域是什么,遮挡区域为什么重要,怎么估计遮挡区域。至于怎么解决遮挡区域,目前而言并没有统一的解决方法,也不该有统一的解决方法(毕竟无监督光流估计的性能目前仍然有提升空间)。

参考文献

[1] Jonschkowski R, Stone A, Barron J T, et al. What matters in unsupervised optical flow[C]//European Conference on Computer Vision. Springer, Cham, 2020: 557-572.

[2] Wang Y, Yang Y, Yang Z, et al. Occlusion aware unsupervised learning of optical flow[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 4884-4893.

[3] Wang Y, Yang Y, Yang Z, et al. Occlusion aware unsupervised learning of optical flow[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 4884-4893.

[4] Janai J, Guney F, Ranjan A, et al. Unsupervised learning of multi-frame optical flow with occlusions[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 690-706.

[5] Zhong Y, Ji P, Wang J, et al. Unsupervised deep epipolar flow for stationary or dynamic scenes[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 12095-12104.

[6] Zou Y, Luo Z, Huang J B. Df-net: Unsupervised joint learning of depth and flow using cross-task consistency[C]//Proceedings of the European conference on computer vision (ECCV). 2018: 36-53.

[7] Im W, Kim T K, Yoon S E. Unsupervised learning of optical flow with deep feature similarity[C]//European Conference on Computer Vision. Springer, Cham, 2020: 172-188.


光流估计我目前研究也不多,博客部分内容可能有误,如有问题欢迎指出讨论!

【光流估计】无监督学习中的遮挡区域相关推荐

  1. 回归基础:通过亮度恒定性和运动平滑度对光流进行无监督学习

    回归基础:通过亮度恒定性和运动平滑度对光流进行无监督学习 原文链接 文章目录 回归基础:通过亮度恒定性和运动平滑度对光流进行无监督学习 摘要 1 引言 贡献 2 技术方法 2.1 无监督损失 2.2 ...

  2. 【读论文】使用基于 CNN 的非局部滤波对光流进行无监督学习

    使用基于 CNN 的非局部滤波对光流进行无监督学习 论文原文请看这里 文章目录 使用基于 CNN 的非局部滤波对光流进行无监督学习 一.引言 二. 相关工作 A. Variational Method ...

  3. 无监督学习中的无监督特征学习、聚类和密度估计

    无监督学习概述 无监督学习(Unsupervised Learning)是指从无标签的数据中学习出一些有用的模式,无监督学习一般直接从原始数据进行学习,不借助人工标签和反馈等信息.典型的无监督学习问题 ...

  4. 机器学习集群_机器学习中的多合一集群技术在无监督学习中应该了解

    机器学习集群 Clustering algorithms are a powerful technique for machine learning on unsupervised data. The ...

  5. 无监督学习中的目标检测

    无监督学习是当今计算机视觉领域最困难的挑战之一.这项任务在人工智能和新兴技术中有着巨大的实用价值,因为可以用相对较低的成本收集大量未标注的视频. ------ 01 概述 ------ 今天,我们介绍 ...

  6. 用于光流估计的无监督深度学习DSTFlow

    用于光流估计的无监督深度学习DSTFlow 原文链接 摘要 ​ 最近的工作表明,光流估计可以被表述为一个监督学习问题. 此外,卷积网络已成功应用于此任务. 然而,监督流学习由于缺乏标记的训练数据而变得 ...

  7. 【采用】无监督学习在反欺诈中的应用

    一.反欺诈技术的发展历程 反欺诈技术的的发展经历了四个阶段,第一阶段黑名单.信誉库和设备指纹:第二阶段规则系统:第三阶段有监督的机器学习:第四阶段无监督的大数据欺诈检测.目前来说,前三种还是大家应用最 ...

  8. 机器学习中的无监督学习_无监督机器学习中聚类背后的直觉

    机器学习中的无监督学习 When it comes to analyzing & making sense of the data from the past and understandin ...

  9. 机器学习中的无监督学习是什么?

    什么是无监督学习? 顾名思义,"无监督"学习发生在没有监督者或老师并且学习者自己学习的情况下. 例如,考虑一个第一次看到并品尝到苹果的孩子.她记录了水果的颜色.质地.味道和气味.下 ...

最新文章

  1. 在java读字符串入文件_如何在java中将文件读入字符串?
  2. 计算机pe开启网络模块,组装的电脑进入PE是哪个键
  3. 对状态代码使用JAX-RS异常
  4. java vo转map_JAVA Map转换为Bean或VO
  5. Kafka 优化参数 unclean.leader.election.enable
  6. RabbitMQ实现多系统间的分布式事务,保证数据一致性
  7. Berkeley CS 61B 学习笔记 - 1
  8. 找到某个关键字 同义词词林 python_python-004-标识符
  9. (八)高德地图之添加marker标记点
  10. 晶振旁的电阻(并联与串联)和电容的作用
  11. 钢筋穿入女子太阳穴 消防及时破拆将其营救
  12. rails相当于java中的什么_Rails中ERB中的%,%=,%#和 - %有什么区别?
  13. 修改Odoo 8版权信息
  14. k8s教程(基础篇)-基本概念和术语
  15. Android 9 Pie
  16. TikTok搬运视频怎么才会不被限流?
  17. myeclipse的server视图经常报nullpoint
  18. Java实现键盘按键点击效果
  19. 计算机毕业设计ssm千益校园帮跑腿信息平台5e9ev系统+程序+源码+lw+远程部署
  20. seo优化后多久能够看见效果

热门文章

  1. python练习题--阿拉伯数字转换成中文数字
  2. cmd批量修改文件名 增加文字_文件名如何进行批量更改?
  3. Parsing error: No Babel config file detected for
  4. dcs程序流程图分析_常见DCS工艺流程图识别 教你正确读图
  5. 山东省2020年12月计算机考试,12月20日开始报名!山东2020年3月全国计算机等级考试注意事项来咯...
  6. 中国方案入选世界5G标准
  7. 5G标准草案公布 改变的不仅是速度
  8. 七夕第一波狗粮来啦!魏晨晒婚纱照,与妻子爱情长跑十年成眷属
  9. Hadoop Shell 命令 与 WordCount
  10. Spring —— 基于注解的Aop在同一类下产生嵌套时切面不生效问题产生原因及解决