Contribution
- 对11种使用uncertainty方法的全面评估
- 深度挖掘uncertainty对depth estimation起到的作用
- 提出一个新颖的self-teaching方法去model uncertainty
文中使用的uncertainty estimation分为两个类别:empirical uncertainty estimation和predictive uncertainty estimation,empirical的做法基本都是得到N个model得到N个输出,然后计算均值和方差;而predictive呢则是直接预测出uncertainty,下面分别介绍。
Empirical uncertainty estimation
Dropout Sampling
大概就是训练的时候层与层之间的连接以p的概率随机drop防止过拟合,测试的时候也去drop,一个forward跑N次就可以得到N个不同的model了,然后就可以计算model输出值的均值和方差了:
Bootstrapped Ensemble
这个方法就是从数据集种sample出N个subset,用同样的网络结构在不同的subset上分别训练,得到N个model,然后计算均值和方差。
Snapshot Ensemble
snapshot的做法是在一次training中通过使用cyclic learning rate schedules去得到C个model,然后再从C个model中选N个,这样做是否靠谱就不得而知了。
Predictive estimation
Learned Reprojection
很朴素的想法,让网络尽可能的去预测
Log-Likelihood Maximization
另一种预测uncertainty的方法是采用极大对数似然的思路,可以采用拉普拉斯分布来得到似然,这个似然函数在
对应得到的负对数似然loss就是:
考虑到不能直接得到重建深度,只能用像素值来代替:
当然除了拉普拉斯分布,还可以选用其他的分布比如高斯分布。
作者认为这种方式因为使用的是像素之间的重建误差,而在单目深度预测里面这个重建误差包含了depth和pose两项,所以网络估计的uncertainty也会包含这两项,最终得到的uncertainty会多包含pose uncertainty的信息,可能是个sub-optimal解。
Self-Teaching
所以为了直接对depth的uncertainty进行建模,作者采用了teacher-student framework,设计了两个结构相同的网络
估计训练流程是先训练teacher network,用Photometric loss去更新参数,然后student network使用
效果
感觉效果提升微乎其微,不过work确实make sense。
总结
- 提出了使用uncertainty的新方法, self-teaching,思路是make sense的,然而效果提升不大。
- 从文中给出的example来看网络输出的uncertainty比较大的地方主要是边缘或者说不同纹理之间有尖锐变化的区域,这些地方很容易不满足光度一致性的条件,而uncertainty的方法会降低这些区域的loss,但这也会导致网络一直无法学习到边缘这种很难匹配的地方,如果能有一种方法可以提高边缘点的匹配准确度应该会有比较大的效果提升。
- 有一种可能性是尽可能利用空间信息,现有的网络架构因为降采样等等必然会丢失边缘的细节信息,导致很难匹配,网络也很难在这些点学到东西,packnet-sfm可能是个很好的证明。