论文链接
开源项目
一句话总结:作者提出了一个规范相机空间变换模块,可以将图像映射到规范空间里预测深度,然后再将深度预测图通过去规范变换恢复到真实尺度,从而达到单目真实深度预测的目的。
Metric指的是真实世界中的度量值(XX米这种),不是相对的。由于相机参数不同,人们很难从单张图像中得到真实世界的度量值。
如上图,第一张和第二张depth是相同的,但因为相机参数不同,显得很不一样。第二张和第三张,照片上看很像,但是depth不同。
目标是使用图像还原3D场景。挑战是单目图像的ill-posedness,也就是一张图像可以对应无数个3D场景。导致这个挑战的原因是metric ambiguity,也就是图像中缺少了真实世界的度量信息。
SOTA monocular metric depth estimation methods只能够处理一种相机模式,不能处理大规模混合数据。因为它的Metric只是这一种相机的,换个相机就不能得到正确的Metric了。SOTA monocular metric depth estimation methods可以处理混合数据,学习affine-invariant depths后也能做零样本泛化,但是不能恢复真实世界的度量信息。
他们的方法既能Large-scale data training,又能解决Metric Ambiguity,从而实现了一个Zero-shot single-view metric depth model。
方法是:规范相机变换模块(canonical camera space transformation module),它的优点是能解决metric ambiguity,还可以很方便的插进现有的单目深度估计模型中。
相机参数:焦距( f ^ \hat{f} f^),像素点大小( δ \delta δ),主中心( ( u 0 , v 0 ) (u_0, v_0) (u0,v0))。论证了像素点大小对图像物体大小和实际物体大小的关系没影响,所以规范相机空间由 ( f , u , v ) (f, u, v) (f,u,v)描述。
上图表明了相机参数对真实世界度量尺度的影响: d a = S ^ [ f ^ S ^ ′ ] = S ^ ⋅ α d_{a}=\hat{S}\left[\frac{\hat{f}}{\hat{S}^{\prime}}\right]=\hat{S} \cdot \alpha da=S^[S^′f^]=S^⋅α,其中 S ^ \hat{S} S^是真实世界大小, S ^ ′ \hat{S}^{\prime} S^′是图像大小。
原始图像相机参数为 { f , u 0 , v 0 } \{f, u_0, v_0\} {f,u0,v0},规范相机空间参数 { f c , u c , v c } \{f_c, u_c, v_c\} {fc,uc,vc}。
transforming depth labels (CSTM label)
设置一个比率 ω d = f c f \omega_{d}=\frac{f^{c}}{f} ωd=ffc,给原来的深度空间尺度乘上 ω d \omega_{d} ωd就变换到规范空间,给规范空间深度图乘上 1 ω d \frac{1}{\omega_{d}} ωd1就变回真实深度空间。
transforming input images (CSTM image)
同理
Supervision
使用了随机提案归一化损失(random proposal normalization loss,RPNL),其中还裁剪了 M M M块。
L R P N L = 1 M N ∑ p i M ∑ j N ∣ d p i , j ∗ − μ ( d p i , j ∗ ) 1 N ∑ j N ∣ d p i , j ∗ − μ ( d p i , j ∗ ) ∣ − d p i , j − μ ( d p i , j ) 1 N ∑ j N ∣ d p i , j − μ ( d p i , j ) ∣ ∣ \begin{array}{r} L_{\mathrm{RPNL}}=\frac{1}{M N} \sum_{p_{i}}^{M} \sum_{j}^{N} \mid \frac{d_{p_{i}, j}^{*}-\mu\left(d_{p_{i}, j}^{*}\right)}{\frac{1}{N} \sum_{j}^{N}\left|d_{p_{i}, j}^{*}-\mu\left(d_{p_{i}, j}^{*}\right)\right|}- \\ \frac{d_{p_{i}, j}-\mu\left(d_{p_{i}, j}\right)}{\frac{1}{N} \sum_{j}^{N}\left|d_{p_{i}, j}-\mu\left(d_{p_{i}, j}\right)\right|} \mid \end{array} LRPNL=MN1∑piM∑jN∣N1∑jN dpi,j∗−μ(dpi,j∗) dpi,j∗−μ(dpi,j∗)−N1∑jN∣dpi,j−μ(dpi,j)∣dpi,j−μ(dpi,j)∣
d ∗ d^* d∗表示真实深度, d d d表示预测深度, μ ( . ) \mu(.) μ(.)表示深度中位数。
还用了其他的损失 L s i l o g , L P W N , L V N L L_{silog}, L_{PWN}, L_{VNL} Lsilog,LPWN,LVNL。
最终的损失值: L = L P W N + L V N L + L silog + L R P N L L=L_{\mathrm{PWN}}+L_{\mathrm{VNL}}+L_{\text {silog }}+L_{\mathrm{RPNL}} L=LPWN+LVNL+Lsilog +LRPNL