结构光的三维重建领域,深度学习的应用

现有的研究中,使用深度学习的方法来实现结构光的三维重建问题,其大多数集中在FFP方向上,在这里,我们也是主要讨论FFP也就是漫反射的三维重建实现方法,生成深度图。

基于深度学习的方法可分为两类——单帧方法和多帧方法,这与传统相移技术和傅里叶算法的分类方式一致。

在多帧条纹投影三维重建的背景下,深度学习模型旨在学习多频条纹图案与深度信息之间的映射关系。

目前,深度学习主要通过三种技术方法进行创新:
网络架构、监督策略、输入范式。

1. 网络架构

不论是通过神经网络来预测图片的相位,还是直接输出深度图,其本质都属于一个回归问题,regression。
目前来说,U-Net及其变体已成为主流方法。

U-Net 及其 变体 MSUNet++,PCTNet

U-Net 通过利用跳跃连接实现分层特征整合
U-Net能有效捕捉局部与全局上下文信息。在预测准确性和稳定性方面均优于传统卷积神经网络(CNNs)和生成对抗网络(GANs)。
然而会增加计算复杂度增加和跨域适应性受限(limited cross-domain adaptability)的代价,这促使人们不断优化架构设计。
cross-domain adaptability指:这个 深度学习的 domain ,指的有很多,如:硬件域,相机,投影仪,环境域,物体域,参数域(投影的条纹频率,相移法几步)。
看讲的泛化性 是 狭义上的泛化,还是 广义上的泛化 吧。
在这里插入图片描述

预训练模型集成:ResNet 和 Vision Transformer 引入U-Net

采用预训练的Vision Transformers来提取语义丰富的轮廓特征和粗略深度线索。
仅依靠架构方面的进展仍不足以完全克服样本有限和输入信息受限所造成的瓶颈。近年来,研究人员开始探索更复杂的监督策略,引入多级监督信号或在训练中融入物理先验,以进一步增强泛化能力和稳定性。

2. 监督策略

在这里插入图片描述
在深度学习中,“监督”就是:告诉网络“正确的答案应该是什么”。

常规做法:
输入:条纹图
输出:绝对相位 Φ \Phi Φ
损失函数: L o s s = ( Φ p r e d − Φ g t ) 2 Loss = (\Phi_{pred} - \Phi_{gt})^2 Loss=(ΦpredΦgt)2
你告诉网络的只有一句话:“最终输出要对”

联合监督:
输入:条纹图
输出:不止绝对相位,还有中间结果
损失函数:对每个输出都算一遍误差
你告诉网络:“每一步都要对”

举例子: DSAS:发表于2024年

Li, Z.; Li, Y.; Chen, W.; Zhang, C.; Chen, M.; Wang, X.; Gui, W.; Liang, X. DSAS-S2APNet: A dual-stage auxiliary supervision
network for single-frame to absolute phase prediction. In Proceedings of the Optical Metrology and Inspection for Industrial
Applications XI, Nantong, China, 12–14 October 2024; SPIE: Washington, DC, USA, 2024; Volume 13241, pp. 255–260. [CrossRef]

DSAS 具体是怎么做的?

DSAS 架构不是只输出一个东西,它输出三个:
高频包裹相位 φ h \varphi_h φh(网络中间层输出)
亚高频绝对相位 Φ s u b \Phi_{sub} Φsub(网络中间层输出)
最终绝对相位 Φ h \Phi_h Φh(网络最终输出)

它需要这三个量的“正确答案”(ground truth)来训练。这些正确答案哪里来?用传统方法算出来!
用相移法从条纹图里算出 φ h \varphi_h φh 的真值
用多频法(比如低频条纹)算出 Φ s u b \Phi_{sub} Φsub 的真值
用完整的解包裹算法算出 Φ h \Phi_h Φh 的真值

最关键的一步:联合监督
DSAS 的损失函数长这样:
在这里插入图片描述
它还加了一项:物理一致性损失在这里插入图片描述
最后把这些损失函数全部加起来,然后在其前面+系数 λ,全部给它连起来,这种 损失函数 包含 2πround 的公式,就是所谓的物理一致性损失。 关于这里的数学推导,以及相位的计算关系来源,可以查看我第一篇三维重建综述的文章,里面有详细的物理建模和数学推导。

值得一提的是,在2023年,下面这批人的三重监督策略,让 MSE(mean Squared Error 均方误差) 下降了 34%
Zhu, X.; Zhao, H.; Song, L.; Wang, H.; Guo, Q. Triple-output phase unwrapping network with a physical prior in fringe projection
profilometry. Appl. Opt. 2023, 62, 7910–7916. [CrossRef] [PubMed]在这里插入图片描述
平方可以:消除正负,放大误差,并且平方后,其函数处处可导!梯度计算容易

但是MSE对异常值会过于敏感。

为什么这些物理约束都是去求解绝对相位呢?

FPP求解深度空间的公式: Z = 1 a ( x , y ) + b ( x , y ) ⋅ 1 Φ Z = \frac{1}{a(x,y) + b(x,y) \cdot \frac{1}{\Phi}} Z=a(x,y)+b(x,y)Φ11 —— 看起来复杂,但一旦 a , b a, b a,b 标定准了,给一个准确的 Φ \Phi Φ,它算出来的 Z Z Z 是微米级精度的。
深度空间:像用“温度计测压力”
公式: P = f ( T ) P = f(T) P=f(T),这个 f f f 可能是查表、可能是多项式

看起来复杂,但那个“表”是出厂前精密标定的,测出来极准
FPP系统的误差主要来自三个地方,但不是来自 a , b a, b a,b 公式本身:
FPP的物理模型( Z = f ( Φ ) Z = f(\Phi) Z=f(Φ))是精准的、确定的、不依赖经验的。它看起来复杂,是因为它忠实地记录了每个像素的光学几何关系。

分支监督方法

其与前面的深度学习监督方案不同,分支监督方法通常要在最终阶段通过传统物理模型后进行处理,
怎么说呢,上面这个话,虽然是论文的原文翻译,但是我觉得不太对

我们用 多波长的那个方法来看一下:

假设我们想让网络输出 φ \varphi φ Φ s u b \Phi_{sub} Φsub,然后用公式算出 Φ h \Phi_h Φh
在这里插入图片描述

深度监督的做法
损失函数: L o s s = ( Φ h p r e d − Φ h g t ) 2 + ( φ p r e d − φ g t ) 2 + ( Φ s u b p r e d − Φ s u b g t ) 2 Loss = (\Phi_h^{pred} - \Phi_h^{gt})^2 + (\varphi^{pred} - \varphi^{gt})^2 + (\Phi_{sub}^{pred} - \Phi_{sub}^{gt})^2 Loss=(ΦhpredΦhgt)2+(φpredφgt)2+(ΦsubpredΦsubgt)2

需要 φ g t \varphi^{gt} φgt Φ s u b g t \Phi_{sub}^{gt} Φsubgt(用传统方法算)

梯度:直接从三个地方传

可微分分支监督的做法
损失函数: L o s s = ( Φ h f i n a l − Φ h g t ) 2 Loss = (\Phi_h^{final} - \Phi_h^{gt})^2 Loss=(ΦhfinalΦhgt)2

其中 KaTeX parse error: Expected 'EOF', got '_' at position 56: …cdot \text{soft_̲round}(\frac{\P…

不需要 φ g t \varphi^{gt} φgt Φ s u b g t \Phi_{sub}^{gt} Φsubgt

梯度: ∂ L o s s ∂ φ p r e d \frac{\partial Loss}{\partial \varphi^{pred}} φpredLoss ∂ L o s s ∂ Φ s u b p r e d \frac{\partial Loss}{\partial \Phi_{sub}^{pred}} ΦsubpredLoss 通过 soft_round 传回来

简而言之:深度监督是直接把中间变量放在隐式的连接了,就是说loss之中,
但是 分支监督 是什么,显式的融合,也就是说,在设计神经网络的时候,用物理公式的求解成分来设计的,最后用物理公式拼接,其可以解决:解决纯数据驱动容易违反物理规律的问题,将先验知识硬编码进网络。 在这里插入图片描述
然后就是,我们之前的文章,其实有一个小问题,我们在从相对相位去求解绝对相位的时候,其实这些方法,大多数都使用了多波长算法的物理公式进行约束,为什么不用移相法的公式呢,我们明天再看哈,我困得不行。但是这个公式在神经网络的梯度求导上有个问题:
在这里插入图片描述 Φ = φ + 2 π ⋅ k \Phi = \varphi + 2\pi \cdot k Φ=φ+2πk
这里的 k k k 就是条纹阶次(Fringe Order),它必须是一个整数。
但是我们知道,神经网络玩的是梯度下降,但是你这个 round 函数并不连续,它是一个阶梯函数,会在训练的时候,导致梯度消失,这玩意导数是0。
所以,在实际的训练中,有人发明了 soft_round,一个 长得像阶梯但实则处处有斜率的函数:
在这里插入图片描述
实际上,在实际训练中,为了神经网络的最后收敛,我们会引入温度系数参数 τ,来控制 转折的陡峭程度。
并且会融入一个退火策略:在训练初期,将 τ 设置的较高,而后,在训练后期把 τ 降低, τ 越低,滑梯越陡峭, 网络约束越严重,越精细化的微调。

3. 输入设计

在FPP系统中,输入特征的设计至关重要,因为某些特征神经网络无法以自动的方式高效地学习。近年来,研究人员试图通过输入工程(input engineering)的创新来克服这一限制。
就是说,到底什么样的正弦波,多少周期效果是好的,如:散斑,高低频条纹。
一般情况下:高频条纹效果更好,包含了更多的相位细节,
但是现在主流的方法都是 复合输入,也就是打包喂数据。
比如说:频域复合,融合多张不同频率的条纹图案,然后一起输入
或者,彩色复合(RGB分频):把三个不同频率/相位的条纹,放在一张图的RGB三个通道投影出去, 但是!RGB的问题是不同颜色的物体反射不同,会导致相位互相干扰。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐