詹 雁, 张 娟, 金昌基
(1.上海工程技术大学 电子电气工程学院,上海 201620;2.韩国科学技术院,韩国 大田 12580)
深度信息一直被广泛应用[1~3]。近年来,随着卷积神经网络(convolutional neural network,CNN)技术的发展,单目深度估计任务也取得了良好的效果。基于卷积神经网络的方法层出不穷[4~7]。早期使用CNN解决深度估计任务的方法均为监督式训练[5,6],需提供大量真实场景的图像和对应的深度真值,实际获取真实场景的深度信息成本非常昂贵且得到的深度图存在一定的误差。为了克服监督式训练的弊端,有人提出了使用无监督式训练[7~9],在训练过程中不需要场景的深度真值,而是使用几何信息进行约束。这种方法克服了训练过程中对真值的依赖,但容易受到其它因素影响,例如光照、遮挡、模糊等。相较于真实世界数据,合成数据的深度图更容易获取。因此,国内外一些学者提出使用合成图像解决真实世界场景的深度估计问题[10],取得了一定的效果。文献[10]联合训练了图像转换网络和单目深度估计网络,但在转换网络过程中,没有考虑真实图像和合成图像的语义和几何结构差异。
针对以上文献中的不足,本文提出基于域适应方法解决真实场景的深度估计问题,引入感知损失加强域转换的稳定性。同时,融入了空间梯度损失优化深度图的细节信息。
本文的主要目标是训练得到一个深度估计模型fT。图1是整体流程图,系统架构由转换网络和深度估计网络组成。真实域的数据为一组真实世界的图像,标记为xr。合成域的数据为合成图像和对应的深度图,标记为(xs,ys)。
如图 1 所示,转换网络由生成模型G和判别模型Dr组成。生成模型G将合成域S中的图片映射到真实域R中,即G∶S→R;为了扩大网络的泛化能力,生成模型既能输入合成图像也可以输入真实图像。理想状态下,输入合成图像时,生成模型输出图像和真实场景图像的非常相似;输入真实图像时,输出图像不发生改变或者改变非常小。
转换网络生成的图片输入深度估计网络。合成域的深度估计使用对应的深度真值作为监督信号;真实域图像深度估计时不使用深度真值,是通过对比合成域和真实域在深度特征图上的特征分布对其进行约束,判别模型Df判断真实图像的深度特征的特征分布是否和合成域的相似。理论上,真实域的特征分布和合成域的特征分布越相似,则深度估计的效果越好[10]。
图1 网络结构图
1.1.1 网络结构
转换网络由生成模型和判别模型组成。参考文献[10],生成模型G采用的是和Sim GAN[11]相似的ResNet[12]。图像判别模型Dr网络,本文借鉴使用Sim GAN。其作用是判断生成的图像的真假性,从而约束生成器G,生成更好的和真实图片接近的图像。
1.1.2 感知模型
在图像风格转换过程中,如果仅仅使用像素级上的重建损失,最终得到的图像将会缺少高频信息,出现过度平滑现象。重建的高分辨率图像与真实的高分辨率图像无论是低层次的特征上,例如:颜色,纹理等;还是高层的语义特征和整体几何结构上,都应该尽可能相似。本文使用感知损失改进转换网络。在使用重构损失的同时,加入高层全局信息,使转换后的图像和真实图像在感知特征上更接近。
感知网络结构如图2所示,试验过程中使用分类数据集预训练VGG—16[13]网络,然后基于预训练模型提取的特征图之间的欧氏距离定义损失函数。
图2 感知网络结构图
1.1.3 转换网络损失函数
对于生成模型G以及它对应的判别模型Dr,本文采用对抗损失,损失函数定义如下
Lgl(G,Dr)=Exr~XR[logDr(xr)]+
Exs~XS[log(1-Dr(G(xs)))]
(1)
式中xr为真实图像,xs为合成图像。生成模型和判别模型的参数分步更新。
生成模型不仅仅将合成图像转换成真实图像,也会将真实图像转换成真实图像。转换前后的差异很小,甚至是不发生改变。出于这个目的,本文使用逐像素的重构损失。函数定义如下
(2)
为了保证输入和输出图像在语义和几何结构上更相似,本文引入感知损失,对输入及生成图像进行特征上的对比,首先将输入和输出图像分别经过预训练模型提取特征图,将提取到的特征图作为目标函数输入。通过特征层上的距离度量,使得待生成的图片与目标图片在语义和结构上更相似。感知损失定义如下
(3)
1.2.1 深度估计网络结构
深度估计模块,使用了目前被广泛应用的U-Net[14]。网络由编码器和解码器组成。上采样部分会融合特征提取部分的特征,将不同尺度的特征融合在一起。这样既能得到卷积的同尺度特征,也能得到上采样输出的大尺度特征。结构图如图3所示。
图3 深度估计网络结构
1.2.2 深度估计网络损失函数
(4)
同时,引入平滑损失函数解决深度图局部不平滑,边界不连续的和梯度消失的问题。允许直接从较大的空间区域导出梯度,使得到的深度图局部更平滑。函数定义如下
Lsl(fT)=‖∂xfT(xs)|e-|∂xxs|+|∂yfT(xs)|e-|∂yxs|
(5)
深度估计器fT的主要任务是估计真实场景的深度图。本文引用特征分布相似性函数。当真实和合成的特征分布越相似,提取的特征就越相似。特征分布相似性函数定义如下
(6)
同样的,当fT训练真实图片时,为了更好约束真实场景图像的深度估计,也加入了平滑损失,定义如式(5)所示。
最终的目标函数如下
L(G,fT,D1,D2)=Lgl(G,D1)+αcLcl(G)+αpLpl(G)+
αfLfl(fT,D2)+αtLtl(fT)+αsLsl(fT)
(7)
实验过程中,真实域的数据集为KITTI[15],合成域的数据集为VKITTI[16],两种数据集场景相似,均为城市街道场景,本文选取21 260张图像进行训练。VKITTI的深度最大值为655.35 m,KITTI数据集的深度最大值为80 m。实验过程中,需将VKITTI的深度限制为80 m。
本文实验操作系统为Ubuntu16.04。算法基于PyTorch框架,编程语言为Python 3.6,实验均在显卡GTX1080Ti下进行。
为和目前最新的方法进行效果比较,本文选用由文献[5]提出的697张图像的测试标准。评价函数包括绝对值相对偏差(Abs relative difference,Abs)、相对平方差(squared relative difference,Sq)、均方误差(RMSE)、RMSE (log)、准确率(acuracy),评价函数定义如下
表1中的K代表KITTI数据集,CS表示Cityscapes[17]数据集,V为VKITTI数据集,I为图像,D为深度,L为左视图,R为右视图。
本文方法的定量对比结果如表1,这里将本文方法和最新方法[5,8~10]进行对比。和文献[5,9]结果相比,本文的结果具有一定的优势,文献[5]是采用监督式学习进行训练的,且使用Alex Net初始化网络参数,本文的网络权重随机初始化。在深度估计精确度方面,本文估计所得的深度图与深度真值图像有着更高的相似度。和文献[10]的结果相比,体现了感知损失和平滑损失的作用。相比之下,本文的结果占据了一定的优势,各项指标上有一定的提升,由于评估参数的特殊定义,数值的小幅度变化也可以代表性能的显著提升。
表1 各种方法在KITTI数据集上性能对比
本文方法的结果和文献[8]对比没有优势,主要是因为该方法采用了左右视图进行训练,在训练时需要矫正对齐立体图像,这种方法不能在单目数据集上进行训练,这限制了其应用性。本文方法不要求左右视图,数据来源更充足,应用领域更为广泛。
图4是本文结果的定性比较,可见在纹理细节上效果有一定的提升,与原始图像具有更高的感知相似性。表1的数据也表明,本文的结果优于部分现有的方法,包括使用真实深度数据进行训练的方法。
图4 各算法效果图对比
本文提出了一种语义感知的域适应框架估计深度,网络分为图像转换网络和深度估计网络。转换网络能生成和真实图更相似的转换图,在对抗损失和重构损失的基础上融入了感知损失,使得到的转换图像在语义上和真实图像更相似。此外,还融入了平滑损失,对深度图进行优化。