相关申请的交叉引用
该申请要求于2019年1月11日提交的美国专利申请no.16/246,280的优先权,其公开内容通过引用整体并入本文。
背景技术:
许多现代计算设备(包括移动电话、个人计算机和平板)包括图像捕捉设备,诸如静物相机和/或摄像机。图像捕捉设备可以捕捉图像,诸如包括人、动物、风景、和/或物体的图像。
一些图像捕捉设备和/或计算设备校正或以其他方式修改捕捉的图像。例如,一些图像捕捉设备可以提供红眼校正,该红眼校正去除了使用强光(如闪光灯)捕捉的图像中可能存在的人和动物的眼睛发红等伪影。在捕捉的图像被校正后,校正后的图像可以被保存、显示、传输、打印到纸上、和/或以其他方式使用。
技术实现要素:
在一方面,提供了一种计算机实施的方法。计算设备接收至少前景物体的双像素图像。该双像素图像包括多个双像素。多个双像素中的双像素包括左侧像素和右侧像素,左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光。计算设备用于训练机器学习系统以确定与双像素图像相关联的深度图。计算设备提供经过训练的机器学习系统。
在另一方面,提供了一种计算设备。该计算设备包括一个或多个处理器和数据存储。该数据存储已经有计算机可执行指令存储在其上,这些计算机可执行指令在由一个或多个处理器执行时使计算设备执行功能。该功能包括:接收至少一个前景物体的双像素图像,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光;训练机器学习系统以确定与双像素图像相关联的深度图;以及提供经过训练的机器学习系统。
在另一方面,提供了一种产品。该产品包括一个或多个其上存储有计算机可读指令的计算机可读介质,这些计算机可读指令在由计算设备的一个或多个处理器执行时使该计算设备执行功能。该功能包括:接收至少一个前景物体的双像素图像,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光;训练机器学习系统以确定与双像素图像相关联的深度图;以及提供经过训练的机器学习系统。
在另一方面,提供了一种计算设备。该计算设备包括:用于接收至少前景物体的双像素图像的方法,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光;用于训练机器学习系统以确定与双像素图像相关联的深度图的方法;以及用于提供经过训练的机器学习系统的方法。
在另一方面,提供了一种计算机实施的方法。计算设备接收至少前景物体的双像素图像。该双像素图像包括多个双像素。多个双像素中的双像素包括左侧像素和右侧像素,左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光。双像素图像被提供给经过训练的机器学习系统,以确定用于双像素图像的多个双像素的深度图。计算设备用于基于双像素图像和深度图确定输出图像。
在另一方面,提供了一种计算设备。该计算设备包括一个或多个处理器和数据存储。该数据存储已经有计算机可执行指令存储在其上,这些计算机可执行指令在由一个或多个处理器执行时使计算设备执行功能。该功能包括:接收至少前景物体的双像素图像,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光;为经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图;以及基于双像素图和深度图确定输出图像。
在另一方面,提供了一种产品。该产品包括一个或多个其上存储有计算机可读指令的计算机可读介质,计算机可读指令在由计算设备的一个或多个处理器执行时使该计算设备执行功能。该功能包括:接收至少一个前景物体的双像素图像,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,并且该左侧像素和右侧像素都表示入射在用于捕捉双像素图像的单个双像素元件上的光;为经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图;以及基于双像素图和深度图确定输出图像。
在另一方面,提供了一种计算设备。该计算设备包括:用于接收至少一个前景物体的双像素图像的方法,该双像素图像包括多个双像素,其中多个双像素的双像素包括左侧像素和右侧像素,并且该左侧像素和右侧像素都表示入射在用于捕捉双像素图像的单个双像素元件上的光;用于为经过训练的机器学习系统提供双像素图像以确定用于双像素图像的多个双像素的深度图的方法;以及用于基于双像素图和深度图确定输出图像的方法。
前述发明内容仅是说明性的,而无意以任何方式进行限制。除了上述说明性方面、实施例和特征之外,通过参考附图和以下详细描述以及附图,其他方面、实施例和特征将变得显而易见。
附图说明
图1示出了根据示例实施例的包括相机的计算设备。
图2示出了根据示例实施例的双像素图像。
图3是示出了根据示例实施例的机器学习模型的训练和推理阶段的示意图。
图4是根据示例实施例的包括用于部分模糊图像的系统的框图的示意图。
图5示出了根据示例实施例的图4的系统的神经网络。
图6a示出了根据示例实施例的图5的神经网络的编码器函数。
图6b示出了根据示例实施例的图5的神经网络的另一编码器函数。
图7示出了根据示例实施例的图5的神经网络的解码器函数。
图8a示出了根据示例实施例的多相机设备。
图8b进一步示出了根据示例实施例的图8a的多相机设备。
图9是示出了根据示例实施例的用于使图8a的多相机设备的时钟同步的协议的消息流图。
图10是示出了根据示例实施例的由图8a的多相机设备使用重复请求的过程的消息流图。
图11是示出了根据示例实施例的由图8a的多相机设备使用单帧请求的过程的消息流图。
图12描绘了根据示例实施例的分布式计算架构。
图13是根据示例实施例的计算设备的框图。
图14描绘了根据示例实施例的布置为基于云的服务器系统的计算集群的网络。
图15是根据示例实施例的方法的流程图。
图16是根据示例实施例的另一方法的流程图。
具体实施方式
该申请描述了使用机器学习技术(诸如但不限于神经网络技术)选择性地模糊图像的一部分。在捕捉诸如人的物体的图像之后,可以修改捕捉的图像以进一步突出物体。一种用于修改图像以突出图像中描绘的物体的技术是模糊图像中的其他物体—所得到的选择性模糊的图像显示出了聚焦的前景物体(或多个物体),以及离焦的背景物体和/或景物,从而突出图像内的(多个)前景物体。因此,出现了与图像处理相关的技术问题,其涉及选择性地模糊已经获得的图像的一部分;例如,选择性地仅模糊已经获得的图像的背景部分。
深度图(可以是存储与场景物体的表面到视点的距离有关的信息的图或其他数据结构),可以用于部分地模糊已经获得的图像;例如,用于相机捕捉的图像的深度图可以指定与从相机到图像中捕捉的物体的表面的距离有关的信息,其中深度图可以在逐像素(或其它)基础上指定图像的信息。例如,深度图可以包括用于图像中的每一个像素的深度值,其中用于图像im的像素pix的深度图dm的深度值dv1表示从视点到由图像im中的像素pix描绘的一个或多个物体的距离。再如另一示例,图像im可以被划分为区域(例如,n×m像素的框,其中n和m是正整数),并且深度图可以包括图像中的每一像素区域的深度值;例如用于图像im的像素区域pixr的深度图dm的深度值dv2表示从视点到由图像im的像素区域pixr所描绘的一个或多个物体的距离。其他深度图以及图像的像素与深度图的深度值之间的对应关系也是可能的;例如,用于双像素图像的每一个双像素的深度图中的一个深度值。
为了部分地模糊图像,其深度或距相机的距离比由深度图的深度数据确定的(多个)前景物体更远的图像的一部分可以至少部分地被模糊。合适的模糊软件可以在保持前景物体处于锐聚焦的同时采用深度图对图像的背景进行自然且令人愉悦的深度相关的模糊。而且,图像的深度图可以在计算摄影、增强现实和图像处理方面具有其他的应用。
一种估计图像的深度图的常用方法涉及到使用两个相机。然而,深度图可以从由在光检测传感器上使用双像素的单相机拍摄的图像来估计;例如,提供自动对焦功能的相机。图像的双像素可以被认为是已经被分成两部分的像素,诸如左像素和右像素。然后,双像素图像是包括双像素的图像。例如,具有r行和c列像素的图像image1可以是和/或基于具有与图像image1的像素对应的r行和c列双像素的双像素图像dpi。
为了捕捉双像素,相机可以使用捕捉场景的两个略微不同的视图的传感器。在比较这两个视图时,前景物体可以看起来是静止的,而背景物体在被称为视差的效果中垂直移动。例如,由该人拍摄的人的“自拍”或图像通常具有该人的脸部作为前景物体,并且可以在背景中具有其他物体。因此,在比较自拍的两个双像素视图时,该人的脸部将看起来是静止的,而背景物体将看起来是垂直移动的。
另一种估计图像的深度图的常用方法涉及到使用专用的深度传感器。例如,飞行时间相机可以用于估计深度图。然而,当这些专用的深度传感器不可用时,这种方法就不起作用了。
双像素图像可以实现对单相机拍摄的图像的深度图的估计。一种从双像素图像计算深度的方法包括将一个双像素图像当作两个不同的单像素图像并且尝试匹配这两个不同的单像素图像。每个点的深度决定了其在两个视图之间的移动程度。因此,我们可以通过将一个视图中的每个点与其在另一个视图中的对应点进行匹配来估计深度。该方法被称为双目立体视觉。然而,因为场景点在视图之间几乎不移动,所以在双像素图像中找出这些对应关系是相当具有挑战性的。可以基于视差仅是图像中存在的许多深度线索(包括语义、散焦以及可能的其他线索)中的一个的观察来改善双目立体视觉。示例语义线索是相对靠近的物体比相对远的物体在图像中占据更多像素的推理。散焦线索是基于相对远离观察者(例如,相机)的点比相对靠近的点显得不那么清晰/模糊的观察的线索。
一种所提出的用于从双像素图像估计和/或计算深度的方法是使用诸如神经网络的机器学习技术来从双像素图像预测深度。特别地,可以将双像素图像提供给神经网络以训练神经网络来预测输入双像素图像的深度图。例如,神经网络可以是和/或可以包括卷积神经网络。神经网络可以利用视差线索,语义线索,和可能双像素图像的其他方面来预测输入双像素图像的深度图。
神经网络可以在相对大的图像数据集(如50,000或更多)上进行训练。数据集可以包括基本上同时从不同视点拍摄的物体的多张照片,以提供用于训练神经网络来从双像素图像预测深度图的地面真值数据。例如,多相机设备可以用于获得多个相机以略微不同的角度拍摄的物体的多张照片,以提供更好的地面真值深度数据来训练神经网络。在一些示例中,多相机设备可以包括多个移动计算设备,且每个移动计算设备都配备有可以拍摄双像素图像的相机。然后,作为神经网络的训练数据的所得到的双像素图像与使用其他移动计算设备(例如,用户的移动计算设备)上的相同或相似类型的相机拍摄的双像素图像相似。
作为特定示例,多相机设备可以包括五个相同移动计算设备;例如,五个相同的智能电话。双像素图像可以基本上同时由所有五个移动计算设备的相机同时捕捉;例如,在0.5-3毫秒(ms)的容差内。相机之间的同步确保可以针对动态场景计算深度;例如,具有移动物体的场景。
来自运动的结构和多视图立体技术可以用于从由多相机设备捕捉的双像素图像计算深度图。因为在多个方向上都存在视差,所以使用五个视点消除了光圈问题。相机的布置确保图像中的点通常在至少一个其他图像中可见,从而减少了没有对应关系的点。此外,多相机设备的相机之间的“基线”或距离大于用于捕捉典型双像素图像的传感器的基线,从而导致更加准确的深度估计。因此,使用五个同步视点可以获得高质量的深度图,该高质量的深度图则用作训练神经网络中的地面真值深度图。
作为训练神经网络的部分,损失函数可以用于相对于地面真值深度数据评估由神经网络提供的估计深度数据和/或估计深度图。该损失函数对于双像素数据中的深度模糊可以是不变的,因此使得神经网络能够从地面真值深度数据中学习。
一旦神经网络被训练,经过训练的神经网络就可以接收具有双像素数据的物体o的图像作为输入,并且为输入图像估计具有估计深度数据的深度图。然后,该深度图可以提供给模糊软件。该模糊软件可以使用深度图来模糊图像的背景部分,而无不模糊具有物体o的图像的前景部分,从而突出图像内的物体o。因此,选择性模糊已经获得的图像的一部分的图像处理相关的技术问题可以使用本文描述的技术来解决,该技术利用机器学习/神经网络来估计选择性模糊图像中使用的深度图。
本文描述的选择性模糊图像的技术可以通过移动计算设备来执行,诸如但不限于智能电话。例如,经过训练的神经网络可以提供给移动计算设备。然后,在移动计算设备拍摄双像素图像后,可以调用经过训练的神经网络来估计和提供用于双像素图像的深度图。然后,移动计算设备上的深度渲染软件可以使用深度图,以及可能物体分段数据(例如,在双像素图像内勾画出感兴趣的人或其他物体的轮廓的掩模)来选择性地模糊双像素图像。例如,用户可以应用模糊软件以通过模糊背景来将注意力吸引到前景中的一个(或多个)物体。然后可以显示、传送、存储和/或以其他方式利用选择性模糊的图像;例如印刷到纸上。
本文描述的这些技术通过选择性地模糊背景物体来提供具有前景物体的自然外观增强图像。使用如本文所述的机器学习技术(诸如神经网络的使用)能够对深度图进行估计,该深度图考虑了诸如视差的传统深度线索,也考虑了诸如但不限于语义线索和散焦线索的附加深度线索。因此,使用本文描述的机器学习技术以使用深度图生成的选择性模糊图像可以看起来比使用其他技术的选择性模糊图像更好。并且,本文描述的技术可以在移动设备上执行,从而使用户在图像被捕捉后几乎立即有选择地模糊图像。在捕捉图像的同一移动设备可以选择性地模糊图像的示例中,即使没有网络连接,也可以使用本文所描述的技术来进行图像的选择性模糊。
从双像素图像预测深度的机器学习技术
图1示出了根据示例实施例的包括相机110的计算设备100。相机110包括双像素光传感器120,其又具有r行×c列的双像素元件(dpe)的网格。图1显示了双像素光传感器120的第一行包括c个双像素元件130a、130b...130c,双像素光传感器120的第二行包括c个双像素元件132a、132b...132c,以此类推,直到到达包括c个双像素元件134a、134b...134c的双像素光传感器120的第r行。
当相机110被指示去捕捉环境(如环境中的人脸和/或其他物体的图像)的图像时,来自环境的入射光122进入相机110并到达双像素光传感器120。然后,双像素传感器120使用双像素元件130a...134c来捕捉和记录关于入射光122的信息。然后,相机110利用记录的关于入射光122的信息生成环境的图像,其在图1中示出为双像素图像124。
在图1的下部示出了到达双像素光传感器120的双像素元件134c的入射光122的示例。双像素光传感器120中的双像素元件中的每一个(包括双像素元件134c)可以包括两个光传感器。在双像素元件134c的示例中,这两个光传感器在图1中示出为左光传感器140和右光传感器142。
然后,入射光122到达双像素元件134c时,入射光122的第一部分到达并入射到左光传感器140,并且入射光122的第二部分到达并入射到右光传感器142——图1示出了到达左光传感器140的入射光122的第一部分作为左侧光122a,以及到达右光传感器142的入射光122的第二部分作为右侧光122b。当左侧光122a到达左光传感器140时,左光传感器140捕捉左侧光122a,并因此将捕捉的光记录为左侧像素124a。同样,当右侧光122b到达右光传感器142时,右光传感器142捕捉右侧光122b,并因此将捕捉的光记录为右侧像素124b。以及,双像素图像124包括来自双像素光传感器120中的每一个双像素元件的左侧像素和右侧像素,该双像素光传感器120包括左侧像素124a和右侧像素124b。
左侧光122a与到达右光传感器142的右侧光122b不同并且以与到达右光传感器142的右侧光122b(略微)不同的角度到达左光传感器140。当左侧光122a以与右侧光122b不同的角度到达时,左侧像素124a具有与右侧像素124b(略微)不同的视角。因此,由双像素图像124的所有左侧像素组成的双像素图像124的左侧图像将(略微)与由双像素图像124的所有右侧像素组成的双像素图像124的右侧图像不同。因此,视差将存在于双像素图像124的左侧图像与右侧图像之间。
图2示出了根据示例实施例的双像素图像200。双像素图像200包括左侧图像210和右侧图像220。图像可以具有最靠近观察者(例如,捕捉图像的相机)的前景或图像的部分、以及背景、或图像的远离观察者的部分。在某些情况下,前景和背景是一起构成整个图像的相互排斥的部分。
图2示出了双像素图像200具有前景和背景,因此,左侧图像210和右侧图像220均具有前景和背景。例如,双像素图像200的左侧图像210具有包括建筑物和树木的背景230a以及具有人作为前景物体240a。同样地,双像素图像200的右侧图像220具有也包括建筑物和树木的背景230b以及还具有人作为前景物体240b。
左侧图像210和右侧图像220两者均示出了相同的场景,该相同的场景具有相同的人作为前景物体,并且在背景中具有相同的建筑物和树木。然而,视差存在于左侧图像210和右侧图像220之间,其中该视差在被示出为左侧图像210与右侧图像220之间的前景物体的人的耳朵附近可能最明显。如上文至少在图1的上下文中所指示的,视差是由于针对左侧图像210捕捉的入射光的光方向与针对右侧图像220捕捉的入射光的光方向的(轻微)差异。
图3示出了根据示例实施例的系统300,该系统300说明了经过训练的(多个)机器学习模型332的训练阶段302和推理阶段304。一些机器学习技术涉及在输入训练数据集上训练一个或多个机器学习系统以识别训练数据中的模式并提供关于训练数据(中的模式)的输出推理和/或预测。所得到的经过训练的机器学习系统可以被简称为经过训练的机器学习模型或机器学习模型。例如,图3示出了训练阶段302,其中一个或多个机器学习系统320在训练数据310上被训练以成为一个或多个经过训练的机器学习模型332。然后,在推理阶段304期间,经过训练的机器学习模型332可以接收输入数据330和一个或多个(多个)推理/预测请求340(可能作为输入数据330的一部分),并且响应地提供一个或多个(多个)推理和/或(多个)预测350作为输出。
(多个)机器学习系统320可以包括但不限于:人工神经网络(例如,使用本文描述的置信度学习技术的本文描述的卷积神经网络、递归神经网络)、贝叶斯网络、隐马尔可夫模型、马尔可夫决策过程、逻辑回归函数、支持向量机、合适的统计机器学习算法、和/或启发式机器学习系统。在训练阶段302期间,(多个)机器学习系统320可以通过提供至少训练数据310作为训练输入使用训练技术(诸如但不限于无监督、监督、半监督、强化学习、迁移学习、增量学习和/或课程学习技术)来进行训练。
无监督学习涉及为(多个)机器学习系统320提供训练数据310的一部分(或全部)。然后,(多个)机器学习系统320可以基于提供的训练数据310的一部分(或全部)来确定一个或多个输出推理。监督学习可以涉及为(多个)机器学习系统320提供训练数据310的一部分,其中(多个)机器学习系统320基于提供的训练数据310的部分来确定一个或多个输出推理,并且基于与训练数据310相关联的正确结果来接受或校正(多个)输出推理。在一些示例中,(多个)机器学习系统320的监督学习可以由用于训练输入的一组规则和/或一组标签管理,并且该组规则和/或该组标签可以用于校正机器学习系统320的推理。
半监督学习可以涉及对训练数据310的部分但不是全部具有正确结果。在半监督学习期间,监督学习用于训练数据310的具有正确结果的一部分,并且无监督学习用于训练数据310的不具有正确结果的一部分。强化学习涉及(多个)机器学习系统320,该(多个)机器学习系统320可以涉及接收关于先前推理的奖励信号,其中该奖励信号可以是数值。在强化学习期间,(多个)机器学习系统320可以输出推理并接收奖励信号作为响应,其中该(多个)机器学习系统320被配置为试图最大化奖励信号的数值。在一些示例中,强化学习还利用提供表示由奖励信号随时间提供的数值的预期总和的数值的价值函数。
迁移学习技术可以涉及在一组数据上进行预训练并且附加地使用训练数据310来训练的经过训练的(多个)机器学习模型332。更具体地,(多个)机器学习系统320可以在来自一个或多个计算设备的数据上进行预训练,并且所得到的经过训练的机器学习模型被提供给计算设备cd1,其中该cd1旨在在推理阶段304期间执行经过训练的机器学习模型。然后,在训练阶段302期间,预训练的机器学习模型可以附加地使用训练数据310来训练,其中训练数据310可以从计算设备cd1的内核和非内核数据中获得。使用cd1的数据的训练数据310的(多个)机器学习系统320和/或预训练的经过训练的机器学习模型的这种进一步训练可以使用监督或无监督学习来执行。一旦已经在至少训练数据310上对(多个)机器学习系统320和/或预训练的机器学习模型进行了训练,训练阶段302就可以完成了。经过训练的所得的机器学习模型可以被利用为经过训练的(多个)机器学习模型332中的至少一个。
增量学习技术可以涉及为经过训练的(多个)机器学习模型332(以及可能(多个)机器学习系统320)提供输入数据,该输入数据用于继续扩展经过训练的(多个)机器学习模型332的知识。课程学习技术。可以涉及具有以特定顺序布置的训练数据的(多个)机器学习系统320,诸如首先提供相对容易的训练示例,并且继续进行逐渐更困难的训练示例,例如,类似于学校的课程或学习课程。用于训练(多个)机器学习系统320和/或经过训练的(多个)机器学习模型332的其他技术也是可能的。
在一些示例中,在训练阶段302完成后但在推理阶段304开始前,可以为计算设备cd1提供经过训练的(多个)机器学习模型332,其中经过训练的(多个)机器学习模型332尚未存在;例如,在训练阶段302完成后,可以将经过训练的(多个)机器学习模型332下载到计算设备cd1。
例如,存储经过训练的(多个)机器学习模型332的计算设备cd2可以通过以下方式中的一个或多个为计算设备cd1提供经过训练的(多个)机器学习模型332:向计算设备cd1通信传递经过训练的(多个)机器学习模型332的副本、为计算设备cd1制作经过训练的(多个)机器学习模型332的副本、提供对经过训练的(多个)机器学习模型332计算设备cd1的访问、和/或以其他方式为计算设备cd1提供经过训练的机器学习系统。在一些示例中,经过训练的(多个)机器学习模型332可以在由计算设备cd2提供后立即被计算设备cd1使用。在一些示例中,在将经过训练的(多个)机器学习模型332提供给计算设备cd1后,在计算设备cd1可以使用经过训练的(多个)机器学习模型332之前,可以安装和/或以其他方式准备经过训练的(多个)机器学习模型332以供使用。
在推理阶段304期间,经过训练的(多个)机器学习模型332可以接收输入数据330并生成和输出关于输入数据330的对应的(多个)推理和/或(多个)预测350。因此,输入数据330可以被用作对经过训练的(多个)机器学习模型332的输入,以向内核组件和非内核组件提供对应的(多个)推理和/或(多个)预测350。例如,经过训练的(多个)机器学习模型332可以生成(多个)推理和/或(多个)预测350以响应于(多个)推理/预测请求340。在一些示例中,经过训练的(多个)机器学习模型332可以由其他软件的一部分来执行。例如,经过训练的(多个)机器学习模型332可以由推理或预测守护程序执行,以便随时根据要求提供推理和/或预测。输入数据330可以包括来自执行经过训练的(多个)机器学习模型332的计算设备cd1的数据和/或来自除cd1之外的一个或多个计算设备的输入数据。
在一些示例中,输入数据330可以包括一个或多个源提供的图像的集合。图像的集合可以包括物体的图像(诸如人脸,其中人脸的图像是在不同的照明条件下拍摄的)、多个物体的图像、驻留在计算设备cd1上的图像、和/或其他图像。在特定的示例中,图像的集合可以包括一个或多个双像素图像。其他类型的输入数据也是可能的。
(多个)推理和/或(多个)预测350可以包括输出图像、深度图、数值、和/或其他由经过训练的(多个)机器学习模型332在输入数据330(和训练数据310)上操作而产生的输出数据。在一些示例中,经过训练的(多个)机器学习模型332可以使用输出(多个)推理和/或(多个)预测350作为输入反馈360。经过训练的(多个)机器学习模型332还可以依赖于过去的推理作为用于生成新推理的输入。
在一些示例中,(多个)机器学习系统320和/或经过训练的(多个)机器学习模型332可以使用一个或多个计算机处理器和/或终端设备协处理器来执行和/或加速。该终端设备协处理器可以包括但不限于一个或多个图形处理器(gpu)、一个或多个张量处理器(tpu)、一个或多个数字信号处理器(dsp)、和/或一个或多个专用集成电路芯片(asic)。这种终端设备协处理器可以加速(多个)机器学习系统320的训练和/或通过经过训练的(多个)机器学习模型332的(多个)推理和/或(多个)预测350的生成。在一些示例中,经过训练的(多个)机器学习模型332可以被训练、驻留和执行以在特定计算设备上提供(多个)推理和/或(多个)预测350,和/或以其他方式可以对特定计算设备进行推理。
在一些示例中,一个计算设备cd-solo可以包括经过训练的(多个)机器学习模型332,可能在计算设备cd_solo上进行(多个)机器学习系统320的训练之后。然后,计算设备cd_solo可以接收(多个)推理/预测请求340以提供(多个)推理和/或(多个)预测350和可以使用经过训练的(多个)机器学习模型332对输入数据330操作,以响应地提供(多个)推理和/或(多个)预测350,其中(多个)推理和/或(多个)预测350可以使用用户界面和/或显示器来提供,作为一个或多个电子通信,作为一个或多个打印文档等。
在一些示例中,两个或更多个计算设备cd_cli和cd_srv可以被用于提供(多个)推理和/或(多个)预测350。例如,第一计算设备cd_cli可以生成和向第二计算设备cd_srv发送(多个)推理/预测请求340。在从cd_cli接收到(多个)推理/预测请求340时,可能在对(多个)机器学习系统320进行训练之后,cd_srv可以使用经过训练的(多个)机器学习模型332对输入数据330进行操作,并且响应地确定(多个)推理和/或(多个)预测350。在确定(多个)推理和/或(多个)预测350后,cd-srv通过向cd_cli提供(多个)推理和/或(多个)预测350来响应来自cd_cli的请求。
使用双目立体视觉技术,可以基于左侧图像210中的像素与右侧图像220中的像素之间的差异来估计在双像素图像中捕捉的物体的表面的深度。双目立体视觉技术基于双像素图像200中的点看起来在左侧图像210和右侧图像220之间的移动程度来估计该点的深度。然而,因为场景点在左侧图像210和右侧图像220之间几乎没有移动,在双像素图像200中寻找这些对应关系可能是一个挑战。此外,双目立体视觉技术可能涉及克服光圈问题。即,通过小光圈观看场景可能使得难以(如果不是不可能的话)找到平行于立体基线的线(即,连接两个相机的线)的对应关系。换言之,当查看双像素图像200中的垂直线时,一个视图中的这些线相对于其它视图的任何所提出的移位看起来都大致相同。此外,双目立体视觉技术不考虑光学效应,如镜片的点扩散函数,并且忽略可用于估计深度的语义线索。
双目立体视觉可以基于视差线索仅是图像中存在的许多深度线索(包括语义线索和散焦线索)之一的观察来改进。此外,因为人类学会了解日常物体(如人和建筑物)的粗略尺寸,即使当在平面屏幕上观看图像时,人类也可以准确地辨别事物有多远。因为自拍中的人比背景物体(诸如建筑物)占据更多的像素,所以观看自拍的人可以推理出该人比建筑物更靠近相机。
设计手工算法以组合利用视差线索、语义线索以及可能其他线索来估计在图像(诸如双像素图像)中捕捉的物体的深度可能是困难的。然而,可以训练和利用机器学习系统,以利用语义、传统和可能的其他线索来估计在双像素图像中捕捉的物体的深度。例如,可以利用和训练卷积神经网络以接收双像素图像作为输入,并且随后生成估计在双像素图像中捕捉的物体的深度的深度图。
图4是根据示例实施例的包括用于部分模糊图像的系统402的框图400的示意图。系统402可以接收原始双像素图像410作为输入。可以向神经网络420提供原始双像素图像410,该神经网络420可以响应地生成用于原始双像素图像410的深度图430。可以向深度渲染软件440提供原始双像素410和深度图430,该深度渲染软件440可以使用深度图430来选择性地模糊原始双像素图像410;例如,通过模糊背景物体和不模糊前景物体。即,深度渲染软件440可以通过使用深度图430选择性的模糊原始双像素图像410来生成模糊的输出图像450。
神经网络420可以是上述在图3的上下文中讨论的系统300的(多个)机器学习系统320的示例。在训练后,神经网络420的经过训练的版本可以是经过训练的(多个)机器学习模型332的示例。在此具体的示例中,系统300的输入数据330可以包括原始双像素图像410,系统300的(多个)推理/预测请求340可以包括用于原始双像素图像410的深度图的请求,该请求可以是独立的请求或部分地模糊原始双像素图像410的请求的一部分;并且(多个)推理和/或(多个)预测350可以包括用于原始双像素图像410的深度图430。然后,深度图430可以被存储,传送和/或以其他方式提供和/或可以由深度渲染软件440使用以产生输出图像450。
图4还示出了双像素图像460,该双像素图像将人描绘为包括区域462和466的背景前面的前景物体464。在此示例中,向神经网络420提供双像素图像460作为输入;例如,原始双像素图像410的实例。
神经网络420响应性地生成用于双像素图像460的深度图470。在图4中的深度图470的图示中,颜色较浅的像素表示环境中相对靠近/更靠近用于捕捉环境中的双像素图像460的相机的物体,并且颜色较深的像素表示相对远离用于捕捉环境中的双像素图像460的相机的物体。例如,深度图470中的前景物体474使用颜色较浅的像素来示出,指示双像素图像460的前景物体464相对靠近用于捕捉双像素图像460的相机。再如另一示例,深度图470的区域472和476均使用颜色较深的像素示出,指示双像素图像460的区域462和466相对远离用于捕捉双像素图像460的相机。此外,区域472使用比用于示出区域476的像素颜色更深的像素来示出,指示与双像素图像460的区域472中描绘的物体相比,双像素图像460的区域462中描绘的物体相对远离用于捕捉双像素图像460的相机。
该示例继续将双像素图像460和深度图470提供给深度渲染软件440,请求仅模糊双像素图像的背景物体。然后,深度渲染软件440使用深度图470通过模糊双像素图像460中的像素来生成模糊的输出图像480,该双像素图像460中的像素在深度图470中的对应深度值指示那些像素描绘背景物体;例如,深度渲染软件440模糊双像素图像460中的像素,该双像素图像460中的像素的深度图470的深度值在图4中使用颜色较深的像素来描绘。
所得的模糊的输出图像480示出了具有很少或没有模糊的前景物体484(对应于前景物体464),并且示出了与区域486(对应于区域466)相比具有相对大量模糊的区域482(对应于区域462)。区域482中相对于区域486的相对大量的模糊对应于由神经网络420生成的深度图470中的深度值,神经网络420确定双像素图像460的区域462中的物体比双像素图像460的区域466中的物体更远离用于拍摄双像素图像460的相机。即,神经网络420生成的深度图470能够通过深度渲染软件440实现背景物体的非均匀模糊。此外,由神经网络420生成的深度图470具有比传统技术更少的误差(例如,背景物体的均匀模糊),并且因此使得深度渲染软件440能够向模糊的输出图像480中的背景物体提供更自然和令人愉悦的深度相关模糊。
在训练期间,神经网络420可以接收包括具有双像素深度数据的图像的训练图像,以产生诸如深度图430的估计深度图。例如,可以在训练图像的相对大的数据集(例如,50,000或更多)上对神经网络420进行训练。训练图像的数据集可以包括由使用一个相机的设备或由多相机设备(诸如本文中所描述的多相机设备)获得的双像素图像。
在一些示例中,用于训练神经网络420的训练图像可以包括至少前景物体的一个或多个双像素图像,其中该双像素图像可以包括多个双像素。多个双像素的双像素可以包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件(诸如由上述讨论的双像素元件134c生成的左侧像素124a和右侧像素124b)上的光。
在其他示例中,双像素元件可以提供可以具有除左侧像素和右侧像素之外的其他定向的双像素;例如,一些双像素传感器可以提供上像素和下像素而不是左侧像素和右侧像素。在其他示例中,双像素元件可以为每个图像像素提供两个以上子像素。
可以对神经网络420进行训练以确定与(多个)双像素图像相关联的深度图。神经网络420可以在训练后被提供,诸如上述在图3的上下文中关于提供经过训练的(多个)机器学习模型332所讨论的。在一些示例中,可以基于物体类型对(多个)双像素图像中的物体进行分类;例如,植物的一个或多个物体类型、建筑物的一个或多个物体类型、景观的一个或多个物体类型、动物的一个或多个物体类型、人的一个或多个物体类型(包括人脸的一个或多个物体类型)。在这些示例中的一些示例中,用于训练神经网络420的训练图像可以包括一个或多个双像素图像,该一个或多个双像素图像可以包括具有前景物体的图像,该前景物体具有一个或多个指定物体类型;例如,人的图像、人脸的图像、建筑物的图像等。
可以使用一个或多个损失函数对由神经网络420生成的估计深度图进行评估(例如,在训练期间)。(多个)损失函数可以评估由神经网络420关于地面真值深度数据生成的估计深度数据和/或估计深度图。(多个)损失函数对于双像素数据中的深度模糊度可以是不变的,并且因此使得神经网络能够从地面真值深度数据中学习。作为深度模糊度的示例,如果焦距或透镜特性(例如,透镜倾斜)也在捕捉之间改变,则具有不同深度的不同场景的两个图像可以产生同一组双像素图像。这些透镜特性可以因设备而异。这意味着给定的双像素对可以对应于一系列不同的深度图;即,深度仅可以被预测达到未知的尺度和偏移。本文描述的损失函数对于缩放和偏移值可以是不变的,因此只要预测在给定双像素对可能的深度图的范围内,就不会惩罚神经网络。经过训练的神经网络420提供的深度图可以保存场景中的物体的相对排序。
然后,可以在训练期间使用下面描述为损失函数的等式(1)、(2)、(3)和(4)中的一个或多个来对神经网络420进行评估;即,与地面真值深度数据相比,等式(1)、(2)、(3)和(4)中的一个或多个可以用于评估由神经网络420生成的深度图的正确性。
为了描述这些损失函数,设f(i)是表示由神经网络420在被训练以对双像素数据输入i进行操作时生成的预测深度图的函数。设g表示与双像素数据输入i相关联的地面真值深度图。例如,地面真值深度图g可以是使用本文描述的多相机设备生成的深度图。为了适当地训练神经网络420,预测深度图f(i)应尽可能接近地面真值深度图g。该要求可以由下面的等式(1)表示,其可以作为损失函数执行以在神经网络420的训练期间最小化:
等式(1)指示在输入i的每个像素处获取预测f(i)与地面真值g之间的差,并且该差在整个输入i上被平方以及求和。
然后,等式(1)不考虑双像素输入数据i不仅取决于场景的深度而且还取决于附加因素的事实,诸如但不限于,用于捕捉i的相机镜头的焦距、相机镜头的点扩散函数和/或相机光圈。由于这些附加因素,可能有产生相同的双像素数据i的两个不同的地面真值g和g’。由于神经网络420是确定性的并且仅采用一个输入i,因此神经网络420不能使用相同的输入i产生g和g’两者。事实上,如果用于神经网络420的训练数据具有(i,g)和(i,g’)对两者,使用等式(1)作为损失函数将使nn1预测对g和g’进行平均化处理的深度图,这将是不正确的。
可以通过假设薄透镜模型来确定神经网络420的另一损失函数,在该薄透镜模型下,g和g’通过等式(2)中所示的仿射映射相关联。
g′=ag+b(2)
其中a和b是取决于上述附加因子的标量值;例如,焦距,点扩散函数,和/或相机光圈。
等式(3)表达了基于等式(2)的仿射映射的损失函数。
类似于等式(1),等式(3)计算在输入i上平方以及求和的每像素差。然而,在等式(3)中,预测深度图f(i)由等式(2)的仿射映射修改,其中,a和b是被选择以给出在输入i上平方以及求和的最小每像素差的标量值。即,因为神经网络420无法在给定的相同的双像素数据i下区分g和g',等式(3)假设神经网络420只能预测直到未知仿射变换的深度。在(i,g)和(i,g’)上对神经网络420进行训练的情况下,对于具有相同预测f(i)的(i,g)和(i,g’)两者的情况,基于等式(3)的损失函数可以被设置为零。虽然使用等式(3)存在限制;例如,不能确定精确的深度值,使用基于等式(3)的损失函数训练的神经网络也可以提供有用的深度信息;例如,保留深度的相对排序。同样,由于等式(3)表示的最小化问题具有闭合形式解,那么可以有效地计算等式(3)。
进一步地,可以对等式(3)进行修改以合并用于地面真值w的每像素置信度,从而得到等式(4):
其中,等式(4)中的
图5示出了根据示例实施例的系统402的神经网络420。神经网络420可以是卷积编码器-解码器神经网络。在图5中,如左下所示的图例所示,神经网络420的编码器层以白色显示,解码器层以灰色显示,并且二维(2d)卷积(conv2d)层被示出为填充有对角线。在一些示例中,神经网络420的部分或全部可以使用为神经网络设计的专门的硬件和/或软件来实施;例如,专门的神经网络电路,具有支持神经网络的软件的软件库。
如上所述,神经网络420可以接收原始双像素图像410作为输入并响应地生成用于原始双像素图像410的深度图430作为输出。在图5的上下文中,原始双像素图像410可以输入作为像素的三维(3d)阵列(该像素的3d阵列在图5的左上处表示为“32h×32w×d”像素),其参数n’的值设置为等于“4d”。在神经网络420的上下文中,深度图430是深度值的3d阵列,该深度值的3d阵列在图5的右上处表示为用于深度图430的“16h×16w×4d”。
在神经网络420的描述中,h是与原始双像素图像410中的水平像素(或像素行)的数量相关联的正整数,w是与原始双像素图像410中的垂直像素(或像素列)的数量相关联的正整数,d是表示用于原始双像素图像410中描绘的像素的像素的数量的正整数,并且n’和n”均是正整数参数。在一个具体的示例中,h=32,w=42,以及d=2,即,原始双像素图像410是具有1024行×1344列×2像素(即,双像素)的阵列,并且对应的深度图430具有512行×672列×8个深度值。在一些示例中,神经网络420仅在双像素图像上进行训练,因此神经网络420的输入(诸如原始双像素图像410)包括其中d=2的图像。在其他示例中,h,w和/或d的其他值都是可能的。
在神经网络420的操作期间,可以在conv2d层510处接收原始双像素图像410。conv2d层510可以对原始双像素图像410执行2d卷积,以生成16h×16w×4d值阵列570a。可以提供16h×16w×4d值阵列570a作为步幅1编码器函数(s1ef)512的输入。图5指示用4d的输入参数和与4d相等的参数n’来调用s1ef512,以对16h×16w×4d的值阵列570a执行步幅1编码器操作。
图6a示出了根据示例实施例的步幅1编码器函数600,神经网络420可以使用该步幅1编码器函数600执行步幅1编码器操作。例如,步幅1编码器函数600可以用于实施s1ef512、s1ef522、s1ef524、s1ef532、s1ef534、s1ef542、s1ef544、s1ef552、和s1ef554中的一些或全部。
可以用输入参数“int”调用步幅1编码器函数600,以对输入h×w×n值阵列630执行步幅1编码器操作。在调用时,步幅1编码器函数600可以向conv2d层620和加法+参数整流器线性单元(aprelu)610两者提供h×w×n值阵列630。conv2d层620可以对具有步幅1的h×w×n值阵列630执行2d卷积,以生成h×w×int值阵列632。h×w×int值阵列632可以提供给可分离2d卷积层622,其可以对h×w×int值阵列632执行可分离2d卷积以生成h×w×int值阵列634。h×w×int值阵列634可以提供给conv2d层624,其可以对h×w×int值阵列634执行2d卷积,以生成h×w×n’值阵列636。然后,aprelu610可以在h×w×n值阵列630和h×w×n’值阵列636上均执行加法和参数线性单元操作,以生成h×w×n’值阵列640。然后,h×w×n’值阵列640可以由步幅1编码器函数600输出。
回到图5,s1ef512的输出可以是16h×16w×4d值阵列570b,其可以提供给步幅2编码器函数(s2ef)520和解码器函数(df)514二者(即,作为跳跃连接)。图5示出了可以用8d的输入参数和与16d相等的参数n’调用s2ef520,以对16h×16w×4d值阵列570b执行步幅2编码器操作。
图6b示出了根据示例实施例的步幅2编码器函数s2ef650,神经网络420可以使用该步幅2编码器函数s2ef650来执行步幅2编码器操作。例如,步幅2编码器函数650可以用于实施s2ef520,s2ef530,s2ef540和s2ef550中的一些或全部。
可以用一个输入参数“int”来调用步幅2编码器函数650,以对输入2h×2w×n值阵列680进行操作。在调用时,步幅2编码器函数650可以向最大池化(maxpool)层660和conv2d层670两者提供2h×2w×n值阵列680。maxpool层660可以对2h×2w×n值阵列680执行最大池化操作以生成h×w×n值阵列682。conv2d层620可以对h×w×n值阵列680执行具有步幅2的2d卷积以生成h×w×int值阵列684。可以向可分离2d卷积层672提供h×w×int值阵列684,其可以对h×w×int值阵列684执行可分离2d卷积以生成h×w×int值阵列686。然后,可以向conv2d层674提供h×w×int值阵列686,其可以对h×w×int值阵列686执行2d卷积以生成h×w×n’值阵列688。h×w×n值阵列682和h×w×n’值阵列688均可以提供给aprelu662。aprelu662可以对h×w×n值阵列682和h×w×n’值阵列688两者执行加法和参数线性单元操作以生成h×w×n’值阵列690。然后,h×w×n’值阵列690可以由步幅2编码器函数650输出。
回到图5,s2ef520的输出可以是8h×8w×16d值阵列572a。然后,可以用8d的输入参数和与16d相等的参数n’来调用s1ef522,以对值阵列572a执行步幅1编码器操作,以生成8h×8w×16d值阵列572b。可以用8d的输入参数和与16d相等的参数n’来调用s1ef524,以对值阵列572b执行步幅1编码器操作,以生成8h×8w×16d值阵列572c。可以将值阵列572c提供给s2ef530和df526两者(即,作为跳跃连接)。
可以用8d的输入参数和与32d相等的参数n’来调用s2ef530,以对8h×8w×16d值阵列572c执行步幅2编码器操作。s2ef530的输出是4h×4w×32d值阵列574a。然后,可以用8d的输入参数和与32d相等的参数n’来调用s1ef532,以对值阵列574a执行步幅1编码器操作,以生成4h×4w×32d值阵列574b。可以用8d的输入参数和与32d相等的参数n’来调用s1ef534,以对值阵列574b执行步幅1编码器操作,以生成4h×4w×32d值阵列574c。可以将值阵列574c提供给s2ef540和df536(即,作为跳跃连接)。
可以用16d的输入参数和与64d相等的参数n’来调用s2ef540,以对4h×4w×32d值阵列574c执行步幅2编码器操作。s2ef540的输出可以是2h×2w×64d值阵列576a。然后,可以用16d的输入参数和与64d相等的参数n’来调用s1ef542,以对值阵列576a执行步幅1编码器操作,以生成2h×2w×64d值阵列576b。可以用16d的输入参数和与64d相等的参数n’来调用s1ef544,以对值阵列576b执行步幅1编码器操作,以生成2h×2w×64d值阵列576c。可以将值阵列576c提供给s2ef550和df546(即,作为跳跃连接)。
可以用16d的输入参数和与64d相等的参数n’来调用s2ef550,以对2h×2w×64d值阵列576c执行步幅2编码器操作。s2ef550的输出可以是h×w×64d值阵列578a。然后,可以用16d的输入参数和与64d相等的参数n’来调用s1ef552,以对值阵列578a执行步幅1编码器操作,以生成h×w×64d值阵列578b。可以用16d的输入参数和与64d相等的参数n’来调用s1ef554,以对值阵列578b执行步幅1编码器操作,以生成h×w×64d值阵列578c。
可以将值阵列578c提供给df546。图5指示可以用16d的输入参数、与64d相等的参数n’以及与64d相等的参数n”来调用df546,以对值阵列576c和值阵列578c执行解码器操作。
图7示出了根据示例实施例的解码器函数700,神经网络420可以使用该解码器函数700来执行解码器操作。例如,解码器函数700可以用于实施df514、df526、df536、和df546中的一些或全部。
可以用一个输入参数“int”来调用解码器函数700,以对两个输入值阵列(h×w×n值阵列730和h/2×w/2×n’值阵列734)执行解码器。在调用时,解码器函数700可以向可分离2d卷积层710提供h×w×n值阵列730,其可以对值阵列730执行可分离2d卷积以生成h×w×int值阵列732。解码器函数700可以向转置2d卷积层720提供w/2×n’值阵列734,其可以对值阵列734执行转置2d卷积以生成h×w×int值阵列736。可分离2d卷积层722可以对h×w×int值阵列736执行可分离2d卷积以生成h×w×int值阵列738。aprelu610可以对h×w×int值阵列732和h×w×int值阵列738两者执行加法和参数线性单元操作,以生成h×w×n”值阵列740。然后,h×w×n”值阵列740可以由解码器函数700输出。
回到图5,df546的输出可以是2w×2w×64d值阵列576d,其可以提供给df536。可以用8d的输入参数、与32d相等的参数n’、以及与32d相等的参数n”来调用df536,以对值阵列574c和值阵列576d执行解码器操作。df536的输出可以是4w×4w×32d值阵列574d,其可以提供给df526。
可以用8d的输入参数、与16d相等的参数n’、以及与16d相等的参数n”来调用df526,以对值阵列572c和值阵列574d执行解码器操作。df526的输出可以是8w×8w×16d值阵列572d,其可以提供给df514。
可以用4d的输入参数、与4d相等的参数n’、以及与4d相等的参数n”来调用df514,以对值阵列570b和值阵列572d执行解码器操作。df514的输出可以是16w×16w×4d值阵列570c,其可以提供给conv2d层516。conv2d层516可以执行16w×16w×4d值阵列570c的2d卷积以生成组成深度图430的16w×16w×4d值阵列。然后,深度图430可以从神经网络420输出;例如,如上所讨论的,由深度渲染软件440使用。
示例多相机设备
图8a示出了多相机设备800,该多相机设备可以以不同的视点获得物体的多个双像素图像;例如,提供地面真值深度数据以训练神经网络420。多相机设备800可以包含多个移动计算设备,例如,移动计算设备810和移动计算设备820,其中的每一个都配备有能拍摄双像素图像的相机,例如,移动相机812和移动相机822。所得的可以用作神经网络420的训练数据的双像素图像与使用其他移动计算设备(例如,用户移动计算设备)上的相同的或相似类型的相机拍摄的双像素图像类似。
多相机设备800中的移动计算设备可以用各种方法(诸如螺钉或粘合剂)物理地接合在一起作为单结构的部分。多相机设备800中的一些或所有移动计算设备可以以系统的方式间隔开,以确保每个移动计算设备捕捉物体的不同视点。例如,多相机设备800可经布置使得四个相机相对于xy平面围绕中心相机间隔开(即,相机在上/下/左/右方向上间隔开,每一相机含有到中心相机的小基线)。因此,移动计算设备810可以捕捉左侧视点,并且移动计算设备820可以捕捉右侧视点。如上所述,因为在多个方向上存在视差,不同视点的使用消除了光圈问题。从(略微)不同的视点捕捉图像还确保了图像中的点可以在至少一个其他图像中可见,从而导致较少的没有对应关系的点。当由多相机设备800来拍摄物体的多个双像素图像,来自运动的结构和多视图立体技术可用于从捕捉的双像素图像计算高质量的深度图。因此,多相机设备800的使用可以得到高质量深度图,该高质量深度图可以作为训练神经网络420的地面真值深度图。
使用来自运动的结构和多视图立体技术来获取高质量深度图可以涉及使用多相机设备800来同时从视点中的每一个(即,多相机设备800上的相机中的每一个)捕捉物体的图像。在相机之间没有紧密时间同步的情况下,图像中的物体可以移动和/或捕捉的图像之间的光照可以变化,这可能会降低所得到的地面真值深度图的质量。例如,移动相机812可以在时间t捕捉物体a的第一视点,以及从相机延迟来看,移动相机822可以在时间t+100ms捕捉物体a的第二视点。即使有100ms这样小的延迟,在t+100ms捕捉第二视点也可以为物体a呈现出与t时间完全不同的图像环境。
一种用多台相机拍摄同步照片的方法是使用配置有固定位置的有线硬件触发器的专门设备。然而,这种方法可能需要专门的布线和其他不容易四处移动的重型设备,从而限制可由多相机设备800捕捉的物体的类型且使数据集的质量降级。更重要的是,为了神经网络420能有效地预测深度图,多相机设备800从表示将使用神经网络420的设备的移动计算设备收集训练数据是有用的。例如,多相机设备800的移动计算设备810和820可以是通常利用神经网络420的移动计算设备(例如,现成的智能电话)。
然而,利用代表性移动计算设备的方法可能面临难以解决的在设备中的每一个上发生的硬件/软件延迟。例如,使用移动计算设备(如自拍杆触发器)的音频端口的同步方法可能面临100ms左右的可变延迟。其他包括使用音频波形、bluetoothtm通信以及gps的方法可以显示相似的高可变延迟。
本文描述了一种使用代表性移动计算设备在没有附加硬件并且没有硬件/软件延迟的情况下捕捉同步数据的方法。例如,这种方法可以包括多相机架构以解决移动计算设备中的每一个之间的网络延迟和解决每个移动计算设备内的操作系统延迟。
图8b示出了用于促进多相机架构830的多相机设备800中的移动计算设备的布置。多相机架构830可以包括单个主设备832和多个客户端设备834,例如,客户端设备834a、客户端设备834b和客户端设备834c。主设备832可以向客户端设备834广播命令以获得双像素图像,而不是与多相机设备800上的每个设备交互。
可以基于多相机设备800上的设备中的每一个的物理位置(例如,可将多相机设备800的左上方处的装备指定为主装备)和/或通过用户选择而从多相机设备800的设备当中指定主设备832。例如,用户选择可以包括通过与多相机设备800上的设备的接口交互来指定主设备。在指定时,主设备832可以被配置为充当与客户端设备834连接的wifitm热点。可替代地,多相机设备800的设备可以与独立的wifitm路由器连接,其可以自动地指定主设备832。在一些示例中,每图像收集会话仅选择一次用于多相机架构830的主设备。
为了开始通信,主设备832和客户端设备834可以使用例如传输控制协议(tcp)或wifitm保护接入2(wpa2)的标准网络协议来建立主设备832和客户端设备834中的每一个之间的通信链路。一旦进行连接,主设备832和客户端设备834就可以通过修改的网络时间协议(ntp)同步进行通信,以估计网络和操作系统延迟。这些延迟可以确定客户端设备834要添加的正确时间偏移,以便与主设备832的时钟同步。
图9是示出了根据示例实施例的用于同步多相机设备830的时钟的协议的消息流图。该协议在框902处开始。在框902处,选择了主设备832和建立了通信机制(例如,wifitm热点,wifitm路由器)。在框906,主设备832确定了时间,将该时间记录在时间戳t1中,并向客户端设备900发送时间戳t1,该时间戳t1在时间戳t2中记录的时间到达客户端设备900。因此,从主设备832到客户端设备900的延迟可被计算为在时间戳t1和t2中记录的时间差;例如,t2-t1。设o表示主设备832和客户端设备900之间的偏移且设d表示消息在主设备832和客户端设备900之间的传送时间,t2-t1可以确定为o+d。
在908处,客户端设备900确定时间戳t3并向主设备832发送时间戳t3,该时间戳t3在时间戳t4到达主设备832。在910处,主设备824向客户端设备900发送时间戳t4。因此,从客户端设备834到主设备832的延迟可以计算为t4-t3,其可以被确定为o+d。在框912处,客户端设备900利用上述关系确定正确偏移值o。然后,客户端设备900使用偏移值o来使其时钟与主设备832同步。在914处,客户端设备900向主设备832传送偏移值o。
在框916处,广播触发器由主设备832提供(例如,响应于点击按钮来提供广播触发器以捕捉双像素图像)。在918处,主设备832向客户端设备900广播未来触发时间t(例如,在未来500ms处执行触发)。然后,客户端设备900等待至时间t来调用触发器。
值得注意的是,客户端设备900是为了示例的目的。客户端设备900可以由客户端设备834的任何设备来体现。而且,框902-914可以在所有客户设备834上同时实施,这样主设备832可以接收所有客户设备834的计算的偏移。因此,作为从所有客户端设备834接收计算的偏移的结果,主设备832可以将未来触发时间t设置为大于最大客户端偏移,以便允许网络延迟。作为一个示例计算,假设最大客户端偏移被确定为550ms。从而,未来触发时间t的值可以设置为t>550ms。因此,由于客户端设备834的时钟与主设备832同步,因此所有触发器可以在相同的未来时间t执行,并且所有客户端设备834可以同时捕捉场景,以及捕捉场景的一组同步图像。
在一些实例中,多相机设备800的设备可以使用硬件时间戳;然而,硬件时间戳可能需要在客户端设备上使用专用硬件和操作系统。因此,为了维持多相机设备800上的代表性设备,在一些示例中,上述过程可以利用软件时间戳。例如,客户端设备834可以向主设备832周期性地发送心跳消息,以在时钟漂移以及网络延迟作为软件时间戳的一部分而变化时更新偏移。
然而,即使如图9中示出了多相机设备800中的时钟同步,可变延迟可能存在于捕捉双像素图像的请求和相机对此请求的响应之间。该延迟可能由于客户端设备的操作系统而发生;例如,在处理并发任务时。
可以利用重复请求来解决操作系统延迟。通过重复请求,客户端设备的操作系统可以一次向相机传送一组请求参数(例如,请求双像素图像的参数),并且由相机的硬件来保存这些参数。然后,相机可以以小变化捕捉频率周期性地捕捉双像素图像直至请求被取消。这可以防止操作系统始终延迟每个新的双像素图像请求。
在一些示例中,当请求参数首先被递送到相机的硬件时,可能存在由操作系统引入的可变延迟。然而,可以通过以下方式来解决该可变延迟:通过采样来推动周期性图像序列以与特定相位对齐:当图像序列的相位大于期望阈值时,发出另一个重复请求并再次尝试。
图10是示出了根据示例实施例的由多相机设备830使用重复请求的过程的消息流图。该过程在1004处开始。在1004处,多相机设备830的主设备832可以向客户端设备的操作系统发出触发请求以捕捉图像。该触发请求可以包含期望曝光时间e、图像序列d的期望相位、期望同步精度p、和/或其他参数。在框1006处,操作系统1000可以生成重复请求并向相机1002发送该重复请求。例如,重复请求可以包含期望曝光时间e,和可能其他参数。在框1008处,重复请求可能被操作系统1000延迟(例如,当操作系统1000正在执行其他任务时)。在步骤1010,重复请求可以由相机1002接收,该相机按照重复请求行动并且开始周期性地捕捉图像。在1010处,相机1002可以向操作系统1000发回第一图像时间戳t_1(指示序列中的第一图像被捕捉的时间)。在框1012处,操作系统1000可以计算序列相位以确定从其周期性地捕捉图像的相对偏移。例如,曝光时间e=50ms,在a_150ms、a_2=100ms、a_3=150ms时捕捉图像,可能具有序列相位s=0。在另一个示例中,曝光时间e=50ms,在b_175ms、b_2=125ms、b_3=175ms时捕捉图像,可能具有序列相位s=25。因此,假设在时间a以曝光时间e捕捉示例图像,序列相位s可以确定为s=a–e*k,其中k是整数,对于其来说,|a-e*k|是最小的。
作为在框1012处的序列相位的示例计算,假设操作系统1000在时间t_0=0发出重复请求,其中曝光时间e=50ms,期望同步精度p=10ms,并且假设第一时间时间戳具有时间t_1=75ms(因此,第二图像在t_2=125ms到达,以及第三图像在t_3=175ms到达)。因此,操作系统1000的延迟可以计算为t_1–e=75ms–50ms=25ms。如果期望相位d=0且曝光时间e=50ms,那么重复请求可以具有75ms–50ms=25ms的序列相位,该序列相位大于期望同步精度p=10ms。也就是说,合适的序列相位将在d-p到d+p范围内。
在框1014处,一旦确定序列相位大于期望精度,操作系统1000可以利用相机1002重新发起重复请求。在框1016处,重新发起的重复请求可以再次被操作系统1000延迟。在框1018处,重复请求可以由相机1002来接收,该相机按照重复请求行动并开始周期性地捕捉图像。相机1002向操作系统1000发回第一图像时间戳x_1(指示新序列中的第一图像被捕捉的时间)。在框1020处,操作系统计算序列相位。
作为在框1020处的序列相位的示例计算,假设操作系统1000在时间x_0=345ms发出重复请求,其中曝光时间e=50ms,期望同步精度p=10ms,并且假设第一时间戳x_1=397ms(因此,第二图像在x_2=447ms到达,以及第三图像在x_3=497ms到达)。因此,操作系统1000的延迟可以在x_0–e=397–345=52ms计算。如果期望相位d=0且曝光时间e=50ms,那么重复请求可以具有397ms–400ms=-3ms的序列相位。该序列相位小于期望同步精度p=10ms(例如,在d-p到d+p的范围内),这指示序列相位充分对齐。因此,在框1022处,操作系统1000向主设备832通知相位现在是对齐的。
在一些示例中,图10的过程可以适合于用给定曝光时间e的高优先级单个请求临时中断重复请求。例如,在具有25ms的计算的序列相位的重复请求之后,可以注入单帧以将序列中的后来的图像延迟大约预定时间量,而不是重新发起重复请求。可以继续注入额外的单帧直至重复请求序列相位达到期望精度。
图11示出了根据示例实施例的由多相机设备830使用单帧请求的过程的消息流图。该过程在1102处开始。在1102处,多相机设备830的主设备832可以向客户端设备的操作系统1000发出触发请求以捕捉图像。该触发请求可以包含期望曝光时间e、图像序列d的期望相位、期望同步精度p和/或其他参数。在框1104处,操作系统1000可以生成重复请求并向相机1002发送该请求。例如,重复请求可以包含期望曝光时间e,和可能其他参数。在框1106处,重复请求可能被操作系统1000延迟(例如,当操作系统1000正在执行其他任务时)。在1108处,重复请求可以由相机1002接收,该相机1002根据重复请求行动并开始周期性地捕捉图像。相机1002向操作系统1000发回第一图像时间戳y_1(指示序列中的第一图像被捕捉的时间)。在步骤1110,操作系统1000计算序列相位。
为了示出在1110处的计算,例如,假设操作系统1000在时间y_0=0发出重复请求,其中曝光时间e=50ms,期望同步精度p=10ms,并且假设第一时间时间戳y_1=75ms(因此,第二图像在y_2=125ms到达,以及第三图像在y_3=175ms到达)。因此,操作系统1000的延迟可以计算为y_1–e=75ms–50ms=25ms。如果期望相位d=0且曝光时间e=50ms,那么重复请求具有75ms–50ms=25ms的序列相位,该序列相位大于期望同步精度p=10ms。也就是说,合适的序列相位将在d-p到d+p范围内。
在框1112处,一旦确定序列相位大于期望精度,操作系统1000可以发起捕捉单帧的高优先权请求,以用单帧来偏移序列相位。基于上述的框1110处的示例,该高优先级请求可以是捕捉具有25ms+50ms=75ms的曝光时间的单帧的请求。在这个示例中,75ms的单帧可以偏移在1110处25毫秒的示例序列相位,以使新的序列相位为0;例如,75ms+25ms=100ms。当曝光时间e=50ms,新的序列相位现在是0ms。在框1114处,高优先权请求可以被操作系统1000延迟。在1116处,高优先权请求由相机1002接收,相机1002可以响应地捕捉单帧以将单帧插入到重复请求的图像序列中,从而将图像序列延迟75ms。一旦单帧完成,相机1002向操作系统1000发回第一图像时间戳z(指示移位序列中的第一图像被捕捉的时间)。在步骤1118,操作系统1000可以以与上述类似的方法计算序列相位。在步骤1120,在指示序列相位充分对齐时,操作系统1000通知主设备832该相位现在被对齐。
在一些示例中,操作系统1000和相机1002可以在任何客户端设备834中体现。而且,图10和图11的部分或全部可以在所有客户端设备834上同时实施,以使得主设备832可以接收所有客户端设备834的相位对齐的通知。因此,一旦向主设备832通知所有客户端834是相位对齐的,主设备832可以像以前一样调度触发器,在此之后客户端设备834可以向其目的地发送捕捉的图像(例如,保存到磁盘、通过互联网传输、发送到下游应用等)。此外,由于客户端设备836的时钟可以与主设备832保持同步(如图9所述),用于客户端设备836中的每一个的相位目标将等于客户端设备的时钟偏移和期望曝光时间e的总和。因此,相位对齐仅在每次用户改变期望曝光时间e时是必要的。
示例数据网络
图12描绘了根据示例实施例的分布式计算架构1200。分布式计算架构1200包括服务器设备1208、1210,该服务器设备1208、1210被配置为经由网络1206与可编程设备1204a、1204b、1204c、1204d、1204e通信。网络1206可以对应于局域网(lan),广域网(wan),无线局域网(wlan),无线广域网(wwan),公司内部网,公共互联网,或配置为在联网的计算设备之间提供通信路径的其他类型的网络。网络1206还可以对应于一个或多个lan、wan、公司内部网和/或公共互联网的组合。
虽然图12只示出了5个可编程设备,分布式应用架构可以服务数十个、数百个或数千个可编程设备。而且,可编程设备1204a、1204b、1204c、1204d、1204e(或其他额外的可编程设备)可以是任何一种计算设备,诸如移动计算设备,桌上型计算机,可穿戴计算设备,头戴式设备(hmd),网络终端,移动计算设备等。在一些示例中,诸如可编程设备1204a、1204b、1204c、1204d、1204e所示,可编程设备可以直接与网络1206连接。在其他示例中,诸如可编程设备1204d所示,可编程设备可以经由相关联的计算设备(诸如可编程设备1204c)间接与网络1206连接。在这个示例中,可编程设备1204c可以充当相关联的计算设备以在可编程设备1204d与网络1206之间传递电子通信。在其他示例中,诸如可编程设备1204e所示,计算设备可以是交通工具的一部分和/或在交通工具内部,该交通工具诸如汽车、卡车、公共汽车、船或轮船、飞机等。在图12中未示出的其他示例中,可编程设备可以直接和间接地与网络1206连接。
服务器设备1208、1210可以被配置为执行如可编程设备1204a-1204e所请求的一个或多个服务。例如,服务器设备1208和/或1210可以为可编程设备1204a-1204e提供内容。该内容可以包括但不限于web页、超文本、脚本、诸如编译软件的二进制数据、图像、音频和/或视频。该内容可以包括压缩和/未压缩内容。该内容可以是加密的和/或未加密的。其他类型的内容也是可能的。
作为另一示例,服务器设备1208和/或1210可以向可编程设备1204a-1204e提供对用于数据库、搜索、计算、图形、音频、视频、万维网/互联网利用、和/或其他功能的软件的访问。服务器设备的许多其他示例也是可能的。
计算设备架构
图13是根据示例实施例的计算设备1300的框图。具体地,图13中所示的计算设备1300可以被配置为执行计算设备100、相机110、双像素图像200、系统300、402(包括但不限于神经网络420)、步幅1编码器函数600、步幅2编码器函数650、解码器函数700、多相机设备800、830、分布式计算架构1200和/或方法1500、1600的至少一个功能和/或与计算设备100、相机110、双像素图像200、系统300、402(包括但不限于神经网络420)、步幅1编码器函数600、步幅2编码器函数650、解码器函数700、多相机设备800、830、分布式计算架构1200和/或方法1500、1600相关的至少一个功能。
计算设备1300可以包括用户接口模块1301、网络通信模块1302、一个或多个处理器1303、数据存储1304、一个或多个相机1318、一个或多个传感器1320、以及电力系统1322,所有这些可以经由系统总线、网络或其他连接机构1305链接在一起。
用户接口模块1301可以被用来向外部用户输入/输出设备发送数据和/或从外部用户输入/输出设备接收数据。例如,用户接口模块1301可以被配置为向用户输入设备发送数据和/或从用户输入设备接收数据,该用户输入设备诸如触摸屏,计算机鼠标,键盘,辅助键盘,触摸板,跟踪球,操纵杆,语音识别模块,和/或其他类似的设备。用户接口模块1301还可以被配置为向用户显示设备提供输出,该用户显示设备诸如一个或多个屏幕(包括触摸屏)、阴极射线管(crt)、液晶显示器、发光二极管(led)、使用数字光处理(dlp)技术的显示器、打印机、电灯泡、和/或其他类似的设备。用户接口模块1301还可以被配置为利用诸如扬声器、扬声器插孔、音频输出端口、音频输出设备、耳机和/或其他类似设备的设备来生成可听输出。用户接口模块1301可以进一步被配置有可生成触觉输出的一个或多个触觉设备,该触觉输出诸如振动和/或可通过与计算设备1300的触摸和/或物理接触检测的其他输出。在一些示例中,用户接口模型1301可以用于提供用于利用计算设备1300的图形用户界面(gui)。
网络通信模块1302可以包括一个或多个设备,该一个或多个设备提供可配置为经由网络进行通信的一个或多个无线接口1307和/或一个或多个有线接口1308。(多个)无线接口1307可以包括一个或多个无线发送器、接收器、和/或收发器,诸如bluetoothtm收发器、
在一些示例中,网络通信模块1302可以被配置为提供可靠的、安全的、和/或已认证的通信。对于本文描述的每个通信,可以提供用于促进可靠通信(例如,有保证的消息递送)的信息,其可能作为消息报头和/或报尾的一部分(例如,分组/消息序列信息、封装报头和/或报尾、大小/时间信息、以及诸如循环冗余校验(crc)和/或奇偶校验值的传输验证信息)。可以使用一个或多个密码协议和/或算法来保护(例如,编码或加密)和/或解密/解码通信,该一个或多个密码协议和/或算法诸如但不限于数据加密标准(des)、高级加密标准(aes)、rivest-shamir-adelman(rsa)算法、迪菲-赫尔曼算法、诸如安全套接层(ssl)或传输层安全(tls)的安全套接协议、和/或数字签名算法(dsa)。也可以使用其他密码协议和/或算法、或者使用除了本文列出的那些之外的其他密码协议和/或算法来保护(然后解密/解码)通信。
一个或多个处理器1303可以包括一个或多个通用处理器和/或一个或多个专用处理器(例如,数字信号处理器(dsp)、张量处理器(tpu)、图形处理器(gpu)、以及应用专用集成电路(asic)等)。一个或多个处理器1303可以被配置为执行包含在数据存储1304中的计算机可读指令1306和/或如本文所述的其他指令。
数据存储1304可以包括可以由一个或多个处理器1303中的至少一个读取和/或访问的一个或多个非暂时性计算机可读存储介质。一个或多个非暂时性计算机可读存储介质可以包括诸如光学、磁性、有机或其他存储器或光盘存储的易失性和/或非易失性存储组件,这些组件可以全部或部分地与一个或多个处理器1303中的至少一个集成。在一些示例中,数据存储1304可以使用单个物理设备(例如,一个光学、磁性、有机或其他存储器或光盘存储装置)来实施,而在其他示例中,数据存储1304可以使用两个或更多个物理设备来实施。
数据存储1304可以包括计算机可读指令,和可能附加的数据。在一些示例中,数据存储1304可以包括执行本文描述的方法、场景和技术的至少一部分和/或本文描述的设备和网络的功能的至少一部分所需的存储。在一些示例中,数据存储1304可以包括用于一个或多个机器学习系统和/或一个或多个经过训练的机器学习模型1312(例如,一个或多个未训练的、部分训练的和/或完全训练的机器学习系统,诸如神经网络420的一个或多个实例)的存储。特别是在这些示例中,计算机可读指令1306可以包括当由(多个)处理器1303执行时使得计算设备1300能够提供一个或多个机器学习系统和/或一个或多个经过训练的机器学习模型1312的一些或全部功能的指令。
在一些示例中,计算设备1300可以包括(多个)相机1318。(多个)相机1318可以包括诸如静物相机和/或摄像机的一个或多个图像捕捉设备,该图像捕捉设备被配备以捕捉光并将捕捉到的光记录在一个或多个图像中;即,(多个)相机1318可以生成捕捉的光的(多个)图像。一个或多个图像可以是一个或多个静止图像和/或在视频图像中使用的一个或多个图像。(多个)相机1318可以捕捉作为可见光、红外辐射、紫外光和/或作为一个或多个其他频率的光发射的光和/或电磁辐射。在一些示例中,(多个)相机1318中的一个或多个相机可以捕捉双像素图像和/或包括一个或多个双像素光传感器,诸如双像素光传感器120。在一些示例中,计算设备1300和/或(多个)相机1318可以是诸如多相机设备800的多相机设备的部分或全部。
在一些示例中,计算设备1300可以包括一个或多个传感器1320。传感器1320可以被配置为测量计算设备1300内的状况和/或计算设备1300的环境中的状况,并且提供关于这些状况的数据。例如,传感器1320可以包括一个或多个:(i)用于获得关于计算设备1300的数据的传感器,诸如但不限于,用于测量计算设备1300的温度的温度计、用于测量电力系统1322的一个或多个电池的电力的电池传感器、和/或测量计算设备1300的状况的其他传感器;(ii)识别其他物体和/或设备的识别传感器,诸如但不限于射频识别(rfid)读取器、接近传感器、一维条形码读取器、二维条形码(例如,快速响应(qr)码)读取器、以及激光跟踪器,其中这些识别传感器可以被配置为读取标识符,诸如rfid标签、条形码、qr码、和/或被配置为被读取以及提供至少识别信息的其他设备和/或物体;(iii)测量计算设备1300的位置和/或移动的传感器,诸如但不限于倾斜传感器、陀螺仪、加速度计、多普勒传感器、gps设备、声呐传感器、雷达设备、激光位移传感器、以及指南针;(iv)用于获得指示计算设备1300的环境的数据的环境传感器,诸如但不限于红外传感器、光学传感器、光传感器、双像素光传感器、生物传感器、电容传感器、触摸传感器、温度传感器、无线传感器、无线电传感器、移动传感器、麦克风、声音传感器、超声传感器和/或烟雾传感器;和/或(v)用于测量作用在计算设备1300周围的一个或多个力(例如,惯性力和/或g-力)的力传感器,诸如但不限于测量以下各项的一个或多个传感器:一个或多个维度上的力、扭矩、地面力、摩擦力,和/或零力矩点(zmp)传感器,该zmp传感器识别zmp和/或zmp的位置。传感器1320的许多其他示例也是可能的。
电力系统1322可以包括用于向计算设备1300提供电力的一个或多个电池1324和/或一个或多个外部电力接口1326。当电耦合到计算设备1300时,一个或多个电池1324中的每个电池可以用作计算设备1300的存储的电力的来源。电力系统1322的一个或多个电池1324可以被配置为便携式的。一个或多个电池1324的一些或全部可以容易地从计算设备1300移除。在其他示例中,一个或多个电池1324中的一些或全部可以在计算设备1300内部,并且因此可能不容易从计算设备1300移除。一个或多个电池1324中的一些或全部可以是可再充电的。例如,可再充电电池可以经由电池与另一电源之间的有线连接再充电,诸如通过在计算设备1300外部并且经由一个或多个外部电源接口连接到计算设备1300的一个或多个电源。在其他示例中,一个或多个电池1324中的一些或全部可以是不可再充电电池。
电力系统1322的一个或多个外部电力接口1326可以包括一个或多个有线电力接口,诸如usb线缆和/或电源线,该有线电力接口实现与计算设备1300外部的一个或多个电源的有线电力连接。一个或多个外部电力接口1326可以包括诸如qi无线充电器的一个或多个无线电力接口,该无线电力接口实现诸如经由qi无线充电器与一个或多个外部电源的无线电力连接。一旦使用一个或多个外部电力接口1326建立与外部电源的电力连接,计算设备1300就可以从所建立的电力连接的外部电源汲取电力。在一些示例中,电力系统1322可以包括相关的传感器,诸如与一个或多个电池或其他类型的电力传感器相关联的电池传感器。
基于云的服务器
图14描述了根据示例实施例的布置为基于云的服务器系统的计算集群的网络。图14描绘了根据示例实施例的布置为基于云的服务器系统的计算集群1409a、1409b、1409c的网络1206。计算集群1409a、1409b、1409c可以是基于云的设备,其存储基于云的应用和/或服务的程序逻辑和/或数据;例如,执行计算设备100、相机110、双像素图像200、系统300、402(包括但不限于神经网络420)、步幅1编码器函数600、步幅2编码器函数650、解码器函数700、多相机设备800、830、分布式计算架构1200和/或方法1500、1600的至少一个功能和/或与计算设备100、相机110、双像素图像200、系统300、402(包括但不限于神经网络420)、步幅1编码器函数600、步幅2编码器函数650、解码器函数700、多相机设备800、830、分布式计算架构1200和/或方法1500、1600相关的至少一个功能。
在一些实施例中,计算集群1409a、1409b、1409c可以是驻留在单个计算中心的单个计算设备。在其他实施例中,计算集群1409a、1409b、1409c可以包括单个计算中心中的多个计算设备、或甚至位于不同地理位置的多个计算中心中的多个计算设备。例如,图14描绘了驻留于不同物理位置的计算集群1409a、1409b、1409c中的每一个。
在一些实施例中,计算集群1409a、1409b、1409c处的数据和服务可以被编码为存储在非暂时性、有形计算机可读介质(或计算机可读存储介质)中并且可由其他计算设备访问的计算机可读信息。在一些实施例中,计算集群1409a、1409b、1409c可以存储在单个磁盘驱动器或其他非暂时性、有形存储介质上,或者可以在位于一个或多个不同地理位置处的多个磁盘驱动器或其他有形存储介质上实施。
图14描绘了根据示例实施例的基于云的服务器系统。在图14中,系统402、多相机设备800、830和/或计算设备的功能可以分布在计算集群1409a、1409b、1409c之间。计算集群1409a可以包括由本地集群网络1412a连接的一个或多个计算设备1400a、集群存储阵列1410a和集群路由器1411a。类似地,计算集群1409b可以包括由本地集群网络1412b连接的一个或多个计算设备1400b、集群存储阵列1410b和集群路由器1411b。同样地,计算集群1409c可以包括由本地集群网络1412c连接的一个或多个计算设备1400c、集群存储阵列1410c和集群路由器1411c。
在一些实施例中,计算集群1409a、1409b、1409c中的每一个可以具有相等数量的计算设备、相等数量的集群存储阵列和相等数量的集群路由器。然而,在其他实施例中,每个计算集群可以具有不同数量的计算设备、不同数量的集群存储阵列和不同数量的集群路由器。每个计算集群中的计算设备,集群存储阵列和集群路由器的数量均可以取决于分配给每个计算集群的计算任务或任务。
在计算集群1409a中,例如,计算设备1400a可以被配置为执行系统402、多相机设备800、830、和/或计算设备的各种计算任务。在一个实施例中,系统402、多相机设备800、830、和/或计算设备的各种功能可以分布在一个或多个计算设备1400a、1400b、1400c之间。相应计算集群1409b和1409c中的计算设备1400b和1400c可以与计算集群1409a中的计算设备1400a类似地配置。另一方面,在一些实施例中,计算设备1400a、1400b和1400c可以被配置为执行不同的功能。
在一些实施例中,与系统402、多相机设备800、830和/或计算设备相关联的计算任务和所存储的数据可至少部分地基于系统402、多相机设备800、830和/或计算设备的处理要求、计算设备1400a、1400b、1400c的处理能力、每个计算集群中的计算设备之间和计算集群本身之间的网络链路的延迟、和/或可以作用于整个系统架构的成本、速度、容错、弹性、效率和/或其他设计目标的其他因素而跨计算设备1400a、1400b、1400c分布。
计算集群1409a、1409b、1409c的集群存储阵列1410a、1410b、1410c可以是存储阵列,该存储阵列包括被配置为管理对硬盘驱动器组的读取和写入访问的磁盘阵列控制器。磁盘阵列控制器还可以单独地或与它们相应的计算设备结合地被配置为管理存储在集群存储阵列中的数据的备份或冗余副本,以防止磁盘驱动器或其他集群存储阵列故障和/或网络故障,这些故障阻止一个或多个计算设备访问一个或多个集群存储阵列。
类似于系统402、多相机设备800、830、和/或计算设备的功能可以跨计算集群1409a、1409b、1409c的计算设备1400a、1400b、1400c分布的方式,这些组件的各种活动部分和/或备份部分可以跨集群存储阵列1410a、1410b、1410c分布。例如,一些集群存储阵列可以被配置为存储系统402、多相机设备800、830、和/或计算设备的数据的一部分,而其他集群存储阵列可以存储系统402、多相机设备800、830、和/或计算设备的数据的其他(多个)部分。此外,一些集群存储阵列可以被配置为存储在其他集群存储阵列中的存储的数据的备份版本。
计算集群1409a、1409b、1409c中的集群路由器1411a、1411b、1411c可以包括被配置成为计算集群提供内部和外部通信的网络设备。例如,计算集群1409a中的集群路由器1411a可以包括一个或多个互联网交换和路由设备,其被配置为(i)经由本地集群网络1412a提供计算设备1400a与集群存储阵列1410a之间的局域网通信,以及(ii)经由到网络1206的广域网链路1413a在计算集群1409a与计算集群1409b和1409c之间提供广域网通信。集群路由器1411b和1411c可以包括与集群路由器1411a类似的网络设备,并且集群路由器1411b和1411c可以为计算集群1409b和1409b执行与集群路由器1411a为计算集群1409a执行的类似的联网功能。
在一些实施例中,集群路由器1411a、1411b、1411c的配置可以至少部分地基于计算设备和集群存储阵列的数据通信要求,集群路由器1411a、1411b、1411c中的网络设备的数据通信能力,本地集群网络1412a、1412b、1412c的延迟和吞吐量,广域网链路1413a、1413b、1413c的延迟、吞吐量和成本,和/或其他可以作用于成本、速度、容错、弹性、效率和/或合理系统架构的其他设计标准的因素。
操作的示例方法
图15是根据实施例的方法1500的流程图。方法1500可以由计算设备来执行,诸如计算设备1300。方法可以在框1510处开始,其中计算设备可以接收至少前景物体的双像素图像,该双像素图像包括多个双像素,其中多个双像素的双像素可以包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光,诸如上述至少在图1、2、4和5的上下文中所讨论的。
在框1520处,计算设备可以用于训练机器学习系统,以确定与双像素图像相关联的深度图,诸如上述至少在图3和图4的上下文中所讨论的。
在框1530处,计算设备可以用于提供经过训练的机器学习系统,诸如上述至少在图3和图4的上下文中所讨论的。
在一些示例中,训练机器学习系统以确定深度图可以包括训练机器学习系统以基于损失函数确定深度图,该损失函数可以包括深度图的估计的仿射映射,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,训练机器学习系统以基于损失函数确定深度图可以包括训练机器学习系统以基于损失函数确定深度图,该损失函数可以包括深度图的估计的仿射映射与参考深度图之间的差,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,前景物体可以具有第一物体类型,并且训练机器学习系统以确定深度图可以包括训练机器学习系统以使用具有第一物体类型的物体的多个图像来确定深度图,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,第一物体类型可以与人脸相关联,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,在计算设备接收至少前景物体的双像素图像可以包括:使用多相机设备在阈值时间段内获得至少前景物体的多个双像素图像,多个双像素图像中的每个图像可以包括多个双像素,其中多相机设备可以包括多个相机;以及在计算设备处接收至少前景物体的多个双像素图像,诸如上述至少在图8a、8b、9、10和11的上下文中所讨论的。
在一些示例中,多相机设备中的多个相机中的每一个可以包括系统时钟,以及使用多相机设备获得前景物体的多个双像素图像可以包括:确定多相机设备的多个相机中的主相机,该主相机具有主时钟;在除主相机之外的多相机设备的多个相机中的每一相机处,确定相机的系统时钟与主时钟之间的偏移;确定多个相机的偏移中的最大偏移;在主相机处,向除主相机之外的多相机设备的多个相机中的每一个发送消息,以在未来触发时间捕捉双像素图像,其中,未来触发时间可大于最大偏移;以及由多相机设备的多个相机中的每一个在未来触发时间捕捉前景物体的双像素图像,诸如上述至少在图8a、8b、9、10和11的上下文中所讨论的。
在一些示例中,向除主相机之外的多相机设备的多个相机中的每一个发送消息,以在未来触发时间捕捉双像素图像可以包括:向除主相机之外的多相机设备的多个相机中的每一个发送重复请求,以在未来触发时间开始周期性地捕捉多个双像素图像;并且由多相机设备的多个相机中的每一个在未来触发时间捕捉前景物体的双像素图像可以包括由多相机设备的多个相机中的每一个在未来触发时间开始周期性地捕捉多个双像素图像,诸如上述至少在图8a、8b、9、10和11的上下文中所讨论的。
在一些示例中,向除主相机之外的多相机设备的多个相机中的每一个发送重复请求以在未来触发时间开始周期性地捕捉多个双像素图像可以进一步包括:在发送重复请求之后,向多相机设备的一个或多个延迟相机发送高优先级请求,其中高优先级请求可中断重复请求且可以重置用于周期性地捕捉多个双像素图像的时间周期,诸如上述至少在图8a、8b、9、10和11的上下文中所讨论的。
在一些示例中,训练机器学习系统以确定深度图可以包括训练神经网络以确定深度图,诸如上述至少在图3和图4的上下文中所讨论的。
图16是根据实施例的方法1600的流程图。方法1600可以由计算设备来执行,诸如计算设备1300。方法1600可以在框1610处开始,其中计算设备可以接收至少前景物体的双像素图像,其中双像素图像可以包括多个双像素,其中多个双像素中的双像素可以包括左侧像素和右侧像素,该左侧像素和右侧像素均表示入射在用于捕捉双像素图像的单个双像素元件上的光,诸如上述至少在图3和图4的上下文中所讨论的。
在框1620处,计算设备可以为经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图,诸如上述至少在图3、4、5、6a、6b和7的上下文中所讨论的。
在框1630处,计算设备可以用于基于双像素图像和深度图确定输出图像,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,其中基于双像素图像和深度图确定输出图像可以包括:在计算设备处接收模糊双像素图像的背景的请求,其中双像素图像的背景不包括前景物体;以及通过使用计算设备基于深度图模糊双像素图像的背景的至少一部分来确定输出图像,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,方法160可以进一步包括:使用计算设备提供输出图像,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,计算设备可以包括相机;以及接收至少前景物体的双像素图像可以包括:使用相机生成至少前景物体的双像素图像;以及在计算设备处从相机接收生成的双像素图像,诸如上述至少在图4的上下文中所讨论的。
在一些示例中,经过训练的机器学习系统可以使用计算设备来训练,诸如上述至少在图3和图4的上下文中所讨论的。
在一些示例中,经过训练的机器学习系统可以使用与计算设备不同的第二计算设备来训练;并且为经过训练的机器学习系统提供双像素图像以确定用于双像素图像的多个双像素的深度图可以包括:在计算设备处接收经过训练的机器学习系统;以及在计算设备处接收经过训练的机器学习系统之后,为计算设备的经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图,诸如上述至少在图3和图4的上下文中所讨论的。
在一些示例中,经过训练的机器学习系统可以驻留在与计算设备不同的第二计算设备上;并且为经过训练的机器学习系统提供双像素图像以确定用于双像素图像的多个双像素的深度图可以包括:在第二计算设备处从第二计算设备接收双像素图像;在接收到双像素图像之后,第二计算设备向第二计算设备的经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图;以及从第二计算设备向计算设备发送深度图,诸如上述至少在图3和图4的上下文中所讨论的。
在一些示例中,经过训练的机器学习系统可以驻留在与计算设备不同的第二计算设备上;以及为经过训练的机器学习系统提供双像素图像以确定用于双像素图像的多个双像素的深度图可以包括:在第二计算设备处从第二计算设备接收双像素图像;在接收到双像素图像之后,第二计算设备为第二计算设备的经过训练的机器学习系统提供双像素图像,以确定用于双像素图像的多个双像素的深度图,并且其中由计算设备基于双像素图像和深度图确定输出图像可以包括:使用第二计算设备基于双像素图像和深度图确定输出图像,以及从第二计算设备向计算设备发送输出图像,诸如上述至少在图3和图4的上下文中所讨论的。
本公开不限于本申请中描述的特定实施例,其旨在作为各个方面的说明。在不脱离本发明的范围和精神的情况下,许多修改和变化对本领域技术人员将是显而易见的。根据前述说明,除了本文列举的那些之外,在本公开范围内的功能等同的方法和组成对于本领域技术人员是显而易见的。这样的修改和变化旨在落入所附权利要求的范围内。
以上详细说明参考附图描述了所公开的系统、设备和方法的各种特征和功能。在附图中,除非上下文另有规定,否则类似符号通常标识类似组件。在详细说明、附图和权利要求书中描述的说明性实施例并不意味着是限制性的。在不脱离本文所呈现主题的精神或范围的情况下,可以利用其他实施例,且可以进行其他改变。应当容易理解,在此一般性记载以及附图中图示的本公开的各方面可以按照在此明确公开的多种不同配置来设置、替换、组合、分割和设计。
关于附图中并且如本文所讨论的梯形图、场景和流程图中的任何一个或全部,每个框和/或通信可以表示根据示例实施例的信息的处理和/或信息的传输。可替换实施例被包括在这些示例实施例的范围内。在这些可替换实施例中,例如,依赖于所涉及的功能,被描述为框、传输、通信、请求、响应和/或消息的功能可以不按照所示出或所讨论的顺序被执行,包括基本上并发的或以相反的顺序执行。此外,更多的或更少的框和/或功能可以与本文中所讨论的梯形图、情形和流程图一起使用,并且这些梯形图、情形和流程图可以部分地或整体地彼此组合。
代表信息的处理的框可以与可被配置为执行本文中所描述方法或技术的特定逻辑功能的电路相对应。可替换地或额外地,代表信息的处理的框可以与程序代码的模块、片段、或部分(包括相关的数据)相对应。程序代码可以包括由处理器可执行的一个或多个指令以用于实施方法或技术中的特定逻辑功能或动作。程序代码和/或相关的数据可以被存储在任何类型的计算机可读介质上,诸如包括磁盘或硬盘驱动器的存储设备或其他存储介质。
计算机可读介质还可以包括非暂时性计算机可读介质,诸如可在短时间内存储数据的非暂时性计算机可读介质,如寄存器存储器、处理器高速缓存和随机存取存储器(ram)。计算机可读介质还可以包括在较长的时间内存储程序代码和/或数据的非暂时性计算机可读介质,诸如辅助或持久长期存储,例如只读存储器(rom)、光盘或磁盘、光盘只读存储器(cd-rom)。计算机可读介质还可以是任何其他易失性或非易失性存储系统。计算机可读介质可以被认为是计算机可读存储介质,例如,或有形存储设备。
而且,表示一个或多个信息传输的框可以与同一物理设备中的软件和/或硬件模块之间的信息传输相对应。然而,其他信息传输可以在不同物理设备中的软件模块和/或硬件模块之间。
虽然本文公开了各个方面和实施例,但是其它的方面和实施例对于本领域的技术人员而言将是显而易见的。因此,本文所公开的各个方面和实施例是为了示例的目的而不意在限制,真正的范围是通过随附的权利要求指示的。