本发明属于单视图三维重建技术领域,具体涉及一种基于半监督学习的单视图三维重建系统及其方法。
技术背景
从单个图像中理解物体三维结构的能力是人类视觉系统的特点,也是视觉推理和交互的关键步骤。然而,单个图像本身没有三维重建所需的足够信息。要想从单个图像中重建物体的三维形状,机器视觉系统必须获取有效的形状先验信息,例如:让机器视觉系统知道所有的汽车都有车轮,这样在重建汽车的三维形状才能更精确。关键问题是机器视觉系统如何获取这样的先验信息。
目前在大规模数据上的基于深度学习的技术可以让视觉系统获取重建物体的三维先验知识。一种方法是利用三维形状的数据集训练深度神经网络,但获得这样的三维数据集需要三维建模专家或三维扫描工具,其获取过程及其繁琐且昂贵。近年开发的另一种方法,是采用同一个场景的标定的多视角图像进行训练,然后使用重建三维形状的渲染视图与基准视图进行光度一致性比对,该方法尽管比收集三维模型更容易,但是这种方法在实际中仍然非常昂贵:需要获取数以千计对象的标定多视角图像,并要标注者为图像标注图像描绘的参数和精确的实例。获取成千上万个物体的标定的多视图数据也是非常困难的。
技术实现要素:
本发明的目的在于克服现有技术的不足之处,在具有姿态和实例标记的图像数据集和无标记的图像数据集上交替迭代训练三维重建网络,将具有姿态和类别标记的监督与无标记图像的弱监督结合起来,提供一种基于半监督学习的单视图三维重建系统及其方法。其优点是结合了有监督和无监督策略的优势,大大减轻了对标注数据集的依赖。
为解决上述技术问题,本发明采用以下技术方案。
本发明的一种基于半监督学习的单视图三维重建系统,包括:编码器e、生成器g、判别器d和渲染器p;
所述的编码器e:将图像作为输入,生成相应的隐向量表示,其网络结构含有6个二维卷积层conv和3个全连接层fc;6个卷积层的卷积核大小为5×5,步幅stride分别为1、2、1、2、1和2,输出通道数filters分别是128、128、256、256、512和512;在每个卷积层后面设置一个批量归一化层即bn层和一个relu激活函数;3个全连接层的输出分别是2048、2048和1024,每个全连接层后面设置一个bn层和一个relu激活函数;编码器e最终输出1024维的特征向量;
所述的生成器g:将隐向量表示作为输入,生成三维体素网格,其网络结构含有1个全连接层fc和3个三维转置卷积层convt;全连接层的输出是256×4×4×4维,其后设置一个bn层和relu激活函数;三维转置卷积层的核大小是5×5×5,步幅为2,输出通道分别是256、128、64和1,在每个三维转置卷积层之后设置一个bn层和relu激活函数;
所述的判别器d:试图区分生成器g输出的三维体素网格的渲染视图和数据集中的图像,进而提升重建质量,其网络结构含有4个二维卷积层和1个全连接层;4个卷积层的卷积核大小是5×5,步幅分别为1,输出通道数分别是256、512、1024和2048;在每个卷积层后面设置一个层归一化层ln层和一个leaky-relu激活函数;全连接层的输出是1维,其后设置一个sigmoid函数;判别器d的最终输出是生成图像的概率;
所述的渲染器p将三维体素网格和姿态作为输入,输出相应视角的渲染视图。
本发明的一种基于半监督学习的单视图三维重建方法,包括:
步骤1、利用具有姿态和实例标记的图像数据集训练三维重建网络;
步骤2、利用无标记图像数据集训练三维重建网络,设计四个损失函数:图像重建损失函数lrec、三维重建损失函数lgt、隐向量表示的姿态不变损失函数llv、体素网格上的姿态不变损失函数lvi;
步骤3、利用无标记图像数据集训练三维重建网络;
进一步地,所述的步骤1包括:
1a.假设从两个不同姿态p1和p2获取某个三维对象的一对图像x1,x2,将x1和x2作为编码器e的输入;
1b.编码器e将两个图像分别映射到隐向量空间,记作e(x1)和e(x2);
1c.生成器g从隐向量e(x1)和e(x2)中重建三维体素网格,记作g(e(x1))和g(e(x2));
1d.将姿态p1、p2分别和对应的三维体素网格g(e(x1))、g(e(x2)),作为渲染器p的输入,输出相应视角的渲染视图。
进一步地,步骤2中所述的四个损失函数按照以下方式设计:
①.图像重建损失函数lrec:重建的三维体素网格根据某个相机姿态投影时生成的渲染视图应与基准图像保持一致;设:(x1,p1)和(x2,p2)是从三维模型采样的两个图像/姿态对;e(x1)表示编码器e根据输入图像x1生成的隐向量;g(e(x1))表示根据隐向量e(x1)重建的三维形状;那么,重建的三维形状向摄像机姿态p2投影,生成的渲染视图应该与输入图像x2保持一致,其它视图类似;为了解决这种一致性要求,定义重建损失函数lrec:
lrec=||p(g(e(x2)),p1)-x1||1 2 ||p(g(e(x1)),p2)-x2||1 2(1)
其中,||·||1 2=||·||1 ||·||2是
②.三维重建损失函数lgt:从两个图像重建的三维体素网格g(e(x1))和g(e(x2))应该基准三维模型vb保持一致性,定义三维重建一致性损失函数lgt:
lgt=||g(e(x1))-vb||1 2 ||g(e(x2))-vb||1 2(2)
③.隐向量表示的姿态不变损失函数llv:给定一个对象的两个随机抽样视图,编码器e应该能够忽略图像的姿态,将它们映射到相同的隐向量;定义隐向量相对于图像姿态的不变性损失函数llv:
llv=||e(x1)-e(x2)||2(3)
④.体素网格上的姿态不变损失函数lvi:由生成器g从同一对象的两个不同视图重建的三维体素网格应该保持一致性;定义基于体素网格上的姿态不变损失lvi:
lvi=||g(e(x1))-g(e(x2))||1 2(4)
在具有姿态标记的图像数据集上训练,试图最小化以下组合的损失:
lsemi-supervised=lrec αlgt βllv γlvi(5)
其中,α、β和γ分别是lgt、llv和lvi的权重;设α=β=γ=0.1。
进一步地,步骤3中所述的利用无标记图像数据集训练三维重建网络,包括:
2a.生成器g根据给定的隐向量重建三维体素网格;
2b.利用渲染器p从随机视角p投影三维体素网格,并生成投影的渲染视图;
2c.分别更新生成器g和判别器d损失,利用对抗训练的思想让判别器d无法区分渲染视图与基准图像;
设计判别器d和生成器g的损失函数
与现有技术相比,本发明具有以下优点和有益效果:
1.单视图三维重建的训练数据需要基准三维形状或对象的多个视角图像。虽然收集小型对象的多视角图像相对容易,但是对于大的场景,很难收集多视角图像,此外,获取三维标注需要设计三维cad模型或采用诸如三维扫描仪等专用设备进行三维扫描,工作量巨大。对于某些特定的应用场景,甚至无法获取三维基准形状。在这样的情况下,本发明综合运用现有的三维形状数据、带标记的多视图数据、无标记的图像数据,大大减轻了获取多视角图像或者三维标注的工作量,有效地实现了单个视图的三维重建。
2.除了现有的三维形状数据、带标记的多视图数据、无标记的图像数据之外,在三维重建的过程中,没有实例或姿态标注的图像也可以为重建结果提供部分先验信息,因此,本发明充分利用没有实例或姿态标注的图像,从这些数据中捕获对象视觉外观的分布信息,进而为三维重建结果增加合理性约束。
3.由于无法获取未知对象的有用信息,因此针对未知对象类的重建过程是非常困难的。使用姿态监督的方式可以有助于对未知三维形状的理解,因此本发明使用姿态监督可以极大地改善未知对象类生成模型的重建性能。
4.本发明将具有姿态和类别标记的监督与无标记图像的弱监督相结合,大大减轻了对标注数据集的依赖。
附图说明
图1是本发明的一种实施例的方法原理图。
图2是本发明的一种实施例的利用无标记图像数据集训练三维重建网络的原理框图。
图3是本发明的一种实施例的编码器网络结构示意图。
图4是本发明的一种实施例的生成器网络结构示意图。
图5是本发明的一种实施例的判别器网络结构示意图。
具体实施方式
本发明的一种基于半监督学习的单视图三维重建系统及其方法,包括编码器、生成器、判别器和渲染器。编码器将图像作为输入,生成相应隐向量表示;生成器将隐向量表示作为输入,重建三维体素网格;判别器区分三维体素网格的渲染视图和基准视图,提升重建质量;渲染器将三维体素网格和视点作为输入,输出相应视角的渲染视图。本发明方法采用具有姿态和实例标记的训练图像数据来使跨视图重建的三维形状保持一致性,并约束重建三维形状的渲染图像与相应基准视图之间的相似性;其无标记的图像数据约束重建三维形状的合理性;在训练过程将两种图像数据集交替迭代训练。本发明在具有姿态和实例标记的图像和无标记的图像上交替迭代训练三维重建网络,将具有姿态和类别标记的监督与无标记图像的弱监督结合起来,形成一种基于半监督学习的单视图三维重建方法。本发明是一种无接触、方便的、从单个视图中快速重建物体三维形状的技术。
下面结合附图,对本发明做进一步详细说明。
图1是本发明的一种实施例的方法原理图。图2是本发明的一种实施例的利用无标记图像数据集训练三维重建网络的原理框图。
为了有效利用两类图像数据集训练三维重建网络,本发明的系统实施例包括:编码器e、生成器g、判别器d和渲染器p。图1中的编码器e为共享参数编码器,即两个编码器实际为同一个编码器。图1和图2中的生成器g也是共享参数编码器,即三个生成器为同一个生成器。图1和图2中的渲染器也是同一个渲染器。
所述的编码器e,用于:将图像作为输入,生成相应的隐向量表示,其网络结构如图3所示,图3是本发明的一种实施例的编码器网络结构示意图,由6个二维卷积层(conv)和3个全连接层(fc)组成。6个卷积层的卷积核大小是5×5,步幅(stride)分别为1、2、1、2、1和2,输出通道数(filters)分别是128、128、256、256、512和512,在每个卷积层后面设置一个批量归一化层(即bn层)和1个relu激活函数;3个全连接层的输出分别是2048、2048和1024,每个全连接层后面设置1个bn层和1个relu激活函数。编码器e最终输出1024维的特征向量。
所述的生成器g,用于:将隐向量表示作为输入,生成三维体素网格,其网络结构如图4所示,图4是本发明的一种实施例的生成器网络结构示意图,由1个全连接层(fc)和3个三维转置卷积层(convt)组成。全连接层的输出是256×4×4×4维,其后设置1个bn层和relu激活函数;三维转置卷积层的核大小是5×5×5,步幅为2,输出通道分别是256、128、64和1,在每个三维转置卷积层之后设置1个bn层和relu激活函数。
所述的判别器d,试图区分生成器g输出的三维体素网格的渲染视图和数据集中的图像,进而提升重建质量,其网络结构如图5所示,图5是本发明的一种实施例的判别器网络结构示意图,由4个二维卷积层和1个全连接层组成。4个卷积层的卷积核大小是5×5,步幅分别为1,输出通道数分别是256、512、1024和2048,在每个卷积层后面设置1个层归一化层(即ln层)和1个leaky-relu激活函数;全连接层的输出是1维,其后设置一个sigmoid函数。判别器d的最终输出是生成图像的概率。
所述的渲染器p,将三维体素网格和姿态作为输入,输出相应视角的渲染视图。
如上所述,本发明采用具有姿态和实例标记的训练图像数据在三维重建训练过程中有两方面优点,一方面能使跨视图重建的三维形状保持一致性,另一方面能约束重建三维形状的渲染图像与相应基准视图之间的相似性。
如图1所示,本发明的一种实施例方法,包括:
步骤1、利用具有姿态和实例标记的图像数据集训练三维重建网络。
步骤2、利用无标记图像数据集训练三维重建网络,设计四个损失函数:图像重建损失函数lrec、三维重建损失函数lgt、隐向量表示的姿态不变损失函数llv、体素网格上的姿态不变损失函数lvi。
步骤3、利用无标记图像数据集训练三维重建网络。
本发明在步骤1中,利用具有姿态和实例标记图像数据集训练三维重建网络,其原理如下:
1a.假设从两个不同姿态p1和p2获取某个三维对象的一对图像x1,x2,将x1和x2作为编码器e的输入;
1b.编码器e将两个图像分别映射到隐向量空间,记作e(x1)和e(x2)。
1c.生成器g从隐向量e(x1)和e(x2)中重建三维体素网格,记作g(e(x1))和g(e(x2))。
1d.将姿态p1、p2分别和对应的三维体素网格g(e(x1))、g(e(x2)),作为渲染器p的输入,输出相应视角的渲染视图。
生成器g重建的三维体素网格应该具备:重建效果精确,且重建结果不受输入图像姿态的影响的特点。这就要求隐向量e(x1)和e(x2)对输入图像的摄像机姿态具有不变性。为保证隐向量e(x1)的姿态不变性,从e(x1)预测的三维体素网格g(e(x1))再投影到第二个视点p2时,得到的投影图像应该与第二个输入图像x2保持一致,反之亦然。为此,本发明设计了四个损失函数,包括:
①.图像重建损失函数lrec:重建的三维体素网格根据某个相机姿态投影时生成的渲染视图应与基准图像保持一致。设:(x1,p1)和(x2,p2)是从三维模型采样的两个图像/姿态对;e(x1)表示编码器e(1)根据输入图像x1生成的隐向量;g(e(x1))表示根据隐向量e(x1)重建的三维形状。那么,重建的三维形状向摄像机姿态p2投影,生成的渲染视图应该与输入图像x2保持一致,其它视图类似。为了解决这种一致性要求,定义重建损失函数lrec:
lrec=||p(g(e(x2)),p1)-x1||1 2 ||p(g(e(x1)),p2)-x2||1 2(1)
其中,||·||1 2=||·||1 ||·||2是
②.三维重建损失函数lgt:从两个图像重建的三维体素网格g(e(x1))和g(e(x2))应该基准三维模型vb保持一致性,定义三维重建一致性损失函数lgt:
lgt=||g(e(x1))-vb||1 2 ||g(e(x2))-vb||1 2(2)
③.隐向量表示的姿态不变损失函数llv:给定一个对象的两个随机抽样视图,编码器e(1)应该能够忽略图像的姿态,将它们映射到相同的隐向量。定义隐向量相对于图像姿态的不变性损失函数llv:
llv=||e(x1)-e(x2)||2(3)
④.体素网格上的姿态不变损失函数lvi:由生成器g从同一对象的两个不同视图重建的三维体素网格应该保持一致性。定义基于体素网格上的姿态不变损失lvi:
lvi=||g(e(x1))-g(e(x2))||1 2(4)
图1中的虚线说明了上述四种损失函数。在具有姿态标记的图像数据集上训练,试图最小化以下组合的损失:
lsemi-supervised=lrec αlgt βllv γlvi(5)
其中,α、β和γ分别是lgt、llv和lvi的权重。本发明使用α=β=γ=0.1。
如图2所示,为本发明利用无标记图像数据集训练三维重建网络的一个实施例的原理框图。为了说明无标记的图像数据能约束重建三维形状的合理性,在步骤2中,本发明设计了一个对抗训练方法,利用无标记的图像数据集训练三维重建网络。其中,设计四个损失函数:图像重建损失函数lrec、三维重建损失函数lgt、隐向量表示的姿态不变损失函数llv、体素网格上的姿态不变损失函数lvi;其原理说明如下:
2a.生成器g根据给定的隐向量重建三维体素网格;
2b.利用渲染器p从随机视角p投影三维体素网格,并生成投影的渲染视图;
2c.分别更新生成器g和判别器d损失,利用对抗训练的思想让判别器d无法区分渲染视图与基准图像。即:无论从哪个相机姿态投影重建三维体素网格,渲染图像都应该与数据集中的图像看起来相似。
判别器d和生成器g的损失函数
综上所述,本发明提供了一种基于半监督学习的单视图三维重建方法。本发明考虑两类训练数据集:一类是无标记图像数据集,考虑有类别的、但没有任何精确的实例或姿势标注的大规模图像集合,这样的数据集可以从互联网下载而获得。尽管很难从这些图像中提取三维信息,但可以从该类别中捕获对象视觉外观的分布信息;另一类是具有姿态和实例标记图像数据集,考虑其它语义类的标注图像,这些图像不会告诉我们特定类的细微差别,但它们可以描述物体通用的形状。例如,大多数形状是紧凑的、光滑的,趋向于是凸的等等。本发明提出一种能够有效利用所有这些信息交替迭代训练三维重建网络,将具有姿态和类别标记的监督与无标记图像的弱监督结合起来,形成有效的基于半监督的单视图三维重建方法。该技术适用于船舶综合保障、装备虚拟维修、交互式电子技术手册、电影、动画、虚拟现实、增强现实、工业制造等多个领域,可以精确地从单个图像中获取物体的三维形状,具有广阔的市场前景。
1.一种基于半监督学习的单视图三维重建系统,其特征在于,包括:编码器e、生成器g、判别器d和渲染器p;
所述的编码器e:将图像作为输入,生成相应的隐向量表示,其网络结构含有6个二维卷积层conv和3个全连接层fc;6个卷积层的卷积核大小为5×5,步幅stride分别为1、2、1、2、1和2,输出通道数filters分别是128、128、256、256、512和512;在每个卷积层后面设置一个批量归一化层即bn层和一个relu激活函数;3个全连接层的输出分别是2048、2048和1024,每个全连接层后面设置一个bn层和一个relu激活函数;编码器e最终输出1024维的特征向量;
所述的生成器g:将隐向量表示作为输入,生成三维体素网格,其网络结构含有1个全连接层fc和3个三维转置卷积层convt;全连接层的输出是256×4×4×4维,其后设置一个bn层和relu激活函数;三维转置卷积层的核大小是5×5×5,步幅为2,输出通道分别是256、128、64和1,在每个三维转置卷积层之后设置一个bn层和relu激活函数;
所述的判别器d:试图区分生成器g输出的三维体素网格的渲染视图和数据集中的图像,进而提升重建质量,其网络结构含有4个二维卷积层和1个全连接层;4个卷积层的卷积核大小是5×5,步幅分别为1,输出通道数分别是256、512、1024和2048;在每个卷积层后面设置一个层归一化层ln层和一个leaky-relu激活函数;全连接层的输出是1维,其后设置一个sigmoid函数;判别器d的最终输出是生成图像的概率;
所述的渲染器p将三维体素网格和姿态作为输入,输出相应视角的渲染视图。
2.一种采用权利要求1所述系统的基于半监督学习的单视图三维重建方法,其特征在于,该方法包括:
步骤1、利用具有姿态和实例标记的图像数据集训练三维重建网络;
步骤2、利用无标记图像数据集训练三维重建网络,设计四个损失函数:图像重建损失函数lrec、三维重建损失函数lgt、隐向量表示的姿态不变损失函数llv、体素网格上的姿态不变损失函数lvi;
步骤3、利用无标记图像数据集训练三维重建网络;
所述的步骤1包括:
1a.假设从两个不同姿态p1和p2获取某个三维对象的一对图像x1,x2,将x1和x2作为编码器e的输入;
1b.编码器e将两个图像分别映射到隐向量空间,记作e(x1)和e(x2);
1c.生成器g从隐向量e(x1)和e(x2)中重建三维体素网格,记作g(e(x1))和g(e(x2));
1d.将姿态p1、p2分别和对应的三维体素网格g(e(x1))、g(e(x2)),作为渲染器p的输入,输出相应视角的渲染视图。
3.根据权利要求2所述的一种基于半监督学习的单视图三维重建方法,其特征在于,步骤2中所述的四个损失函数按照以下方式设计:
①.图像重建损失函数lrec:重建的三维体素网格根据某个相机姿态投影时生成的渲染视图应与基准图像保持一致;设:(x1,p1)和(x2,p2)是从三维模型采样的两个图像/姿态对;e(x1)表示编码器e根据输入图像x1生成的隐向量;g(e(x1))表示根据隐向量e(x1)重建的三维形状;那么,重建的三维形状向摄像机姿态p2投影,生成的渲染视图应该与输入图像x2保持一致,其它视图类似;为了解决这种一致性要求,定义重建损失函数lrec:
lrec=||p(g(e(x2)),p1)-x1||1 2 ||p(g(e(x1)),p2)-x2||1 2(1)
其中,||·||1 2=||·||1 ||·||2是
②.三维重建损失函数lgt:从两个图像重建的三维体素网格g(e(x1))和g(e(x2))应该基准三维模型vb保持一致性,定义三维重建一致性损失函数lgt:
lgt=||g(e(x1))-vb||1 2 ||g(e(x2))-vb||1 2(2)
③.隐向量表示的姿态不变损失函数llv:给定一个对象的两个随机抽样视图,编码器e应该能够忽略图像的姿态,将它们映射到相同的隐向量;定义隐向量相对于图像姿态的不变性损失函数llv:
llv=||e(x1)-e(x2)||2(3)
④.体素网格上的姿态不变损失函数lvi:由生成器g从同一对象的两个不同视图重建的三维体素网格应该保持一致性;定义基于体素网格上的姿态不变损失lvi:
lvi=||g(e(x1))-g(e(x2))||1 2(4)
在具有姿态标记的图像数据集上训练,试图最小化以下组合的损失:
lsemi-supervised=lrec αlgt βllv γlvi(5)
其中,α、β和γ分别是lgt、llv和lvi的权重;设α=β=γ=0.1。
4.根据权利要求2所述的一种基于半监督学习的单视图三维重建方法,其特征在于,步骤3中所述的利用无标记图像数据集训练三维重建网络,包括:
2a.生成器g根据给定的隐向量重建三维体素网格;
2b.利用渲染器p从随机视角p投影三维体素网格,并生成投影的渲染视图;
2c.分别更新生成器g和判别器d损失,利用对抗训练的思想让判别器d无法区分渲染视图与基准图像;
设计判别器d和生成器g的损失函数