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

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

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

第一篇文章为无监督损失

目录

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

估计遮挡区域

前后流一致性检查 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] 为主要参考。首先说说什么是遮挡区域,如下面这张图,假如三角形是一个固定不动的前景,而圆形则是一个移动的物体,左右分别是前后两帧。可以发现,左半部分圆有一部分在第二帧中找不到了,同样右半部分圆也有一部分在第一帧是找不到的,相互找不到的部分就可以说是遮挡区域

【光流估计】无监督学习中的遮挡区域_第1张图片

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


估计遮挡区域

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

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

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

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

【光流估计】无监督学习中的遮挡区域_第2张图片

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

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

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

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

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

【光流估计】无监督学习中的遮挡区域_第3张图片

【光流估计】无监督学习中的遮挡区域_第4张图片

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

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

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


遮挡区域的处理

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

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

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

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

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

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

【光流估计】无监督学习中的遮挡区域_第5张图片

        从上面的网络结构可以看出其估计了两个光流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.


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

你可能感兴趣的:(学习,人工智能,计算机视觉)