《Enforcing geometric constraints of virtual normal for depth prediction》论文笔记
参考代码:VNL_Monocular_Depth_Prediction
1. 概述
介绍:这篇文章为深度估计提供了一种新的损失函数形式,在深度估计任务中常见的损失函数多以pixel-wise监督的形式出现,因此这些监督损失函数都是利用像素层面的浅层信息进行监督约束的。这样的浅层次深度信息学习自然不能很好学习到GT深度中的一些细节与结构差异信息,因而这篇文章提出将预测深度通过预先假定的相机内参映射到同一模拟空间尺度(3D空间)上进行比较。这里的比较是通过在模拟空间上进行采样,每个采样包含3个点,并通过文章设定的2个采样准则排除无效采样,从而构建预测深度与GT深度的约束。正因为文章的方法是在3D空间进行采样这样使得文章的方法得到的深度更加符合GT在3D空间的分布,也使得深度更加准确。
将GT、文章方法预测深度、其它方法预测深度在点云和surface normal维度进行比较,见下图:
可以看到在surface normal和深度表现差异不是很大的情况下,点云的分布差异更大,因而在点云对应的3D空间进行约束能够得到更加准确的深度。
2. 方法设计
2.1 整体pipeline
这里使用的网络是编解码网络构建的深度预测网络,主要的改进点便是其使用文章中提出的virtual mormal损失函数(也就是在3D空间上建立约束),如下图所示:
在文章《DiverseDepth: Affine-invariant Depth Prediction Using Diverse Data
》中对深度回归所使用到的损失函数进行了梳理,将其大致分为如下3个类别,而文章的方法virtual normal与surface normal共同属于affine-invariant的,见引用论文中的表2:
这篇文章也将virtual normal与surface normal进行了比较,其指出surface normal的值与local size是存在较大关联的,而且受其影响很大,导致local size的选择会给网络训练带来较大不稳定因素。反观virtual normal使用的3D空间上采样的形式进行约束,其会更加鲁棒和稳定一些。
2.2 virtual normal损失
virtual normal损失是在3D空间上通过采样的方式选择满足文章条件的点,并且构建对应向量空间,并比较向量空间上的差异,其实现可以参考文章代码:VNL_loss.py。
这里假设焦距为fx,fyf_x,f_yfx,fy,当前像素点与深度值分别为(ui,vi),di(u_i,v_i),d_i(ui,vi),di,当前图像的中心点(u0,v0)(u_0,v_0)(u0,v0),则可以将图像坐标映射到相机坐标下:
zi=di;xi=di⋅(ui−u0)fx;yi=di(vi−v0)fyz_i=d_i;\ x_i=\frac{d_i\cdot(u_i-u_0)}{f_x};\ y_i=\frac{d_i(v_i-v_0)}{f_y}zi=di; xi=fxdi⋅(ui−u0); yi=fydi(vi−v0)
对于3D空间上的采样点集合s={(PA,PB,PC)o∣i=0,…,N}\mathcal{s}=\{(P_A,P_B,P_C)_o|i=0,\dots,N\}s={(PA,PB,PC)o∣i=0,…,N}是通过设置2个采样准则的方式实现:不共线准则与远距离准则。
不共线准则:
这里需要满足样本点不再同一条直线上,则对应采样点之间组成的向量满足余弦准则:
R1={α≥∠(PAPB→,PAPC→)≥β,α≥∠(PBPC→,PBPA→)≥β∣P∈s}\mathcal{R}_1=\{\alpha\ge\angle(\overrightarrow{P_AP_B},\overrightarrow{P_AP_C})\ge\beta,\ \alpha\ge\angle(\overrightarrow{P_BP_C},\overrightarrow{P_BP_A})\ge\beta|P\in\mathcal{s}\}R1={α≥∠(PAPB,PAPC)≥β, α≥∠(PBPC,PBPA)≥β∣P∈s}
其对应的代码可以参考:
nm = torch.bmm(q_norm.view(m_batchsize * groups, index, 1), q_norm.view(m_batchsize * groups, 1, index)) # 计算两个向量的模的乘积
energy = torch.bmm(proj_query, proj_key) # 两个向量乘积
norm_energy = energy / (nm + 1e-8) # 计算余弦值
mask_cos = torch.sum((norm_energy > delta_cos) + (norm_energy < -delta_cos), 1) > 3 # 筛选满足角度要求的采样
远距离准则:
这里为了防止采样的点过于靠近这里使用一个距离阈值作为筛选准则,其筛选准则为:
R2={∣∣PkPm→∣∣>θ∣k,m∈[A,B,C],P∈s}\mathcal{R}_2=\{||\overrightarrow{P_kP_m}||\gt\theta|k,m\in[A,B,C],P\in\mathcal{s}\}R2={∣∣PkPm∣∣>θ∣k,m∈[A,B,C],P∈s}
其中的参数θ\thetaθ就是选定的距离阈值,其对应的实现代码参考(delta_diff_*
就是对应选择的阈值):
mask_x = torch.sum(torch.abs(pw_diff[:, :, 0, :]) < delta_diff_x, 2) > 0
mask_y = torch.sum(torch.abs(pw_diff[:, :, 1, :]) < delta_diff_y, 2) > 0
mask_z = torch.sum(torch.abs(pw_diff[:, :, 2, :]) < delta_diff_z, 2) > 0
在通过上述方法选择得到对应的采样之后就需要对这些采样组成的向量进行组合描述,文章选择的表达形式为:
N={ni=PAiPBi→×PAiPCi→∣∣PAiPBi→×PAiPCi→∣∣∣(PA,PB,PC)i∈s,i=0,…,N}\mathcal{N}=\{n_i=\frac{\overrightarrow{P_{A_i}P_{B_i}}\times\overrightarrow{P_{A_i}P_{C_i}}}{||\overrightarrow{P_{A_i}P_{B_i}}\times\overrightarrow{P_{A_i}P_{C_i}}||}|(P_A,P_B,P_C)_i\in\mathcal{s},i=0,\dots,N\}N={ni=∣∣PAiPBi×PAiPCi∣∣PAiPBi×PAiPCi∣(PA,PB,PC)i∈s,i=0,…,N}
扰动鲁棒性分析:
在深度估计的过程中难免会存在扰动的情况,对应的就是下图中的点P′′P^{''}P′′,则这个扰动会给对应表达nnn带来什么样的影响呢?
对于带来的扰动可以进行分析:
∠(n,n′)=∠(OPC→,OP′′→)=arctan∣∣PCPC′′→∣∣∣∣OPC→∣∣≈0\angle(n,n^{'})=\angle(\overrightarrow{OP_C},\overrightarrow{OP^{''}})=\arctan\frac{||\overrightarrow{P_CP_C^{''}}||}{||\overrightarrow{OP_C}||}\approx0∠(n,n′)=∠(OPC,OP′′)=arctan∣∣OPC∣∣∣∣PCPC′′∣∣≈0
上面的关系满足是因为在上面提到的采样过过程中对采样的距离做了限制,既是:
∣∣PCPC′′→∣∣≪∣∣OPC→∣∣||\overrightarrow{P_CP_C^{''}}||\ll||\overrightarrow{OP_C}||∣∣PCPC′′∣∣≪∣∣OPC∣∣
综上,文章将对应空间上的表达描述为L1损失函数的形式:
LVN=1N(∑i=0N∣∣nipred−nigt∣∣1)L_{VN}=\frac{1}{N}(\sum_{i=0}^N||n_i^{pred}-n_i^{gt}||_1)LVN=N1(i=0∑N∣∣nipred−nigt∣∣1)
3. 实验结果
NYUD数据集:
KITTI数据集:
《Enforcing geometric constraints of virtual normal for depth prediction》论文笔记相关推荐
- 论文笔记之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的过程中要使用 ...
最新文章
- spring 组件基于注解的注册方式
- 前端如何获取联通积分_怎么利用定制的小程序来获取流量
- 网易技术干货 | 云信移动端音视频UI自动化测试实践
- xfire客户端对返回list很挑剔,所以需要使用泛型。
- Flutter实战一Flutter聊天应用(二)
- 函数式编程学习之路(四)
- 【大数据部落】用R语言挖掘Twitter数据
- 计算机病毒有几个阶段,计算机病毒发展9阶段
- 【笔记+代码】网格搜索-GridSearchCV
- 百度2017春招笔试真题编程题集合 [编程题]买帽子
- bmc linux 默认密码_系统下重置BMC密码方法
- uni-app 解决富文本图片溢出问题
- numpy到pytorch,鸟枪换炮
- AutoCAD选择对象后触发事件,加载和卸载
- 云南农职《JavaScript交互式网页设计》 综合机试试卷⑥——简易旅游网
- 项目管理中的成本计算
- python:凯撒密码
- STM-32:ADC模数转换器—ADC单通道转换/ADC多通道转换
- Gnome Ubuntu和KDE Ubuntu的区别
- 惠普刀片服务器型号,HP C3000 刀片服务器