点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

作者丨cocoon

编辑 | 3D视觉开发者社区

导读

ToF相机深度重建的过程中,总是存在着各种各样的影响因子导致误差,让使用者烦不胜烦。误差是不可避免的,但我们能够通过一些方法,尽可能减少其影响程度,以得到精度更加准确的结果。

在该篇文章中,作者提出了一种基于深度学习的MOM-MRM二阶法,验证其可以有效减少MPI、运动所带来的误差。如果你正在为误差所苦恼,那就快来读一读吧!

目录

1. 概述

2. ToF相机模型

2.1 理想的相机模型

2.2 多路径效应的影响

2.3 移动(Motion)的影响

2.4 Kinect v2的特性

3. FLAT的数据集

4. 网络结构

5. 实验

5.1 MPI纠正

5.2 运动纠正以及消融实验

5.3 Putting Everything Together

5.4 方法限制

6. 结论

7. 参考文献

论文名称:Tackling 3D ToF Artifacts Through Learningand the FLAT Dataset

论文链接:https://openaccess.thecvf.com/content_ECCV_2018/papers/Qi_Guo_Tackling_3D_ToF_ECCV_2018_paper.pdf

数据及代码链接: https://research.nvidia.com/publication/2018-09_Tackling-3D-ToF

1  概述

场景移动,MPI以及sensor的噪声都会给基于ToF相机的深度重建带来误差。

作者提出了基于深度学习的MOM-MRM二阶法,对以上问题进行了同时的解决。

文章里还引入了一个名为“FLAT”的合成数据集,特指“Flexible Large Augmentable Time-of-flight”。该数据集共有2000次非理想情况下的ToF数据测量,并且允许不同相机硬件的模拟。

文章中使用Kinect 2相机作为baseline,展现了其在合成数据集以及真实数据上超过SOTA的能力。

2  ToF相机模型 

介绍ToF相机模型是为了证明:在理想情况下,基于ToF的重建过程是一个可微的过程。换句话说,整个重建过程是可微分的,那么也就是可以反向传播的。

此外,文章还通过数学表达展示了MPI对于深度重建的影响,这将有助于将整个任务进行数学化表达。

网络将直接针对于原始测量进行,其展开为相位之间,目的则是纠正MPI所引起的误差。

由于文章使用Kinect v2作为baseline,因此也会对于Kinect v2的硬件特性尽可能地进行描画。这有助于更好地进行数据模拟,尽可能减少模拟数据与真实数据之间的gap。

2.1

理想的相机模型

AMCW(Amplitude-Modulated Continuous-Wave)的ToF相机,向场景中所投射的正弦波信号可以表示为:  。

假设场景静止,相机以及光源同时放置,那么像素接收到的信号则可以表示为:  

  • 其中,  是场景响应函数,即信号在时间  接触到像素的信号。

在一个理想的场景中,光只会被反射一次,且场景的相应是一个脉冲,即  。飞行时间  可以直接被转换为深度。

一个零差(homodyne)的ToF相机对于同频率的、相位延迟的参考信号进行调制,即  。相机的曝光时间往往被设置为  。

通过简单的三角函数,可以实现raw相关测量  的数学表达,即: 

  • 其中,将  视作ToF相机函数。

已知单频率  以及  的相位  的Raw测量值,那么每一个像素的深度可以表示为:   

然而,由于多频测量(  )的需要,以及存在解调深度大于  的情况,不妨将频率  所对应的测量值标记为  ,则可进一步地将距离  改写为:

显然,由上式可见,我们很容易得到微分  ,也就是说,这个过程是完全可微可反向传播的。

2.2

多路径效应的影响

在多路径情况存在时,接触到像素的场景信号不再是一个脉冲。因此,相关测量的形式将被改写为:

当我们对不同频率  和不同相位  的正弦信号进行测量时,可以获得多通道的raw测量值。对于某一个像素的多通道测量值,我们可以将其视作在多维空间中的一个点。尽管难以通过理论分析对其进行建模,但是可以通过学习的方式来习得空间结构。

如果只有单频的话,准确识别MPI几乎是不可能的,因为MPI所导致的误差值与真实的测量值在一个域内。

而如果是多频的话,则会产生一个非线性的子空间,MPI所影响的值则不会在该子空间内。MPI问题可以被认为是真实测量的映射。

2.3

移动(Motion)的影响

真实场景很少会是完全静止的。由于物体相对于相机横向和轴向的运动,后续的相关测量  往往并不对齐。

此外,相对于相机轴向的运动还会进一步地对响应函数  产生影响。作者不考虑MPI问题,仅考虑单次反射的情况,会产生测量强度与距离平方成反比的情况。在室内试验中,发现这种情况对深度恢复会产生非常大的影响。

而其他由于运动所导致的blur和多普勒效应,几乎可以忽略不计。

2.4

Kinect v2的特性

Kinect v2是一个广泛应用的ToF相机,且其自带一个SDK(libfreenect2,简称LF2)。

我们仔细地研究了相机函数,shot噪声、vignetting、像素延迟这些特性,目的是尽可能进行准确仿真。

Kinect2使用了三个调制频率,每个调整频率测量了三个相位,共产生9个相机函数  。

为了对相机函数进行标定,作者仔细地对准光轴,使其垂直于朗伯校准平面。

在Kinect光源前放置一个光吸收管,以缩小光束发射角度,限制MPI。

将平面转换为一已知的距离:  ,并获得相对应的raw测量值  。

该raw测量值将接近于  。

在去除掉光照衰减  后,可以获得一系列的观测值。下图表现了三个相机函数的拟合示意图,其中红色和蓝色表示  ,绿色表示  。

至于shot 噪声,假设每一个像素都独立于其他像素,从15个场景中获取数据,对于每一个raw相关值,都计算了其100次测量的平均期望值。对于每一个期望值,都收集了其噪声样本的经验分布,之后将用于仿真过程中的噪声数据生成。

3  FLAT的数据集

文章认为,一个理想的用于训练及验证ToF算法的数据集应当是大型的,且允许模拟不同的相机响应函数,允许MPI、shot noise以及运动,且允许raw测量值的体现。

因此,作者制作了“FLAT”数据集,该数据集中包含了2000个场景响应函数  。

这一段主要介绍了如何对FLAT数据进行仿真,得到一个尽可能近似于Kinect2的仿真数据集,且能够模拟shot噪音、MPI 等。

4  网络结构

网络包括两个模块,如下图所示:

第一个模块称之为MOM,是Motion Module的缩写,整体是一个编码-解码的结构(受FlowNet启发),其目标是输出一个velocity图,进而将Kinect获取的9张raw图进行对齐。

具体来说,MOM对不同的相机函数所测量得到的raw相关进行处理,模块输入为9张没有对齐的raw图,同时输出8张光流图。

另一个模块是MRM,是Multi-Reflection Module的缩写,这个模块基于kernel-predicting network(简称KPN)所设计。KPN的具体结构见Mildenhall等(2018)的工作。

MRM为每一个像素输出9个空间各异的核,每一个核都与局部的raw测量有关。输出9个的目的是生成一个干净的raw测量,而所谓的“干净”是指去除掉shot和MPI噪声。

表一体现了基础DNN结构不同变种的细节:

当使用MRM模块时,修改了LF2中的双边滤波部分,因为MRM已经执行过去噪点的过程。

MRM的输入是MOM的输出。训练的损失函数是raw相关测量的L2损失函数。

此后,使用L2深度损失函数对MRM进行finetune。

5  实验

5.1

MPI纠正

首先,需要对MRM模块去除MPI的效果进行评估。

  • 对比的baseline有LF2、DToF、Phasor。

  • 对比的深度范围在[1.5m, 5m]。

  • 由于Phasor对shot noise未做处理,因此在其生成深度图后再施加双边滤波进行去噪处理。

从下图结果中可见,DToF所产生的深度图精度要差一些。此外,我们注意到,LF2的中位误差是有偏的,这是因为LF2几乎没有对MPI进行处理。而这种有偏情况,或者说MPI所造成的误差,有效地被MRM减轻。

总的来说,该方法接近于Phasor的精度,且不需要额外的硬件设备来制造非常高的频率(比如1063.3MHz以及1034.1MHz)。事实上,MRM所需要的硬件是Kinect2,频率低于50MHz。

下图则展示了在FLAT数据集中典型场景各个方法的表现。

  • 其中,Phasor以及MRM在去除MPI上的效果远超过其他方法。

我们还可以注意到,高频对于噪声来说非常敏感。

在实践中,使用了双边滤波对Phasor的输出进行处理。尽管这有效地减少了随机噪声,却无法去除系统噪声(如由于物体移动造成的噪声),大大地增加Phasor的误差。相比之下,MRM则显得稳健得多。

此外,对于一些在真实场景下墙角的情况,MRM也能够很好的处理,这在后续的实验中将会介绍。

5.2

运动纠正以及消融实验

作者通过消融实验,对MOM以及MOM-MRM在FLAT测试集上的效果进行了评测。

文章中比较了LF2、MOM以及MOM-MRM的深度重建效果,三者均采用了LF2的掩膜方式对不可靠的点进行滤除。

在某种程度上,我们可以将重建像素比例这一指标用于评测体移动对结果的影响程度。重建像素比例如下图所示:

MOM相对于LF2来说,似乎深度重建精度略高一些,但这并非其最大的优势之处。

其主要的优势在于:去除那些不可靠的像素,从而使得重建像素比例从93.56%提升至95.50%。在目视层面上,直观体现为补上了深度图上有洞的地方,使得深度图看起来更加的完整。

而MRM则进一步地提升了深度图的精度,以及重建完整性,示意图如下:

5.3

Putting Everything Together

同方法在合成数据集以及真实数据集上的表现为:

文章中认为,这样的DNN架构是经过了一番思考论证的,前人已然尝试过许多种架构,包括直接输出深度图的端到端的结构(Su等人,2018)。

然而作者发现,直接输出深度图的结构的误差要大于其DNN结构。究其原因,端到端的结构需要网络学习从raw观测到深度的非线性映射,而不是利用已知的物理事实进行设计。

在下图中,进一步体现了MOM-MRM相对于LF2等方法的优势:

5.4

方法限制

  1. MRM的感受野为  ,主要强调短距离的MPI纠正;而对于长距离的MPI来说,其应对能力相对弱一些。

  2. 数据集不包括镜面反射的物体。因此,对于镜面反射的物体来说,无法进行深度估计。

  3. MOM无法对很大的运动进行处理,具体来说,对于遮挡而言并无效果,只是尽可能地减少运动伪影。

  4. 仅在室内光的情况下,对噪声进行仿真。

6  结论

可知,运动、MPI和散粒噪声对ToF成像深度重建的精度有着显著影响。

文章证明了,基于ToF相机的Raw测量数据,可以利用深度学习来减弱运动和MPI所带来的负面影响。

7  参考文献

[1] Xiang, L., Echtler, F., Kerl, C., Wiedemeyer, T., Lars, hanyazou, Gordon, R., Facioni, F., laborer2008, Wareham, R., Goldhoorn, M., alberth, gaborpapp, Fuchs, S., jmtatsch, Blake, J., Federico, Jungkurth, H., Mingze, Y., vinouz, Coleman, D., Burns, B., Rawat, R., Mokhov, S., Reynolds, P., Viau, P., Fraissinet-Tachet, M., Ludique, Billingham, J., Alistair: libfreenect2: Release 0.2 (April 2016)

[2]  Su, S., Heide, F., Wetzstein, G., Heidrich, W.: Deep end-to-end time-of flight imaging. In: The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). (June 2018)

[3] Mildenhall B, Barron J T, Chen J, et al. Burst denoising with kernel prediction networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2502-2510.

*注:文章内图表顺序遵循原始文献标注,与实际略有出入

版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

本文仅做学术分享,如有侵权,请联系删文。

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~ 

还在烦恼ToF的误差问题?有人帮你找到解决方法了!相关推荐

  1. vs关于“当前不会命中断点 还没有为该文档加载任何符号”的解决方法

    vs关于"当前不会命中断点 还没有为该文档加载任何符号"的解决方法 参考文章: (1)vs关于"当前不会命中断点 还没有为该文档加载任何符号"的解决方法 (2) ...

  2. 卸载一直在创建还原点_Win10电脑开机一直转圈无法进入系统的解决方法

    相信很多用户在安装Win10系统之后,常常会出现一些问题,其中就有电脑开不了机一直在转圈的情况,那么遇到电脑开机一直在转圈怎么办呢?下面笔者就针对这一情况和大家介绍Win10系统电脑开不了机一直在转圈 ...

  3. 关于Visual Studio 当前不会命中断点.还没有为该文档加载任何符号的解决方法

    在使用vs的过程中,有些工程可以编译通过正常运行,但是在下断点调试时会显示"当前不会命中断点.还没有为该文档家在任何符号". 如下图1 图1 这并不是vs的bug,而是在设置选项中 ...

  4. 三坐标测量机误差产生的主要原因及解决方法

    三坐标测量机的误差源纷繁复杂,一般只修正那些对三坐标测量机精度影响比较大的误差源和那些比较容易分离的误差源,主要有以下几个方面: 1.温度误差 温度误差又称热误差或热变形误差,它不是温度本身的误差,而 ...

  5. 还在烦恼Word怎么转PPT?教你一种方法告别复制粘贴

    做PPT前,我们都会先在Word上完成一个大纲,然后做PPT看看对不对,不知道大家是怎么把Word里的内容转到PPT上的?我猜很多朋友会说是复制粘贴!实际上,还有有更简单更快捷的方法!今日小编就教大家 ...

  6. 人间地狱服务器一直显示有人,人间地狱常见问题及解决方法_Hell Let Loose常见问题QA_游戏堡...

    在< Q:刷不出服务器,或只有少量服务器. A:在Steam设置中,将ping设置由自动改为250. Q:启动游戏时,说检测到你作弊. A:禁用你系统上的防火墙,或把游戏.反作弊软件列入白名单. ...

  7. Python浮点数误差与解决方法

    目录 1.浮点数误差 2.解决方法 1.浮点数误差 浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制.并且,即便是最简单的数学运算,也会带来不可控制的后果.因为,在计算机的世界中 ...

  8. 《3D ISP核心技术算法》系列(1)——ToF测量中的多径现象与消除方法

    <3D ISP核心技术算法>系列文章是上海数迹智能科技有限公司结合自身多年来在3D ISP技术方向上的积累,推出的系列型科普文章.系列文章将对影响3D成像质量的主要问题逐一进行讲解,深入浅 ...

  9. androidq获取文件正式路径_还在担心后台复制红包口令 Android Q系统升级将解决这一问题...

    还在担心后台复制红包口令 Android Q系统升级将解决这一问题 2019年01月28日 10:33作者:陈浩天编辑:陈浩天文章出处:泡泡网原创 分享 随着Google I/O大会越来越近,新And ...

  10. “当前不会命中断点 还没有为该文档加载任何符号”解决方法

    "当前不会命中断点 还没有为该文档加载任何符号"解决方法 参考文章: (1)"当前不会命中断点 还没有为该文档加载任何符号"解决方法 (2)https://ww ...

最新文章

  1. LLVM一些语法规则
  2. 白话经典算法系列之七 堆与堆排序
  3. 玩转数据结构从入门到进阶一
  4. split函数python 未定义_Python字符串方法split()中的一道坑
  5. BOOST_SCOPE_EXIT宏相关的测试程序
  6. Spark远程调试配置,在IDEA中的配置
  7. msg: ReferenceError: Can't find variable: urchinTracker
  8. MOCTF-Web-Flag在哪?
  9. 使用Selenium Webdriver进行全屏截图
  10. 项目实训第二周(车道线检测)
  11. ssis for循环容器_使用SSIS ForEach Loop容器以日期顺序处理文件
  12. 判断 Map 中是否包含指定的 key 和 value
  13. WPS2019专业版办公软件安装包+永久授权码!
  14. ADC驱动器/差分放大器设计指南
  15. CS188-Project 4
  16. 2022年山东省安全员C证特种作业证考试题库及答案
  17. 达叔的正交化(第三课3.2)
  18. 如何安装CentOS7.5
  19. 【U8+】数据库清空U8+admin密码
  20. 群晖Docker部署Microsoft SQL Server 2019

热门文章

  1. 动词ing基本用法_动词ing的几种常见用法
  2. 【Leetcode】打气球的最大分数 (暴力递归+动态规划)
  3. android系统运行缓慢,安卓手机运行速度慢怎么办 手机运行速度慢如何解决 - WiFi共享大师...
  4. 零的突破!6所高校、2所“双非”顶刊发文
  5. 基于PyQT5制作一个二维码生成器
  6. 微信公众号 微信连wifi最全的教程
  7. 外卖点餐管理系统源码
  8. Tomcat使用总结
  9. win10 休眠设置无效_win10怎么设置不休眠?win10休眠设置教程--系统之家
  10. python机械臂仿真_机械臂 python