《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∗33*33∗3的窗口)中统计量上的差异,实际RGB场景中呈现的细节很难去体现,这就导致深度生成地不够精细;
因而,整体来讲自监督深度估计要做好、做精细是目前来讲是一件较难的事情,文章提出的一些观察角度只是其中的一部分,但也可为对应的自监督pipeline改进提供引导。
2. 自监督pipeline影响因子
2.1 深度估计本身的表示
说明:下面的内容中使用ddd代表深度(其值近小远大)。
直接估计视差:
其估计的形式也就是:
d=1xd=\frac{1}{x}d=x1
但是,这样的会导致一些离相机很近的物体其视差需要特别大,导致网络预测困难。
深度带scale属性:
这其实是在MonoDepth中使用的深度表示方式,给出最小很最大视差(由给定的最大最小深度值得到)σmin,σmax\sigma_{min},\sigma_{max}σmin,σmax,则将深度描述为:
d=1σmin+(σmax−σmin)⋅xd=\frac{1}{\sigma_{min}+(\sigma_{max}-\sigma_{min})\cdot x}d=σmin+(σmax−σmin)⋅x1
Softplus直接估计深度:
它可以避免深度为0的情况,其深度表达式为:
d=log(1+exp(x))d=log(1+exp(x))d=log(1+exp(x))
2.2 数据序列中光照影响
就算是在同一段视频序列中,不同帧之间的光照也会随着相机或是场景中的一些运动出现光照变化,因而不能直接做L1最小化。因而就需要将两张图像进行映射去除光照影响或是采用光照无关的损失度量。
光照映射:
这里是假设光照的变化符合线性变化关系,通过去预测两个变量a,ba,ba,b实现光照的对齐:
I′=a⋅I+bI^{'}=a\cdot I+bI′=a⋅I+b
SSIM损失:
该损失函数是在一个窗口(patch)内进行统计意义上的近似,其表达为:
SSIM(x,y)=(2μxμy+c1)(2μxy+c2)(μx2+μy2+c1)(σx+σy+c2)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)=σd2σd2+(d^t,recon(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,recon(i,j)\hat{d}_{t,recon}^{(i,j)}d^t,recon(i,j)代表的是warp之后的深度,且σd2=1N∑i,j(d^t,recon(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=N1∑i,j(d^t,recon(i,j)−d^t(i,j))2。
2.3 场景物体遮挡
Minimum reprojection (MR):
该方法来自于MonoDepth,也就是去寻找输入的几个图像帧中重构误差最小的作为该处的损失函数:
Lmr=mint′pe(It,It′→t)L_{mr}=\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t})Lmr=t′minpe(It,It′→t)
Depth consistency (DC):
建立在深度一致性的基础上,也就是说对于遮挡处的像素深度其source图中经过warp之后应该是小于等于target中对应的像素的,不然遮挡也不成立了,则只对满足上述条件的像素点计算loss。因而这里相当于是得到一个loss mask:
dt′→t(i,j)≤dt(i,j)d_{t^{'}\rightarrow t}^{(i,j)}\le d_t^{(i,j)}dt′→t(i,j)≤dt(i,j)
2.4 场景中物体运动处理
Auto-masking (AM):
这部分是在MonoDepth中提出的mask机制,其含义就是重构的误差应该满足帧间误差,这样的像素才是有效的,从而排除那些不满足静止场景先验的目标。
μ=[mint′pe(It,It′→t)<mint′pe(It,It′)]\mu=[\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t})\lt \min_{t^{'}}\mathcal{pe}(I_t,I_{t^{'}})]μ=[t′minpe(It,It′→t)<t′minpe(It,It′)]
不过,自然其对于无纹理或是弱纹理区域鲁棒性还是比较低呀。
Uncertaintymodeling:
上面提到的mask机制也可以通过学习的方式得到,也就是去估计一个uncertain prob(越接近1越置信)加入到loss计算中去:
L=mint′pe(It,It′→t)∑t+log∑tL=\frac{\min_{t^{'}}\mathcal{pe}(I_{t},I_{t^{'}\rightarrow t})}{\sum_t}+log\sum_tL=∑tmint′pe(It,It′→t)+logt∑
Motion map (MM):
这里方法是Google出的两篇对深度估计文章里的,为了免除使用instance mask去分割场景中的动态目标mask,这里使用估计动态运动属性(可以理解为3D场景下的光流):Ti∈RH∗W∗3T_i\in{R^{H*W*3}}Ti∈RH∗W∗3的方式。在Google的文章里面将其约束为满足常量性和稀疏性,其中的稀疏性描述为:
L12=2∑i∈{x,y,z}⟨∣Ti∣⟩∫∫1+∣Ti∣⟨∣Ti∣⟩dudvL_{\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_vL21=2i∈{x,y,z}∑⟨∣Ti∣⟩∫∫1+⟨∣Ti∣⟩∣Ti∣dudv
2.5 编码器对于性能的影响
3. 实验结果
总结前文提到除编码器外其它的一些因素组合对整体性能的影响:
《Revisiting Self-Supervised Monocular Depth Estimation》论文笔记相关推荐
- 论文笔记之Understanding and Diagnosing Visual Tracking Systems
Understanding and Diagnosing Visual Tracking Systems 论文链接:http://dwz.cn/6qPeIb 本文的主要思想是为了剖析出一个跟踪算法中到 ...
- 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
本人为目标追踪初入小白,在博客下第一次记录一下自己的论文笔记,如有差错,恳请批评指正!! 论文相关信息:<Understanding and Diagnosing Visual Tracking ...
- 论文笔记Understanding and Diagnosing Visual Tracking Systems
最近在看目标跟踪方面的论文,看到王乃岩博士发的一篇分析跟踪系统的文章,将目标跟踪系统拆分为多个独立的部分进行分析,比较各个部分的效果.本文主要对该论文的重点的一个大致翻译,刚入门,水平有限,如有理解错 ...
- 目标跟踪笔记Understanding and Diagnosing Visual Tracking Systems
Understanding and Diagnosing Visual Tracking Systems 原文链接:https://blog.csdn.net/u010515206/article/d ...
- 追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems)
追踪系统分模块解析(Understanding and Diagnosing Visual Tracking Systems) PROJECT http://winsty.net/tracker_di ...
- ICCV 2015 《Understanding and Diagnosing Visual Tracking Systems》论文笔记
目录 写在前面 文章大意 一些benchmark 实验 实验设置 基本模型 数据集 实验1 Featrue Extractor 实验2 Observation Model 实验3 Motion Mod ...
- Understanding and Diagnosing Visual Tracking Systems
文章把一个跟踪器分为几个模块,分别为motion model, feature extractor, observation model, model updater, and ensemble po ...
- CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文模型叫做SANet.作者在论文中提到,CNN模型主要适用于类间判别,对于相似物体的判别能力不强.作者提出使用RNN对目标物体的self-structure进行建模,用于提 ...
- ICCV 2017 UCT:《UCT: Learning Unified Convolutional Networks forReal-time Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文模型叫做UCT.就像论文题目一样,作者提出了一个基于卷积神经网络的end2end的tracking模型.模型的整体结构如下图所示(图中实线代表online trackin ...
- CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记
理解出错之处望不吝指正. 本文提出的模型叫做STRCF. 在DCF中存在边界效应,SRDCF在DCF的基础上中通过加入spatial惩罚项解决了边界效应,但是SRDCF在tracking的过程中要使用 ...
最新文章
- 全国大学生智能车竞赛(创意组)陕西理工大学校级选拔赛顺利举行
- 零基础可以学python吗-没编程基础可以学python吗
- 无csrf防护的html页面,Springs CSRF保护仅* HTML登录页面
- [css] ::first-letter有什么应用场景?
- php sqrt函数,sqrt函数怎么使用
- 学校计算机考察内容是什么意思,2019考研计算机复试四项考察内容分析及注意事项...
- mysql分组查询统计求和
- 所有的低谷,都是为了更上一层楼
- Kubernetes 开发流程中的三个关键步骤
- php 页面异步刷新,php+jQuery+Ajax简单实现页面异步刷新
- 在Excel中插入Flash及解决不能自动播放问题
- PHP知识总结(一)
- 29. git ignore
- 【入门必备】Java数据结构详解
- HDLbits day2 一位全加器逻辑表达式原理 FPGA关于仿真
- 巴宝莉(Burberry)换等线体LOGO了!
- tensorflow,pytorch中normalize方法
- 橱柜高度与身高对照表_橱柜高度与身高对照表 橱柜高度怎么根据身高定制?...
- 安卓六大布局之 线性布局(LinearLayout)
- 单片机如何烧录程序?单片机的下载方式讲解
热门文章
- html下划线无阴影效果,CSS | 实现下划线的N个姿势
- python的方向_Python有哪些就业方向
- 碳中和目标下A股先锋调研:钢铁行业加速碳达峰 多行业影响已现
- winrm java客户端_java通过winrm4j远程连接win执行命令
- 大数据杀熟 算法_大数据“杀熟” 怎能让真正的刀俎逍遥法外
- *帅帅老师,编写函数,将999-9999整数放入一个数组当中
- vue + element插件Popover弹出框
- Hive常用命令之MSCK REPAIR TABLE命令概述
- chrome离线小恐龙改造版
- 疫情让鲸类暂时远离了人工噪声,但在这之前,它们已被打扰了一百多年