《Revisiting Self-Supervised Monocular Depth Estimation》论文笔记

自监督单目深度估计技术探讨
本文回顾了自监督深度估计算法的改进,分析了光照变化、物体遮挡、运动物体处理等因素对性能的影响,并探讨了深度表示、光照映射、遮挡处理等策略。实验结果显示,优化编码器选择、深度表达方式和处理动态场景等问题可以提升深度估计的准确性。
部署运行你感兴趣的模型镜像

参考代码:rmd

1. 概述

介绍:回顾前几年的一些自监督型深度估计算法,它们都是从不同的角度对自监督深度估计方法进行改进。总结这些算法中对自监督深度估计的改进idea,发现这些算法有的是为了解决场景光照变化对深度估计稳定性的影响;有的是对相机运动下场景中物体遮挡运动进行建模,从而减少对于前期假设先验的违背的影响。而这些改进的idea它们的来源是不同的文章,那么它们组合起来是否能达到比原方法更好的效果呢?或者更进一步怎么将这些idea进行有机组合才能得到最优的优化效果?这篇文章算是对这些问题的初步探究,也为产生更佳深度估计结果给出了一些具备一定指导价值的引导。

在自监督的深度估计任务中,往往输入的是单目图像序列或是双目图像序列(也可以两者的混合,如KITTI),然后通过构建相对位姿估计网络、深度估计网络得到图像之间的相对位姿变化与图像对应的深度图,之后通过在图像之前warp,使得warp之后的图像在结构相似性上最小化(SSIM Loss),也就是这类文章中经常提到的光度重构误差最小化。

然而,对自监督深度估计任务进行细致分解,可以发现这个任务并不是只需要去关注结构相似性最小化就可以了,影响整体网络性能的条件非常多。而且这个任务构建起来的依据和整体pipeline优化的目标是光度重构误差最小化,而不是直接去优化深度,深度只是优化光度重构误差过程中附带产生的结果,所以其并不是存在很强的线性关系的。基于此,这里将影响自监督深度估计性能的一些点归纳为:

  • 1)整体pipeline中编码器的选择:选择不同容量、表达能力的编码器对整体pipeline性能的影响程度;
  • 2)深度预测网络中对于深度的表达:是直接估计视差图、带scale属性的视差图还是log深度图效果好?以及这些选择对其pipeline其它部分的影响;
  • 3)场景中对于物体遮挡的处理:是通过选择最小 / 平均重构最为遮挡处损失,还是选择source图深度warp到target之后选择最小;
  • 4)场景中光照变化的处理:是通过预测图像之间的光照变换关系还是通过结构相似性最小化;
  • 5)场景中物体运动目标的处理:自监督深度估计任务中前提假设是场景中是不存在运动的物体的,那么存在运动的物体必然打破这样的规则。那么是通过MonoDepth2中的automask、不确定mask预测、还是motion filed建模进行处理?

除了上面提到的几点之外,其实整体的pipeline中还有一些额外的因素也会去影响整体自监督深度估计的性能,例如:

  • 1)相对位姿估计网络输出相对位姿是否真的准确?提升相机位姿估计网络的性能是否能带来深度估计效果的改善。在不同场景下数据序列的平移旋转量的分布是不一样的,位姿估计网络是否能对这些变化作出准确预测。而且对于相机位姿估计网络本身的结构也是可以进行细致讨论的;
  • 2)相机内参数对输出效果的影响?相机的内参数一般是通过标定的形式进行解算的,那么解算就会存在一定的误差,那么这样的误差是否会影响自监督深度估计的性能?而且,在现有的自监督深度估计中很多时候采用的是畸变很小近似针孔模型的相机,那么相机内参中的其它参数是否对最后的新能带来影响;
  • 3)自监督pipeline中深度解码器的影响,这部分是网络设计层面的事情,如何去有效抓取场景中的语义信息与场景物体细节信息,这是考验网络设计。例如,对上下采样进行优化,代表有PackNet、Pixelshuffle等;
  • 4)自监督pipeline中的优化目标,在现有的很多自监督深度估计中使用的是光度误差最小化,那么这个误差最小化并不是意味着深度效果最优化,其是存在多解的。特别是在一些低纹理或是无纹理区域,就有很大的奇异在里面。对于误差函数本身SSIM而言其度量的是一个窗口(patch)(例如,使用大小 3 ∗ 3 3*3 33的窗口)中统计量上的差异,实际RGB场景中呈现的细节很难去体现,这就导致深度生成地不够精细;

因而,整体来讲自监督深度估计要做好、做精细是目前来讲是一件较难的事情,文章提出的一些观察角度只是其中的一部分,但也可为对应的自监督pipeline改进提供引导。

2. 自监督pipeline影响因子

2.1 深度估计本身的表示

说明:下面的内容中使用 d d d代表深度(其值近小远大)。

直接估计视差:
其估计的形式也就是:
d = 1 x d=\frac{1}{x} d=x1
但是,这样的会导致一些离相机很近的物体其视差需要特别大,导致网络预测困难。

深度带scale属性:
这其实是在MonoDepth中使用的深度表示方式,给出最小很最大视差(由给定的最大最小深度值得到) σ m i n , σ m a x \sigma_{min},\sigma_{max} σmin,σmax,则将深度描述为:
d = 1 σ m i n + ( σ m a x − σ m i n ) ⋅ x d=\frac{1}{\sigma_{min}+(\sigma_{max}-\sigma_{min})\cdot x} d=σmin+(σmaxσmin)x1

Softplus直接估计深度:
它可以避免深度为0的情况,其深度表达式为:
d = l o g ( 1 + e x p ( x ) ) d=log(1+exp(x)) d=log(1+exp(x))

2.2 数据序列中光照影响

就算是在同一段视频序列中,不同帧之间的光照也会随着相机或是场景中的一些运动出现光照变化,因而不能直接做L1最小化。因而就需要将两张图像进行映射去除光照影响或是采用光照无关的损失度量。

光照映射:
这里是假设光照的变化符合线性变化关系,通过去预测两个变量 a , b a,b a,b实现光照的对齐:
I ′ = a ⋅ I + b I^{'}=a\cdot I+b I=aI+b
SSIM损失:
该损失函数是在一个窗口(patch)内进行统计意义上的近似,其表达为:
S S I M ( x , y ) = ( 2 μ x μ y + c 1 ) ( 2 μ x y + c 2 ) ( μ x 2 + μ y 2 + c 1 ) ( σ x + σ y + c 2 ) SSIM(x,y)=\frac{(2\mu_x\mu_y+c_1)(2\mu_{xy}+c_2)}{(\mu_x^2+\mu_y^2+c_1)(\sigma_x+\sigma_y+c_2)} SSIM(x,y)=(μx2+μy2+c1)(σx+σy+c2)(2μxμy+c1)(2μxy+c2)
Depth-error weighted (DW) SSIM损失:
在上述SSIM损失的基础上,给它添加Depth上的信息,这样去惩罚那些深度不一致的像素点,这里也就是通过一个权重的形式进行加权,其加权系数描述为:
w ( i , j ) = σ d 2 σ d 2 + ( d ^ t , r e c o n ( i , j ) − d ^ t ( i , j ) ) w^{(i,j)}=\frac{\sigma_d^2}{\sigma_d^2+(\hat{d}_{t,recon}^{(i,j)}-\hat{d}_t^{(i,j)})} w(i,j)=σd2+(d^t,recon(i,j)d^t(i,j))σd2
其中, d ^ t , r e c o n ( i , j ) \hat{d}_{t,recon}^{(i,j)} d^t,recon(i,j)代表的是warp之后的深度,且 σ d 2 = 1 N ∑ i , j ( d ^ t , r e c o n ( i , j ) − d ^ t ( i , j ) ) 2 \sigma_d^2=\frac{1}{N}\sum_{i,j}(\hat{d}_{t,recon}^{(i,j)}-\hat{d}_t^{(i,j)})^2 σd2=N1i,j(d^t,recon(i,j)d^t(i,j))2

2.3 场景物体遮挡

Minimum reprojection (MR):
该方法来自于MonoDepth,也就是去寻找输入的几个图像帧中重构误差最小的作为该处的损失函数:
L m r = min ⁡ t ′ p e ( I t , I t ′ → t ) L_{mr}=\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t}) Lmr=tminpe(It,Itt)
Depth consistency (DC):
建立在深度一致性的基础上,也就是说对于遮挡处的像素深度其source图中经过warp之后应该是小于等于target中对应的像素的,不然遮挡也不成立了,则只对满足上述条件的像素点计算loss。因而这里相当于是得到一个loss mask:
d t ′ → t ( i , j ) ≤ d t ( i , j ) d_{t^{'}\rightarrow t}^{(i,j)}\le d_t^{(i,j)} dtt(i,j)dt(i,j)

2.4 场景中物体运动处理

Auto-masking (AM):
这部分是在MonoDepth中提出的mask机制,其含义就是重构的误差应该满足帧间误差,这样的像素才是有效的,从而排除那些不满足静止场景先验的目标。
μ = [ min ⁡ t ′ p e ( I t , I t ′ → t ) < min ⁡ t ′ p e ( I t , I t ′ ) ] \mu=[\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t})\lt \min_{t^{'}}\mathcal{pe}(I_t,I_{t^{'}})] μ=[tminpe(It,Itt)<tminpe(It,It)]
不过,自然其对于无纹理或是弱纹理区域鲁棒性还是比较低呀。

Uncertaintymodeling:
上面提到的mask机制也可以通过学习的方式得到,也就是去估计一个uncertain prob(越接近1越置信)加入到loss计算中去:
L = min ⁡ t ′ p e ( I t , I t ′ → t ) ∑ t + l o g ∑ t L=\frac{\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t})}{\sum_t}+log\sum_t L=tmintpe(It,Itt)+logt

Motion map (MM):
这里方法是Google出的两篇对深度估计文章里的,为了免除使用instance mask去分割场景中的动态目标mask,这里使用估计动态运动属性(可以理解为3D场景下的光流): T i ∈ R H ∗ W ∗ 3 T_i\in{R^{H*W*3}} TiRHW3的方式。在Google的文章里面将其约束为满足常量性和稀疏性,其中的稀疏性描述为:
L 1 2 = 2 ∑ i ∈ { x , y , z } ⟨ ∣ T i ∣ ⟩ ∫ ∫ 1 + ∣ T i ∣ ⟨ ∣ T i ∣ ⟩ d u d v L_{\frac{1}{2}}=2\sum_{i\in{\{x,y,z}\}}\langle|T_i|\rangle\int\int\sqrt{1+\frac{|T_i|}{\langle|T_i|\rangle}}d_ud_v L21=2i{x,y,z}Ti1+TiTi dudv

2.5 编码器对于性能的影响

在这里插入图片描述

3. 实验结果

总结前文提到除编码器外其它的一些因素组合对整体性能的影响:
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### Skeleton-Based Action Recognition Research and Techniques In the field of skeleton-based action recognition, researchers have developed various methods to interpret human actions from skeletal data. These approaches leverage deep learning models that can effectively capture spatial-temporal features inherent in sequences of joint positions over time. One prominent technique involves utilizing recurrent neural networks (RNNs), particularly long short-term memory (LSTM) units or gated recurrent units (GRUs). Such architectures are adept at handling sequential information due to their ability to maintain a form of memory across timesteps[^1]. This characteristic makes them suitable for modeling temporal dependencies present within motion capture datasets. Convolutional Neural Networks (CNNs) also play an essential role when applied on graphs representing skeletons as nodes connected by edges denoting limb segments between joints. Graph Convolutional Networks (GCNs) extend traditional CNN operations onto non-Euclidean domains like point clouds or meshes formed around articulated bodies during movement execution phases[^2]. Furthermore, some studies integrate both RNN variants with GCN layers into hybrid frameworks designed specifically for this task domain; these combined structures aim to simultaneously exploit local appearance cues alongside global structural patterns exhibited throughout entire pose configurations captured frame-by-frame via sensors such as Microsoft Kinect devices or other depth cameras capable of tracking multiple individuals performing diverse activities indoors under varying lighting conditions without requiring any wearable markers attached directly onto participants' limbs/skin surfaces. ```python import torch.nn.functional as F from torch_geometric.nn import GCNConv class ST_GCN(torch.nn.Module): def __init__(self, num_features, hidden_channels, class_num): super(ST_GCN, self).__init__() self.conv1 = GCNConv(num_features, hidden_channels) self.fc1 = Linear(hidden_channels, class_num) def forward(self, x, edge_index): h = self.conv1(x, edge_index) h = F.relu(h) h = F.dropout(h, training=self.training) z = self.fc1(h) return F.log_softmax(z, dim=1) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值