当前位置: 首页 > news >正文

单目深度估计之图像重构原理解析

一、参考资料

浅析自监督深度估计中的光度损失(Photometric Loss)

二、图像重构原理

设输入位姿估计网络的3帧连续单目序列为 < I t − 1 , I t , I t + 1 > <I_{t-1},I_{t},I_{t+1}> <It1,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=<It1,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} Tts,可以将该像素还原为三维空间点,同时计算出在源图像时刻的相机坐标系下,该空间点的齐次坐标 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 =TtsDt(pt)K1pt
然后将该点投影回二维平面,得到该像素在源图像 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} psKTtsDt(pt)K1pt

p t p_{t} pt p s p_s ps 间的差异来源于相机自身的运动,因此可得刚体运动光流 F t → s r F_{t\rightarrow s}^r Ftsr
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} Ftsr(pt)=[ΔuΔv]=[usutvsvt]
继而可以基于此光流和源图像 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+Ftsr(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这个"标准答案”对输出的深度图进行优化。于是,我们利用联合训练的方法,通过输入相邻帧图像,对相对位姿网络进行训练,从而经过投影变换得到重建帧,以目标帧与重建帧的差值作为训练信号,达到自监督的效果。

几乎所有的自监督任务是利用深度估计相机姿态估计两个模块联合进行的,如下图所示:
在这里插入图片描述

自监督深度估计的具体流程如下:

  1. 将目标帧 I t I_t It 输入深度预测网络 Φ d \Phi_{d} Φd,得到深度图 D t {D}_t Dt
  2. 将目标帧 I t I_t It 和源帧 I s I_s Is 同时输入相对位姿估计网络 Φ d \Phi_{d} Φd,得到相对位姿矩阵 T t → s T_{t\to s} Tts
  3. 利用 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} psKTtsDt(pt)K1pt 这样的转换关系,由 p t p_t pt 计算出 p s p_s ps
  4. 由于 p s p_s ps 不一定为整数,故利用双线性插值算法计算该点的像素值,然后将该点采样到 I ^ t \hat{I}_t I^t 图像上的对应位置,通过借助投影下采样填充,最终实现利用 I s I_s Is 的像素信息重构出来 I ^ t \hat{I}_t I^t
  5. 利用 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(1SSIM(It,I^t))+(1α)It,I^t1
此函数由两部分相加而成,前面用于计算结构相似度 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​>&#xff0c;其中 t t t 为时间索引&#xff0c;…...

【爬虫】charles手机抓包环境设置(设置系统证书)

1.说明 想要对手机抓包&#xff0c;最关键的是需要设置好根证书&#xff0c;用户证书在安卓7.0之后就不受信任了&#xff0c;想要对手机app抓包&#xff0c;就需要把用户证书设置为系统证书&#xff08;根证书&#xff09; 注意&#xff0c;想要设置为根证书&#xff0c;你的…...

【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方法是一种客观权重赋权法&#xff0c;其基本思路是确定指标的客观权数以两个基本概念为基础。一是对比强度&#xff0c;它表示同一指标各个评价方案取值差…...

两个Tomcat插件配置不同端口,session冲突,同时登录被挤下线问题的解决

如果是配置了两个Tomcat的插件&#xff0c;在同一ip有两个需要同时登录的项目&#xff0c;可以在其中一个web项目的web.xml文件里添加session命名的配置&#xff0c;如下&#xff1a; <!--配置不同的session&#xff0c;避免管理端和手机端两个同时登录被挤下线--><se…...

Mybatis中执行Sql的执行过程

MyBatis中执行SQL的过程可以分为以下几个步骤&#xff1a; 解析配置文件&#xff1a;在运行时&#xff0c;MyBatis会加载并解析配置文件&#xff08;通常为mybatis-config.xml&#xff09;&#xff0c;获取数据库连接信息、映射文件等。 创建SqlSessionFactory&#xff1a;MyB…...

IEEE Standard for SystemVerilog—Chapter 25.7 Tasks and functions in interfaces

子例程&#xff08;任务和函数&#xff09;可以在接口中定义&#xff0c;也可以在连接的一个或多个模块中定义。这允许更抽象的建模级别。例如&#xff0c;“读”和“写”可以定义为任务&#xff0c;而不需要引用任何连线&#xff0c;主模块只能调用这些任务。在modport中&…...

一台服务器最大能支持多少条 TCP 连接

文章目录 1. 一台服务器最大能打开的文件数1.1 限制参数1.2 调整服务器能打开的最大文件数示例 2. 一台服务器最大能支持多少连接3. 一台客户端机器最多能发起多少条连接4. 其他5. 相关实际问题5.1 "too many open files" 报错是怎么回事&#xff0c;该如何解决5.2 一…...

Qt重定向QDebug,Qt/C++开源作品39-日志输出增强版V2022

Qt重定向QDebug&#xff0c;自定义一个简易的日志管理类 Chapter1 Qt重定向QDebug&#xff0c;自定义一个简易的日志管理类0.前言1.最简单的操作运行结果2.实现一个简易的日志管理类 Chapter2 Qt::Qt Log日志模块Qt Log日志模块官方解释官方Demo思路 Chapter3 QT日志模块的个性…...

linux入门---多线程的控制

目录标题 线程库pthread_create如何一次性创建多个线程线程的终止线程的等待线程取消分离线程如何看待其他语言支持的多线程线程id的本质线程的局部存储线程的封装 线程库 要想控制线程就得使用原生线程库也可以将其称为pthread库&#xff0c;这个库是遵守posix标准的&#xf…...

基于android的 rk3399 同时支持多个USB摄像头

基于android的 rk3399 同时支持多个USB摄像头 一、前文二、CameraHal_Module.h三、CameraHal_Module.cpp四、编译&烧录Image五、App验证 一、前文 Android系统默认支持2个摄像头&#xff0c;一个前置摄像头&#xff0c;一个后置摄像头 需要支持数量更多的摄像头&#xff0…...

【Qt之控件QTreeView】设置单元格高度、设置图标尺寸

设置列宽 设置高度 自定义代理 继承QItemDelegate&#xff0c;实现sizeHint ()方法&#xff0c;设置自定义委托。 class itemDelegate : public QItemDelegate {Q_OBJECTpublic:explicit itemDelegate(QObject *parent 0) : QItemDelegate(parent){}~itemDelegate(){}virtua…...

力扣42.接雨水(java,暴力法、前缀和解法)

Problem: 42. 接雨水 文章目录 思路解题方法复杂度Code 思路 要能接住雨水&#xff0c;感性的认知就是要形成一个“下凹区域”&#xff0c;则此时我们就要比较当前柱子和其左右柱子高度的关系&#xff0c;易得一个关键的式子&#xff1a;当前小区域的积水 min&#xff08;当前…...

hdlbits系列verilog解答(移位寄存器)-23

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff &#xff08;实现 D 触发器&#xff09;。实例化其中的三个&#xff0c;然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…...

Linux命令记载

服务器基本操作 SSH登录服务器 ssh -p 端口号 用户名服务器IP 输入密码SFTP上传文件 #输入密码 #使用get命令下载远程服务器的文件&#xff0c;比如/usr/test.txt sftp>get /usr/test.txt#使用put命令上传本地文件到服务器&#xff0c;比如/usr/test1.txt sftp> put /…...

Flume 快速入门【概述、安装、拦截器】

文章目录 什么是 Flume&#xff1f;Flume 组成Flume 安装Flume 配置任务文件应用示例启动 Flume 采集任务 Flume 拦截器编写 Flume 拦截器拦截器应用 什么是 Flume&#xff1f; Flume 是一个开源的数据采集工具&#xff0c;最初由 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优化手段&#xff0c;用于提高网站的性能和加载速度。减少计算量&#xff0c;有效提升响应速度&#xff0c;让有限的资源服务更多的用户。本文老白博客便从自己的使用简单给大家介绍下WordPress的缓存&#xff0c;包括 站点缓存&#xff08;Page Cach…...

从零开始:开发直播商城APP的技术指南

时下&#xff0c;直播商城APP已经成了线上购物、电子商务的核心组成&#xff0c;本文将为您提供一个全面的技术指南&#xff0c;帮助您从零开始开发一个直播商城APP。我们将涵盖所有关键方面&#xff0c;包括技术堆栈、功能模块、用户体验和安全性。 第一部分&#xff1a;技术…...

GZ035 5G组网与运维赛题第6套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项&#xff08;高职组&#xff09; 赛题第6套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通&#xff08;35分&#xff09; 子任务1&#xff1a;5G公共网络部署与调试&#xff08;15分&#xff09; …...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

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 …...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...