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} hk−1 和存储单元 c k − 1 c_{k−1} ck−1 ,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上进行测试以进行评估。
相关文章:

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/ (原作者并没有开源…...
HOT71-字符串解码
leetcode原题链接: 字符串解码 题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输…...
redis-server进程无法关闭终极解决方案
先使用命令查看6379端口情况: sudo lsof -i :6379 发现redis进程在占用,redis-server进程无论什么手段都杀不死,使用kill -9 pid杀掉pid后又卷土重来,最后找到了下面这个命令 sudo /etc/init.d/redis-server stop ok,…...

(5)将固件加载到没有ArduPilot固件的主板上
文章目录 前言 5.1 下载驱动程序和烧录工具 5.2 下载ArduPilot固件 5.3 使用测试版和开发版 5.3.1 测试版 5.3.2 最新开发版本 5.4 将固件上传到自动驾驶仪 5.5 替代方法 5.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本(Copter-3.6, Pl…...

wpf画刷学习1
在这2篇博文有提到wpf画刷, https://blog.csdn.net/bcbobo21cn/article/details/109699703 https://blog.csdn.net/bcbobo21cn/article/details/107133703 下面单独学习一下画刷; wpf有五种画刷,也可以自定义画刷,画刷的基类都…...
Opencv C++实现yolov5部署onnx模型完成目标检测
代码分析: 头文件 #include <fstream> //文件 #include <sstream> //流 #include <iostream> #include <opencv2/dnn.hpp> //深度学习模块-仅提供推理功能 #include <opencv2/imgproc.hpp> //图像处理模块 #include &l…...

django bootstrap html实现左右布局,带折叠按钮,左侧可折叠隐藏
一、实现的效果 在django项目中,需要使用bootstrap 实现一个左右分布的布局,左侧区域可以折叠隐藏起来,使得右侧的显示区域变大。(为了区分区域,左右加了配色,不好看的修改颜色即可) 点击折叠按钮,左侧区域隐藏,右侧区域铺满: 二、实现思路 1、使用col-md属性,让左…...

Mapping温度分布验证选择数据记录仪时需要考虑的13件事
01 什么是温度分布验证? 温度分布验证是通过在规定的研究时间内测量定义区域内的多个点来确定特定温度控制环境或过程(如冷冻柜、冰箱、培养箱、稳定室、仓库或高压灭菌器)的温度分布的过程。温度分布验证的目标是确定每个测量点之间的差异&…...
【题解】 判断一个链表是否为回文结构
判断一个链表是否为回文结构 题目链接:判断一个链表是否为回文结构 解题思路1:借助数组 遍历链表将值都放在数组中,再遍历数组元素,判断该数组是否为一个回文结构 代码如下: bool isPail(ListNode* head) {ListNod…...

Microsoft Message Queuing Denial-of-Service Vulnerability
近期官方公布了一个MSMQ的拒绝服务漏洞,可能因为网络安全设备的更新,影响业务,值得大家关注。 漏洞具体描述参见如下: Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…...

软件设计师(五)软件工程基础知识
一、软件工程概述 软件开发和维护过程中所遇到的各种问题称为“软件危机”。 软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程,其目的是提高软件生产率、提高软件质量、降低软件成本。 #mermaid-svg-h3j6K…...
Java中的JUnit单元测试方法的使用
Java中的JUnit单元测试方法 使用步骤如下: 选中当前工程 - 右键选择:build path - add libraries - JUnit 4 - 下一步创建Java类,进行单元测试。 此时的Java类要求:① 此类是public的 ②此类提供公共的无参的构造器此类中声明单…...

一文学透设计模式——抽象工厂模式
创建者模式 抽象工厂模式 概念 抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这是很多地方对于抽象工厂模式的描述,说实话感觉不是特别好懂。…...
Vue3与Vue2区别和总结(1)
在2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王) 既然vue2已经存在了六七年之久为什么还要研发vue3呢? 那就不得不提vue3带来的提升了 1.Vue3带来了什么 1.性能的提升 打包大小减少41% 初次…...

【华秋推荐】物联网入门学习模块 ESP8266
随着全球信息技术的不断进步和普及,物联网成为当今备受关注的技术热点之一。通过物理和数字设备之间的连接来实现自动化和互联互通的网络。无线传感器、云计算和大数据分析等技术,物联网使设备能够相互交流和共享信息,实现智能化的自动化操作…...

本科专科毕业论文如何选题-附1000多论文题目-论文选题--【毕业论文】
文章目录 本系列校训毕设的技术铺垫论文选题选题目的和意义:选题举例参考文献 配套资源 本系列校训 互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天! 毕业论文不怕难,毕业设计来铺垫&#…...
pip安装jupyter notebook
之前电脑安装了anaconda,里面安装了jupyter notebook,用来做PPT之类的展示总让我觉得有点“炫酷”。 现在换了新电脑。没有anaconda,纯粹只是装了python3.11,然后突然也想手工安装下jupyter notebook,于是只能通过pip方…...

STM32刷Micropython固件参考指南
STM32刷Micropython固件指南 其实刷固件和普通的程序下载烧录无多大的差异,主要是其他因数的影响导致刷固件或刷完固件无法运行的情况和相关问题。 📑刷固件教程 固件下载。目前所支持的stm32型号有这些: stm32f0, stm32f4, stm32f7, stm32g…...

学生信息管理系统自动化测试
项目地址: http://82.156.151.156:8080/login.html 一、系统测试用例 二、测试实现过程 先是根据自己的项目设计了一个 UI 自动化测试用例, 然后根据这个测试用例使用了 selenium4自动化测试工具和 JUnit5单元测试框架结合实现的 web 自动化测试.。 测试模块划分…...
Java面向对象之toString()方法
toString()方法 toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址。在进行String与其它类型数据的连接操作时,自动调用toString()方法。 Date nownew Date(); System.out.println(“now”now); 相当于 System.…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...