参考论文:Mertan A, Duff D J, Unal G. Single image depth estimation: An overview[J]. Digital Signal Processing, 2022: 103441.
本人基于上面的参考论文,试着总结单目深度估计的基础知识与发展路径。如有错漏之处,还请大家在评论区多多指教。点击文中的超链接即可转到引用论文。
1.单目深度估计是什么?
单目深度估计(SIDE, short for Single Image Depth Estimation)指的是通过给定的一张RGB图片,估计出这个图片中每个像素的深度值。下图中左边的是原始图片,右边的是深度图。蓝色表示像素离我们较近,红色表示像素离我们较远。
![](https://i-blog.csdnimg.cn/blog_migrate/9aae128531698f369c87fbfe751e45cc.png)
这对人类似乎是很简单的任务。人类在对现实物体的深度估计时,会通过物体的遮挡、近大远小的透视原理和纹理渐变等线索来推断,同时会使用已知的知识使得物体与环境相”匹配“。这些方法也对计算机解决深度估计问题提供了启发。
2.早期工作
以下列举了早期的一些tricks:
结合语义分割。如:一个图片中有两个蓝色块,标注了一个是天空一个是水,通过先验知识来帮助深度的估计。
室内外分离。由于室内室外的结构存在巨大差异,因此考虑将室内室外分开预测深度。
在对数空间中估计深度。估计近处物体的深度和估计远处的深度有较大差别。对于十几米远的物体,有几厘米的误差问题不大。但是对于只有十几厘米的物体,这时候有几厘米的误差就有很大的影响。因此我们引入对数空间,在对数的尺度下,距离越小数值变化越灵敏,距离越大则越迟钝。(参考对数函数)。
使用相对深度。不同于绝对深度(如:1m,3m...),相对深度是图片像素深度的排序。
使用合成数据。由于带深度标注的真实数据获取难度大,我们可以使用计算机自动合成的数据来进行训练。
3.相关数据集介绍
随着单目深度估计进入深度学习阶段,模型的训练需要大量的数据。以下列举了常用数据集:
NYU:室内数据集,包含1449张已标注的图片。
KITTI:道路交通数据集,包含 93,000 张已标注的图片。
Sun RGB-D:室内数据集,包含10335张已标注的图片。
SceneNet RGB-D:室内数据集,包含5M张已标注的图片。
4.基于单任务(Single-task)的深度估计
![](https://i-blog.csdnimg.cn/blog_migrate/22581c435edc3c6338e2bbaceacd5a3b.png)
上图是单目深度估计方法的树状图。在深度学习领域中,主要分为有监督与无监督两大类。我们今天所介绍的就是有监督学习中的单任务深度估计方法。那什么是单任务呢?就是围绕一个特定任务的学习,例如人脸识别、语音识别等等,如果要换一个任务,那么就需要换一个网络。下面列举了一些主要工作。
Eigen et al.提出使用两个网络来估计深度。一个是粗略(Coarse)网络,一个是精细(Fine)网络。Coarse网络的是对图片整体特征进行感知,Fine网络负责描绘细节特征。网络架构图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/6a2fe79a173c9b7e21dd6c7d6d348048.png)
下图从左往右依次为,原始图片、Coarse网络输出、Fine网络输出、真实深度图。
![](https://i-blog.csdnimg.cn/blog_migrate/ad61a15700cd06881f1075e6098c0b54.png)
另一个创新点是提出了新的损失函数:
![](https://i-blog.csdnimg.cn/blog_migrate/10002f667e7bd3542e8f67af3948e5e9.png)
他们后来又基于此进行了改进,加入了多尺度网络,使用一个网络同时估计深度、估计表面法线和语义分割。同时改进了损失函数为:
![](https://i-blog.csdnimg.cn/blog_migrate/37c2c9b2e9e97a1aa0ac7559aa74b1bc.png)
Laina et al.提出基于ResNet-50的全卷积残差网络,减少了网络参数,同时上卷积块(up-convolutional blocks)增加了输出的分辨率。网络结构如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/7fa7dcd561f0c9ce4b98740168379c54.png)
另一个创新点也是提出了新的损失函数berHu,c为设定的阈值,小于c时为类L1损失函数,大于c 时为类L2损失函数。
![](https://i-blog.csdnimg.cn/blog_migrate/0a52669c6b4c682eaa04eb2d9994601e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2f27000938c6b400c636ecdc0e00772a.png)
Cao et al.提出将SIDE看为分类问题。前面的方法基本都是把SIDE视为回归问题,试图得到一个接近真实深度的数值。人类本身也很难估计准确的深度,但是却可以轻松估计深度的范围。因此,作者将连续的深度离散化,对深度范围进行分类和排序。
Fu et al.引入了间距增加的离散化(SID)将SIDE转化为有序回归问题(ordinal regression problem)。这解决了池化操作降低图片分辨率、反卷积和skip connection增加计算成本的问题。网络结构如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/c19000d7a7cbf2dd3f6c82c70ceacaae.png)
损失函数为:
![](https://i-blog.csdnimg.cn/blog_migrate/071e6e9f204c2c7b96cbfe3f568b8a23.png)
其中N为像素数,K为划分的间隔数,[.]为指示函数,di是第i个像素的真实深度,yi为第i个像素的。
Bhat et al.提出了一个基于transformer的架构,它将图片的深度范围划分为许多bin,其中bin的宽度随每个图像而变化。对于每个输入图像,模型产生可用于确定每个bin深度范围的向量和显示每个bin的可能性的每像素概率图,最终输出的深度图通过计算概率加权计算的bin中心线性组合。网络结构如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a399cb630813170456248166ae8802d6.png)
5.小结
![](https://i-blog.csdnimg.cn/blog_migrate/7b69cbfb1d3dc37b705aee1b5f04db01.png)
上表是对有监督的单任务深度估计的小结。可以看出,前面的文章主要都是基于回归(regression)的思路,也有人提出了以相对深度为基础的分类(classification)思路。其中大多在网络架构和损失函数上提出创新。在下一篇文章,我会对基于多任务的单目深度估计进行总结。