基于虚拟仿真技术的深度仿真数据采集系统

2022-08-22 08:55宇,周
中国体视学与图像分析 2022年2期
关键词:单目物体深度

解 宇,周 越

(上海交通大学 自动化系,上海 200240)

0 引言

计算机视觉与图形仿真技术的不断进步,使得无论通过真实相机还是仿真场景中的相机所采集的图像,都可以用于训练各种视觉感知任务的网络模型。其中,在进行三维立体重建、行人或障碍物深度检测、视觉导航等复杂感知任务时,如何获取具有场景深度信息精准标注的数据,成为最需要解决的问题。

当前,公开真实深度数据集普遍存在两个主要问题:一是场景种类缺乏。以KITTI数据集[1]和NYU Depth V2数据集[2]为例,真实数据的采集主体以人类和汽车为主,采集方式也是手持摄像机或车载图像采集设备,场景分别以道路驾驶场景和室内场景为主。由于采集时的客观条件限制,因此真实数据集很难对许多特殊情况进行针对性采集,比如雨雪天气、夜晚场景等[3];二是深度信息标注不准确。由于真实数据集人工标注为主,只能对有限物体进行精细标注,很难达到深度图与彩色图像的像素级别信息对齐。

如今随着虚拟现实技术的发展,可以使用如Unity3D、Unreal Engine等虚拟仿真引擎,以可控和定向的方式在搭建场景的同时生成准确的深度标注数据,从而避免在现实世界中采集和注释数据时的困难与成本问题。因而虚拟仿真数据集拥有以下几个明显优势:①引擎的渲染所需要的计算时间远小于人工标注所花费的时间;②整个渲染与采集流程可以提取到关于场景中物体的所有完美信息;③渲染引擎还可以生成罕见的示例,从而控制训练数据集的场景分布。此外,在整个仿真系统中并不依赖于任何私人数据,也不涉及侵犯他人隐私。

使用虚拟仿真引擎构建场景生成深度数据的另一个优势是资源的可重复利用性。在为所有的视觉资源创建好环境后,可以通过动态改变随机化参数以及相机位置,将变化引入采集场景。从而使得生成的数据集和计算机视觉模型可以进行更快的迭代。综上所述,构建深度仿真数据集成为了获取深度数据的新颖且优越的解决方案。

本文除了在数据集层面上对深度真实数据集和现有深度仿真数据集进行补充与改进以外,还希望通过特定数据的补充训练,有针对性地对目前单目深度网络的训练结果进行改进。

单目深度估计是指从单张输入图像中自动推断出具有稠密深度信息的预测图[4]。在提供足够的图像信息和相对姿态信息的前提下,即使给定场景可能存在许多不同的深度构建方式,利用单目视觉信息对场景进行单目深度估计也是可以解决的问题。而这一特殊性也导致单目深度估计网络对训练数据的需求十分显著,尤其是基于监督学习算法的单目视觉神经网络。在缺少训练数据的情况下使用监督学习算法对单目估计深度模型进行训练显然具有挑战性。

本文首先使用公开真实数据对一些目前常用的单目深度估计网络进行训练,使用包含特殊情况的图像数据对模型训练结果进行测试,可视化结果显示,模型在对包含特定情况的图像进行深度测试时,存在非常明显的误差。分析得出这是由于训练数据中缺少包含特殊情况的场景数据,因此,最终得到的模型训练结果缺少对于这些特殊情况中包含的图像特征的有效学习[5]。如图1所示,这些特殊情况大部分出现在雨雾天气、夜晚环境和室内环境中。

为了解决以上问题,本文设计并实现一个完整的基于Unity3D的虚拟仿真数据采集系统,提出了一套完整的仿真数据集制作管线,系统架构图如图2所示。本文首先搭建了丰富的仿真场景,涵盖了真实世界中有深度数据采集需求的场景;基于非线性深度缓冲设计图形着色器,实现对场景中物体深度信息更加精准的获取;提出一种复杂运动模式的全自动数据采集方法,以实现大体量高质量仿真数据采集。

最后实验部分对本文仿真数据进行两个方面的验证。

首先,对最终采集的仿真数据的优越性加以验证。使用本文仿真数据训练所得的单目深度估计网络模型,以及使用真实数据和其他仿真数据训练网络模型的结果,在相同的公开数据集上进行测试,结果表明,本文数据训练所得的模型在各项常用深度估计指标上优于其他训练模型。

此外,本文仿真数据涵盖更丰富的特殊场景数据,因此,本文使用特殊场景数据对单目深度估计网络进行补充训练。实验结果表明,特殊场景仿真数据的补充可以有效增强模型训练结果在特殊场景下的深度预测表现。

1 真实感增强数据生成

1.1 仿真场景搭建

本文使用Unity3D 2019.4 LTS平台对仿真场景进行搭建。选择计算机图形引擎Unity3D的优势在于,使用公开图形引擎使本方法更易迁移使用,并且Unity3D拥有丰富的图形资源和强大的功能插件储备,作为目前最为常用的游戏引擎之一,可以近乎实现对真实场景的全部还原。因此,本文在场景构建时,考虑到了所有现实生活中所需用到的视觉任务应用场景,而不仅仅是大多公开数据集因客观条件所限而选择的驾驶场景或室内场景等。完整的场景构建主要分为场景物体搭建、动态行人车辆运动规划以及昼夜天气系统设计。

首先,本文以购买或建模的方式广泛收集人物、建筑物以及生活杂物等三维模型,在进行特定更改和组合后成为Unity中的预设体(Prefab),比如,车辆和人物以及灯光组成夜晚中行驶的车、树木和围栏以及杂物组合成为街边的景观树等,这样可以大幅加速场景搭建的速度。在拥有足够丰富的基础模型以后,本文编写脚本实现选取四个点后可以自动闭合形成拥有道路、路边杂物、静态人物车辆和位置不变的动态人物以及建筑物的城市街区。

建立好静态街区模型以后,本文在部分路口的斑马线和人行道上手动放置以固定巡逻路线行走的行人,以及在主要街道上以固定路线巡航的车辆。

最后在昼夜变化上,本文编写脚本使得场景主光源(Directional Light)可以随初始设定好的场景内相对时间动态变化。白天时模拟日光,光照强度较强,为暖黄色;夜晚时模拟月光,光照强度较低,为冷蓝色。配合时间与光照的变化,本文设计使用动态天空盒(Dynamic Skybox),随全天时间的变化,太阳和月亮会在天空交替起落,云层也会动态变化,并且场景中的所有建筑物灯光、路灯以及车灯等灯光会在夜晚亮起,白天熄灭。天气效果则是使用Unity自带的粒子系统(Particle System),可以调节雨滴或雪花的大小、位置、浓密度等等,但是需要配合天气为客观场景增加细节,如雨伞、积水、人物变化等等,因此,特殊天气并不能自动生成,需要手动建立与调整。

本文通过上述方法实现快速建立城区场景,如图3所示。图3(a)为根据选取的四个点快速建立街区的雏形,图3(b)和图3(c)为更换其他的模型组合以及附加昼夜变化以后实现的效果。

图3 利用模型资源快速建立街区场景

除了搭建常见的城区场景外,还有自然场景和室内场景。自然场景方面,本文使用Unity引擎公开的自然环境插件Gaia进行地形的构造,并在此基础上丰富细节;室内场景则是在建筑物内进行室内物体模型的简单摆放,因为室内场景往往比较小,且种类有限,如住宅、办公区域、商场,因此,只需建好基础环境,并对环境内物体进行随机化设置即可。

由于虚拟仿真数据集中资源的可重复利用性,以及自动化脚本的辅助,在收集足够多的模型资源以后,能够以省时、省力的方式快速建立不同的场景,每次只需更新建筑物、人物、车辆以及场景细节等模型即可。单个场景从收集模型资源到场景构建到最终采集,平均只需不到一天的时间,可以采集上万张深度数据,并且通过更改资源和随机化参数,理论上可以采集更多;而人工标注由于深度数据的特殊性,需要在深度检测相机获取的未标注图像上利用算法进一步计算丢失部分的深度数据,并进行手工标注,效率非常低。以NYU Depth V2数据集为例,其精准标注数据仅占总数据量的1/40,并且补充新的数据十分困难。

本文最终选取的20个仿真场景作为仿真数据集制作素材,图4展示了这些场景中的截图。这些场景不仅覆盖了生活中较为常见的场景,如车辆较多、人员较少的驾驶场景,人群密集的街区场景,平静的海边场景等等;更包含了真实数据集中难以覆盖的复杂情况场景,如雨雪天气的自然场景,空间狭小的室内场景,灯光复杂的霓虹夜景等等。并且最终场景拥有非常丰富的细节,采集相机视野内至少拥有500万个三角面(Triangles)和400万个顶点(Vertex),最多时可高达2000万个三角面和1400个顶点。

图4 广泛覆盖真实情况的20个仿真场景

1.2 基于非线性深度缓冲的深度信息获取

本仿真数据采集系统提供场景内物体的多模态信息标注,包括分割信息、类别信息和深度信息等。由于本系统主要用于采集深度估计任务所需要的视差信息,因此,本文聚焦于综合效果更好的深度图生成方式,提出一种更为精准的逐像素点提取物体到视点相对深度信息算法,利用非线性深度缓冲重建像素点世界空间深度信息。

计算机图形引擎中所有的图形渲染工作均由渲染管线(Render Pipeline)所决定,而在Unity引擎中,图形的最终渲染效果由其自带的图形着色器(Shader)所定义,因此,本系统中场景物体的深度信息获取由定义物体图形着色器所实现。

对于获取采集相机采集图像中的像素点视差信息而言,本文从图形渲染管线中的最后用于计算深度信息的深度测试部分进行切入。深度测试的计算过程需要用到深度缓冲信息,利用深度缓冲信息来计算场景中各物体的深度[6]。深度缓冲可以防止非相关物体的渲染面遮挡到感兴趣对象的渲染面前,即只渲染采集相机中最靠前的像素点深度值,可以节省渲染其他多余三角面,甚至感兴趣物体的背面的开销,是较为直接的深度计算方法。采集相机由远平面(Far Plane)与近平面(Near Plane)来决定相机内采集对象的视差范围,与视点距离大于远平面或小于近平面的片元不进行渲染。因此,深度测试常规使用的线性深度缓冲是将片元对应像素点的z坐标,在远近平面范围内线性映射到[0,1],也是最为简单、直接的计算方法。然而,采取线性映射深度缓冲的深度图像对网络模型进行训练实验发现,以线性方式创建深度缓冲区所得到的深度图像中,物体的视差信息精度在近平面和远平面没有差别,导致深度尺度不明显,最后网络训练模型深度估计结果较差。

因此,本文选择使用一种非线性映射的方法建立深度测试方程,以远平面物体的低精度深度信息为代价,换取近平面附近感兴趣区域精度更高的视觉差异信息。此外,本文对远平面以一定阈值进行截断,以最大程度保留截断范围内的深度精度信息。本文采用的非线性深度计算方程如公式(1)

(1)

其中,本文对距离为65.535 m的远平面进行了截断,舍弃更远的物体,因此,深度测试计算公式中所有near表示近平面裁剪距离取0.3 m,far表示远平面裁剪距离取65.535 m,z表示像素点z坐标值。选择距离为65.535 m的远平面进行截断,是因为本系统希望最终采集的深度图像编码为16位PNG格式的灰度图像,其像素值区间为[0,216],即[0, 65 535],因此,深度值区间取[0, 65.535] m,使得深度图像中的像素强度1对应到相机视点的距离为1 mm。图5为深度值非线性转换函数图像,x轴为该点z坐标值,y轴为映射后的深度值Fdepth。

图5 深度值非线性转换函数图

建立在非线性深度缓冲计算函数的基础上,本文能够利用从摄像机指向屏幕像素点的向量重建该像素点的世界空间位置,再计算该点到观察视点的距离作为深度值。

此像素点深度值计算方法通过图形着色器进行实现。所获取的深度图像最终以PFM和PNG两种图像编码方式,与对应的RGB真值图像一同保存。

2 复杂运动模式全自动数据采集

2.1 复杂运动模式自生成

数据采集方面,在对真实数据集中连续帧序列进行分析时,发现以KITTI数据集[1]和RobotCar数据集[7]为代表的常用公开真实数据集,以及SYNTHIA等[8]仿真数据集中,无论采集主体是车辆还是机器人,其运动模式均较为简单,具体表现为采集路线单一,并且采集相机在工作时只拥有细微的旋转、倾斜等角度调整。过于规律的运动模式导致前后帧图像相似度较大,数据集整体重复性较高,导致数据集实际有效图像数量和质量下降。因此,使用复杂运动模式进行数据采集是十分必要的[9]。

在场景中以复杂运动模式进行单次采集虽然简单,只需设定好采集主体在场景中的移动线路与相机位姿变动方式和频率即可。然而对于数量较多的场景和场景中复杂的物体空间布局,每次采集都需要手动设置采集线路。花费十分庞大且不切实际的工作量。因此,考虑到对于仿真数据庞大的、有质量保障的采集需求,本文利用场景内物体空间信息,提出一种基于三维搜索算法的采集路径自动生成方法。在给定场景空间信息和采集起点的情况下,实现采集相机在任意场景内以复杂运动模式进行全自动协程数据采集。

本系统在进行场景搭建时,场景内的物体均基于由物体模型片元构成的栅格渲染器(Mesh Renderer)信息建立栅格碰撞体(Mesh Collider),因此,可以获取所有物体的三维空间位置信息,如图6所示。本文利用空间栅格信息在局部空间中进行建模,得到一个三维坐标地图,将空间中物体栅格碰撞体所占据的坐标点视为地图中的障碍物,确认采集主体在场景中的三维可活动范围。每单次采集时,在给定采集起点的情况下,本系统在采集主体可活动空间内随机生成一个采集终点,使用三维搜索算法,得到从采集起点到采集终点的规划好的避障路线。

图6 利用场景中物体的栅格信息构建三维地图

对于尺寸较大的仿真地图来说,空间内的物体信息过多可能使三维空间建模过于缓慢,甚至建模错误。因此,在实际路径规划时,会对场景按固定大小进行分区,在初始分区进行路线生成以后,会根据具体采集需求对其他分区再进行采集路线生成。

在采集主体的位移线路规划完成后,系统还需设置一个扰动系数,使采集相机在特定范围内以固定频率发生角度偏转,包括相机法向量平面的镜头转动(Rotate)以及视平面上的镜头倾斜(Lean),并对所有采集相机进行同步处理。其中,随机扰动的系数设定处于合理范围内,最终效果如图7所示。

图7 简单模式采集与复杂模式采集图像对比

2.2 像素级精准数据协程采集

在以复杂运动模式连续自动采集时,采集相机同时对彩色图像及其对应深度图像进行数据采集,可能会由于渲染时间较长,或数据处理量大,编码时间较长,而出现数据存储延时的问题,导致同一帧彩色图像和对应深度信息标注图像中各像素无法对齐,这也是仿真数据生成最常见的问题。对此,本系统自定义迭代器接口创建多个协程(Coroutine)分别对不同数据的编码和图像存储进行处理,每一次存储当前帧的图像都需要等待上一帧的图像存储完成。这种方法可能导致存储频率不稳定,但是可以有效解决同一帧对应的多个数据图像实现像素对齐的问题。本系统已实现全自动采集,因此,对数据采集频率稳定性不过高要求,只要数据信息精确,可以凭较慢的速度进行采集。

至此,系统理论上可为每个构建好的场景提供无数种复杂运动模式的采集线路,从而对场景内的数据信息进行最大程度的提取。在实际进行仿真数据采集时,也需要对数据进行最后的简单筛查,以避免出现质量太差的连续视频序列。但总体来说,复杂运动模式的自主路径规划明显提升了采集效率,实现了对任意场景的全自动同步深度数据采集。

3 结果展示

3.1 数据集综合质量评估

为进行后续仿真数据质量验证实验内,本文基于Unity3D 2019.4 LTS平台,在20个场景以每秒20帧的速率进行长视频序列采集,在驾驶场景、人员密集场景、室内场景和夜晚场景等场景中,以简单运动模式和复杂运动模式分别采集分辨率为640×480的双目立体图像对,覆盖本文所考虑到的现实中可能存在的真实情况,以进行最后的实验探究。最终每个场景、每种运动模式分别采集到序列数大于5个,每个视频序列图像数量多于1000张的长视频序列,经过筛选最终保留总计20万对分辨率为640×480的双目立体图像对,一个双目立体图像对包括固定基线的左右两个采集相机的彩色图像及其对应的深度真值图,并同时记录采集时相机的位置姿态信息和内参矩阵信息。

本文采集时双目基线长度与相机内参矩阵均与KITTI数据集对应,为比较数据集间数据训练质量,尽量保证训练参数相近,而且KITTI数据集的相机内外参数更贴近现实使用需求。因此,双目灰度采集相机基线平均长度设置为0.54 cm(会在特殊情况下存在波动),内参矩阵设为

(2)

最终所得深度仿真数据集与现有公开深度数据集进行对比,如表1所示。本系统在深度数据方面,不仅支持单目与双目立体数据的同时采集,还可以实现多种特殊场景内的数据采集。其中,以密集动态人物和复杂光照为主,其他无论是真实数据集还是仿真数据集,均难以提供动态人群的密集情况。

表1 现有公开数据集和公共平台上的数据采集系统与本文采集系统对比

由于本文希望验证最终所得到的深度仿真数据集的质量与使用价值,因此,实验部分选择使用在单目视觉领域较为常用的单目深度估计网络MonoDepth2[13]。

训练时,本文参考Eigen等[14]和Zhou等[15]提出的以分割(Split)的方式将仿真数据集划分成了多个子集,以进行不同的训练实验。MonoDepth2的网络模型使用深度学习工具PyTorch实现的,使用Adam优化方式[15],默认训练20个迭代周期(Epochs),批处理大小(Batch Size)为12,输入和输出分辨率均为640×192。MonoDepth2会对前15个迭代周期使用10-4的学习率(Learning Rate),然后对其余的迭代周期使用10-5的学习率。对于验证集,取训练集大小10%的数量作为专用验证集。平滑参数λ=0.001。

在进行单目训练时,选择左侧相机对应的彩色图像与对应深度图像作为单目训练数据;进行双目训练时,使用双目立体图像对数据进行训练;在进行单目和双目混合训练时,单目数据与双目立体图像对以一定比例进行训练,默认为1∶1。

对于定量实验所用的测试指标,本文选择以下常用的量化指标对最终单目深度估计结果进行评价。

(3)

(4)

(5)

对于定量实验结果,通过测试指标比较,误差值指标AbsRel和SqRel越小,说明模型测试结果越好; 准确度指标越高,说明模型深度估计能力越好。

定性实验结果使用视差图进行展示,如图8所示,颜色越深表示深度值越高,离视点更远; 颜色越浅表示深度值越低,离视点更近。定性实验检验通过对可视化结果进行主观分析完成。

图8 原图与对应视差图示意图

3.2 在公开数据集上的测试结果验证

Virtual KITTI 2数据集[10]是单目和双目立体视觉深度估计常用公开虚拟数据集之一,该数据集利用仿真技术对KITTI数据集的所有涉及的参数及图像内容进行了完整还原。

本文首先分别使用真实数据集KITTI、仿真数据集Virtual KITTI 2以及本文所得到的仿真数据对MonoDepth2默认单目深度估计模型进行训练,并分别用单目数据单独训练和单目与双目数据混合训练的方式进行训练,然后以KITTI数据集以Eigen的分割子集作为测试集,对训练所得的模型进行测试,按深度估计常用指标对模型的训练结果进行对照分析。

从表2实验结果中可以看出,在KITTI驾驶场景测试集中,本文使用仿真数据训练得到的模型在四个指标中均获得了最佳深度预测效果。

表2 不同数据训练结果模型在KITTI测试集上的性能表现

此外,为验证在特殊场景下本文仿真数据对模型训练效果的提升,本文分别使用真实数据集KITTI、室内深度数据集NYU Depth V2以及本文所得到的仿真数据对MonoDepth2默认单目深度估计模型进行单目数据训练,并在NYU Depth V2数据集上测试。

实验结果如表3所示,在NYU Depth V2室内数据集上测试的对照实验结果表明,本文仿真数据训练的模型在四个指标中再次获得了最佳效果。本文所得的仿真数据可以有效提升训练模型对室内场景的深度感知能力。

表3 不同数据训练结果模型在NYU Depth V2室内测试集上的性能表现

3.3 增强复杂环境下模型深度预测能力效果评估

在对MonoDepth2单目深度估计网络模型训练结果使用不同数据进行测试时,发现使用真实数据训练所得到的通用模型训练结果,在许多特殊情况下表现失常。

本文归纳了三种具有代表性且模型预测失常概率较大的特殊场景,分别是雨雾天气、夜晚以及室内场景。本文使用包含这些特殊因素的一定数量的仿真数据,对网络模型训练结果进行针对性微调(Finetune),以验证使用特定仿真数据补充训练对模型结果有所改善。最后,再使用公开数据和自采数据对改进前的通用模型训练结果和针对性改进后的增强模型训练结果再使用同样特殊情况的数据进行测试,对可视化对比结果进行分析。

使用包含特殊情况的本文深度仿真数据对模型进行训练以后,再用训练模型对夜晚图像和浓雾图像进行单目深度估计,可视化结果如图9所示。从实验结果可以看出,补充包含特殊情况的深度仿真数据作为训练数据,无论是在公开数据上还是在自采数据上进行深度估计,均可以有效地增强模型在特殊场景中对物体的深度感知能力。

图9 本文数据训练的模型深度估计能力提升

4 结论

本文主要研究的内容是基于虚拟仿真技术建立一个完整的深度仿真数据采集系统,提供大体量的高质量深度仿真数据,以解决目前由于真实深度数据集在数量和质量上的明显缺陷,导致基于单目深度学习算法的深度估计网络因训练数据缺乏而深度预测能力下降的问题。

本文首先利用虚拟仿真技术完成真实感增强的仿真环境搭建;在数据生成方面,基于计算机图形学原理,实现更丰富和更精准的深度数据标注;在数据采集方面,提出一种具有复杂运动模式的全自动数据采集方案,有效减小数据冗余,提高整个数据集迭代效率。最终完整构成深度仿真数据采集系统,在数据体量上对真实数据集形成扩充,并在综合质量上实现超越。最后通过相关实验,验证了本文仿真数据能够对单目深度估计网络训练模型的深度预测能力实现显著增强。

猜你喜欢
单目物体深度
基于单目视觉的分离图像分析方法
四增四减 深度推进
深度思考之不等式
基于单目视觉车距测量方法综述
一种单目视觉里程计/UWB 组合室内定位方法
深刻理解物体的平衡
简约教学 深度学习
单目SLAM直线匹配增强平面发现方法
揭开物体沉浮的秘密
为什么同一物体在世界各地重量不一样?