毕业论文
您现在的位置: 镜头 >> 镜头介绍 >> 正文 >> 正文

LK分享基于深度学习的单目深度估计综述

来源:镜头 时间:2024/12/4

前段时间有思考过结合3D信息来辅助多目标跟踪任务,不过效果没有达到我的预期。一方面是多目标跟踪相关数据集除了KITTI之外缺乏多任务标注信息,另一方面单目深度估计对于密集拥挤人群的效果很差。所以我觉得对于稀疏场景、车辆跟踪或者提供真实3D信息和相机信息的场景任务更有意义。下面的总结主要是我年初整理的文献,时效性可能还没跟上。很多图都是我从我之前整理的word里面复制出来的,所以有些模糊,想看的话可以自行搜索相关论文。

1、任务介绍

深度估计是计算机视觉领域的一个基础性问题,其可以应用在机器人导航、增强现实、三维重建、自动驾驶等领域。而目前大部分深度估计都是基于二维RGB图像到RBG-D图像的转化估计,主要包括从图像明暗、不同视角、光度、纹理信息等获取场景深度形状的ShapefromX方法,还有结合SFM(Structurefrommotion)和SLAM(SimultaneousLocalizationAndMapping)等方式预测相机位姿的算法。其中虽然有很多设备可以直接获取深度,但是设备造价昂贵。也可以利用双目进行深度估计,但是由于双目图像需要利用立体匹配进行像素点对应和视差计算,所以计算复杂度也较高,尤其是对于低纹理场景的匹配效果不好。而单目深度估计则相对成本更低,更容易普及。

那么对于单目深度估计,顾名思义,就是利用一张或者唯一视角下的RGB图像,估计图像中每个像素相对拍摄源的距离。对于人眼来说,由于存在大量的先验知识,所以可以从一只眼睛所获取的图像信息中提取出大量深度信息。那么单目深度估计不仅需要从二维图像中学会客观的深度信息,而且需要提取一些经验信息,后者则对于数据集中相机和场景会比较敏感。

通过阅读文献,可以将基于深度学习的单目深度估计算法大致分为以下几类:

·监督算法

顾名思义,直接以2维图像作为输入,以深度图为输出进行训练:

上面给的例子是KITTI数据集中的一组例子,不过深度图可能看的不是很明显,我重新将深度图涂色之后:

·无监督算法

由于深度数据的获取难度较高,所以目前有大量算法都是基于无监督模型的。即仅仅使用两个摄像机采集的双目图像数据进行联合训练。其中双目数据可彼此预测对方,从而获得相应的视差数据,再根据视差与深度的关系进行演化。亦或是将双目图像中各个像素点的对应问题看作是立体匹配问题进行训练。左视图-右视图示例:

视差,以我们人眼为例,两只眼睛看到的图像分别位于不同的坐标系。将手指从较远地方慢慢移动到眼前,会发现,手指在左眼的坐标系中越来越靠右,而在右眼坐标系中越来越靠左,这种差异性就是视差。与此同时,可以说明,视差与深度成反比。除此之外,由于摄像机参数也比较容易获取,所以也可以以相机位姿作为标签进行训练。

·Structurefrommotion/基于视频的深度估计

这一部分中既包含了单帧视频的单目深度估计,也包含了多帧间视频帧的像素的立体匹配,从而近似获取多视角图像,对相机位姿进行估计。

2、数据集介绍

2.1KITTI

KITTI是一个多任务属性的数据集,其中原始数据采集平台装配有2个灰度摄像机,2个彩色摄像机,一个Velodyne64线3D激光雷达,4个光学镜头,以及1个GPS导航系统。

其中包含有+G的原始数据,而有关户外场景的有G数据。对于这些数据,所标注的任务包含:立体图像匹配、光流、场景流、深度估计(单目或者基于3D点云/激光数据的深度估计)、视觉测距、目标检测(2D/3D物体检测、俯视图物体检测)、目标跟踪、道路/车道线检测、目标分割等。

2.2vKITTI

从名字可以看出这个数据集跟KITTI有关联,其对应KITTI的原始数据和各类任务,创建了全新的虚拟图像,当然,并不是所有原始数据都能对应得上。这里的“虚拟”指的是:左右摄像头15°和30°偏转画面、清晨、晴天、多云、雾天、下雨等基于原图的渲染图像。共计14G原始RGB图像,对应的目标检测、目标跟踪、目标分割标注都存在。这一数据集的意义在于可以缓解深度信息对于光线的敏感问题。

2.3Cityscapes

Cityscapes的数据取自德国的50多个城市的户外场景,其中数据包含有左右视角图像、视差深度图、相机校准、车辆测距、行人标定、目标分割等,同时也包含有类似于vKITTI的虚拟渲染场景图像。其中简单的左视角图像、相机标定、目标分割等数据需要利用学生账号注册获取,其他数据需要联系管理员获取。

2.4NYUDepthV2

NYUDepthV2数据集中包含有G室内场景数据,同时包含有目标分割标注、深度标注。

2.5ScanNet

ScanNet中包含有约个视频序列的RGB-D数据,主要用于三维重建。

2.6Make3D

Make3d数据集包含约张室外场景图片,50张室内场景,张合成物体。其中包含有激光-2D图像,立体图像、深度数据等。

3、数据处理

3.1数据组成

以KITTI数据集为例,它没有给出深度相关的标注信息。其数据组成包括多个场景下的原始图像数据(gray、color),实例分割、目标跟踪、2d/3d目标检测等任务信息。为了方便我后续使用,我将数据结构解析如下,由于知乎不支持表格,所以我就直接截图了:

3.2数据处理

有关相机/像素/世界坐标系的知识我就不介绍了,对于相对位姿,如果将每个视频场景的第一帧的位姿视为初始位姿,那么每一帧的相对位姿计算如下:

根据世界坐标系的转换:

最后我们只需要保留满足图像边界约束的点的深度信息,如果映射得到的点坐标相同,则只保留深度更小的。

那么对于网络训练过程中的数据增强,则可以进行多种变换,下面列出几种基础的:

·随机水平翻转,所以需要改变相机内参的水平平移量cx=w-cx;·随机尺度变换并剪切至固定大小:

3.3评价指标

KITTI数据集在考虑深度估计信息误差时,所以判定的时候只取0.H~0.H,0.W~0.W部分图像区域,当然也经常会只取50m或者80m范围内的深度信息。为了让预测深度和真实深度的数量级范围一致,一般会用二者深度的中位数作为尺度,对预测深度信息进行尺度放缩。

4相关工作

4.1基于单目视觉的深度估计

传统编解码结构深度估计任务是从二维图像到二维深度图像的预测,因此整个过程是一个自编码过程,包含编码和解码,通俗点就是下采样和上采样。这类结构主要有FCN框架和U-net框架,二者的下采样过程都是利用了卷积和池化,而上采样利用了逆卷积/转置卷积(Deconvolution)和upsample。

深度回归网络早期的单目深度估计网络框架基本上都是直接利用了上面所提到的两个基础框架进行了预测,为了让这类框架更好的应用于深度估计问题,一般都从以下几个方面着手:更好的backbone模型、多尺度、更深的网络。以3DV中《DeeperDepthPredictionwithFullyConvolutionalResidualNetworks》一文为例,其提出了FCRN网络框架:

其网络框架主体是基于Resnet-50,在上采样过程中采用了独特的方式,将逆卷积用up-pooing+conv的方式替代了,将Resnet中的project模块进行了一定的改进。其中上采样过程中将特征图利用0元素进行填充,然后利用一类特殊的卷积核进行特征提取,这一过程可以先卷积,然后错位相连得到,原理如下:

其中可以发现卷积核并非是正方形,而是矩形,不过过程其实是一样的。而projection部分,即resnet中原图先经过1×1卷积再与特征图相连的部分,变为:

具体细节我就不在多讲了,其效果如下:

其代码链接为:

转载请注明:http://www.0431gb208.com/sjszlfa/8109.html

  • 上一篇文章:
  • 下一篇文章: 没有了