Kick Back Relax:Learning to Reconstruct the World by Watching SlowTV

news2025/1/16 8:48:44

参考代码:slowtv_monodepth

这篇文章提出了一种在无标定数据集上自监督估计深度的方法,也就是通过网络预测的方式估计相机的内参,从而完成自监督流程。为了验证在无相机标定情况下实现自监督深度估计,从网络上下载了一些视频构建SlowTV数据集,并且一些trick也添加到深度自监督流程中,如对图像做任意长宽比例数据增广。

损失函数:
这里的损失函数与MonoDepth2中的损失函数近似,光度重构误差还是老配方:
L p h ( I , I ′ ) = λ 1 − L s s i m ( I , I ′ ) 2 + ( 1 − λ ) L I ( I , I ′ ) L_{ph}(I,I^{'})=\lambda\frac{1-L_{ssim}(I,I^{'})}{2}+(1-\lambda)L_I(I,I^{'}) Lph(I,I)=λ21Lssim(I,I)+(1λ)LI(I,I)
对于运动目标的处理这里采用前后帧最小重构误差和Auto-Mask机制去缓解(并不能根本上去除):
L r e c = ∑ p min ⁡ k L p h ( I k , I t + k ′ ) L_{rec}=\sum_p\min_kL_{ph}(I_k,I^{'}_{t+k}) Lrec=pkminLph(Ik,It+k)
其中, t + k t+k t+k是前后帧的索引值。Auto-Mask与之前论文中一致(理论上重构之后的误差应该小于帧间误差):
M = [ min ⁡ k L p h ( I k , I t + k ′ ) < min ⁡ k L p h ( I k , I t + k ) ] \mathcal{M}=[\min_kL_{ph}(I_k,I^{'}_{t+k})\lt \min_kL_{ph}(I_k,I_{t+k})] M=[kminLph(Ik,It+k)<kminLph(Ik,It+k)]

相机内参预测:
由于网络采集的视频没有提供标定的内参数据(对于那些内参准确的场景就没有必要了),因而需要使用网络去预测,对于输入的一个序列只需要一次预测就好了(这部分在代码里面也做了判断),而对于预测部分使用全连阶层预测,只不过对于焦距和中心在输出的时候采用了不同的激活函数,对于焦距预测采用了类似ReLU曲线的Softplus激活函数

# src/networks/pose.py#L86
def _get_focal_dec(self, n_ch: int) -> nn.Sequential:
    """Return focal length estimation decoder. (b, c, h, w) -> (b, 2)"""
    return nn.Sequential(
        self.block(n_ch, n_ch, kernel_size=3, stride=1, padding=1),
        self.block(n_ch, n_ch, kernel_size=3, stride=1, padding=1),
        nn.Conv2d(n_ch, 2, kernel_size=1),  # (b, 2, h, w)
        nn.AdaptiveAvgPool2d((1, 1)),  # (b, 2, 1, 1)
        nn.Flatten(),  # (b, n)
        nn.Softplus(),
    )

对于中心采用的是sigmoid激活函数,毕竟中心在0.5附近,这样不会存在梯度饱和区间问题

# src/networks/pose.py#L97
def _get_offset_dec(self, n_ch: int) -> nn.Sequential:
    """Return principal point estimation decoder. (b, c, h, w) -> (b, 2)"""
    return nn.Sequential(
        self.block(n_ch, n_ch, kernel_size=3, stride=1, padding=1),
        self.block(n_ch, n_ch, kernel_size=3, stride=1, padding=1),
        nn.Conv2d(n_ch, 2, kernel_size=1),  # (b, 2, h, w)
        nn.AdaptiveAvgPool2d((1, 1)),  # (b, 2, 1, 1)
        nn.Flatten(),  # (b, n)
        nn.Sigmoid(),
    )

随机图像尺度:
在MiDas算法中已经验证了图像的尺寸会对深度估计造成影响,为了使得网络更加鲁棒和具备更强零样本泛化能力,这里对图像进行剪裁和resize操作。在剪裁的时候涵盖图像高度的 [ 50 % , 100 % ] [50\%,100\%] [50%,100%]这个区间,并且长宽比例也会变化,比如1:1、16:9等。

上面的这几个变量对网络性能的消融实验:
在这里插入图片描述

自监督深度估计的性能影响因子:
以下的内容来自于与这篇文章同一个团队的工作,研究的是自监督深度估计算法中backbone、损失函数等对自监督深度估计带来的影响:

paper:Deconstructing Self-Supervised Monocular Reconstruction: The Design Decisions that Matte

backbone对网络性能的影响因素最大:
在这里插入图片描述

深度估计的平滑对深度性能的波动较小:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/896734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

板卡常用前端 数据表操作

两年前写的&#xff0c;现在看,有点想吐, 数据操作表,调试设备用 采用外挂的方法&#xff0c;以前设备的接口命令,简易&#xff0c;换个UI展示很容易 自己写着玩的,公司部分产品再用,前端展示,不涉密 index.html <!doctype html> <html><head><meta chars…

vue根据template结构自动生成css/scss/less样式嵌套

vscode搜索安装插件&#xff1a;AutoScssStruct4Vue

Java实现postgre数据库每日定时自动备份

前提&#xff1a;该备份仅为同数据库不同schema备份 假设需要备份的数据库为test&#xff0c;schema为public。代码如下 public void backupAllTables() {log.info("备份全表开始执行" System.currentTimeMillis());String origScheme1 "public";String…

卷积神经网络全解!CNN结构、训练与优化全维度介绍!

目录 一、引言1.1 背景和重要性1.2 卷积神经网络概述 二、卷积神经网络层介绍2.1 卷积操作卷积核与特征映射卷积核大小多通道卷积 步长与填充步长填充 空洞卷积&#xff08;Dilated Convolution&#xff09;分组卷积&#xff08;Grouped Convolution&#xff09; 2.2 激活函数R…

Excel自动化办公——Openpyxl的基本使用

Excel自动化办公——Openpyxl的基本使用 个人感觉&#xff0c;相比Pandas&#xff0c;openpyxl对Excel的操作更为细致&#xff0c;Pandas则更适用于统计计算&#xff1b; 01 基本环境02 Excel数据读取操作03 案例04 向Excel写入数据05 表数据定向修改06 单元格样式制定07 单元…

2019年3月全国计算机等级考试真题(C语言二级)

2019年3月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 负责数据库中查询操作的数据库语言是 A. 数据定义语言 B. 数据管理语言 C. 数据操纵语言 D. 数据控制语言 正确答案&#xff1a;C 第2题 有关系如下图所示&#xff0c;其违反了哪一类完整性约束 …

c++——静态成员变量、静态成员函数和const修饰的静态成员变量

一、c静态成员变量 在C中&#xff0c;静态成员变量&#xff08;Static Member Variable&#xff09;是类的一种特殊类型的成员变量&#xff0c;它被类的所有实例共享&#xff0c;而不是每个实例都有自己的副本。静态成员变量在类的所有对象之间保持唯一的状态&#xff0c;具有…

ElementPlusError 解决: [ElForm] model is required for validate to work 的三种方式

1、问题描述&#xff1a; 其一、报错为&#xff1a; ElementPlusError: [ElForm] model is required for validate to work. 中文为&#xff1a; ElementPlusError&#xff1a;验证工作需要 [ElForm] 模型 其二、问题描述为&#xff1a; 在 form 表单中需要进行规则校验&a…

分布式锁系列之Redis分布式锁

目录 介绍 模拟订单超卖场景 代码版 不加锁情况 synchronized加锁 ​编辑 lock加锁 整合Mysql版 不加锁版 synchronized加锁 lock加锁版 jvm加锁失效情况 多例模式 事务 集群搭建 书写sql解决集群超卖 使用悲观锁select ...for update ​编辑 不加悲观锁情况 使用…

备份或同步数据?跨国大文件传输的不同需求与解决方案

信息化时代的到来&#xff0c;使得许多个人、组织、企业在日常生活中都需要对数据进行备份或同步。但不同的应用场景和需求&#xff0c;也需要不同的备份和同步方式。而在跨国大文件传输方面&#xff0c;更是需要根据不同需求选择合适的传输方案。下面将分别介绍备份与同步数据…

第一章MyBatis概述

框架 Java常用框架 SSM三大框架&#xff1a;SpringSpringMVCMyBatisSpringBootSpringCloud 框架简单来说就是提前封装好的通用代码&#xff0c;提高我们的开发的效率&#xff08;站在巨人的肩膀上&#xff09; 框架一般以jar包的形式存在 三层架构 代码封装主要为了降低代…

MQTT 常用客户端库介绍 (全面涵盖c,c++,java,c#,python)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的通信协议&#xff0c;被广泛应用于物联网和分布式系统中。它以其简单、可靠和高效的特性而备受推崇&#xff0c;成为连接设备和应用程序的首选协议。MQTT的重要性不言而喻&#xff0c;它为实时通…

K8S应用笔记 —— 签发自签名证书用于Ingress的https配置

一、需求描述 在本地签发自命名证书&#xff0c;用于K8S集群的Ingress的https配置。 前提条件&#xff1a; 完成K8S集群搭建。完成证书制作机器的openssl服务安装。 二、自签名证书制作 2.1 脚本及配置文件准备 2.1.1 CA.sh脚本准备 注意事项&#xff1a; openssl服务默认CA…

【vim 学习系列文章 5 - cscope 过滤掉某些目录】

文章目录 cscope 过滤目录介绍 cscope 过滤目录介绍 第一步创建自己的cscope脚本~/.local/bin/cscope.sh&#xff0c;如下&#xff1a; function my_cscope() {CODE_PATHpwdecho "$CODE_PATH"echo "start cscope...."if [ ! -f "$CODE_PATH/cscope.…

qt实现9×9数独游戏

qt实现的数独小游戏&#xff0c;资源有可下载直接跑的exe&#xff08;enigma已经打包好&#xff09;&#xff0c;源码可私信 部分代码 #include "widget.h" #include "ui_widget.h" #include"form.h" #include<QDebug> #include<QPush…

数据结构——二叉搜索树(附带C++实现版本)

文章目录 二叉搜索树概念 二叉树的实际应用二叉树模拟实现存储结构二叉搜索树构成二叉搜索树的查找插入操作中序遍历二叉树的删除循环(利用左子树最右节点&#xff09;递归(利用右子树根节点) 二叉树拷贝二叉树资源的销毁 二叉树实现完整代码总结 二叉搜索树 概念 二叉搜索树…

LVS-DR+keepalived实现高可用负载群集

VRRP 通信原理&#xff1a; VRRP就是虚拟路由冗余协议&#xff0c;它的出现就是为了解决静态路由的单点故障。 VRRP是通过一种竞选的一种协议机制&#xff0c;来将路由交给某台VRRP路由。 VRRP用IP多播的方式&#xff08;多播地址224.0.0.18&#xff09;来实现高可用的通信&…

opencv运动目标检测-背景建模

背景建模 帧差法 由于场景中的目标在运动&#xff0c;目标的影像在不同图像帧中的位置不同。该类算法对时间上连续的两帧图像进行差分运算&#xff0c;不同帧对应的像素点相减&#xff0c;判断灰度差的绝对值&#xff0c;当绝对值超过一定阈值时&#xff0c;即可判断为运动目…

Java虚拟机(JVM):垃圾收集算法

目录 一、分代收集理论 二、标记-清除算法 三、标记-复制算法 四、标记-整理算法 一、分代收集理论 分代收集理论建立在两个分代假说之上&#xff1a; 1、弱分代假说&#xff1a;绝大多数对象都是朝生夕灭的。 2、强分代假说&#xff1a;熬过越多次垃圾收集过程的对象就…

Python中数据结构列表详解

列表是最常用的 Python 数据类型&#xff0c;它用一个方括号内的逗号分隔值出现&#xff0c;列表的数据项不需要具有相同的类型。 列表中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索引是 0&#xff0c;第二个索引是 1&#xff0c;依此类推。列表都可…