目录
- 入门篇:图像深度估计相关总结
- 应用篇:Learning to be a Depth Camera
- 尺度篇:Make3D
- 迁移篇:Depth Extraction from Video Using Non-parametric Sampling
- 深度篇:David Eigen
- 无监督篇:Left-Right Consistency & Ego Motion
- 相对深度篇:Depth in the Wild & Size to Depth
- SLAM辅助篇:MegaDepth
- 方法比较篇:Evaluation of CNN-based Methods
单目图像深度估计 - 方法比较篇:Evaluation of CNN-based Methods
今天的论文阅读笔记是关于以下这篇论文:
[1] Evaluation of CNN-based Single-Image Depth Estimation Methods, CVPR, 2018
这篇文章提出了一个新的数据集,分析了已有CNN单目图像深度估计算法存在的问题,并且实验对比了已有的经典算法,可以算是一篇小综述。
写完这篇阅读笔记,深度估计这一系列就告一段落,接下来希望抛开理论多做一些实验。
单目图像深度估计的研究热度是逐渐升高的,越是近期相关的Paper越多,就在我写这篇Blog的同时发现了一篇自监督的论文号称达到了目前最好的正确率…但因为这个问题本身就是个ill-posed的问题,所以目前的方法各有优劣,不存在十全十美的方法,还是有改进空间的。
2018 CVPR的这篇文章给单目深度估计一个简称叫SIDE(Single-Image Depth Estimation),作者指出SIDE相关的研究本身具有重要意义,体现在自动驾驶、机器人导航、增强现实等大火方向的应用。但是目前的方法仍然存在很多问题,比如在进行正确率计算的时候只关注全局的表现忽略了对边界等细节的要求,因此从视觉上看预测结果与输入图片相比会更模糊,缺失很多物体边界、平滑表面、对透明或纹理比较难预测的物体的预测等等。针对这些问题,作者提出了几个新的error形式,并且提出一个新的数据集,这个数据集给出了计算这些细节error需要的全部信息,最后对比了不同的方法和数据集。
1. Related Work
单目图像深度估计的发展脉络大约是:在计算能力和数据集都不足的时候,大部分方法是基于人为的特征计算。比如基于三角测量的双目方法MVS(multi-view stereo),SfM(structure from motion),基于通道梯度的单目方法SfS(Shape of Shading)。以上三种属于passive方法,也有一些active的方法利用根据对焦和失焦或偏振(polarization cues)等线索。其他的方法有利用光场相机(light field camera)的方法等。随着RGBD数据集的出现,数据驱动的基于学习的方法超过了传统方法,尤其是利用CNN的方法。
第一次听说光场相机,发现这是个很有意思的技术,网络上的解释如下:
光场相机不同于一般的单一镜头、感光元件接收单一光束的原理相机,它是透过庞大的显微镜头阵列(Microlens array)记录整个光场的数值,再透过软件运算还原影像,并可随意调整对焦点再次运算出新的影像。
总之,基于大规模数据集的深度方法是目前研究的主流。
目前比较成熟且常用的RGBD数据集有Make3D,Kitti,NYU depth, CityScape等。
作者总结了目前常用的RGBD数据集的缺点:
- Make3D和Kitti的场景受限(室外),且深度图的分辨率很低;
- NYU depth v2只包含室内场景,但Kinect的有效距离范围很小,遮挡、边界等不够清晰。
2. Error Metrics
现有的Error主要有以下几个:
然而这些都只关注了全局的一致性,在loss中并不能体现平面(如桌面和墙壁)的平整性和三维方向,以及边界和遮挡判断是否正确。因此作者提出了几个新的error:
1.对不同深度区间的预测正确率进行统计
2.平整性
planarity error计算了(mask得到的)某一特定平面预测得到的三维points与实际的偏差;
orientation error计算了预测平面与实际平面的角度偏差,角度通过反余弦函数得到,arccos函数可以根据函数值求出弧度值。
3. 物体边界
在深度图中,具有前后关系的两个物体相互遮挡形成的边界可表示为梯度的迅速下降,边缘的预测是否准确决定了预测结果的细节在视觉上的细节优化。因此作者提出一种边界相关的error,首先调用structured edges提取预测图中的边界。
depth boundary error计算了预测的边界与实际边界之间的偏差;
completeness error计算了边界的完整性,即是否预测除了完整的边界。
4. 偏差纠正(偏大还是偏小)
传统的loss关注整幅图像的深度连续性和预测误差,但没有全局计算到底预测值是偏大还是偏小。
directed depth errors(DDEs)取一个标值(3m),根据深度关系进行mask后得到计算结果。
下图是平面和边界loss的示意图。
3. Dataset
文章提出了一个新的数据集IBims-1,每幅图片包含RGBD和平面mask以及边界信息。但场景也比较单一,目前数据量还不大。
4. Evaluation
这部分是各种CNN方法的对比,作者选取了几个CNN模型,有经典的也有近期的,这些模型都用NYU v2进行的训练。
-
不同深度区间的预测正确率
上图为[3]的方法在NYU和IBims-1两个数据集的预测误差,可以看出在深度大的地方预测误差会更大。 -
平面结构的预测
作者选择桌面、墙面和地面作为代表平面进行不同方法的比较,在IBims-1数据集上各方法的表现如下。
可以看出已有方法对水平的平面预测结果较好,但对竖直平面预测结果较差。
从表格可以看出[3]的方法得到了目前为止最小的error,但在边界和平面的预测结果不十分理想。
-
距离判断
实验表明,就算是达到了80%以上正确率的算法,都倾向于给出更小的预测depth,也就是说把物体预测的更近。 -
数据增强(Data Augmentation)
对比了水平翻转、竖直翻转、通道交换(swapping of image channels),色彩平移(shifting the hue by some offser)等的实验结果如下:
从表格上可以看出:
- 水平翻转对结果影响不大,竖直翻转error增大了60%;
- 小范围加大曝光对结果产生很大影响,但降低曝光并未产生相同程度影响;
- 直方图拉伸和颜色改变对预测结果影响不大。
同时作者提出竖直翻转对结果影响很大的原因可能是因为NYU数据集中的图片里,很大一部分pixels都是地板并且在图片的下半部分。
- 有纹理的平面
这个实验很有趣,作者将纹理和图像打印出来贴在墙上,让CNN对其进行深度预测,结果如下图:
可以看出,梯度对深度的预测起到了很重要的影响,所有网络都没能预测出正确的深度。其实这也反映了深度估计的ill,就算是人类站在一张照片前,如果没有充分理解这是一张照片的话,也有可能错误估计其中物体的距离吧。
5. 总结与思考
写完这篇文章,深度估计相关的阅读笔记就告一段落,小小的松了一口气。
从一点也不了解,到现在稍稍摸到了一点门道,越学习越发现自己知道的少。
今天看到新闻说Face book的技术路线是机器学习优先的,在不是必要的情况下不会选择更复杂的深度学习算法,这好像解决了我心里一直以来的一个疑问:在真正应用的时候是选取快速但结果比较粗糙的经典机器学习方法还是选正确率更高但复杂的多的深度方法。
据我现在的了解,深度学习还远远没到大众都可以使用的程度,经费充足的项目和大学可以发更多的Paper,因为他们有巨大的计算等资源。在不考虑硬件发展的情况下,这些基于庞大运算量的正确率高达98%的算法真的是商业应用的出路吗?可能能够拉来投资,但是用起来有多闹心只有自己知道吧。
扯多了,总之我还是觉得简单才是真正的优雅,希望以后自己不会跑偏。
[2]Dollar et al, Fast edge detection using structured forests, IEEE trans, 2015
[3]Li et al, A two-streamed network for estimation fine-scaled depth maps from single rgb images, CVPR,2017