关于深度估计和朝向的一篇深度学习论文
1、先从实验开始
数据集:
SUN3D:提供各种室内图像以及深度和位姿,但是深度和相机位姿不完美(深度和位姿)
RGB-D SLAM:提供外部运动追踪系统获得的高质量位姿,深度信息被噪声干扰(深度不好,位姿)
MVS:一系列户外数据,深度图稀疏可能包含重构误差
Scenes11:由胡乱朝向和虚拟场景生成的图片组成的综合数据集,有很好的标签值但缺少真实性(深度和位姿,真实性缺失)
Blendswap:各种各样的场景,动画风到真实场景,大多是室内场景
NYUv2:各种各样的室内场景,有深度没有位姿
误差
尺度不变误差(我暂时没看懂这个误差的意义):
先过…
结果比较
实验结果有几点有意思的地方:
与传统方法比较
1、传统方法在MVS数据集上胜过这篇文章的方法,因为传统方法在纹理丰富的场景下非常好用
2、该方法可以通过非常细微的相机运动产生的两帧图片生成深度信息
3、通过连续的帧估计轨迹,结果看来和真实轨迹有很大偏差,只是形状相似
与其他单图像法
1、效果更好,显示得更详细,有规则
2、在NYUv2上不如Eigen,应为Eigen用这个数据集训练过(带来一个训练与实际使用的问题)
在新数据集上的泛化能力(刚觉出的问题解释就来了,牛的)
训练时的先验数据在面对新数据的时候可能useless甚至是累赘,作者整了一个新的、不常见的、复杂的小数据集用于演示效果
说是在新数据集上表现最好,我觉得说服力不足
消融性实验
这个消融结果其实没看懂,不知道怎么得出这个最好的结果
看完实验结果有几个问题:1、网络的结构;2、误差的意义;3、消融实验的内容
2、一节一节来,简介
在CV领域叫Structure from motion (SfM),从两张图片计算结构和运动
现有方法的缺陷:
1、先稠密搜索场景来估计相机运动然后推断场景结构——错误的估计会导致错误的深度估计;2、基于特侦点检测和描述子匹配的方法易受离群值影响,在缺少纹理的地方容易失效;3、现有的方法都不能处理很小的相机运动的情况
创新点:
1、训练一个CNN同时处理相机运动和深度估计问题(对没见过的图片有泛化能力的问题)
2、使用the motion parallax提高泛化能力,但是编码解码器不能使用立体信息
3、使用编码解码器和光流法交替的方法(为什么有用?)
4、提了一个新的a special gradient loss,在消融实验中有提到(有啥用?)
3、来了来了,网络结构
the bootstrap net + the iterative net + the refinement net
前面两个由一对编码解码器组成,第三个由一个编码解码器组成
the bootstrap net:输入一对图像,输出初始的深度和运动估计
第一个自编码器计算光流和光流的置信度图(置信度是什么鬼?)编码器用成对的卷积层,不断用步长=2降低分辨率并增加通道数。解码器用一系列步长=2的上卷积层生成光流估计,输出光流场的两个分量并估计置信度。
第二个自编码器接受光流和其置信度,图片对,以及被扭曲的第二张图片;估计深度,变面法线和摄像头运动。跟第一个相比多了三个全连接层用来计算相机运动和尺度因子s(反映了比例尺度模糊导致的深度与运动预测之间的内在联系)
the iterative net:用来提升深度,法线,运动估计
第一个自编码器的输入是bootstrap或者迭代网络上一次的输出的深度图和相机运动估计转化成的光流
第二个自编码器的输入是将光流通过之前的相机运动估计转换成深度图+光流
the refinement net提升图像分辨率
输入为全分辨率的第一张图和最近的上采样深度和法线
4、参数表示
r, t 第二个相机相对于第一个的姿势r是用角轴表示
单图像在不知道相机运动的情况下尺度是未知的,作者将深度值归一化到1解决尺度不确定问题
ξ = 1/z网络估计的是深度的倒数,这样可以表示无穷远的点
s尺度变换因子s,通过sξ获得最终的深度估计
5、训练过程
误差定义
深度误差,用L1范数
法线和光误差,用L2范数
真实的光流置信度(我们还要预测这个值)
置信度预测的误差
旋转和位移误差
离散尺度不变性梯度(不知道这个啥意思)
尺度不变误差(惩罚相邻像素的相对深度误差,刺激快速变化的边缘地图,增加均匀区域的平滑度)
后续再改