查看
概述uDepth的工作原理和底层算法
(1.立体深度感测的综述
所有立体摄像头系统都会采用视差重建深度。对于这种效果,你可以注视一个对象,闭合左眼,然后张开左眼并闭合右眼。你会发现对象的位置会出现移动,而越靠近的对象移动得越快。uDepth是DenseLocalStereo匹配技术家族的一员,其主要是通过计算来估计每个像素的视差。所述技术会在一个摄像头形成的图像中评估由每个像素包围的区域,并尝试在第二个摄像头的相应图像中寻找相似的区域。正确校准后,生成的重构属于可度量,这意味着它们表示实际的物理距离。
为了处理无纹理区域和处理弱光条件,团队使用了“有源立体”设置,将红外图案投影到由立体红外摄头机检测到的场景中。所述方法提高了低纹理区域的可识别性,从而优化了识别效果并降低了系统的计算量。
2.uDepth与众不同的地方
立体感测系统的运算量非常大。对于以30Hz频率运行的感测器,其在保持高质量的前提下必须是低功耗。uDepth利用了众多关键的见解来实现这一点。
其中之一是,给定一对彼此相似的区域,而大多数对应的子集同样相似。例如,给定两个相似的8×8像素块,两者左上的4×4子区域同样可能相似。这将告知uDepth管道的初始化过程,后者通过比较每个图像中的非重叠像素块并选择最相似的像素块来构建深度建议金字塔。这个过程从1×1像素块开始,并按层累积支持,直到生成初始低分辨率深度映射。
在初始化之后,团队应用一种全新的神经深度细化技术来支持Pixel4的规则网格图案照明器。典型的有源立体系统投射一个伪随机网格图案来帮助消除场景中的匹配歧义,但uDepth能够支持重复的网格模式。重复结构产生的区域在立体对中看起来十分相似,并可能导致不正确的匹配。针对这个问题,团队采用了轻量级卷积架构,通过红外亮度和邻近信息来调整不正确的匹配,而每帧耗时不到1.5ms。
神经深度细化架构
在神经深度细化之后,合适的深度估计将从相邻的像素块迭代传播。这个和后续的管道步骤利用了uDepth成功的另一个关键洞察:自然场景通常是局部平面,只有很小的非平面偏差。这使得团队能够找到覆盖场景的平面像素块,然后只为一个像素块中的每个像素细化单个深度,从而大大减少计算负载。
最后,从相邻平面假设中选择最佳匹配。
绿色组件由GPU运行,黄色组件由CPU运行,蓝色组件则由PixelNeuralCore运行
当手机出现跌落情况时,这可能会导致立体摄像头的出厂校准偏离实际位置。为了在实际使用中确保高质量的结果,uDepth系统支持自校准。计分程序评估每个深度图像是否存在误校准的迹象,并建立对设备状态的信心。如果检测到校准错误,则从当前场景重新生成校准参数。
3.用于计算摄影的深度
uDepth传感器的原始数据需要是精确和可度量,这是人脸解锁的基本要求。诸如人像模式和三维照片等计算摄影应用有着非常不同的需求。在所述用例中,实现视频帧速率并不重要,但深度应该是平滑的,边缘对齐的,并且在彩色摄像头的整个视场中都是完整的。
从左到右:原始深度感测结果,预测深度,3D照片
为了实现这一目标,团队训练了一个端到端的深度学习架构。它增强了原始uDepth数据,并推断出一个完整、密集的3D深度映射。谷歌采用了RGB图像、人像分割和原始深度的组合。
用于计算摄影深度的架构
为了获得GroundTruth,团队利用了一个体三维捕捉系统。这是一个配备有331个自定义彩色LED灯、一组高分辨率色摄像头和一组自定义高分辨率深度传感器的测地线球体,能够生成接近照片真实感的人像模型。谷歌在设置中添加了Pixel4智能手机,并将它们与其他硬件(灯光和摄像头)同步。生成的训练数据包括Pixel4视点真实图像和合成渲染的组合。
这里下载(注,这个应用仅用于演示和研究目的,不用于商业用途;谷歌不会提供任何支持或更新)。这个演示应用会从你的Pixel4可视化三维点云。由于深度映射属于时间同步,并且与RGB图像位于同一坐标系中,所以可以显示3D场景的纹理映射,如下面示例:
映维网。