赞
踩
深度估计很重要,sfm和mvs都是建立在多个视图的特征匹配的基础上,预测出来的深度图还很他妈稀疏,说实话从单个图像推出深度就是不适定的扯淡问题。但是没办法,话是要用深度学习搞 啊,于是乎不同的网络结构,损失函数,训练策略都蹦出来了。
基于几何的方法:
说实话老方法还是靠谱的,基于几何方法用几何约束,从多张图片恢复出三维结构。
SFM是经典,它从几个2D图像恢复出3D结构,算出来位姿等一系列东西,确实经典无敌。 每张图片上的特征点不多,很少,但是根据这些稀疏 的特征点,利用双目几何推断出深度。 所以质量好坏取决于,你特征点匹配的好坏。 而且SFM还有尺度模糊的问题,没有真实尺度。。。
立体视觉通过模拟人眼,构建代价函数计算视差。 MVS肯定是已知位姿的前提下的,所以它是有尺度的。。。
这些老方法能有效地计算系数特征点的深度。 但是比较慢,而且依赖于你给他一个图像对或者图像序列。 总之存在限制吧。
基于传感器的方法:
效果牛逼,没办法,直接得到真实深度,确实牛逼。
基于深度学习方法:
万物套深度学习,各种网络已经有人试过,可以用在单目深度估计上:CNN,GAN,RNN,VAE等,不管用啥, 关键就是你怎么编损失函数? 你怎么搞出来一个靠谱的网络架构??
先说几个数据集:
KITTI: 老大哥,能评测:光流,里程计,深度,目标检测,语义分割,跟踪,子任务确实很多。无监督和半监督问题(?)最常用的就是kitti。 kitti包括三种场景: 城市、住宅、道路。。反正都是室外。。。
它的深度真实数据是从 旋转激光雷达提取的。 还有每一帧的姿态。总之很全面。
NYU Depth:
纽约大学深度数据集,纽约大学真不戳。。 这数据集只有室内。一共464个屋子。 深度图像不是用雷达,而是用RGB-D相机采集的。监督单目深度估计都用它,这数据集真不错。 464个场景,249个拿来训练,215个拿来测试,都是640x480的图,很规范。。
不过很奇葩的是: 由于彩色相机和深度相机的采集速率不同。 这个数据集的彩色图和深度图不是一一对应的???? 使用时候先要 为每一个深度图找到一个最接近的彩色图作为对应(WTF) 并且它的深度图也不是稠密的,也是稀疏的(因为用了Kinect相机,有时候深度有缺失的),实验中要把没有深度的像素屏蔽掉。。
Cityscapes:
没咋听说过。。。这个数据集主要做的是 语义分割~ ,注意,这个数据只有每张图片的语义分割,没有每张图片的 真实深度 ! 所以只能用在 无监督的训练当中。亮点就是他是在50个不同的城市采集来的吧。
Make3D:
这数据集也是奇葩。 没有图片序列,只有一个RGB对应一个深度图像。 没有任何单目序列和立体图像对。所以图像都是杂乱的。只有监督学习的方法用它来做为训练集。 他也被用做无监督算法的测试集,用来检验泛化能力。。
-------评估指标-------
说实话先把评估指标弄明白是重中之重吧:
一般公认的有这5个:
RMSE:
RMSE-log:
Abs-Rel:
Sq-Rel:
Acc:
看图吧。。。
--------深度学习!!!!
套CNN嘛,monodepth、sfmlearner、semodepth、lkvollearner这不都是套cnn了。
有一说一,咱应该把网络看成黑匣子: 网络仅仅负责提取特征的功能,加上手动设置的监督信号。靠这种思路,来进行这个深度估计的任务。
从监督的角度,逐渐展开:
⭐⭐⭐⭐有监督训练方法⭐⭐⭐⭐ ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
监督方法的监督信号,它就是真实数据,或者根据真实数据演变的。
在这种有监督的情况下,单目深度估计就是一个回归问题。 真实数据和预测数据直接相减求平方,L2损失不就有了嘛,然后训练。完事。 训练的时候网络预测值不断逼近真实值。预测深度不断逼近真实深度,芜湖~
损失有很多种,L1(MAE),L2(MSE) , huber(MSE+MAE),berhu(MAE+MSE)等,本质都是构建真实深度和估计深度的差值。
有监督这块。不仅可以用真实深度,还能用光流作为监督。
有监督这块,不仅可以用真实深度作为监督,还能用相对标注作为监督。 megadepth的前身《Single-image depth perception
in the wild,》 这个文章就就是不去关心真实深度,训练的时候只关心标注出来的相对深度。
也有一些人从图像对入手,输入图像对,预测出视差图。
这些的网络说实话也是很庞大很复杂的,参数很多。Fastdepth尝试简化模型,还能移植到手机上。挺良心的。
条件随机场方向
因为:像素间深度的连续性,CRF模型可以通过考虑相邻像素的深度信息来细化深度估计。 这就是为啥CRF条件随机场能够在深度估计中立足。
==== 对抗式学习方向====
对抗学习(Generative adversarial nets,)用来生成数据很方便。
思路是: 从单个图像估计全局和局部的三维结构 ,然后使用鉴别器来区分预测深度图和实际深度图。 如你所见,此处通常是监督学习。
⭐⭐⭐⭐无监督训练方法⭐⭐⭐⭐ ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
无监督基于单目图像序列,不需要真实深度,那几何约束在哪??
建立在相邻帧之间的投影上。
看图吧,这里依赖于两个基础网络,深度估计网络和位姿估计网络。
这无监督就是自监督,就是自己预测和真实的一个东西进行衡量,这个真实的东西现在不是深度,而变成了几何约束罢了。。
=可解释掩膜方向=
怎墨说呢,上面的用到投影函数的方法,都依赖于 场景没有动。但是实际上,场景可能是动态的。 那么动的玩意,在图片序列上不符合投影关系。
因此,掩膜的诞生就是为了减少动态和遮挡影响。
看公式:
这个损失函数,前面加了个M,即对图像加了一个掩膜,只让一部分像素参与损失、参与训练。
=基于多任务=
也就是一个框架做多个任务,例如光流、物体运动、相机内参。 (感觉都是玩光流的。
=对抗学习方向=
因为压根没有真实的深度图。那么找点真实的东西作为约束呗。
一般使用视图几何生成的图像和 真实图像作为鉴别器输入。还有的也用到了LSTM提取的帧间信息进行深度估计。。。
有监督和无监督对比
无监督训练基于立体几何约束,有监督则是基于真实深度值。 也就是无监督更依赖单目序列的质量,有监督更依赖真实深度图的质量。
关键是: 有监督有真实深度值嘛! 因此有绝对尺度~ 但是无监督基于单目序列,是没有尺度信息的。所以无监督训练出来的网络,都会有尺度模糊,尺度不一致,遮挡等问题。
⭐⭐⭐⭐半监督训练方法⭐⭐⭐⭐ ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
无监督不要真实深度,性能差,还有尺度模糊和尺度不一致的问题。有监督吧,真实深度值又太难搞到了。因此提出半监督方法,提高无监督性能的同时减少自监督对于真实深度的依赖。
半监督有真实深度,有珍贵的尺度信息。
半监督思路: 在已知位姿的情况下,基于双目视觉。 训练一个预测视差图的网络, 预测出来一对图的视差,用视差把右边图生成左边的图,
左边的真实图和预测的图构建损失函数。 训练中不断优化视差网络生成视差图的能力。让生成的视差图尽量准确。
后续还有人用平滑度损失想来改善视差图的连续性。什么左右一致性来约束左右视差一致性。SSIM用于考虑合成图像和真是图像之间的相似性。还有人拿三视图来做。还有人用语义分割来改进单目深度估计。
=== 立体匹配思路===
用原始的左侧图像和合成的右侧图像进行视差回归。。 训练就是右侧原始图像和右侧合成图像。
核心目的还是训练一个比较好的视差图,然后用视差图得到深度图嘛!
核心是视差网络。
=对抗网络思路=
对抗学习和知识提炼的结合正在流行。 这玩意由两个网络组成:教师网络和学生网络。 知识提炼是为了把信息从细化网络传输到学生网络。将大模型学习到的函数压缩成更小更快的模型。
=稀疏深度值方向=
思路就是把稀疏的真实深度融入到训练框架,用来增强监督信号。舒舒服服的思路。有人用真实的激光雷达做半监督。还有什么物理信息。 这种先验信息大大提高了深度估计的精度。
/ 半监督
半监督比无监督有更好的精度,并且从真实数据学习尺度信息,但是半监督太依赖真实数据了。有时候真实数据的好坏影响到深度估计的好坏。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。