0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SC-Depth系列的网络都解决了什么问题以及实现了什么效果

3D视觉工坊 来源:计算机视觉工坊 作者:泡椒味的口香糖 2022-11-22 10:39 次阅读

0. 笔者个人体会

因为项目原因需要用到无监督单目深度估计网络,目前SC-Depth系列是非常经典的框架,因此写下这篇文章记录自己的学习经历。 深度估计其实是一个非常早的问题,早期方法主要是Structure from Motion (SfM)和Multi View Stereo (MVS)这两种。

SfM算法输入是一系列无序照片,两两照片通过特征点建立匹配关系,利用三角化方法获得稀疏点云,之后使用BA进行联合优化,输出是整个模型是三维点云和相机位姿。但此类方法获得的是稀疏点云,就是说深度图也是稀疏的。MVS与SfM原理类似,但它是对每个像素都去提取特征并进行匹配,最终可以获得稠密的深度图。

相较双目/多目深度估计而言,单目深度估计更具挑战性,这是因为单目视觉天生就存在致命缺陷:尺度模糊。近年来深度学习技术的发展,引发了一系列单目深度估计网络的问世。近期SC-DepthV3发表在了新一期的TPAMI上,对单目深度估计问题又提出了一个新的解决思路。本文将分别介绍牛津大学提出的SC-Depth系列的三个网络,探讨它们都解决了什么问题,以及实现了什么效果。

1. 为什么是无监督?

先说答案:

因为有监督太贵了!

目前单目深度估计网络在KITTI、NYU等数据集上的性能其实已经非常好了,各项定量指标也好,定性估计深度图也好,看起来已经非常完美。但任何网络、任何模型归根结底都是要落地的,只在数据集上跑一跑没办法创造实际的产能。可是深度学习本身就是依赖数据集的,如果想把一个训练好的模型拓展到实际场景中,往往需要在实际场景进行finetune。

如果是有监督网络的话,实际场景的微调就需要激光雷达、高精相机等昂贵传感器提供的ground truth。这在很大程度上就限制了有监督单目深度估计网络的实际落地。我们更想实现的目标是拿着一个相机(甚至手机)拍一组视频,就可获得每帧的深度!

那么怎么办呢?

无监督单目深度估计网络就可以很好得解决这一问题!无监督单目深度估计网络不需要提供深度真值就可以进行训练,可以在任何场景通过一组单目视频进行finetune,这就意味着网络具备极强的泛化能力! 最早的无监督单目深度估计网络来源于2016年ECCV论文“Unsupervised CNN for single view depth estimation: Geometry to the rescue.”。

网络输入是双目相机中的左右目图像,但是只估计左目图像的深度。由于左右目位姿是已知的,那么我们就可以通过左目深度图和左右目位姿去重建左图,之后去计算重建左图和真实左图之间的差异,回传损失进行训练。除这个损失外,这个网络还提出了深度值的平滑损失。

d50cf842-61dd-11ed-8abf-dac502259ad0.png

这个网络名义上确实是单目深度估计网络,因为只估计了左图的深度。但我们更希望的是网络输入是真正的单目图像。 最早的真正只使用单目图像的无监督单目深度估计网络是2017年CVPR论文“Unsupervised Learning of Depth and Ego-Motion from Video”。

这个网络与上一篇论文的原理类似,它的输入是单目视频序列中的前后两帧。首先给第一帧图像估计深度图,同时估计两帧图像中的位姿,之后利用深度图和位姿重建第一帧图像,同样去计算与真实图像之间的差异。

d52cb06a-61dd-11ed-8abf-dac502259ad0.png

之后的SOTA方法就是大家所熟知的Monodepth2,来源于2019年ICCV论文“Digging Into Self-Supervised Monocular Depth Estimation”。其原理还是利用SfM同时估计深度网络和位姿网络。网络输入为单目视频的连续多帧图片,根据深度网络和位姿网络构建重投影图像,计算重投影误差并引入至损失函数。

d58bc8ca-61dd-11ed-8abf-dac502259ad0.png

虽然近些年也出现了非常多的单目深度估计网络,但大多都是基于Monodepth2和SC-Depth框架进行的。因此,本文对其他网络结构不再赘述。

2. SC-DepthV1做了什么?

至此,开始引入本文真正的主角:SC-Depth系列。

之前的单目深度估计网络的重投影损失,更多的是利用前后帧的颜色误差进行约束,得到了比较精确的结果。但它们基本上都有一个共性问题:深度值不连续!连续几张图像之间的深度值不连续!也就是说,在不同的帧上产生尺度不一致的预测,因为它们承受了每帧图像的尺度不确定性。

这种问题这不会影响基于单个图像的任务,但对于基于视频的应用至关重要,例如不能用于VSLAM系统中的初始化。 因此,SC-DepthV1为解决此问题提出了尺度一致性约束。具体来说,就是给前后两帧图像都预测深度,利用两张图像的深度和位姿投影到3D空间中,进而去计算尺度一致性损失。

这种方法确保了相邻帧之间尺度的一致性,如果每连续两帧图像的尺度都是一致的,那么整个视频序列的深度序列也就是连续的。

d5ba597e-61dd-11ed-8abf-dac502259ad0.png

此外,SC-DepthV1还使用了一种Mask,对应视频上出现不连续的区域。作者认为这就是动态物体,通过去除这种Mask可以使得网络具备一定的动态环境鲁棒性。

d5dbbb46-61dd-11ed-8abf-dac502259ad0.png

定量结果显示,SC-DepthV1取得了与Monodepth2相持平的结果。但SC-DepthV1估计出的深度图具有连续性,因此还是SC-DepthV1更胜一筹。

d5f9034a-61dd-11ed-8abf-dac502259ad0.png

值得一提的是,SC-DepthV1在论文里除了介绍自己的定量结果外,还将单目深度估计结果引入到了ORB-SLAM2中,构建了一个伪RGB-D SLAM系统。在一些序列中,Monodepth2+ORB-SLAM2的系统由于深度不连续问题,很快跟丢。而SC-DepthV1+ORB-SLAM2的组合可以获得较好的跟踪结果。

d61d42dc-61dd-11ed-8abf-dac502259ad0.pngd6725812-61dd-11ed-8abf-dac502259ad0.png

一句话总结:SC-DepthV1解决了深度连续性问题。

3. SC-DepthV2做了什么?

之前的SC-DepthV1和MonoDepth2等网络主要针对KITTI等室外场景,取得了非常不错的效果。但SC-Depth系列的作者发现,这些网络很难泛化到室内场景中,室内估计出的深度图很差。这就很奇怪了,按理说只要经过足够的训练,室内和室外场景应该是可以取得相似的精度的。

这是为什么呢?

有一些学者认为,这是因为室内场景中有大量的弱纹理区域,比如白墙。这些区域很难去提取特征,就更不用说去做特征匹配,是这些弱纹理区域导致深度估计不准。看似有一定道理,但要知道室外场景中的天空也是弱纹理区域啊,并且也占了图像中的很大一部分。

为什么同样是存在大量弱纹理场景,性能却差了那么多呢? SC-Depth系列的作者认为,室外场景中的相机运动主要是平移,旋转所占的比重很小,而室内场景正好相反。那么是不是室内场景中的旋转分量,对单目深度估计结果造成了影响呢? SC-Depth系列的作者对此进行了严密的数学推导:

d6aa76d4-61dd-11ed-8abf-dac502259ad0.pngd6d6ee9e-61dd-11ed-8abf-dac502259ad0.png

这个数学推导很有意思。SC-Depth系列作者发现旋转运动和深度估计结果完全无关!但平移运动和深度估计结果却是相关的!

这个结论是什么意思呢?

也就是说,对于旋转运动来说,就算估计的很准也不会帮助单目深度估计结果,但如果估计的不准就会给深度估计带来大量噪声。而对于平移运动来说,如果估计的位姿准确是可以辅助单目深度估计结果的。 因此,SC-depthV2提出了位姿自修正网络,这个网络只估计旋转运动,并借此剔除场景中的旋转运动。

之后将第二帧图像旋转到第一张图,这样两帧图像之间的位姿就只剩下的平移运动。自此,自监督深度估计网络就可以得到很好的训练。

d6f58458-61dd-11ed-8abf-dac502259ad0.png

此外,SC-depthV2还提出了两个新的损失约束。这里具体解释一下:前面我们知道,Ia和Ib通过ARN生成了去除旋转运动的图像,理论上此时Ia和Ib’之间应该是不包含任何旋转的。

也就是说Ia和Ib’再进行一次ARN得到的Rot2应该为0。此外,Ib’和Ib再进行一次ARN得到的Rot3应该和第一次得到的Rot1是相等的。通过这两个约束可以完全剔除两帧之间的旋转运动,得到更好的位姿估计结果。
d71ceee4-61dd-11ed-8abf-dac502259ad0.pngd7363d0e-61dd-11ed-8abf-dac502259ad0.png

至于定量结果,由于作者主要思路就是针对室内场景中的旋转运动,因此主要评估的数据集是室内NYU。

结果显示,SC-depthV2相较于之前的方法实现了大幅提升,这也验证了作者的想法。

一句话总结:SC-DepthV2解决了旋转位姿对深度估计的影响问题。

d7516ebc-61dd-11ed-8abf-dac502259ad0.png

4. SC-DepthV3做了什么?

至此,其实SC-Depth系列已经做的很好了。SC-DepthV1面向室外场景,SC-DepthV2面向室内场景,可以说实现了很好的通用性和泛化能力。但SC-DepthV1和SC-DepthV2都是基于静态环境假设的,虽然作者也利用Mask剔除了一些动态物体的影响,但当应用场景是高动态环境时,算法很容易崩溃。

为了解决动态物体和遮挡问题,现有网络通常是检测动态物体,然后在训练时剔除这些区域。这些方法在训练时效果比较好,但是在推理时往往很难得到高精度。也有一些方法对每个动态对象进行建模,但网络会变得非常笨重。 因此,SC-Depth系列作者又在近日提出了SC-DepthV3,面向高动态场景的单目深度估计网络!

在各种动态场景中都可以鲁棒的运行! 具体来说,SC-DepthV3首先引入了一个在大规模数据集上有监督预训练的单目深度估计模型LeReS,并通过零样本泛化提供单图像深度先验,也就是伪深度,同时引入了一个新损失来约束网络的训练。

注意,LeReS只需要训练一次,在新场景中不需要进行finetune,因此这一网络的引入并不会加入额外的成本。

d772b5c2-61dd-11ed-8abf-dac502259ad0.png

LeReS显示了很好的定性结果,但伪深度的精度很低,伪深度的误差图也说明了这一问题。不过SC-DepthV3认为经过合适的模块设计,伪深度可以很好得促进无监督单目深度估计的结果。

d844b284-61dd-11ed-8abf-dac502259ad0.png

解决动态区域问题的关键是作者提出的动态区域细化(DRR)模块,该方法的来源是,作者发现伪深度在任意两个物体或像素之间保持极好的深度有序度。

因此,SC-DepthV3提取动态和静态区域之间的真值深度序信息,并使用它来规范动态区域的自监督深度估计。

为了从静态背景中分割动态区域,SC-DepthV3使用了SC-DepthV1中提出的Mask,并通过计算自监督训练中的前后向深度不一致性来生成,因此不需要外部分割网络。

d8700f4c-61dd-11ed-8abf-dac502259ad0.png

此外,伪深度显示了光滑的局部结构和物体边界。因此SC-DepthV3提出一个局部结构优化(LSR)模块来改进深度细节的自监督深度估计。该模块包含两个部分:一方面从伪深度和网络预测深度中提取表面法线,并通过应用法线匹配损失来约束;另一方面应用相对法向角度损失来约束物体边界区域的深度估计。

在损失函数的设置上,除了之前的几何一致性损失、光度损失外,SC-DepthV3还提出了边缘感知平滑损失来正则化预测的深度图。

d89535ec-61dd-11ed-8abf-dac502259ad0.png

在具体的评估上,SC-DepthV3在DDAD、BONN、TUM、KITTI、NYUv2和IBims-1这六个数据集进行了大量实验,定性结果显示SC-DepthV3在动态环境中具有极强的鲁棒性。

定量结果也说明了SC-DepthV3在动态环境中的性能远超Monodepth2和SC-Depth。

d8c4a750-61dd-11ed-8abf-dac502259ad0.pngd96fcc84-61dd-11ed-8abf-dac502259ad0.png

一句话总结:SC-DepthV3解决了动态环境问题。

5. 总结

SC-Depth系列是非常经典且先进的无监督单目深度估计网络,现在已经有了V1、V2、V3三个版本。其中SC-DepthV1主要解决深度图不连续的问题,SC-DepthV2主要解决室内环境中旋转位姿对深度估计产生噪声的问题,SC-DepthV3主要解决动态环境中的单目深度估计问题。可以说这三个网络已经可以应用于大多数的场景,这样在一个方向不断深耕的团队并不多见。研究单目深度估计网络的读者一定不要错过。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2546

    文章

    50516

    浏览量

    751295
  • 激光雷达
    +关注

    关注

    967

    文章

    3931

    浏览量

    189486
  • VSLAM
    +关注

    关注

    0

    文章

    23

    浏览量

    4302

原文标题:SC-DepthV3来了!深度解析无监督单目深度估计V1到V3的主要变化

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    原理图中所有的gnd地 网络名称变为progb

    progb网络和gnd地连接之后,原理图中所有的gnd地 网络名称变为progb,怎么解决啊,求大神指教
    发表于 01-28 10:31

    LabVIEW中图像滤波Vi以及实现效果如何实现

    新手求助!!!LabVIEW中图像滤波Vi以及实现效果如何实现,能提供子Vi最好先谢谢大神
    发表于 01-11 22:58

    人脸识别、语音翻译、无人驾驶...这些高科技离不开深度神经网络

    机器学习的技术,它是用深度神经网络实现机器学习,网络深度比原始网络加深数十甚至上百倍。 增强学习也可以达到机器学习的
    发表于 05-11 11:43

    差分曼彻斯特 比 曼彻斯特 好在哪里解决什么问题

    大家帮忙分析一下:差分曼彻斯特 比 曼彻斯特 好在哪里解决什么问题
    发表于 07-14 18:16

    分享一款不错的基于TCP/IP网络协议设计并实现浮标网络通信系统

    本文基于TCP/IP网络协议设计并实现浮标网络通信系统。
    发表于 05-28 06:44

    在STM32F407上实现直播声卡

    一、前言之前在STM32F407上现实直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现
    发表于 08-17 08:33

    TEE解决什么问题

    ]、Trusty TEE等开源TEE。几乎所有新上市的安卓手机都有TEE。那问题来了,TEE解决什么问题?集成在物联网终端中否有必要?如果有,哪些能力能帮助终端或者物联网提升安全等级?这些都是笔者初次听...
    发表于 02-16 06:03

    WS2811 led strip添加了analogWrite来控制板载LED的亮度,效果失真怎么解决?

    了 analogWrite(...) 来控制板载 LED(引脚 D4)的亮度 - 所有效果失真。可能是什么问题呢?D4 上的 PWM 在某种程度上与 D8 上的位碰撞有关?常见的中
    发表于 05-30 12:44

    js实现无缝跑马灯效果(图片轮播滚动跑马灯效果

    介绍js实现无缝跑马灯效果以及使用JS实现图片轮播滚动跑马灯效果,小编分享
    发表于 12-18 14:12 4.7w次阅读

    15个科技预言竟然实现

    “科技”与“科幻”的界限越来越模糊,以下的这15个预言竟然实现
    的头像 发表于 12-28 14:22 5165次阅读
    15个科技预言竟然<b class='flag-5'>都</b><b class='flag-5'>实现</b><b class='flag-5'>了</b>

    SK电讯成功实现1.2Gbps的LTE网络服务

    随着三星Galaxy S10系列以及Galaxy Fold可折叠屏手机等新品的震撼发布,不仅在指纹识别技术上有所创新,其SK电讯在其终端实现1.2Gbps的LTE
    发表于 03-06 09:27 852次阅读

    网络(SDON)标准进展的怎样

    IETF主要关注传送网、IP网络以及网络虚拟化的控制模型,定义基于YANG的网络模型。
    发表于 10-11 16:07 1699次阅读

    使用Matlab实现一个通用无源网络仿真引擎

    本节主要是对通用无源电路网络的原理图构建和电路仿真。主要介绍电路方程的改进节点法和原理图构建中所使用的图论相关分析方法。最后结合实际滤波器电路,使用Matlab实现一个通用无源
    发表于 02-20 14:32 883次阅读
    使用Matlab<b class='flag-5'>实现</b><b class='flag-5'>了</b>一个通用无源<b class='flag-5'>网络</b>仿真引擎

    CDN解决什么问题

    互联网用户的增长,通过CDN可以避免用户流量流经骨干网。 骨干网是一个全球性的局域网,一级互联网服务提供商(ISP)将其高速光纤网络连接在一起,形成互联网的骨干网,实现在不同地理区域之间高效地传输流量。 1、局域网 局域网(Local Area Network,LAN)是
    的头像 发表于 10-09 15:48 585次阅读
    CDN解决<b class='flag-5'>了</b><b class='flag-5'>什么问题</b>

    什么是NAT?NAT类型有哪些?NAT是如何工作的?NAT解决什么问题

    什么是NAT?NAT类型有哪些?NAT是如何工作的?NAT解决什么问题?如何使用NAT? NAT是一种网络协议,常用于将私有IP地址转换为公共IP地址,以便在互联网上进行通信。NAT提供
    的头像 发表于 02-04 11:03 4091次阅读