参考代码:freq-aware-depth
1. 概述
介绍:在自监督深度估计算法中采用光度重构误差作为约束函数,但是这个约束函数却是存在不足的,也就是损失的大小在某些区域不能真实反应深度预测的误差大小,如图像中的高频区域,从而给整体算法Loss带来歧义(深度估计误差于光度重构误差的比例不正相关)。对于这个问题文章提出了两种策略去缓解高频区域处不确定性带来的歧义:1)Ambiguity-Masking:通过感知图像中的高频信息分布(图像梯度变化),给光度重构误差增加一个权重因子,从而缓解高频信息处Loss的不确定性。2)Auto-Blur:在图像梯度的指引下设计一个低通的高斯滤波器,用于平滑图像中的边缘区域,使得损失更能真实反馈重构的质量。
在自监督深度估计中,对图像中物体的边缘细节放大,并与对应的Loss分布可视化得到下图:
在上图(b)中可以看到loss倾向于在边缘区域产生更大的损失,这也表达了边缘处的损失并不能很好反应实际深度预测的质量。将图像中目标对应边缘进行放大得到图(c),可以看到由于分辨率的问题,其在边缘位置处的一些像素并不是能很准确进行区域划分,这也就导致了对应高频区域上loss存在歧义。这篇文章也对此提出了两点对应的策略用于缓解该问题。
2. 方法设计
2.1 整体pipeline
文章的整体pipeline见下图所示:
从上图可以看出文章在原本自监督深度估计方法的基础上,增加Ambiguity-Masking用于缓解高频区域loss歧义带来的影响,增加Auto-Blur缓解图像高频区域带来的损失跳变和歧义。
这里令网络 t t t时刻估计出的深度为 D t D_t Dt,到时刻 t + n t+n t+n的位姿关系为 T t → t + n T_{t\rightarrow t+n} Tt→t+n,对应的相机内参为 K K K,则图像的冲投影采样描述为:
⊗ = p r o j ( D t , T t → t + n , K ) \otimes=proj(D_t,T_{t\rightarrow t+n},K) ⊗=proj(Dt,Tt→t+n,K)
对于图像在X和Y方向上梯度描述为:
∇ u ± ( i , j ) = I ( i , j ) − I ( i ± 1 , j ) \nabla_{u\pm}(i,j)=I(i,j)-I(i\pm1,j) ∇u±(i,j)=I(i,j)−I(i±1,j)
∇ v ± ( i , j ) = I ( i , j ) − I ( i , j ± 1 ) \nabla_{v\pm}(i,j)=I(i,j)-I(i,j\pm1) ∇v±(i,j)=I(i,j)−I(i,j±1)
在Auto_Blur中使用两个方向的梯度:
∇ ± ( i , j ) = ∣ ∣ ∇ u ± ( i , j ) , ∇ v ± ( i , j ) ∣ ∣ 2 \nabla_{\pm}(i,j)=||\nabla_{u\pm}(i,j),\nabla_{v\pm}(i,j)||_2 ∇±(i,j)=∣∣∇u±(i,j),∇v±(i,j)∣∣2
在Ambiguity-Masking中使用合成梯度:
∇ ( i , j ) = ∣ ∣ ∇ u +