掌桥专利:专业的专利平台
掌桥专利
首页

一种语义分割辅助的双目视觉无监督深度估计方法

文献发布时间:2023-06-19 11:45:49


一种语义分割辅助的双目视觉无监督深度估计方法

技术领域

本公开属于计算机视觉和计算机图形学领域,具体涉及一种语义分割辅助的双目视觉无监督深度估计方法。

背景技术

深度估计是计算机视觉领域一项重要研究课题。在自动驾驶,AR/VR,三维重建和物体抓取等应用上有重要意义。现如今,虽然有不少硬件和方法能够获取到场景深度信息,但它们都有各自的缺陷。例如利用单目相机图像的三角测量方法以及利用双目相机模型图像进行视差计算的方法,往往计算量大且精度不高,且比较依赖场景的纹理信息。激光lidar价格昂贵,单一依赖一种传感器本身也是一种风险。基于结构光的深度感知传感器具有测量范围有限,室外环境下效果欠佳的问题。随着深度学习技术的兴起,目前业界将注意力转向了基于深度学习的视觉深度估计方法。现有技术中存在采用监督学习的方法用于深度估计,并且取得了不错的结果。但是监督学习的方法局限性大,泛化能力差。后来无监督的深度估计方法的研究逐渐成为热门和趋势。

语义分割可被定义为在图像上创建掩模的过程,其中像素被分割成预定义的一组语义类别。此类分割可以是二进制的(例如,“人物像素”或者“非人物像素”)或多类(例如,可将像素标记为:“人”、“车”、“建筑物”等)。随着语义分割技术在准确性和采用方面的增加,开发利用此类分割和开发用于将分割信息整合到现有的计算机视觉应用(例如深度或者视差估计)中的技术方法变得越来越重要。如今做语义分割最先进的方法都是基于深度学习的。

目前基于无监督深度学习的深度估计方法分为基于单目连续帧和基于双目图像对两种,其中基于双目图像对的方法更为常见和实用:基于单目连续帧的方法:有两个网络,其中一个是深度预测网络用于预测深度图,另一个网络是位姿估计网络用于估计位姿,然后利用预测出的深度图和位姿重建出相邻帧,将重建出的相邻帧与原始相邻帧作对比,从而计算出损失函数从而达到训练网络的目的。基于双目图像对的方法:首先将双目相机图像的左视图输入进入全卷积网络得到预测出的左右视差图,然后用得到的预测出的左右视差图与原始的左右视图重建,重建出重建后的左右视图,最后将原始的左右视图与重建后的左右视图作对比计算出损失函数从而达到训练网络的目的。以上提到的方法中,用双目图像训练出的网络可以直接估计出绝对深度,并且精度较高甚至优于监督的方法,而单目图像数据集不包含绝对尺度信息,预测出的深度是相对深度,故这里主要研究基于双目图像对的无监督深度估计方法。

现有的环境深度估计的方法最常见且有效的是利用激光lidar,但是lidar价格昂贵,且无法提供稠密的深度图,并且过度依赖单一传感器本身具有风险。双目相机能够直接通过计算视差得到深度,但是存在计算量很大且在图像缺少纹理信息时精度不高的问题。借助深度学习技术的深度估计方法可以提供稠密的深度图,对场景的适应性好,还可以降低成本。过去借助语义分割来辅助深度估计的方法一般是采用迭代式的网络去联合深度信息和语义信息,但是这样的方法会导致网络较为繁琐,同时会导致在网络在前向推理阶段缺少对另一视图的结构信息的感知,影响最终视差预测的性能。

发明内容

为了解决上述问题,本公开提供了一种语义分割辅助的双目视觉无监督深度估计方法,该方法包括:

S100:搭建用于预测深度图的全卷积神经网络,其中所述全卷积神经网络由编码器和解码器两部分组成,其中语义分割任务和视差估计任务共享同一个编码器和解码器;

S200:利用带有双目摄像头的设备进行拍照,获取到彩色左右视图;

S300:分别将获取到的彩色左右视图,输入至所述全卷积神经网络,并将此种情形下,所述全卷积神经网络输出的左右预测的视差图代入损失函数计算损失,以此来训练所述全卷积神经网络;

S400:将准备好的单张彩色图输入到训练完成的所述全卷积神经网络中,输出预测的视差图,进而得到预测的深度图。

通过上述技术方案,由双目图像联合场景深度估计与语义的方法,并且加入由传统视差计算方法SGM算出的视差作为监督信号。在此方法中,语义分割任务是监督学习,SGM算法算出的视差图作为网络视差估计的其中一个监督信号,但是方法中并没有借助lidar提供的深度信息而是将预测出的视差图与原图作出重建图,再将重建图与原图作对比构造损失函数,故对于深度估计来说是属于无监督学习任务。假设输入左视图得到一张对应的预测左视差图,然后将输入左视图对应的右视图与得到的预测左视差图做重建,可以得到重建后的右视图。所述重建图指的就是重建后的右视图,同理输入右视图可以得到重建后的左视图。

本发明的有益效果是

1)将过去常规的多任务学习网络变成了语义分割任务和视差估计任务共享同一个编码器网络,这样做的内在意义是图像中物体的语义信息和结构信息在内容上具有一致性,这样可以在训练中使图像语义信息和结构信息二者相互促进达到提升准确度的效果,同时简化了网络的规模。

2)考虑到之前的方法是输入一张左视图直接预测出左右视差图d

3)在视差估计阶段,引入传统立体匹配算法SGM,对当前输入图像做了视差图计算,用计算出的视差图对预测出的视差图相当于加入了一个先验信息,帮助网络收敛和提升网络预测准确率。

附图说明

图1是本公开一个实施例中所提供的一种语义分割辅助的双目视觉无监督深度估计方法的流程图;

图2是本公开一个实施例中所提供的全卷积神经网络结构图;

图3是本公开一个实施例中所提供的实验结果图。

具体实施方式

下面结合附图1至图3对本发明进行进一步的详细说明。

在一个实施例中,参见图1,其公开了一种语义分割辅助的双目视觉无监督深度估计方法,该方法包括:

S100:搭建用于预测深度图的全卷积神经网络,其中所述全卷积神经网络由编码器和解码器两部分组成,其中语义分割任务和视差估计任务共享同一个编码器和解码器;

S200:利用带有双目摄像头的设备进行拍照,获取到彩色左右视图;

S300:分别将获取到的彩色左右视图,输入至所述全卷积神经网络,并将此种情形下,所述全卷积神经网络输出的左右预测的视差图代入损失函数计算损失,以此来训练所述全卷积神经网络;

S400:将准备好的单张彩色图输入到训练完成的所述全卷积神经网络中,输出预测的视差图,进而得到预测的深度图。

其中,整个全卷积神经网络结构如图2所示,由编码器和解码器组成,第一卷积层至第六卷积层b是编码器,第五反卷积层至预测层一+损失一是解码器。我们是在经典网络ResNet的基础上对网络进行了适合本发明的修改。将编码器中的普通卷积改成了膨胀卷积,这样可以在不增加参数计算量的情况下尽可能的增大感受野,如此更好的提取场景中的特征图。当编码器对输入图像进行特征提取时,任务表示为t,是一个全为0或者1的特征矩阵(根据任务来决定为0还是1,0是视差估计任务,1是语义分割任务),特征图是由一个或者多个矩阵组成,提取完特征后,将进入解码器部分。解码器部分,考虑将浅层的局部特征与深层的抽象特征融合,采用了四个远连接的方式来增强预测的效果。模型的输出有四个尺度,分别为输入图像的(1,1/2,1/4,1/8),在四个尺度上进行损失函数计算。

步骤S300中获取得到的彩色左右视图是图像对的形式(即左视图和右视图)。这里左右视图输入顺序其实无所谓,按照一般习惯是先输入左视图,经过神经网络后得到预测出的左视差图,从而可以计算出图像重建损失。同理,对右视图也做此操作。最后将上述两个损失统一加入到总的损失函数中。这里其实计算的损失即是本文中无监督方法的体现。举例:输入左视图,网络这里预测左视差图。预测出的左视差图和右视图可以通过图像重建得到重建后的左视图。将重建后得到的左视图与原始输入的左视图可以做对比计算损失。同理右视图。这样一来就可以训练网络,让网络有预测出视差图的能力。视差图和深度图的转换只要经过一个公式变换即可得到。这样我们就能得到我们想要的深度图。

全卷积神经网络主要流程:先将一张彩色左视图输入进网络,此时要预测视差,则将标志位t取0,将编码器提取的特征图与这个t级联后进入解码器,由于此时t为0,那么解码器后接Avg.pooling,得到对应的预测视差图,然后进行图像重建计算损失函数。同理再对彩色右视图做同样的操作。此时加入SGM算法,这是一个传统立体匹配算法,有固定的一套公式,对彩色左右视图进行计算,得到该方法计算出的左右视差图。这个方法计算出的左右视差图中其实包含了稀疏的真实视差值,那么用这部份稀疏的真实视差值去监度之前网络预测出的视差图,也可以得到一个损失函数。接着将一张彩色左视图输入进网络,此时我们要预测语义,则将标志位t取1,将编码器提取的特征图与这个t级联后进入解码器,由于此时t为1,那么解码器后接softmax函数,得到预测的语义图,用对应的标签(label)进行监督计算损失。同理再对彩色右视图做同样的操作。然后将上述两个任务计算的损失函数结合一起构建一个总的损失函数。进行一次迭代,对网络进行反向传播的训练。然后在进行下一步数据的上述操作,以此达到训练网络的目的。其中,网络的输入是一张彩色图像,但这个图像的来源是以下两类:1)双目图相对中的左视图或者右视图——这是为了预测视差;2)双目图相对中的左视图或者右视图+对应的语义分割标签(1abel)——为了预测语义分割。标志位t是一个全0或者全1的与特征图同样大小的张量(tensor)。

所述图像重建严格定义是叫“图像重建损失”,是属于深度误差这个类别中的。重建图的过程:比如输入彩色左视图,经过网络预测得到了左右两张视差图,那么此时我可以通过预测得到的左视差图和彩色右视图进行重建,得到重建出的左视图。接着,将彩色左视图和这张重建后的左视图做图像重建损失构造。得到如下函数:

L

就该实施例而言,首先,相比于之前将语义信息引入深度估计的工作,它们是两个任务两个不同的网络,进行迭代式训练,而本方法是将两个任务共享了一个编码器和解码器,并且利用标志位t来在训练中对任务进行区分。

其次,引入了传统立体匹配算法SGM,来提供稀疏的真实视差值,虽然是稀疏的,但是依然能够提升视差预测的性能。再次,网络部分虽然是基于Resnet,但是本方法对其修改,使其更加适合我们这个任务。例如将普通卷积改成膨胀卷积形式(在第三层卷积b,第四层卷积b,第五层卷积b中分别使用rate=2,rate=4,rate=8的膨胀卷积形式),在不增加参数计算的情况下增大感受野。为了让深层抽象信息和浅层局部信息融合本方法使用远连接的方式进行层与层之间信息融合(编码器过程会将图像尺寸降到原来的1/64用来提取特征,之后解码器的过程中,通过反卷积的方法得到了尺寸为原图,原图的1/2,原图的1/4,原图的1/8的特征图,然后将这四个尺寸的特征图与原编码器中得到的相同的尺寸的特征图进行级联操作(如果生成了视差图也要把视差图加入进级联的过程),最后分别再经过一层卷积层)。本方法是在多个尺度下计算损失函数。这样做可以使网络更好的学习特征图中的细节信息,减少“空洞”效应(即预测出的视差图中会产生一些不准确的“空洞”)。

在另一个实施例中,所述步骤S200进一步包括如下步骤:

S301:输入的彩色左右视图经过所述全卷积神经网络编码器部分得到特征图;

S302:获取一个标志位t,用来区分预测层是视差估计还是语义分割任务;

S303:特征图与所述标志位级联后,输入至所述全卷积神经网络的解码器部分,在预测损失融合层一根据所述标志位的值来选择是进行语义分割任务还是进行视差估计任务。

就该实施例而言,这里之所以可以将两个任务共享一个编码器的原因,就是受图像中的对象的语义信息与结构信息在内容上具有一致性的启发。同一张输入的彩色图像通过标志位t来区分是语义分割任务还是视差估计任务,在计算损失函数的时候要将该图的分割结果和视差估计结果均计算出来,然后根据损失函数来计算一个损失,再对网络进行反向传播训练。损失函数里含有结合语义指导视差的函数。语义分割任务是监督的,视差估计是无监督的,所以对于深度估计任务来说仍是无监督的。

现有的利用语义信息去辅助深度估计的工作往往是采用迭代式网络,即两个任务用两个不同的网络。这会造成网络规模过大以及训练困难的问题。而将两个任务共享同一个编码器和解码器,通过标志t来进行不同任务的训练。这么做的理论依据是图像中对象的语义信息和结构信息在内容上具有一致性。此外,引入了传统立体匹配算法SGM,相当于在没有数据集真实深度值的情况下,加入了一个可以理解为弱监督先验的效果,帮助提升性能。

步骤S303中的左右预测视差图是由特征图与所述标志位级联后,输入至所述全卷积神经网络的解码器部分,即可在解码器的输出处得到。这里全卷积神经网络实质上预测的是视差,但是深度和视差之间仅需要通过简单的一个公式Depth=b*f/d就可以得到。当损失函数稳定趋近于0的时候说明全卷积神经网络已经训练好了,然后利用真实的激光lidar算出的真实深度值和用全卷积神经网络推理出的深度值作比较,判断网络效果。

因为这个网络本质上是一个多任务模型,语义分割和视差估计共享一个网络。但是二者的损失函数不同,所以在进行视差估计的时候,t设置为全0特征图,与编码器生成的特征图级联,然后进入解码器。因为此时t为0,那么最后一层进行视差估计任务。如果进行语义分割任务,那么t设置为全1特征图,与编码器生成的特征图级联,然后进入解码器,然后用语义分割的损失函数进行语义分割任务。

在另一个实施例中,所述步骤S203进一步包括如下步骤:

S3031:视差估计任务处理:在得到对应的左右预测视差图后,此时再对输入的彩色左右视图使用传统SGM算法,获得输入的视图对应的计算后的视差图用来提供稀疏的真实的视差值,用计算后的左右视差图对左右预测视差图做一个监督信号;

S3032:语义分割任务处理:输入的彩色左右视图经过编码器提取特征后,再经过解码器,最后使用常规的基于监督学习的语义分割方法做监督训练。

就该实施例而言,输入一张左视图直接预测出左右视差图d

经过池化层得到的是视差估计的结果。输入一张彩色图像只能得到一张对应的视差图。彩色左右视图通过网络预测得到对应的左右视差图之后,再对彩色左右视图使用SGM算法也可以得到该方法计算出的左右视差图。然后用SGM算法得到的左右视差图对网络预测得到的两张左右视差图做监督。计算后的视差图是一张,在现有的方法中是输入一张彩色左视图预测得到左右两张视差图。但是考虑到输入的彩色左右视图其实本身是不一样的,用一张输入彩色视图去预测左右两张视差图是不合适的,所以本方法是输入彩色左视图预测得到一张对应的左视差图,同理右图。

这里使用SGM算法,实质上是为了通过传统的立体匹配算法来获得稀疏的真实的视差值,而用获取的这种稀疏真实视差值对预测出的视差图做监督的话,可以提升网络预测性能。这里语义分割任务仅仅是在训练的过程中,对视差估计任务进行一个指导,指导视差估计任务的物体边缘,以及平滑的效果。所述对输入的视图使用传统SGM算法,获得计算后的视差图,该处理是额外实施的,SGM算法有一套完整的计算流程,并不需要经过全卷积神经网络。步骤S3031中的监督信号指的就是用SGM算法对彩色左右视图计算得到的,只用于视差估计任务。S3032中监督训练的监督信号仅仅指数据集中的groudtruth。这里一定是进行完视差估计任务后切换至语义分割任务,因为这里需要使用语义分割任务获取的结果对视差估计任务做指导。

在另一个实施例中,编码器采用的是带膨胀卷积的ResNet。

在另一个实施例中,解码器部分采用了四个跳远链接。

在另一个实施例中,所述全卷积神经网络的输出有四个尺度,分别为输入图像的(1,1/2,1/4,1/8),在四个尺度上进行损失函数计算。

在另一个实施例中,所述标志位是一个全0或者全1的特征图。

在另一个实施例中,所述语义分割任务的结果是通过Softmax函数得到。

在另一个实施例中,所述视差估计任务的结果是通过Avg.pooling得到。

在另一个实施例中,所述损失函数L由五个子函数构成,分别是深度误差,语义分割误差,左右语义一致性误差,语义指导视差平滑误差以及SGM算法的误差。

就该实施例而言,其实这里的损失函数构造,就是在四个尺度上的损失函数。简单说,就是损失函数L是建立在四个不同尺度上的。总的损失函数:

L=L

由五个子函数构成,L

(1)深度误差:

其中L

α

(2)语义分割误差,即为交叉熵函数

(3)左右语义一致性误差:

L

(4)语义指导视差平滑误差:

d表示预测视差图,s表示语义图,

(5)SGM算法误差,即对原图用SGM算法计算出视差图,与预测出的视差图作比较

以上d表示预测视差图,I表示原图,s表示语义分割图。

在另一个实施例中,使用KITTI的双目图像对数据集训练该网络,同时也使用了CityScapes的语义分割数据集。该网络的实现是基于Pytorch深度学习框架,运行在英伟达GTX 1080Ti显卡上。训练期间,输入图像的大小调整到了256x512的分辨率,为了避免过拟合,还进行了数据增强的操作,更具体的说从[0.8,1.2],[0.5,2.0]和[0.8,1.2]范围内的均匀分布中抽样三个数字,采样的数字还使用了伽马偏移。优化器使用的是Adam,初始学习率λ=1e-4,β

注意到该网络需要通过标志t来选择任务,所以在输入图像做前向推理时,将t置为0则是获得视差图,将t置为1则是获取语义分割图。

在另一个实施例中,本方法在Cityscapes数据集上进行实验得到结果如图3所示。图3中第一行代表原彩色图,第二行是对应的输入图像的语义分割结果,最后一行是对应的输入图像的深度估计结果。观察语义分割任务和视差估计任务的实验结果,可以看出确实可以借助语义分割任务来促进视差估计任务,并且二者的效果都很不错。语义分割任务对视差估计任务中的对象边缘修饰起到了不错的效果。同时也验证了,场景中对象的结构性信息和语义信息在内容上具有一致性。

尽管以上结合附图对本发明的实施方案进行了描述,但本发明并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下和在不脱离本发明权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本发明保护之列。

相关技术
  • 一种语义分割辅助的双目视觉无监督深度估计方法
  • 基于深度对抗学习的无监督域自适应脑肿瘤语义分割方法
技术分类

06120113045847