文章百度网盘(图片上传总是失败,想看图的话直接下载word吧):
链接:https://pan.baidu.com/s/1thJ9u7vyUrg8N9fBBeh6Uw
提取码:813e
- PYD-NET(iros2018)
与多数策略一样,将深度估计视为图像重建问题去解决。对每一对无标签的数据,左视图通过网络处理获得逆深度图(即视差图disparity maps)。PyD Net可以计算190万个参数,在Titan X Maxwell GPU上运行大约15ms,而Unsupervised Monocular Depth Estimation with Left-Right Consistency[2]使用VGG模型时,可以计算3100万个参数,需要35ms。作者认为本文的简单模型甚至可以在嵌入式系统或智能手机的低端CPU上有效部署。
Pyramidal features extractor
输入图片的特征提取是通过encoder12个卷积层实现的。每一个level有一个stride 2的卷积层并后接一个第二卷积层,这样的level有六个。每个卷积层卷积核都是3*3,激活函数使用leaky ReLU。这样的coarse-to-fine方法可以在high levels(即网络的底层)获得图像的全局内容,也可以在low levels(即网络的高层)去提炼细节。
Depth decoders and upsampling
提取到的特征是通过四个卷积层组成的depth decoder进行处理,输出feature maps。这个decoder有两个作用:1)在当下层提取一个深度图;2)将这些features经过22的deconvolution传递给上一个level。然后上一个level将从input提取出的features和传递过来的features连接起来,再将它们送去新的decoder处理。重复这个操作直至网络最高层。所有的deconvolutional layers都是leaky ReLU激活,除了最后一个deconvolutional层使用sigmoid函数激活来归一化outputs。这样的结构使PyD-Net在每个尺度下去学习预测深度图。
Training Loss
同Unsupervised Monocular Depth Estimation with Left-Right Consistency[2]。
实验结果
Accuracy evaluation on Eigen split
上图比较了该方法与其他监督或者非监督的方法。表的第一部分为与其他方法的比较,表中间部分为评估最大深度达到50的预测深度图,从之前和这部分可以看出训练epochs越多(50代表训练50个epochs,200代表训练200个),网络performance越好。表最下面部分是在额外的数据集上训练,作者首先在cs数据集上训练50 epochs,然后在K数据集上进行微调。该网络的表现要明显优于Zhou的。
总的来说,该网络比大多数复杂网络的预测结果要好,在一些情况下也可与top-performing的方法媲美。
Runtime analysis on different architectures
该网络在不同的尺度下预测深度,在网络的高层会有更好的准确度。对于任意网络训练的例子,如果从网络的低层输出,可以减少计算量,内参需求和运行时间。下表给出了不同层处理和不同设备上运行的比较结果。F是full,H是half,Q是quarter,E是eight分辨率。
可以看出,层级越低,运行时间越短,并且PyD-Net明显需要更少的运行时间,是可以在低端处理器上进行实时预测的。下图和表给出具体的在不同层级上的比较结果
代码链接:https://github.com/mattpoggi/pydnet (tensorflow)
- 3Net(3DV2018)
文章提出三目训练的方法(从当前的双目数据集便可以产生三目数据),改善了Unsupervised Monocular Depth Estimation with Left-Right Consistency[12]这篇文章提到的图像边界以及遮挡周围产生的伪影问题。
Loss
同文章[12]外,另外引进了:
实验结果
代码链接: https://github.com/mattpoggi/3net (tensorflow with only tested)
Train 3net from scratch
Code for training will be (eventually) uploaded. Meanwhile, you can train 3net by embedding it into https://github.com/mrharicot/monodepth
- Monodepth2(cvpr2019)
文章围绕单目运动(以单目视频序列作为训练集,连续三帧为一组)设计,但是对立体图像对训练也有不错的效果。
三点创新(前两点针对单目运动):
1.Per-Pixel Minimum Reprojection Loss
2.Auto-Masking Stationary Pixels
3.Multi-scale Estimation
文章使用了Unet的结构,是一个多尺度的方法,对上采样过程中的每一层特征图都计算一个loss。但是不同于其他文章和方法的直接计算,本文是先把每一层特征图先经过一个额外的上采样,恢复到原图大小,然后再用原图大小的特征图和原图直接计算loss。
文章解释这样解决了原本小分辨率特征图对于大范围的无纹理区域,预测产生的holes现象,以及因为小特征图损失信息而造成的texture-copy artifacts现象
实验结果
代码链接:www.github.com/nianticlabs/monodepth2 (pytorch)
附:
- Unsupervised Monocular Depth Estimation with Left-Right Consistency(cvpr2017)
网络通过推测视差将左图warp来匹配右图。可以只用左图同时预测两个视差,用左右一致性来增强它。通过采用双线性采样(Spatial Transform Networks)来生成图像,整个网络完全可微。
如下图所示:
Naïve:从左图采样,生成与目标右图对齐的视差图。
NO LR:从右图采样输出与左图对齐的视差图。这么做的话,被推断出来的视差图表现出“纹理拷贝”人工合成和深度图连续性上面误差。
Ours: 单个左图作为卷积神经网络的输入,同时推断出左图视差和右图视差,右图只在训练时候使用。用左右图一致性损失增强左右视差图的一致性可以让结果更准确。
Loss
由外观匹配loss,视差平滑loss以及左右一致性loss组成.
Appearance Matching Loss:
这里作者用了简化的SSIM,3*3块作为滤波器,而不是用高斯,设置转存失败重新上传取消。
Disparity Smoothness Loss:
Left-Right Disparity Consistency Loss:
最后的训练损失:
其中每一项都包换左右视图,但是只有左图会喂到卷积层中。s代表尺度,本文选取4个尺度,组成总体损失:
在测试的时候,网络在最好的尺度层预测左图视差图,它的分辨率和输入图像一样。
后处理
为了减少立体遮挡的影响(立体遮挡会在图像的左侧和遮挡物的左侧产生视差斜坡),作者做了个后处理。对于测试时候的输入图片I,计算它镜面翻转之后的图I’的视差图dl’, 通过把这个视差图翻转回去,得到一个视差图dl’’,接着将这个视差图对齐dl,而此时视差坡是在图像的右侧和遮挡物的右侧,结合两个视差图组成最后的结果(用dl’’的左边5%和dl的右边5%),中间部分是两个视差图之间的平均。这一步后处理提升了准确度并且减少了人工合成的感觉。但是代价是测试时间加倍了。
实验结果
代码链接:https://github.com/mrharicot/monodepth(tensorflow)