动态SLAM中的语义分割与并行计算优化策略

机器人视觉 SLAM 在动态复杂环境下,如何提升定位与建图的鲁棒性? 视觉SLAM在动态复杂环境中易失效,主要原因包括动态特征干扰、光照差异导致特征质量下降、反光造成关联失效等硬件或算法问题。解决方案包括:1)动态物体检测与过滤,结合语义分割和光流法减少干扰;2)多模态数据融合,利用深度相机或IMU增强稳定性;3)鲁棒特征优化,通过语义信息动态调整特征权重。当前SLAM技术正从被动应对转向主动识别和预测动态物体,ORB-SLAM3等系统已能实现多模态高精度建图。这些方法显著提升了SLAM在复杂场景中的鲁棒性。 阅读详情

1. 动态SLAM的“老大难”问题:为什么动态物体会让系统“翻车”?

如果你玩过扫地机器人或者关注过自动驾驶,那你肯定对SLAM(同步定位与地图构建)不陌生。简单来说,它就像机器人的“眼睛”和“大脑”,一边走一边认路,同时画出一张周围环境的地图。传统的SLAM算法,比如经典的ORB-SLAM2,都有一个核心的“潜规则”:它们默认看到的世界是静止不动的。

这个假设在实验室或者空房间里没问题,但一到真实世界就立刻“破防”了。想象一下,你的扫地机器人正在客厅建图,这时你家小孩跑过去,或者宠物猫跳上了沙发。机器人从这些移动的物体上提取的特征点(比如桌角、纹理),在下一帧画面里位置全变了。系统会懵圈:“咦?刚才这个点明明在这里,怎么跑那儿去了?是我自己动了吗?还是世界错了?”这种困惑会导致严重的后果:定位严重漂移,建出的地图扭曲变形,甚至直接跟踪失败,机器人彻底“迷路”。

所以,动态SLAM要解决的核心矛盾就是:如何从每帧图像中,精准且快速地区分出哪些特征是“死”的背景(静态),哪些是“活”的干扰(动态),并且只使用静态特征来进行可靠的定位和建图。这听起来像是一个“大家来找茬”的终极速度版游戏,而且必须在几十毫秒内完成。

早期的解决方案比较“粗暴”,比如用多视角几何的方法(像对极几何、基础矩阵)去检查哪些特征点的运动不符合相机自身运动的规律,把这些“不合群”的点当作动态点剔除。这方法有一定效果,但问题也很明显:它依赖于连续帧间的特征匹配,在纹理稀疏或者相机运动过快时容易失效,而且计算量也不小。更重要的是,它缺乏“语义”理解能力——它不知道移动的物体是“人”还是“车”,只是机械地剔除运动不一致的点。

于是,大家很自然地把目光投向了能“看懂”图片的深度学习,尤其是语义分割和目标检测网络。这些网络经过海量数据训练,能直接告诉你:“看,这里有个‘人’,那里是‘车’”。把动态物体(人、车、动物)的像素区域找出来,然后把这些区域内的特征点全部屏蔽掉,理论上就能完美解决问题。但理想很丰满,现实很骨感。当你兴冲冲地把一个现成的Mask R-CNN语义分割网络塞进SLAM系统时,会发现系统瞬间从“实时”变成了“幻灯片”。处理一帧高清图像,这些复杂的网络可能需要几百毫秒,而SLAM系统要求每帧处理时间最好在几十毫秒以内。速度,成了将深度学习融入动态SLAM的最大拦路虎。

这就引出了我们今天要深入探讨的核心:如何通过精巧的系统架构设计和并行计算优化,让语义分割这个“大胃王”既能吃饱(精度高),又能跑得快(实时),真正在动态SLAM系统中落地生根。下面,我就结合自己踩过的坑和实战经验,带你看看几种主流的优化策略。

2. 并行计算优化基石:多线程架构设计与性能平衡术

当单个线程跑不动复杂的语义分割网络时,最直观的想法就是“加人”,也就是多线程并行。这可不是简单开个线程那么简单,里面充满了对数据流、同步和性能瓶颈的精细考量。

2.1 经典范式:独立语义线程(DS-SLAM方案)

清华大学提出的DS-SLAM是这方面的先驱,它的架构思路非常清晰,我实测下来也觉得对新手理解并行优化特别有帮助。它的核心思想是:别让语义分割的“慢”拖累整个SLAM流程的“快”。

具体怎么做呢?它在ORB-SLAM2的基础上,单独开辟了一个语义分割线程。主线程(跟踪线程)该怎么提取ORB特征、怎么初步估计运动,还照常进行。与此同时,语义分割线程异步地对当前帧进行语义分割。两个线程并行不悖。等语义分割线程算出结果后(比如标识出图像中所有“人”的像素区域),这个结果会作为一个“语义掩码”送给主线程。主线程拿到掩码后,就可以放心地把落在“人”区域内的ORB特征点剔除掉,只用剩下的静态特征点去做更精确的位姿优化和建图。

这种架构的优势很明显:

  • 解耦与提速:SLAM主流程不再被分割网络阻塞,系统整体帧率得以保持。
  • 模块清晰:语义分割作为一个独立模块,方便替换或升级不同的网络(比如从Mask R-CNN换到更快的BiSeNet)。

但是,坑也不少,我总结了几点实战中必须注意的:

  1. 网络速度依然是瓶颈:虽然不阻塞主线程,但如果分割网络太慢(比如一帧要300ms),而相机帧率是30fps(33ms一帧),那么语义结果会严重滞后。等结果出来时,相机可能已经看了10帧以后的世界了,这个“过时”的语义信息还有用吗?这就是语义延迟问题。DS-SLAM要求分割网络本身必须足够轻快。
  2. 数据同步与队列管理:两个线程之间需要传递图像数据和分割结果。这里必须用线程安全的数据队列,并且要设计好队列的消费策略。是每一帧都分割,还是跳着分割?如果分割线程生产速度跟不上,队列会不会爆掉?这些都是编码时要仔细处理的。
  3. 结果融合的时机:语义结果如何与运动一致性检查(一种几何方法)的结果融合?是简单的“或”操作(只要任一方法认为是动态点就剔除),还是更复杂的概率融合?DS-SLAM采用的是结合策略,但这也增加了逻辑复杂度。

这里给一个简化的多线程数据流示意代码结构,你可以感受一下:

// 伪代码,展示DS-SLAM风格的双线程数据流
#include <thread>
#include <queue>
#include <mutex>

class SemanticSLAMSystem {
public:
    void TrackingThread() {
        while (true) {
            // 1. 捕获当前帧
            Frame current_frame = GrabImage();
            
            // 2. 提取ORB特征(主线程快速进行)
            ExtractORB(current_frame);
            
            // 3. 将帧送入语义队列,异步处理
            {
                std::lock_guard<std::mutex> lock(semantic_queue_mutex_);
                semantic_frame_queue_.push(current_frame);
            }
            
            // 4. 尝试获取最新的语义分割结果
            SemanticMask mask;
            if (TryGetLatestSemanticMask(mask)) {
                // 5. 剔除动态特征点
                RemoveDynamicFeatures(current_frame, mask);
            }
            
            // 6. 使用静态特征进行跟踪和位姿估计
            TrackAndMap(current_frame);
        }
    }
    
    void SemanticSegmentationThread() {
        while (true) {
            Frame frame_to_process;
            // 7. 从队列中取出一帧进行分割
            {
                std::unique_lock<std::mutex> lock(semantic_queue_mutex_);
                if (semantic_frame_queue_.empty()) continue;
                frame_to_process = semantic_frame_queue_.front();
                semantic_frame_queue_.pop();
            }
            
            // 8. 运行(可能较慢的)语义分割网络
            SemanticMask mask = RunSegmentationNetwork(frame_to_process.image);
            
            // 9. 将结果发布出去
            UpdateLatestSemanticMask(mask);
        }
    }
    
private:
    std::queue<Frame> semantic_frame_queue_;
    std::mutex semantic_queue_mutex_;
    // ... 其他成员,如最新的mask存储
};

2.2 分层处理与智能切换策略

独立线程方案解决了并行性问题,但没解决网络本身慢的问题。另一个思路是:何必每帧都用“牛刀”(精细分割)呢? 这就是分层处理或智能切换策略的出发点。

我记得有一篇针对户外建筑工地的论文(Stereo Camera Visual SLAM with Hierarchical Masking...)就提出了一个很实用的策略。它用了两个网络:快的目标检测网络(如EfficientDet) 和 慢但精细的实例分割网络(如Mask R-CNN)。

它的决策逻辑非常聪明:

  1. 先快筛:对每一帧,先用快的目标检测网络跑一遍,得到物体边界框。
  2. 再判断:计算检测到的动态物体(如车辆)在图像中所占的面积比例。
  3. 后精修:如果这个比例很小,说明背景静态区域很多,特征点够用,直接用检测框剔除动态点就够了,系统保持高速运行。如果这个比例很大,说明动态物体几乎挡住了大部分视野,背景特征点所剩无几。这时,为了抠出更多可用的静态特征点,系统才“不惜代价”启动那个慢的像素级分割网络,得到更精确的物体轮廓,从而在夹缝中找出更多背景点。

这种策略的本质是以任务需求驱动计算资源分配,是一种动态的精度-速度平衡术。在工程上实现时,你需要为两个网络分别维护线程或调用接口,并设计一个轻量级的决策器(就是上面说的面积比例计算和阈值判断)。实测中,关键是要根据你的应用场景(室内/室外,动态物体大小)来调好那个面积比例阈值。

2.3 关键帧策略与结果传播(Detect-SLAM与RDS-SLAM)

既然语义分割慢,那干脆别每帧都做,只挑重要的帧做,然后把结果“扩散”到其他帧去。这个“重要的帧”就是SLAM中的关键帧。关键帧通常是场景变化显著、信息丰富的帧,插入频率远低于普通帧。

Detect-SLAM 是这个思路的典范,它的想法非常巧妙:

  • 只在关键帧进行目标检测:系统在GPU上运行SSD目标检测网络,但只对选出的关键帧运行。这样,检测的计算消耗被关键帧的频率大大稀释。
  • 概率传播:对于非关键帧的普通帧,它们特征点的“动态概率”从哪里来?Detect-SLAM设计了两种传播机制:一是通过特征匹配,如果当前帧的某个点匹配上了关键帧中已被标记为动态的点,那它就直接继承这个“动态”标签;二是利用空间一致性,如果一个高置信度的动态点周围有一片未匹配的点,那么这片区域内的点也被传播为动态的概率。这样,语义信息就像涟漪一样从关键帧扩散开去。

这个方案的优点是极大缓解了实时性压力,因为检测只发生在少数关键帧上。但它对关键帧选取和传播算法的准确性依赖极高。如果关键帧间隔太长,动态物体可能已经移动了很远,传播会失效;如果传播算法不精确,会导致误杀(静态点被标为动态)或漏杀(动态点没被剔除)。

后来改进的 RDS-SLAM 和 RDMO-SLAM 进一步优化了关键帧语义处理策略。它们创建了一个关键帧队列,并让语义分割线程同时处理队列的头部和最尾部的关键帧。这个设计主要是为了优化“语义延迟”。因为分割网络慢,等它处理完当前关键帧时,系统可能已经往前走了很多帧,早期的那些帧因为没有语义信息,误差可能已经累积。去处理队列头部的“老”关键帧,相当于用后来的语义信息去修正前期的地图,能有效抑制累积误差。它们还详细分析了不同关键帧选择策略下的语义延迟,结论是这种“头尾并行分割”的策略能将近乎线性增长的延迟控制为一个常数,效果非常显著。

3. 实战挑战与解决方案:从理论到代码的“惊险一跃”

纸上谈兵终觉浅,绝知此事要躬行。在实际项目中应用上述策略时,我遇到过不少让人头疼的挑战,这里分享几个典型的和我们的应对之策。

3.1 挑战一:语义分割网络如何选型与轻量化?

这是首要问题。你不能直接把一个在COCO数据集上刷榜的巨型Mask R-CNN模型直接部署到嵌入式设备或要求30FPS的机器人上。我们的策略是:

  • 精度换速度:明确你的场景需要多细的语义。如果只需要区分“人”、“车”等大类,那么目标检测(如YOLOv5s, YOLOv8n, EfficientDet-D0)比实例分割快一个数量级,是首选。像前面提到的专利(CN114565675B)就是直接用YOLOv5做前端过滤。
  • 模型轻量化:如果确实需要像素级精度,考虑使用专为实时设计的轻量分割网络,比如 BiSeNet(双边分割网络)、DeepLabv3+ MobileNetV3 版本。这些网络通过设计更高效的骨干网络(Backbone)和解码器(Decoder),在精度损失很小的情况下大幅提升速度。
  • 模型蒸馏与量化:将大模型(教师网络)的知识“蒸馏”到小模型(学生网络)中。训练完成后,对模型进行INT8量化,能在几乎不损失精度的情况下,在支持硬件上获得显著的推理加速。这是我们项目上线前的标配优化步骤。
# 示例:使用ONNX Runtime进行INT8量化后模型的推理(伪代码)
import onnxruntime as ort
import numpy as np

# 加载量化后的语义分割模型
quantized_model_path = 'bisenet_r18_dynamic_int8.onnx'
session = ort.InferenceSession(quantized_model_path)

# 准备输入数据(已预处理)
input_name = session.get_inputs()[0].name
input_data = preprocess(frame_image)  # 形状例如 [1, 3, 480, 640]

# 运行推理
outputs = session.run(None, {input_name: input_data})
semantic_mask = outputs[0]  # 获取分割结果

# 后处理,将mask映射到类别ID
# ... 然后用于特征点过滤

3.2 挑战二:多线程间的数据同步与资源竞争

多线程编程是魔鬼在细节。除了用互斥锁(mutex)保护队列,更要注意:

  • 避免拷贝大图像数据:传递图像时,尽量传递智能指针或引用,或者使用共享内存。我们常用 std::shared_ptr<cv::Mat> 来传递图像数据,避免深拷贝。
  • 设置合理的队列长度:队列不能无限增长。我们通常设置一个最大长度(比如5),当语义线程处理不过来时,丢弃最老的未处理帧,确保语义信息不至于过于滞后。这就是一种“保新不保旧”的策略。
  • 警惕GPU竞争:如果SLAM的特征提取(如ORB在GPU上加速)和语义分割网络都跑在GPU上,可能会造成CUDA流竞争,反而降低效率。需要合理安排两者的执行顺序,或者为它们分配不同的CUDA流。

3.3 挑战三:动态物体“漏网”与静态物体“误杀”

语义网络不是万能的,也会出错。

  • 漏网(False Negative):网络没检测出某个动态物体(比如一个不常见的动物姿态)。这时需要几何方法兜底。我们在独立语义线程之外,主线程里依然保留了一个轻量级的运动一致性检查模块(比如基于对极几何或光流)。语义说“静态”但几何说“动态”的点,我们会谨慎地给予一个高动态概率。这种语义+几何的融合策略,是提升系统鲁棒性的关键。
  • 误杀(False Positive):网络把静态物体(比如一个雕塑、一棵树)误判为“人”或“车”。这更麻烦,因为会删掉宝贵的静态特征点。我们的应对方法是引入时间一致性检验。如果一个区域被连续多帧稳定地判定为同一类静态物体,那么即使某一帧网络抽风把它判成动态,我们也会相信历史记录,将其纠正为静态。这需要维护一个简单的短时记忆模块。

3.4 挑战四:系统整体性能 profiling 与瓶颈定位

优化到最后,你可能会发现系统还是不够快。这时就需要科学的性能分析(Profiling)。我们常用的工具链是:

  1. CPU Profiling:使用 perf (Linux) 或 Instruments (macOS) 查看各个函数耗时,找出CPU热点。
  2. GPU Profiling:使用 nvprof 或 NVIDIA Nsight Systems 分析CUDA内核执行时间,看是数据搬运慢还是计算慢。
  3. 系统级观测:用 htop、nvidia-smi 实时看CPU/GPU/内存占用。

很多时候瓶颈不在算法本身,而在数据预处理/后处理(如图像缩放、颜色转换)或者内存分配上。优化这些地方往往能带来意想不到的收益。

4. 前沿趋势与未来展望:当神经渲染遇上持续学习

动态SLAM的研究远未停止,一些最新的工作展示了更有潜力的方向。比如,北大等机构2024年的工作《Learn to Memorize and to Forget: A Continual Learning Perspective of Dynamic SLAM》就给了我很大启发。

它不再把动态物体简单地“剔除”,而是采用了一种持续学习的视角。系统维护一个神经辐射场(NeRF)作为地图,同时在线学习一个二分类器来判断场景中每个实例是静态还是动态。这个分类器会持续地从新观测中学习,并决定哪些过去的“记忆”(地图中的区域)应该被“遗忘”(因为对应物体移动了)。通过迭代优化相机位姿、神经地图和分类器参数,系统能自适应地构建以静态部分为主的地图,对动态环境表现出极强的鲁棒性。

这种方法的优势在于,它构建的是一个连续的、可理解的语义场景表示,而不仅仅是稀疏的特征点云。这对于机器人进行高层次决策(如导航、交互)有巨大价值。当然,它的计算成本目前还很高,离实时应用有距离,但它指明了动态SLAM从“感知-剔除”走向“理解-建模”的未来道路。

在我自己的项目迭代中,一个很深的体会是:没有银弹。动态SLAM的优化策略选择,必须紧密结合你的应用场景(室内/室外、动态物体密度、硬件算力)、精度要求和实时性要求。对于算力有限的嵌入式平台,可能“关键帧目标检测+传播”是最务实的选择;对于拥有强大GPU的服务器或自动驾驶汽车,“轻量分割网络+独立线程+几何兜底”的架构可能更均衡;而对于追求前沿探索的研究,神经隐式表示与持续学习的结合则充满魅力。

说到底,技术方案的取舍是一门平衡的艺术,是在速度、精度和资源消耗之间找到那个最优点。希望我分享的这些实战经验和踩过的坑,能帮你少走些弯路,更顺利地构建出自己鲁棒、高效的动态SLAM系统。

CFP-SLAM动态视觉slam 环境中的动态因素会违反SLAM算法的静态环境假设,导致相机定位精度下降。最近,一些相关工作普遍采用语义约束和几何约束相结合的方式来处理动态物体,但是仍然会出现一些问题,比如实时性差,容易把人当成刚体,低动态性能差场景。本文提出了一种基于目标检测和由粗到精静态概率的动态场景视觉SLAM算法CFP-SLAM。该算法结合语义约束和几何约束,计算物体、关键点和地图点的静态概率,并将其作为权重参与相机位姿估计。 阅读详情

相关推荐

动态SLAM论文阅读笔记

近期阅读了许多动态SLAM相关的论文,它们基本都是基于ORB-SLAM算法,下面简单记录一下它们的主要特点:

jjjqqq123321的博客 999

从零到一:ORB-SLAM2在动态环境中的鲁棒性优化策略

本文深入探讨了如何优化ORB-SLAM2在动态环境中的鲁棒性。针对经典视觉SLAM算法在动态场景下定位漂移、建图污染的问题,提出融合实时语义分割与运动一致性检测的策略,通过特征点动态筛查与地图净化,有效提升系统在真实复杂环境下的稳定性和精度。

weixin_29071809的博客 428

移动机器人如何在未知环境中利用SLAM技术进行路径规划,实现在未知环境中的自主探索和建图?

摘要:自主探索与建图技术通过融合SLAM与动态路径规划实现环境认知。核心方法包括:1)主动SLAM通过信息熵优化探索路径;2)神经隐式地图(如3D高斯溅射)提升建图精度;3)强化学习训练自适应导航策略;4)动态特征剔除增强系统鲁棒性;5)多传感器融合提高定位准确性。前沿趋势涉及具身智能与语言模型结合的任务规划,以及自监督学习的泛化能力提升。实践建议采用混合方法,优先复现成熟算法再逐步优化。相关研究包括DynaSLAM、CERBERUS系统等,展示了在动态环境中的优异性能。

CyberSoma的博客 1890

RDS-SLAM:使用语义分割方法的实时动态SLAM

摘要: 在典型的视觉同步定位与映射(vSLAM)算法中,场景刚性是一个很强的假设。这种强烈的假设限制了大多数vSLAM在动态现实环境中的使用,而动态现实环境是一些相关应用的目标,如增强现实、语义映射、无人驾驶汽车和服务机器人。许多解决方案被提出,使用不同类型的语义分割方法(如Mask R-CNN, SegNet)来检测动态对象和去除异常值。然而,据我们所知,这类方法在其体系结构中等待跟踪线程的语义结果,处理时间取决于所使用的分割方法。本文提出了基于ORB-SLAM3的实时可视化动态SLAM算法RDS-SL

weixin_38799245的博客 9394

【基于视觉语义特征的室外SLAM建图算法研究】

首先什么是语义SLAM,我们知道传统的视觉SLAM是基于关键点、描述子等低级图像特征来进行定位和建图的,那么对于一些更高层次的带有明确意义的语义信息,比如现实世界中真实的物体,将它作为特征来进行优化的SLAM就称为语义SLAM,它更接近于人类的感知,因为人类对地图的观测不是看一堆点云的点,或者位姿的四元数,人类看的地图,就是这里有地铁站,那前里有红绿灯。 现如今语义SLAM的工作主要分为semantic mapping和real semantic slam,语义建图中一部分工作就是将2D图像的语义分割结.

dulu_301的博客 8766

【讯飞星火大模型AI】SpringBoot整合星火API:从零构建智能数据分析助手

本文详细介绍了如何使用SpringBoot框架整合讯飞星火大模型API,从零构建一个智能数据分析助手。通过清晰的步骤,指导开发者完成API密钥申请、项目搭建、SDK集成与核心代码编写,实现用户通过自然语言指令和CSV数据,即可自动获得ECharts图表代码与专业数据分析结论,极大降低数据分析与可视化的门槛。

neovim7hacker的博客 275

动态SLAM:关于语义分割时间效率的讨论

点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者丨Mr Qin来源丨古月居1. 语义slam中的时间效率问题针对动态场景下的SLAM问题,解决方法大致可以分为两大类,一类是使用多...

3D视觉工坊 2469

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

动态场景下基于实例分割的SLAM(毕业设计开题及语义分割部分)

毕业论文设计思路及流程(动态场景下基于实例分割的SLAM) 前言 今年选了个比较难的毕设题目,这里记录一下自己思路和流程,为之后的学弟学妹(划掉)铺个方向。会按日期不定期的更新。 一、开题 2019.12.24 考研前选择课题是:利用深度学习对连续帧场景进行深度估计,辅助SLAM进行快速初始化,但是下午查了半天资料,遗憾的发现貌似现在深度估计技术并不能提供很准确的深度图,而SLAM是对数字精度要求...

逆水独流的博客 1万+

GPU核心性能指标

内存科普 CPU缓存分为三类,一级缓存(L1)、二级缓存(L2)和三级缓存(L3)。CPU在实际数据读取中重要的却是一级缓存,因为一级缓存速度最快,二级缓存其次,三级缓存最慢,只是三级缓存的容量最大。 DDR1,DDR2,DDR3内存条(DDR是Double Data Rate双倍速率同步动态随机存储器的英文缩写)就是俗称的一二三代内存条。这三种内存条工艺不同,接口不同,性能不同,互不兼容。要区分它们,也不难。内存条可以用在CPU内存或者GPU显存中。比如 the NVIDIA Tesla M2050 GP

Charles Ren's Tech Blog 2万+

先进封装技术的一些优缺点探讨

半导体封装技术是半导体制造过程中的关键环节,它不仅保护了芯片免受物理损伤,还提供了电气连接和散热功能。随着技术的发展,出现了多种先进的封装技术,每种技术都有其特定的应用场景和优缺点。

阿拉伯梳子的专栏 2170

深度学习结合SLAM 研究现状总结 Co-Fusion MaskFusion

深度学习结合SLAM 研究现状总结 本文github链接 1. 用深度学习方法替换传统slam中的一个/几个模块: 特征提取,特征匹配,提高特征点稳定性,提取点线面等不同层级的特征点。 深度估计 位姿估计 重定位 其他 目前还不能达到超越传统方法的效果, 相...

万有文的博客 1万+

基于PaddleX的垃圾分类识别

基于PaddleX的智能垃圾分类识别项目,使用百度开源的PaddlePaddle深度学习框架,结合PaddleX开发套件,实现对垃圾分类的识别检测

Mefishes的博客 8119

动态场景下基于实例分割的SLAM(总结与反思)

动态场景下基于实例分割的SLAM(总结与反思) 简单的聊聊之前做的动态场景下的语义SLAM问题吧。 先介绍下我毕设的总体思路:双目,室外,框架选用ORB-SLAM2,并加入MaskRCNN语义分割,整体结构设计仿照DS-SLAM,但是没有使用光流金字塔追踪,而采用LightTracking思路,利用两帧之间计算F矩阵,并用RANSAC算法计算已采集的特征点序列,将其分离为预选动态特征点和预选静态特征点。之后,检查预选动态特征点序列,如果预选动态特征点序列位于MaskRCNN传递的先验掩码范围内,则认为该动态

逆水独流的博客 5843

YoloV8优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列

感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4264

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 112

SLAM论文速递【SLAM—— RDS-SLAM:基于语义分割方法的实时动态SLAM—4.24(1)

本文提出了RDS-SLAM,一种基于ORB-SLAM3的实时视觉动态SLAM算法,增加了一个语义线程和一个基于语义的优化线程,用于在动态环境中实时鲁棒跟踪和建图。此外,本文还提出了一种算法来获取尽可能最新的语义信息,从而使不同速度的分割方法能够以统一的方式使用。对ORB-SLAM3进行了改进,增加了语义跟踪线程和语义优化线程,利用语义信息消除动态对象的影响。(2)提出了一种关键帧选择策略,将尽可能最新的语义信息作为去除异常值的关键帧,以一种统一的方式与任何不同速度的语义分割方法进行对比。

m0_61847109的博客 1850

3、保险行业商业智能解决方案的理解与实施

本文详细探讨了商业智能(BI)在保险行业的应用与实施策略,涵盖了从BI环境开发的关键步骤、自下而上与自上而下的数据仓库开发方法,到决策支持工具的选择与使用。文章还分析了BI系统与互联网、内联网和外联网的结合方式,并讨论了购买与自建方案的优劣比较,最后总结了商业智能成功的关键因素及其对保险行业带来的商业价值。通过实际案例与未来趋势展望,展示了商业智能如何推动保险企业的数字化转型和竞争力提升。

moon9的博客 97

动态SLAM避坑手册:VDO-SLAM的5个常见配置错误与优化策略

本文深入解析VDO-SLAM在动态SLAM应用中的5个常见配置错误及优化策略,涵盖动态物体误检、相机位姿估计、运动模型选择等关键问题。通过实测数据和代码示例,提供多模态检测融合、自适应RANSAC参数调整等实用方案,帮助开发者提升Visual Dynamic Object-aware SLAM系统在动态环境中的定位精度和实时性能。

ol789012的博客 625

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Notepad-- 多行编辑:3步选中一整列,批量改行一次搞定

你有没有遇到过这种活:40 行日志要每行加上 `[ERROR]` 前缀,或者一串 IP 地址要逐行加引号。逐行敲又累又容易漏。Notepad-- 是一款支持 Windows、Linux、Mac 三个平台的轻量级文本编辑器,它的「多行编辑」能选中跨多行的矩形块,输入一次就同时写进每一行,不用反复劳动。写代码的、做表格的、处理日志的朋友都能直接用。 ## 多行编辑是什么:一分钟认识 一句话说清:选

gitblog_00872的博客 616

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

融合BiSeNet V2语义分割的ORB-SLAM2动态环境增强系统

难点解决方案语义分割模型实时性不足选用BiSeNet V2轻量级网络,ONNX Runtime推理,TensorRT加速(可选)直接删除特征点导致索引越界、段错误采用“标记-清除”法,只标记不删除,在LocalMapping线程安全清理多线程数据竞争(Tracking vs LocalMapping)利用ORB-SLAM2内建的MapPoint::SetBadFlag()机制,避免直接操作共享数据特征点网格(mGrid)未同步更新改用标志位法后无需重建网格,彻底规避此问题。

kahaj的博客 572

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SLAM论文速递【动态SLAM】—4.04(3)

当获得新的语义帧时,我们的系统将从历史语义帧的信息开始。其次,利用K-means算法进行聚类,然后建立聚类的残差模型,对先验动态对象的语义信息进行空间聚类,然后建立聚类的残差模型,对先验动态对象的语义信息进行空间聚类。最后,结合先验动态对象的语义信息和当前帧的分布计算自适应阈值,结合当前帧的残差分布计算自适应阈值进行场景的运动分割,完成场景的运动分割。麦克风对象检测模块。首先,提出了一种基于多项式残差模型的动态目标检测模块,该模块结合相邻帧的运动残差信息和语义分割模块的潜在运动信息,对场景进行运动分割;

m0_61847109的博客 711

如何用SuMa++提升LiDAR SLAM在动态环境中的表现?从语义分割到回环检测全解析

本文深入解析了如何利用SuMa++提升LiDAR SLAM在动态环境中的鲁棒性。通过集成语义分割(如RangeNet++),为点云赋予语义标签,并据此在ICP优化中实施语义加权,有效抑制了动态物体(如车辆、行人)的干扰。同时,语义信息还增强了回环检测的可靠性,并支持构建更干净的静态地图。该方案系统性地解决了动态场景下定位漂移与地图污染的核心难题。

Python的专栏 202

DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments 论文笔记

DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments 论文笔记 源码:https://github.com/ivipsourcecode/DS-SLAM 主要是通过语义分割和运动一致性检查相结合的离群值剔除方法来检测动态点。 摘要 本文提出了一种面向动态环境的稳健语义视觉SLAM—DS-SLAM。在DS-SLAM中,有五个线程并行运行:跟踪、语义分割、局部映射、循环关闭和密集语义地图创建。DS-SLAM将语义分割网络与移动一致性检查方法相结

TheRun的博客 3851

Awesome_Dynamic_SLAM中的语义融合技术:提升SLAM鲁棒性的终极策略

Awesome_Dynamic_SLAM是专注于动态SLAM(同步定位与地图构建)及终身SLAM研究的开源项目,涵盖激光雷达、视觉和传感器融合等关键技术领域。在复杂动态环境中,语义融合技术通过结合环境语义信息与传统SLAM算法,显著提升了系统对动态物体的识别与处理能力,成为增强SLAM鲁棒性的核心策略。 ## 为什么语义融合是动态SLAM的黄金法则? 传统SLAM系统在动态场景(如行人、车辆移

gitblog_00383的博客 415

SLAM论文速递【SLAM—— PLD-SLAM:一种基于点线特征的室内动态场景RGB-D SLAM新方法—4.23(1)

此外,利用室内场景的平面特征,将其扩展到PLD-SLAM (point-line-plane)中,可以在动态场景中获得更鲁棒的位姿估计。文中提出了一种新的基于点和线特征的动态场景RGB-D SLAM方案,称为PLD-SLAM。首先,PLD SLAM将深度学习的语义信息分割与考虑深度信息的K-Means聚类算法相结合检测底层动态特征,避免深度学习造成的欠分割;然后,为了获得更好的实际性能,在动态SLAM中利用点特征和线特征来计算相机位姿,这也是与大多数已发表的仅基于点特征的动态SLAM算法不同的。

m0_61847109的博客 1303
上一篇: UVM TLM FIFO 类:高效事务存储与通信机制解析
下一篇: 从源码到镜像:手把手教你编译Android模拟器系统固件
vim8coder
博客等级 码龄1天 0粉丝 1693原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值