单目深度估计之图像重构原理解析
一、参考资料
浅析自监督深度估计中的光度损失(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)
五、参考文献
[1]Zhou T, Brown M, Snavely N, et al. Unsupervised learning of depth and ego-motion from video[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1851-1858.
[2]Godard C, Mac Aodha O, Brostow G J. Unsupervised monocular depth estimation with left-right consistency[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 270-279.
相关文章:
单目深度估计之图像重构原理解析
一、参考资料 浅析自监督深度估计中的光度损失(Photometric Loss) 二、图像重构原理 设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t 1 > <I_{t-1},I_{t},I_{t1}> <It−1,It,It1>,其中 t t t 为时间索引,…...
【爬虫】charles手机抓包环境设置(设置系统证书)
1.说明 想要对手机抓包,最关键的是需要设置好根证书,用户证书在安卓7.0之后就不受信任了,想要对手机app抓包,就需要把用户证书设置为系统证书(根证书) 注意,想要设置为根证书,你的…...
【flink sql table api】时间属性的指定与使用注意事项
文章目录 一. 时间属性介绍二. Table api指定时间属性三. 处理时间的指定1. 在创建表的 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 四. 事件时间的指定1. 在 DDL 中定义2. 在 DataStream 到 Table 转换时定义3. 使用 TableSource 定义 五. 小结…...
评价模型:CRITIC客观赋权法
目录 1.算法原理介绍2.算法步骤2.1 数据标准化2.2 计算信息承载量2.3 计算权重和得分 3.案例分析 1.算法原理介绍 CRITIC方法是一种客观权重赋权法,其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度,它表示同一指标各个评价方案取值差…...
两个Tomcat插件配置不同端口,session冲突,同时登录被挤下线问题的解决
如果是配置了两个Tomcat的插件,在同一ip有两个需要同时登录的项目,可以在其中一个web项目的web.xml文件里添加session命名的配置,如下: <!--配置不同的session,避免管理端和手机端两个同时登录被挤下线--><se…...
Mybatis中执行Sql的执行过程
MyBatis中执行SQL的过程可以分为以下几个步骤: 解析配置文件:在运行时,MyBatis会加载并解析配置文件(通常为mybatis-config.xml),获取数据库连接信息、映射文件等。 创建SqlSessionFactory:MyB…...
IEEE Standard for SystemVerilog—Chapter 25.7 Tasks and functions in interfaces
子例程(任务和函数)可以在接口中定义,也可以在连接的一个或多个模块中定义。这允许更抽象的建模级别。例如,“读”和“写”可以定义为任务,而不需要引用任何连线,主模块只能调用这些任务。在modport中&…...
一台服务器最大能支持多少条 TCP 连接
文章目录 1. 一台服务器最大能打开的文件数1.1 限制参数1.2 调整服务器能打开的最大文件数示例 2. 一台服务器最大能支持多少连接3. 一台客户端机器最多能发起多少条连接4. 其他5. 相关实际问题5.1 "too many open files" 报错是怎么回事,该如何解决5.2 一…...
Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022
Qt重定向QDebug,自定义一个简易的日志管理类 Chapter1 Qt重定向QDebug,自定义一个简易的日志管理类0.前言1.最简单的操作运行结果2.实现一个简易的日志管理类 Chapter2 Qt::Qt Log日志模块Qt Log日志模块官方解释官方Demo思路 Chapter3 QT日志模块的个性…...
linux入门---多线程的控制
目录标题 线程库pthread_create如何一次性创建多个线程线程的终止线程的等待线程取消分离线程如何看待其他语言支持的多线程线程id的本质线程的局部存储线程的封装 线程库 要想控制线程就得使用原生线程库也可以将其称为pthread库,这个库是遵守posix标准的…...
基于android的 rk3399 同时支持多个USB摄像头
基于android的 rk3399 同时支持多个USB摄像头 一、前文二、CameraHal_Module.h三、CameraHal_Module.cpp四、编译&烧录Image五、App验证 一、前文 Android系统默认支持2个摄像头,一个前置摄像头,一个后置摄像头 需要支持数量更多的摄像头࿰…...
【Qt之控件QTreeView】设置单元格高度、设置图标尺寸
设置列宽 设置高度 自定义代理 继承QItemDelegate,实现sizeHint ()方法,设置自定义委托。 class itemDelegate : public QItemDelegate {Q_OBJECTpublic:explicit itemDelegate(QObject *parent 0) : QItemDelegate(parent){}~itemDelegate(){}virtua…...
力扣42.接雨水(java,暴力法、前缀和解法)
Problem: 42. 接雨水 文章目录 思路解题方法复杂度Code 思路 要能接住雨水,感性的认知就是要形成一个“下凹区域”,则此时我们就要比较当前柱子和其左右柱子高度的关系,易得一个关键的式子:当前小区域的积水 min(当前…...
hdlbits系列verilog解答(移位寄存器)-23
文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff (实现 D 触发器)。实例化其中的三个,然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…...
Linux命令记载
服务器基本操作 SSH登录服务器 ssh -p 端口号 用户名服务器IP 输入密码SFTP上传文件 #输入密码 #使用get命令下载远程服务器的文件,比如/usr/test.txt sftp>get /usr/test.txt#使用put命令上传本地文件到服务器,比如/usr/test1.txt sftp> put /…...
Flume 快速入门【概述、安装、拦截器】
文章目录 什么是 Flume?Flume 组成Flume 安装Flume 配置任务文件应用示例启动 Flume 采集任务 Flume 拦截器编写 Flume 拦截器拦截器应用 什么是 Flume? Flume 是一个开源的数据采集工具,最初由 Apache 软件基金会开发和维护。它的主要目的是…...
【pandas技巧】group by+agg+transform函数
目录 1. group by单个字段单个聚合 2. group by单个字段多个聚合 3. group by多个字段单个聚合 4. group by多个字段多个聚合 5. transform函数 studentsgradesexscoremoney0小狗小学部female958441小猫小学部male938362小鸭初中部male838543小兔小学部female909314小花小…...
一文解读WordPress网站的各类缓存-老白博客
缓存是一种重要的WordPress优化手段,用于提高网站的性能和加载速度。减少计算量,有效提升响应速度,让有限的资源服务更多的用户。本文老白博客便从自己的使用简单给大家介绍下WordPress的缓存,包括 站点缓存(Page Cach…...
从零开始:开发直播商城APP的技术指南
时下,直播商城APP已经成了线上购物、电子商务的核心组成,本文将为您提供一个全面的技术指南,帮助您从零开始开发一个直播商城APP。我们将涵盖所有关键方面,包括技术堆栈、功能模块、用户体验和安全性。 第一部分:技术…...
GZ035 5G组网与运维赛题第6套
2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第6套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) …...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
