深度学习与slam的小小思考

2023-05-16

深度学习与slam的小小思考

好久不发文章了,主要是研究的东西因为要发论文,所以发表之前很难分享出来,加上研一上学期老师安排的工作比较琐碎,所以更新的很少。不过研一下可能会好些,立个flag,每月至少更新一篇。

  1. 关于深度学习处理图像的低级和高级特征

    对于计算机视觉而言,图像处理分为低级特征和高级特征。我们通常把一些去雨去云去雾,去模糊,去反光,去玻璃等等这些相关的任务,认为是针对图像低级特征(low-level)而言的,当然,特征提取这种CNN拿手好戏除外,不参与本章节的讨论。而目标识别,场景理解等这些更接近object级别的任务属于是关于高级特征进行处理的(high-level)。这些基础知识大家估计都很清楚,我也就不再赘述。

    说来惭愧,我初入slam领域的第一个尝试就是基于深度的模糊监测和视觉slam结合的研究(下文除特殊说明一律指的纯视觉slam系统),然而在研究过程中我逐渐意识到了我的失误,也是我第一部分想要总结的:**普遍适用的场景下,针对图像低级特征的深度学习不适合和slam系统相结合。**要理解这一点首先需要明白两点:1. slam系统到底受到这些低级别特征误差的影响多大,以及 2. 图像高级特征能为slam带来哪些低级特征所不具备的特性?

    我们首先看第一个问题。需要注意的是,图像低级特征的深度学习不适合和slam系统相结合,并不意味着低级别特征误差的影响对slam系统很小,影响大小实际上是受到不同环境影响的。有的对slam影响不那么大,比如,我之前在测试TUM数据集上的数据集时发现模糊对slam系统影响较小(极端场景下除外);还有一些对slam系统的影响比较突出,比如在图书馆测试时候我们发现地面和玻璃的反光极大的降低了slam系统的建图及定位质量。但是,这些问题真的没办法用深度学习以外的方法解决吗?当我们把目光放开,不局限于视觉算法这个点的时候,我们会发现问题豁然开朗。处理运动模糊,我们可以从硬件上解决,比如全局快门,事件相机等;处理反光折射,我们可以利用多传感器融合技术,融合IMU、4D毫米波雷达,超声波等其他传感装置处理这种极端情况;对于一些云雨雾问题,甚至有不少算法直接集成到了相机芯片上,不再需要我们额外考量。

    当然,仅仅如此的话,我们只是能说针对图像低级特征的深度学习方法是没有必要的,而不是说是不合适的。真正决定因素在于图像低级特征很难融入slam的核心环节中,优化和建图之中。处理这些低级特征仅仅能够一定程度上提高找到匹配正确的特征点准确率而已,也就意味着,这些处理仅仅在前端匹配上生效,并且由于改进方法大多是帧独立的,甚至连里程计都没办法完整的参与。而这一点也是高级特征相比低级特征独特的地方。以我个人比较熟悉的动态slam为例,对于动态刚体很多文章的思路就是将动态特征点和静态特征点建立一个综合的因子图,联合进行优化;还有一些文章是利用动态知识建立一个特殊的地图,辅助后续的导航等任务。上述例子很多,我也就不再列举相关文章了(主要是懒),不过可以清晰的看出,高级语义信息是和slam系统是“紧耦合”的,它深度参与到slam系统中,而这一点图像的低级特征很难做到。

    那么针对图像低级特征的深度学习系统和针对图像的高级特征系统能否共同存在呢?如果设备足够强大当然可以考虑,但是就当前一般场景而言,是不可能的。slam系统脱胎与三维重建,与后者重要区别就是实时性(虽然三维重建也有实时性的,不过容我们之后再提),因此在有限设备上,并且要求实时的情况下很难支撑起两个深度网络,哪怕他是可以并行的。因此,从我现在看的一些文章来说,大部分深度学习结合slam系统的文章主要都集中到了图像的高级特征这块。这类文章的特点就是,想做出点东西简单,但是想做出点好东西,很难。

  2. 再谈动态场景下的slam

    如果看我的博客的可能会注意到,我之前本科毕设的课题就是做的动态场景下的slam,因此尽管到了研究生阶段不再从事相关课题,我有时也会关注相关文章和思路,也有了一些新的思考,于是趁着最近有空就把这些新的收获说一说。当然,这个属于一家之言,大家可以参考但是不要太认真,说不定过两天我就要推翻自己的说法了。

    首先还是那个老问题,动态干扰对slam影响大不大?尽管各种文章有各种实验证明和对比,emmm,但是怎么说呢,我个人认为影响真的没那么大(当然分情况,这里说的是不那么极端的情况下)。首先,以我之前做的kitti为例,一辆车从后往前过去了,咦,为什么车上面的有效特征点那么少?在VSO的论文中,作者认为运动物体的patch很大程度上会有尺度、视角和光照的剧烈变换,这种变换可能超出了普通SLAM的处理范围(比如八叉树处理尺度等),加之ORB-SLAM采用的网格划分方法均匀化特征点分布,这带来的问题是,运动刚体上的能够真正化为地图上点云的特征点没有那么多。另一个常见的运动对象是人体,他属于那种非刚体的变换,人体身上的特征点也是不稳定的,比如衣服上的花纹,会随着运动有遮挡,褶皱,因而匹配也是比较少的。但是,运动物体占据视角的很大一块区域的时候,运动效果影响还是比较大的。

    我们对于动态物体怎么处理?有些非刚体直接去除就去除了(比如行人),但是车辆是不是还可以继续利用?这就是车辆检测和速度估计结合。之前我做过速度估计,不是很好做,主要是动态物体的特征点太难提取,一般还得用密集光流才能保持稳定追踪,而密集光流还得用深度学习效果才比较好,所以得嵌套两个网络,还是串联(虽然想了想并行也行,就是有点浪费),硬件不够的话实时性直接完蛋。

    对于深度网络该如何选择呢?目前提供语义信息的主要有两种(这里仅考虑二维图像,不考虑点云),一种是语义分割,也就是我之前毕设的思路,还有一种是目标检测。两种各有优劣,但是我个人反而比较推崇的是目标检测提供语义。这个和slam关联不大,主要是深度学习的问题。从我个人实践的效果来看,语义分割,特别是实例分割级别的效果没有想象中的那么好,其一是速度较慢(相较目标检测而言),其二是分割不干净或者有奇怪的延伸。第一点的话目前很少看到实例分割和slam结合后还能达到实时的文章(部分达到实时的采用了关键帧技术),但是目标检测确实有不少。第二点,目标检测的优点在于检测的类别较多,如果语义分割要达到目标检测的水平可能需要更多的数据和训练技巧(训练种类较少会导致对于非训练内容,比如KITTI数据集中的高速公路栏杆,容易被识别为行人等已训练种类,本质上是由于训练数据的负样本缺乏导致的),并且定位目标检测的定位由于目标框的形式限制了范围,不会有奇怪的延伸。当然目标检测也是有缺点的,它的稳定性或者连续性是不如语义分割的。目标检测很容易出现那种目标框一闪一闪的情况,这就是由于其中某几帧没有检测到物体导致的。不过不要紧,这个方面我们可以用数据关联的技术解决。除此之外,目标检测还可以比较简单的扩展到3D目标框检测,如港科大沈老师他们实验室的那篇文章(Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving)

    语义分割还有一个分支比较有意思,车道线检测,利用车道线或者车库引导线建立高效的SLAM系统,这也是很有意思也是很成功的一个方法,我记得港科大的秦通大佬好像写过,还有今天(2021.3.28)泡泡机器人推的文章正好也是这个,大家有兴趣可以看看。不过这个偏向于系统,多目相机多传感器联合工作,能把误差弄到厘米级,正常学校实验室很少有这个条件和实验环境就是。

    当前研究的难点在于:1. 如何利用数据关联技术维护语义信息的稳定性和准确性;2. 将语义信息加入后端联合优化。目前有不少文章在这两个领域有所成果。数据关联方向(Probabilistic Data Association for Semantic SLAM, VSO等),联合优化之前文章提过,懒得复制了,大家自己去找就好。

  3. 建图与重定位

    再次声明,这块也是个人理解,如果有不同见解欢迎讨论。这块可能和深度学习关联不大,但是就几句话,所以干脆放在这里了。

    标准的SLAM定义是同时定位与建图,但是很多时候我们没有必要做到一边建图一边定位。如在自动驾驶领域,或者一些环境固定的区域,我们完全可以把任务分解为两个部分,第一遍建立地图,之后只需要定位与地图维护的工作就好,其中用到的技术就是重定位。

    比较有意义的一点是,这样其实能够一定程度上保证了建图的质量。未魔改的ORB-SLAM为了保证足够的帧率,最后生成的一张稀疏的点云地图。但是实际应用时,我们在建图模块完全可以牺牲帧率,以运动足够慢为代价生成更为高级的稠密地图(实时版本的三维重建)或者语义地图,在这种高级地图上我们后续运动的精度将大幅提高。此时,重定位问题更注重环境适应性,长期性,动态变化改变等问题。但是实际上这块(基于地图的重定位)的文章真的没那么多,大家有兴趣的可以关注这块领域。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习与slam的小小思考 的相关文章

  • 最简单DIY基于ESP32CAM的物联网相机系统⑤(用C#上位机实现串口图传)

    第一篇 xff1a 最简单DIY基于ESP32CAM的物联网相机系统 xff08 用网页实现拍照图传 xff09 第二篇 xff1a 最简单DIY基于ESP32CAM的物联网相机系统 xff08 在JAVAWEB服务器实现图片查看器 xff
  • 最简单DIY基于STM32单片机的WIFI智能小车设计方案

    STM32库函数开发系列文章目录 第一篇 xff1a STM32F103ZET6单片机双串口互发程序设计与实现 第二篇 xff1a 最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇 xff1a 最简单DIY基于STM32F40
  • 基于ESP32CAM的物联网相机系统⑧(用原生JavaWeb实现双摄像头WIFI图传)

    第一篇 xff1a 最简单DIY基于ESP32CAM的物联网相机系统 xff08 用网页实现拍照图传 xff09 第二篇 xff1a 最简单DIY基于ESP32CAM的物联网相机系统 xff08 在JAVAWEB服务器实现图片查看器 xff
  • 基于ESP32CAM实现WebSocket服务器实时点灯

    ESP32 CAM ArduinoIDE开发系列文章目录 第一篇 xff1a ESP32 CAM高性价比WIFI图传方案快速入门教程 第二篇 xff1a ESP32 CAM第一个无线点灯程序 第三篇 xff1a ESP32 CAM智能网关的
  • 最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)

    STM32库函数开发系列文章目录 第一篇 xff1a STM32F103ZET6单片机双串口互发程序设计与实现 第二篇 xff1a 最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇 xff1a 最简单DIY基于STM32F40
  • 最简单DIY基于STM32的远程控制电脑系统②(无线遥杆+按键控制)

    STM32库函数开发系列文章目录 第一篇 xff1a STM32F103ZET6单片机双串口互发程序设计与实现 第二篇 xff1a 最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇 xff1a 最简单DIY基于STM32F40
  • ESP8266 MQTT开发IOT系列教程

    ESP8266 MQTT开发IOT教程 使用esp8266 01s 12f等wifi模块 MQTT的通讯协议 arduino IDE开发IOT应用教程 更多学习知识 访问 niehen cn ESP开发学习基础知识 基础知识包括对esp模块
  • 使用adb 命令安装和导出apk

    在文件框内空白处按住Shift键 然后鼠标右键 打开PowerShell xff0c 或者win 43 R启动cmd也可以 运行 adb install r APP的apk文件 例如 adb install r pageTest apk 打
  • 基于51单片机智能光控制窗帘系统设计(毕设课设)

    基于单片机的智能光控窗帘的系统 xff0c 既能解决每天手拉开和关上窗帘的不便 xff0c 又显示出了生活的档次 xff0c 同时还可以根据光线的明暗来自动控制窗帘的开关 xff0c 以调节室内的光线 xff0c 更进一步地满足了人们的享受
  • hdu1085

    继续母函数 xff0c 趁热打铁 xff0c 一次ac 题意是1 xff0c 2 xff0c 5的硬币若干 xff0c 打出最小的不能表示的钱数 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 原因及避坑解决方案

    由于断电 xff0c 服务器重启了 xff0c 当我再次跑实验时 xff0c 发现cuda不可用 xff0c 于是输入 nvidia smi 才发现了一个错误 xff0c 如下 xff1a NVIDIA SMI has failed bec
  • Ubuntu升级内核

    Introduction The Linux kernel is the heart of your Ubuntu Operating System The kernel that comes with Ubuntu should cont
  • 机器学习算法需要注意的一些问题(二)

    训练样本大小选取的问题 模型学习的准确度与数据样本大小有关 xff0c 那么如何展示更多的样本与更好的准确度之间的关系呢 xff1f 我们可以通过不断增加训练数据 xff0c 直到模型准确度趋于稳定 这个过程能够很好让你了解 xff0c 你
  • 九种设计模式在Spring中的应用

    Spring中涉及的设计模式总结 1 简单工厂 非23种设计模式中的一种 实现方式 xff1a BeanFactory Spring中的BeanFactory就是简单工厂模式的体现 xff0c 根据传入一个唯一的标识来获得Bean对象 xf
  • WIN11安装Docker,并启动连接MySQL

    WIN11安装Docker 并启动连接MySQL 起因 xff1a 新买了一台电脑 xff0c 需要安装开发环境 xff0c 本地安装MySQL过于麻烦 xff0c 考虑到自身并不需要多么精准的MySQL配置 xff08 主要是感觉安装步骤
  • 阿里云镜像恢复,镜像取证

    阿里云镜像raw恢复取证 raw文件下载格式转换新建虚拟机第一个问题 xff1a xff08 耗时一天 xff09 第一个问题的解决 xff1a raw文件下载 根据阿里提供的下载连接 xff0c 建议用迅雷进行下载 下载后解压获得raw格
  • K8S安装网络插件flannel

    引言 xff1a K8S集群刚刚创建完成之后 xff0c 由于网络环境未进行配置 xff0c 在执行查看Node节点时 xff0c 节点状态会显示NotReady xff0c 信息如下 导致显示这个状态的原因是因为还未安装网络插件 xff0
  • 新手c语言实现可一键更改棋盘大小的三子棋程序

    新手刚学完数组 这是第一次上传代码 欢迎大家交流 如果有问题请指出 看到网上很多都是固定棋盘的三子棋 但我想实现可更改的棋盘 所以在判断上需要更改 游戏主程序 define CRT SECURE NO WARNINGS include 34
  • C语言实现可选择棋盘大小的扫雷小游戏

    此扫雷游戏程序可以在开始界面定义雷的个数 可以定义棋盘大小 xff08 只能正方形 xff09 可以扫雷展开一片区域 可以标记雷来获得胜利 xff08 本博客作为自己在某段时间自己的学习感想作为记录方式发出 xff0c 所以内容比较硬核基本
  • 基于51单片机智能窗帘控制模型设计(毕设课设)

    智能窗帘模型设计说明 一 实现要求 1 自动模式 可感知光线强度 光强时控制窗帘关闭 光弱时控制窗帘打开 2 手动模式 可手动打开或关闭窗帘 3 当窗帘被完全打开到顶端时 控制器通过传感器信号反馈控制电机停止 当窗帘关闭到底端时 控制器通过

随机推荐

  • C语言字符串函数strstr的详细解释

    在C语言中 xff0c strstr xff08 xff09 函数是一个字符串处理函数 xff0c 它用于在一个字符串中查找另一个字符串的出现位置 函数原型为 xff1a char strstr const char str1 const
  • C语言字符串函数strcat的详细解释

    在C语言中 xff0c strcat xff08 xff09 函数是一个字符串处理函数 xff0c 它用于将一个字符串连接到另一个字符串的末尾 函数原型 char strcat char dest const char src 该函数接受两
  • C语言字符串函数strerror的详细解释

    在C语言中 xff0c strerror 函数是一个字符串处理函数 xff0c 它用于将错误码转换为相应的错误消息字符串 函数原型为 xff1a char strerror int errnum 该函数接受一个整数参数 errnum xff
  • C语言前缀法解释以及部分应用

    C语言前缀法 xff08 Prefix Sum xff09 也叫前缀和算法 xff0c 是一种用于快速计算数组中前缀和的算法 在计算机程序中 xff0c 前缀和是指一个数组中从第一个元素开始到某个位置的所有元素之和 该算法通过对原数组进行预
  • 人工智能前景

    人工智能AI的未来非常广阔和光明 随着科技的不断发展和普及 xff0c 人工智能已经开始逐渐融入我们生活的方方面面 xff0c 比如智能家居 智能医疗 无人驾驶等等 未来 xff0c 随着更多的应用场景被开拓和挖掘 xff0c 人工智能的应
  • Navicat连接Mysql(Windows环境下)报错提示错误代码1130和1251的解决方法

    目录 1 错误代码11301 1 错误信息1 2 解决方法 2 错误代码12512 1 错误信息2 2 解决方法 使用Navicat连接Mysql报错提示错误代码1130和1251 xff0c 解决方法汇总如下 xff1a 以下均在Wind
  • ELF 哈希算法

    int ELFHash char str int hash 61 0 long x 61 0 while str hash 61 hash lt lt 4 43 str 43 43 if x 61 hash amp 0xF0000000L
  • 用MATLAB写一个自动生成福利彩票双色球号码的程序

    用MATLAB写一个自动生成福利彩票双色球号码的程序 规则 红色球 xff1a 1 33号任选6个 蓝色球 xff1a 1 16号任选1个 red 61 randi 1 33 1 6 disp 39 红色球 39 fprintf 39 c
  • 给虚拟机制作一张“快照”

    什么是快照呢 xff1f 快照就像用一个文件来放在真实文件面前 xff0c 我们看到的是真实文件 xff0c 但是是在这个文件上进行编辑 xff0c 避免了对真实文件的直接影响 快照是我们通过镜像文件对虚拟机做的一个照片 xff0c 可以反
  • VMware提示“驱动器未就绪”的解决办法

    用VMware安装Linux xff0c 每次启动都要提示错误 xff1a 驱动器未就绪 xff0c 点两次取消才能进入 xff0c 虽然不影响使用 xff0c 但是挺烦的 后来终于发现这是软驱的事 解决办法 xff1a 如图 xff0c
  • 基于51单片机智能温度控制器温控系统(毕设课设)

    本设计以AT89C51 单片机为控制的核心 xff0c 硬件上外加温度传感器作为检测室内温度并且采集室内温度数据的工具 xff0c 以及对室内温度自动控制的作用 其中对于温度的自由设定 xff0c 用户可以用按键简单直观来实现 xff0c
  • Ubuntu16.04安装Docker的步骤

    大家好 xff0c 我是加摩斯 xff0c 觉得文章有帮助的小伙伴 xff0c 记得一键三连哟 xff5e 申明 xff1a 原创 xff0c 转载前请与我沟通 Docker是一种容器 xff0c 但它是轻量级的 目前在中国 xff0c 已
  • 【正则表达式】通俗易懂——正则表达式的零宽断言:?=、?<=、?!、?<! 的具体使用区别

    ps xff1a 想吐槽一下 xff0c 什么前瞻 xff0c 后顾 xff0c 负前瞻 xff0c 负后顾 xff0c 小白就想简单了解会用而已 xff0c 为啥网上很多明明很简单的东西非得写的那么 举的例子也那么 xff0c 对小白一点
  • 百度2023暑期实习第一场笔试编程题Java版

    1 题目内容 小红拿到了一个字符串 xff0c 她想知道这个字符串能否通过重新排列组成 Baidu 字符串 xff1f 注 xff1a 必须大小写完全相同 共有 t 组询问 输入描述 第一行输入一个正整数 t xff0c 代表询问次数 接下
  • 记录在UBUNTU上配置torch环境和CUDA,CUDNN安装的一周心酸史

    写在前面 xff1a 安装torch gpu版后是不是以为就可以安安心心进行训练了 xff1f xff01 错错错 xff01 xff01 xff01 经过种种试错 xff0c 了解到服务器上的CUDA不是全局配置的 xff01 需要自行安
  • Python学习笔记整理

    一 random库 计算机不能产生真正的随机数 xff0c 那么伪随机数也就被称为随机数 伪随机数 xff1a 计算机中通过采用梅森旋转算法生成的 xff08 伪 xff09 随机序列元素 python中用于生成伪随机数的函数库是rando
  • FSCE代码阅读和修改

    fsdet modelling roi heads roi heads py allow low quality matches
  • 目标检测笔记整理

    一 基本概念 1 任务背景 2 评价指标 3 数据集 二 传统目标检测方法 1 算法框架 1 区域选取 2 特征提取 3 分类回归 4 NMS 2 典型算法
  • FreeRTOS解析:TCB_t结构体及重要变量说明(Task-1)

    FreeRTOS解析 xff1a TCB t结构体及重要变量说明 xff08 Task 1 xff09 受博客限制 xff0c 如果您想获得更好的阅读体验 xff0c 请前往https github com Nrusher FreeRTOS
  • 深度学习与slam的小小思考

    深度学习与slam的小小思考 好久不发文章了 xff0c 主要是研究的东西因为要发论文 xff0c 所以发表之前很难分享出来 xff0c 加上研一上学期老师安排的工作比较琐碎 xff0c 所以更新的很少 不过研一下可能会好些 xff0c 立