DeepVO 论文阅读

论文信息

题目:DeepVO Towards End-to-End Visual Odometry with Deep Recurrent Convolutional Neural Networks
作者:Sen Wang, Ronald Clark, Hongkai Wen and Niki Trigoni
代码地址:http://senwang.gitlab.io/DeepVO/ (原作者并没有开源)
pytorch版本代码地址:https://github.com/ChiWeiHsiao/DeepVO-pytorch
时间:2017年

Abstract

大多数现有的单目视觉里程计(VO)算法都是在标准流程下开发的,包括特征提取、特征匹配、运动估计、局部优化等。虽然其中一些算法已经表现出优越的性能,但它们通常需要仔细设计和专门微调才能正常工作在不同的环境中。恢复单眼 VO 的绝对尺度还需要一些先验知识

本文通过使用深度循环卷积神经网络 (RCNNs) ,提出了一种新颖的单目 VO 端到端框架。由于它是以端到端的方式进行训练和部署的,因此它可以直接从一系列原始RGB图像(视频)数据中推断出相机姿态,无需采用传统VO管道中的任何模块。

基于 RCNN,它不仅通过卷积神经网络自动学习 VO 问题的有效特征表示,而且还使用深度循环神经网络隐式建模顺序动态和关系。

Introduction

在本文中,我们利用深度循环卷积神经网络(RCNN)提出了一种基于深度学习的新型单目 VO 算法 。由于它是以端到端的方式实现的,因此它不需要经典 VO 管道中的任何模块(甚至相机校准)。
主要贡献有三方面:
1)我们证明单目VO问题可以通过基于深度学习的端到端方式解决,即直接从原始 RGB 图像估计姿势。恢复绝对尺度既不需要先验知识也不需要参数。
2)我们提出了一种 RCNN 架构,通过使用 CNN 学习的几何特征表示,能够将基于 DL 的 VO 算法推广到全新的环境。
3) 图像序列的序列依赖性和复杂的运动动力学对于 VO 很重要,但人类无法显式或轻松地建模,但它们可以由深度递归神经网络 (RNN) 隐式封装和自动学习。

Related Work

基于几何的方法

(这部分不多解释)
1)基于稀疏特征的方法:
2)直接方法:

基于学习的方法

由于 CNN 无法对顺序信息进行建模,因此之前的工作都没有考虑图像序列或视频进行顺序学习。在这项工作中,我们通过利用 RNN 来解决这个问题。

通过 RCNN 进行端到端视觉里程计

提出的RCNN框架

所提出的端到端 VO 系统的架构如图 所示。它以视频剪辑或单目图像序列作为输入。在每个时间步,通过减去训练集的平均 RGB 值来对 RGB 图像帧进行预处理,并且可以选择将其大小调整为 64 倍数的新大小。两个连续图像堆叠在一起以形成张量深度 RCNN 学习如何提取运动信息和估计姿势。具体来说,图像张量被输入 CNN,为单目 VO 生成有效特征,然后通过 RNN 进行顺序学习。每个图像对都会在网络的每个时间步产生一个姿态估计。 VO 系统随着时间的推移而发展,并在捕获图像时估计新的姿势。
在这里插入图片描述

基于CNN的特征提取

KITTI 数据集上的张量示例。它有 9 个卷积层,除了 Conv6 之外,每层后面都有一个修正线性单元 (ReLU) 激活,即:共17层。网络中感受野的大小逐渐从 7 × 7 减小到 5 × 5,然后减小到 3 × 3,以捕获小的有趣特征。引入零填充是为了适应感受野的配置或在卷积后保留张量的空间维度。通道的数量,即用于特征检测的滤波器的数量,增加以学习各种特征。
在这里插入图片描述
CNN的构成:
在这里插入图片描述

基于RNN的序列建模

RNN 与 CNN 的不同之处在于,它随着时间的推移保持其隐藏状态的记忆,并且它们之间具有反馈循环,这使得其当前隐藏状态成为先前隐藏状态的函数,如图 2 所示的 RNN 部分。因此, RNN 可以找出输入与序列中先前状态之间的联系。给定时间 k k k 的卷积特征 x k x_k xk,RNN 在时间步 k k k 更新为:
在这里插入图片描述
where h k h_k hk and y k y_k yk are the hidden state and output at time k k k respectively, W terms denote corresponding weight matrices, b b b terms denote bias vectors, and H H H is an element-wise non- linear activation function, such as sigmoid or hyperbolic tangent.

为了能够发现和利用长轨迹拍摄的图像之间的相关性,我们采用长短期记忆(LSTM)作为我们的 RNN,它能够通过引入记忆门和单元来学习长期依赖性。它明确确定要丢弃或保留哪些先前的隐藏状态以更新当前状态,并期望在姿势估计期间学习运动。
在这里插入图片描述

图 3 显示了折叠的 LSTM 及其随时间的展开版本以及 LSTM 单元的内部结构。可以看到,展开LSTM后,每个LSTM单元都与一个时间步相关联。给定时间 k k k 处的输入 x k x_k xk 以及前一个 LSTM 单元的隐藏状态 h k − 1 h_{k−1} hk1 和存储单元 c k − 1 c_{k−1} ck1 ,LSTM 根据以下公式在时间步 k k k 处更新:
在这里插入图片描述
where ⊙ \odot is element-wise product of two vectors, σ is sigmoid non-linearity, t a n h tanh tanh is hyperbolic tangent non-linearity, W terms denote corresponding weight matrices, b b b terms denote bias vectors, i k , f k , g k , c k i_k, f_k, g_k, c_k ik,fk,gk,ck and o k o_k ok are input gate, forget gate, input modulation gate, memory cell and output gate at time k k k, respectively

尽管 LSTM 可以处理长期依赖性并具有深层时间结构,但它仍然需要网络层的深度来学习高级表示和对复杂动态进行建模。

在我们的例子中,深度 RNN 是通过堆叠两个 LSTM 层来构建的,其中一个 LSTM 的隐藏状态是另一个 LSTM 层的输入,如图 2 所示。在我们的网络中,每个 LSTM 层都有 1000 个隐藏状态。

成本函数和优化

所提出的基于 RCNN 的 VO 系统可以被认为是计算相机姿势的条件概率 Y t = ( y 1 , . . . , y t ) Y_t = (y_1, ..., y_t) Yt=(y1,...,yt) 给定一系列单目 RGB 图像 X t = ( x 1 , . . . , x t ) X_t = (x_1, ..., x_t) Xt=(x1,...,xt) 直到时间 t t t从概率的角度来看:
在这里插入图片描述

建模和概率推理在深度 RCNN 中进行。为了找到 VO 的最佳参数 θ*,DNN 最大化 (3):
在这里插入图片描述
为了学习 DNN 的超参数 θ,时间 k 时的地面真实姿势 ( p k , ϕ k ) (p_k, \phi_k) (pk,ϕk) 与其估计姿势 ( p ^ k , ϕ ^ k ) (\hat{p}_k, \hat{\phi}_k) (p^k,ϕ^k)之间的欧几里德距离被最小化。损失函数由所有位置 p 和方向 ϕ \phi ϕ的均方误差 (MSE) 组成:
在这里插入图片描述
其中 ∥ ⋅ ∥ \left \| \cdot \right \| 是 2-范数,κ(实验中为 100)是平衡位置和方向权重的比例因子,N 是样本数。方向 ϕ \phi ϕ 由欧拉角而不是四元数表示,因为四元数受到额外的单位约束,这阻碍了深度学习的优化问题。我们还发现,在实践中使用四元数会在一定程度上降低方向估计。

EXPERIMENTAL RESULTS

1)数据集:KITTI VO/SLAM基准[3]有22个图像序列,其中11个(序列00-10)与地面实况相关。其他 10 个序列(序列 11-21)仅提供原始传感器数据。

由于该数据集是在动态物体较多的城市地区行驶时以相对较低的帧率(10 fps)记录的,并且行驶速度高达90 km/h,因此对于单目VO算法来说非常具有挑战性。

2)训练和测试:进行两个单独的实验来评估所提出的方法。第一个是基于序列00-10,通过groundtruth定量分析其性能,因为groundtruth仅针对这些序列提供。为了有单独的数据集进行测试,仅使用相对较长的序列00、02、08和09进行训练。将轨迹分割成不同的长度,以生成大量的训练数据,总共产生 7410 个样本。训练好的模型在序列03、04、05、06、07和10上进行测试以进行评估。

在这里插入图片描述

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

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

相关文章

插入排序算法

插入排序 算法说明与代码实现&#xff1a; 以下是使用Go语言实现的插入排序算法示例代码&#xff1a; package mainimport "fmt"func insertionSort(arr []int) {n : len(arr)for i : 1; i < n; i {key : arr[i]j : i - 1for j > 0 && arr[j] > …

Python web实战 | 使用 Flask 实现 Web Socket 聊天室

概要 今天我们学习如何使用 Python 实现 Web Socket&#xff0c;并实现一个实时聊天室的功能。本文的技术栈包括 Python、Flask、Socket.IO 和 HTML/CSS/JavaScript。 什么是 Web Socket&#xff1f; Web Socket 是一种在单个 TCP 连接上进行全双工通信的协议。它是 HTML5 中的…

【编程语言 · C语言 · 学生管理系统】

【编程语言 C语言 学生管理系统】https://mp.weixin.qq.com/s?__bizMzg4NTE5MDAzOA&mid2247491542&idx1&snf9b72a5af62a93bc902c5467056a9343&chksmcfade32ff8da6a3956be7d6a5dceb97de27e25157804abf8a3193272fa8ad68e78640ca33a5c&token1462056111&…

【大数据之Flume】四、Flume进阶之复制和多路复用、负载均衡和故障转移、聚合案例

1 复制和多路复用 &#xff08;1&#xff09;需求&#xff1a;使用 Flume-1 监控文件变动&#xff08;可以用Exec Source或Taildir Source&#xff09;&#xff0c;Flume-1 将变动内容传递给 Flume-2&#xff08;用Avro Sink传&#xff09;&#xff0c;&#xff08;用Avro Sou…

BugKu CTF(杂项篇MISC)—想要种子吗

BugKu CTF(杂项篇MISC)—想要种子吗 提 示: 描 述:flag{} 题目下载后是一张图片&#xff0c;打开如下。 一、工具 十六进制编辑器010 editor kali系统文件分离工具binwalk或者foremost 维吉尼亚密码 STEGHIDE图片隐写工具 文章所需的软件下载地址 ARCHPR压缩包密码破解…

美团2024校招6000人;伯克利博士讲Llama 2技术细节;互联网转行AIGC最全指北;技术进步周期与创客崛起 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 美团 2024 届校园招聘将录用 6000 人&#xff0c;技术类岗位扩招超 50% 美团招聘公众号宣布启动 2024 届校园招聘&#xff01;此次招聘…

PCB制版技术

1、在头脑里形成一个原理图----现在就下载AD9盖版&#xff0c;诞生了一个问题&#xff0c;电路板去哪里买&#xff0c;买了怎么焊接电路和芯片&#xff0c;怎样流程化批量制作电子产品 1.1 形成一个PCB板&#xff0c;形成一个结构 1.2 焊接&#xff0c;嫁接&#xff0c;组装等 …

Scaling Instruction-Finetuned Language Models

Paper name Scaling Instruction-Finetuned Language Models Paper Reading Note Paper URL: https://arxiv.org/pdf/2210.11416.pdf TL;DR 2022 年谷歌出的文章&#xff0c;对指令微调的影响因素进行分析&#xff0c;提出了一些提升指令微调效果的方案。与该文章一起出品…

vue sku商品规格多选

vue sku商品规格多选 1.创建一个数据对象&#xff0c;用于存储SKU的选中状态。例如&#xff0c;可以使用一个数组来表示选中的SKU&#xff0c;每个元素代表一个SKU选项的id。 data() {return {selectedOptions: []} }2.在SKU选项列表中&#xff0c;使用v-bind:class绑定一个计…

基于双层优化的微电网系统规划设计方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 微电网系统结构 1.2 微电网系统双层规划设计结构 1.3 双层优化模型 1.4 上层容量优化模型 1.5 下层调度优化模型 &#x1f4da;2 运行结果 &#x1f389;3 文献来源 &#x1f308;4 Matlab代码、数据、文章讲解 &#x1f4a5;1 概述 文献来源&…

Meta “地平线世界”移动端应用即将上线,手机快乐元宇宙?

根据海外记者 Janko Roettgers 的报道&#xff0c;Meta 预计很快推出移动版的 VR 元宇宙服务 "地平线世界"&#xff0c;这是Meta 长期开发的产品。 根据最新报道&#xff0c;Meta宣布正在研发“地平线世界”的移动版&#xff0c;并表示这一服务已经可以在Quest VR设…

LInux的安装(VMware,网卡设置,SSH连接工具)

Linux的安装 1、安装方式介绍 1.安装方式: 物理机安装:直接将操作系统安装到服务器硬件上 虚拟机安装:通过虚拟机软件安装 **虚拟机( Virtual Machine&#xff09;**指通过软件模拟的具有完整硬件系统功能、运行在完全隔离环境中的完整计算机系统。 2、安装Linux 在官网将…

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

在前不久&#xff0c;PoseiSwap 曾以1000万美元的估值&#xff0c;获得了来自于ZebecLabs基金会的150万美元的融资。此后 PoseiSwap 又以2500万美元的估值&#xff0c;从GateLabs、EmurgoVentures、Republic以及CipholioVentures等行业顶级投资机构中&#xff0c;获得了新一轮未…

Vue2面试题

1. Vue 的基本原理 当 一 个 Vue 实 例 创 建 时 &#xff0c; Vue 会 遍 历 data 中 的 属 性 &#xff0c; 用 Object.defineProperty &#xff08; vue3.0 使 用 proxy&#xff09; 将 它 们 转 为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访…

Java课题笔记~Maven基础知识

一、什么是Maven&#xff1f; Maven是专门用于管理和构建Java项目的工具。 它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提供了一套依赖管理机制 …

子域名收集工具OneForAll的安装与使用-Win

子域名收集工具OneForAll的安装与使用-Win OneForAll是一款功能强大的子域名收集工具 GitHub地址&#xff1a;https://github.com/shmilylty/OneForAll Gitee地址&#xff1a;https://gitee.com/shmilylty/OneForAll 安装 1、python环境准备 OneForAll基于Python 3.6.0开发和…

Kotlin基础(九):对象和委托

前言 本文主要讲解kotlin对象和委托。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 对象 在Kotlin中&#xff0c;对象&#xff08;Object&#xff09;是一个具有特殊用途的单例实例。它是一种创建单个实例的方式&#xff0c;确保在整个应用程序中只存在一个特…

(树) 剑指 Offer 32 - II. 从上到下打印二叉树 II ——【Leetcode每日一题】

❓剑指 Offer 32 - II. 从上到下打印二叉树 II 难度&#xff1a;简单 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回其层次遍历结果&#xff1a…

详解顺序表功能

前言 随着我们C语言的不断深入学习&#xff0c;我们要开始学习一点数据结构来增加我们的内功了&#xff0c;虽说现在很多高级语言的顺序表&#xff0c;链表等可以不用自己实现&#xff0c;但在C语言中是需要我们自己来实现的&#xff0c;这并不能说明C语言和其他语言比C语言很…

使用WebMvcConfigurationSupport后导致原来返回的json数据变为了xml的解决方法

问题 未使用WebMvcConfigurationSupport拦截时返回的数据都是JSON格式&#xff0c;使用WebMvcConfigurationSupport做拦截后数据的返回变为了XML的格式。 原因 在Spring框架中&#xff0c;WebMvcConfigurationSupport 是一个类&#xff0c;它可以用于自定义Spring MVC的配置…