一、参考资料
浅析自监督深度估计中的光度损失(Photometric Loss)
二、图像重构原理
设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t + 1 > <I_{t-1},I_{t},I_{t+1}> <It−1,It,It+1>,其中 t t t 为时间索引, t > 0 t>0 t>0 。 I t I_{t} It 是目标帧,而其余2帧是源视图 I s = < I t − 1 , I t + 1 > I_{s}=<I_{t-1},I_{t+1}> Is=<It−1,It+1>。假设 p t p_{t} pt 为目标图像 I t I_{t} It 上某像素的齐次坐标, p t = [ u t ν t 1 ] T p_t=[u_t\quad\nu_t\quad1]^T pt=[utνt1]T。结合深度图像 D t {D}t Dt 和相机位姿变换矩阵 T t → s T{t\to s} Tt→s,可以将该像素还原为三维空间点,同时计算出在源图像时刻的相机坐标系下,该空间点的齐次坐标 p s c p_{sc} psc:
p s c = [ x s c y s c z s c 1 ] = T t → s D t ( p t ) K − 1 p t p_{sc}=\begin{bmatrix}x_{sc}\\y_{sc}\\z_{sc}\\1\end{bmatrix}=T_{t\to s}D_t(p_t)K^{-1}p_t psc= xscysczsc1 =Tt→sDt(pt)K−1pt
然后将该点投影回二维平面,得到该像素在源图像 I s I_s Is 上的齐次坐标 p s p_s ps:
p s = [ u s v s 1 ] = 1 z s c K p s c p_s=\begin{bmatrix}u_s\\v_s\\1\end{bmatrix}=\frac{1}{z_{sc}}Kp_{sc} ps= usvs1 =zsc1Kpsc
根据上述两个公式,可以建立 I t I_t It 的像素 p t p_t pt 与 I s I_s Is 的像素 p s p_s ps 的转换关系:
p s ∼ K T t → s D t ( p t ) K − 1 p t p_{s}\sim KT_{t\to s}D_{t}\left(p_{t}\right.)K^{-1}p_{t} ps∼KTt→sDt(pt)K−1pt
p t p_{t} pt 和 p s p_s ps 间的差异来源于相机自身的运动,因此可得刚体运动光流 F t → s r F_{t\rightarrow s}^r Ft→sr:
F t → s r ( p t ) = [ Δ u Δ v ] = [ u s − u t v s − v t ] F_{t\to s}^r(p_t)=\begin{bmatrix}\Delta u\\\Delta v\end{bmatrix}=\begin{bmatrix}u_s-u_t\\v_s-v_t\end{bmatrix} Ft→sr(pt)=[ΔuΔv]=[us−utvs−vt]
继而可以基于此光流和源图像 I s I_s Is ,重构目标图像 I ^ t \hat{I}_t I^t, I ^ t \hat{I}_t I^t 的像素值均可以从 I s I_s Is 中近似:
I ^ t ( p t ) = I s ( p s ) = I s ( p t + F t → s r ( p t ) ) \hat{I}t(p_t)=I_s(p_s)=I_s(p_t+F{t\to s}^r(p_t)) I^t(pt)=Is(ps)=Is(pt+Ft→sr(pt))
重构图像的过程中,坐标 p s p_s ps 极有可能是所示的浮点数,此时 I s ( p s ) I_s(p_s) Is(ps) 需要由最邻近的四个像素近的四个像素 I s ( p s l t ) 、 I s ( p s r t ) 、 I s ( p s l b ) 和 I s ( p s r b ) I_{s}(p_{s}^{lt})、I_{s}(p_{s}^{rt})、I_{s}(p_{s}^{lb})\text{和}I_{s}(p_{s}^{rb}) Is(pslt)、Is(psrt)、Is(pslb)和Is(psrb) 双线性插值[2]求得。
三、自监督单目深度估计原理
zhou等人[1]提出利用视图合成作为监督信号,通过当前时刻捕获的视图(目标帧),并利用深度、位姿信息作为中间量对图像进行重建,通过网络的不断迭代,最终得到准确的深度和位姿信息。视图合成的原理是通过几何映射,把当前时刻捕获的图像映射到另一相邻时刻的图像对其进行重建。该方法的思路来自于视觉里程计中的直接法。
既然是自监督,那么就意味着输入的图像是没有深度标签的,所以我们就无法利用ground truth这个"标准答案"对输出的深度图进行优化。于是,我们利用联合训练的方法,通过输入相邻帧图像,对相对位姿网络进行训练,从而经过投影变换得到重建帧,以目标帧与重建帧的差值作为训练信号,达到自监督的效果。
几乎所有的自监督任务是利用深度估计和相机姿态估计两个模块联合进行的,如下图所示:
自监督深度估计的具体流程如下:
- 将目标帧 I t I_t It 输入深度预测网络 Φ d \Phi_{d} Φd,得到深度图 D t {D}_t Dt;
- 将目标帧 I t I_t It 和源帧 I s I_s Is 同时输入相对位姿估计网络 Φ d \Phi_{d} Φd,得到相对位姿矩阵 T t → s T_{t\to s} Tt→s;
- 利用 p s ∼ K T t → s D t ( p t ) K − 1 p t p_{s}\sim KT_{t\to s}D_{t}\left(p_{t}\right.)K^{-1}p_{t} ps∼KTt→sDt(pt)K−1pt 这样的转换关系,由 p t p_t pt 计算出 p s p_s ps;
- 由于 p s p_s ps 不一定为整数,故利用双线性插值算法计算该点的像素值,然后将该点采样到 I ^ t \hat{I}_t I^t 图像上的对应位置,通过借助投影下采样填充,最终实现利用 I s I_s Is 的像素信息重构出来 I ^ t \hat{I}_t I^t ;
- 利用 I t I_t It 和 I ^ t \hat{I}_t I^t 计算图像重构损失。
四、图像重构损失(reprojection loss)
将 L 1 L_1 L1 和 S S I M SSIM SSIM 两者组合作为图像重构损失来计算目标帧 I t I_t It 和重构帧 I ^ t \hat{I}_t I^t 之间的差异,即:
L p ( I t , I ^ t ) = α ( 1 − S S I M ( I t , I ^ t ) ) 2 + ( 1 − α ) ∣ I t − , I ^ t ∣ 1 \mathcal{L}_p(I_t,\hat{I}_t)=\alpha\frac{(1-\mathrm{SSIM}(\mathrm{I}_t,\hat{\mathrm{I}}_t))}2+(1-\alpha)|I_t-,\hat{I}_t|_1 Lp(It,I^t)=α2(1−SSIM(It,I^t))+(1−α)∣It−,I^t∣1
此函数由两部分相加而成,前面用于计算结构相似度 S S I M SSIM SSIM ,后面用于计算光度损失(photometric loss)。很多论文直接把整个函数叫光度损失(Photometric Loss),严格意义上不那么准确,应该称作图像重构损失(reprojection loss)