第263篇 深度学习在SLAM中的应用——learned features和端到端方案
前面十几篇聊的SLAM技术大部分基于传统的几何方法和手工设计的特征。ORB特征、ICP配准、NDT变换——这些都是人想出来的数学工具。深度学习在计算机视觉领域掀起革命后SLAM领域自然也在思考能不能用神经网络替代这些手工设计的东西答案是部分可以但不能完全替代。深度学习在SLAM中的应用大致分三个层次。最浅的层次是用神经网络替代某个子模块比如特征提取、深度估计。中间层次是用网络学习SLAM中某个关键函数比如位姿估计、回环检测。最深的层次是端到端方案——输入传感器数据直接输出位姿和地图中间过程全部由网络学习。Learned Features——学习型特征传统SLAM用ORB、SIFT等手工设计的特征描述子。这些特征在特定场景下效果好但泛化能力有限——ORB在纹理丰富的室内效果好在弱纹理场景就差。学习型特征用神经网络从大量数据中学出来的描述子泛化能力更强。SuperPoint是最成功的学习型特征提取网络之一。它用自监督学习的方式训练一个全卷积网络输入图像输出关键点位置和描述子。在HPatches数据集上SuperPoint的匹配精度超过ORB和SIFT。SuperGlue是配合SuperPoint使用的学习型特征匹配网络。它用图神经网络GNN和最优传输理论来做特征匹配比传统的暴力匹配RANSAC更鲁棒特别是在视角变化大和光照变化大的场景下优势明显。# SuperPoint SuperGlue的使用流程 keypoints_a, descriptors_a superpoint(image_a) keypoints_b, descriptors_b superpoint(image_b) matches superglue(descriptors_a, descriptors_b) # matches质量通常优于ORB BFMatcher pose estimate_pose(keypoints_a, keypoints_b, matches)ALIKED、XFeat是最近两年出现的更高效的学习型特征。它们在保持精度的同时大幅减少了计算量可以在手机和嵌入式设备上实时运行。学习型深度估计单目SLAM最大的问题是尺度不确定性——单张图像无法确定真实的深度和尺度。传统方法靠运动视差移动后比较两帧来恢复深度但初始化阶段和快速运动时效果不好。深度估计网络可以直接从单张图像预测深度图。MiDaS、DPT、Depth Anything这些模型在大规模数据上训练输出的深度图质量很高。把网络预测的深度当作伪观测加入SLAM系统可以显著改善单目SLAM的尺度稳定性和初始化速度。# 深度学习辅助单目SLAM def depth_assisted_slam(frame, depth_model): # 网络预测深度 predicted_depth depth_model.predict(frame) # 把深度转为3D点 points_3d unproject(predicted_depth, camera_intrinsics) # 用3D点做ICP或PnP pose pnp_solve(points_3d, frame.features) return pose, predicted_depthDROID-SLAM是这个方向的代表工作。它把深度估计和位姿估计放在一个可微分的优化循环中网络的输出不是直接的深度值而是深度的更新方向。这种learned optimization的思路很有创新性。端到端位姿估计端到端方案是最激进的路线——用一个神经网络直接从图像序列估计相机位姿完全不需要传统的特征提取、匹配、优化这些步骤。TartanVO和DeepV2D是早期的端到端里程计方案。它们用CNN提取特征用RNN或3D CNN建模时序关系直接回归位姿。在训练数据分布内的场景上效果不错但泛化能力差——换了个场景就不行了。DPVODeep Patch Visual Odometry是最近比较成功的端到端方案。它学习了一个补丁匹配的代价体cost volume通过迭代优化来估计位姿。DPVO在TUM和KITTI数据集上达到了接近传统方法的精度同时速度快很多。# DPVO的核心思路 class DPVO: def forward(self, images): patches self.patch_encoder(images) for _ in range(num_iterations): cost_volume compute_cost(patches, self.map) delta_pose self.update_net(cost_volume) self.pose self.pose.compose(delta_pose) return self.pose学习型回环检测和重定位深度学习在回环检测方面也有很好的应用。NetVLAD和Patch-NetVLAD是学习型的全局描述子比传统DBoW2的区分度更高。CosPlace是最新的方案在大规模place recognition数据集上效果很好。对于激光SLAMOverlapNet和LPD-Net用3D卷积或点云网络来学习点云的全局描述子比Scan Context的表达能力更强。不过计算量也更大通常需要GPU。学习型回环检测的优势是对光照变化、季节变化的鲁棒性更好。传统DBoW2在白天和夜晚的同一地点可能给出很低的相似度NetVLAD因为学了高层语义特征能认出这是同一个地方。深度学习和传统SLAM的关系深度学习在SLAM中的角色不是替代而是增强。目前还没有一个纯端到端的深度学习SLAM系统在精度和鲁棒性上全面超越传统方法。最实用的方案是用深度学习增强传统SLAM的薄弱环节。特征提取用SuperPoint替代ORB匹配用SuperGlue替代暴力匹配深度估计用MiDaS辅助单目SLAM回环检测用NetVLAD替代DBoW2——这些都是深度学习传统SLAM的混合方案效果比纯传统或纯端到端都好。面试官问起这个话题时表达混合方案是当前最优的观点会比较加分。纯端到端方案是研究方向但工程落地还需要时间。面试追问环节面试官SuperPoint比ORB好在哪SuperPoint的优势在三个方面。一是重复性更好在视角变化大的情况下能检测到更多稳定的关键点。二是描述子区分度更高匹配时误匹配更少。三是对光照变化更鲁棒ORB在光照变化大时描述子变化剧烈SuperPoint学了光照不变性。缺点是计算量大需要GPU加速而且训练数据和实际场景差异大时效果可能退化。面试官端到端SLAM为什么还没完全成熟几个原因。一是泛化能力不足训练数据的场景有限换到没见过的场景效果下降严重。二是缺乏几何约束端到端网络是黑盒不保证输出满足几何一致性比如闭环约束。三是可解释性差出了问题很难debug。四是训练数据标注成本高精确的位姿真值需要高精度设备采集。传统SLAM有完整的数学理论支撑这些方面目前还比不过。面试官深度学习SLAM在嵌入式设备上能跑吗取决于具体方案。轻量级特征提取ALIKED、XFeat可以在手机上实时运行。深度估计MiDaS Small也可以在移动端跑。但大型回环检测网络NetVLAD和端到端方案DPVO通常需要GPU嵌入式设备上跑不动。工程上做取舍关键模块用深度学习其他部分用传统方法在精度和效率之间找平衡。面试官自监督学习和监督学习在SLAM中怎么选择监督学习需要精确标注位姿真值、深度真值获取成本高。自监督学习利用数据本身约束来训练比如单目深度估计用光度一致性做自监督位姿估计用对极约束做自监督。SLAM领域自监督学习更实用因为传感器数据本身就包含丰富的约束信息。面试官未来深度学习会完全替代传统SLAM吗短期不会。传统SLAM的几何理论框架多视图几何、因子图优化是经过几十年验证的成熟技术精度和可靠性都有保障。深度学习在感知层面特征提取、语义理解有明显优势但在几何推理层面位姿优化、一致性保证还不如传统方法。未来的方向大概率是深度学习做感知传统方法做几何的混合架构两者各取所长。深度学习给SLAM带来了新的可能性从learned features到端到端方案每一步都在推动SLAM技术的进步。但深度学习不是万能药它和传统SLAM是互补关系而不是替代关系。当前最实用的方案是深度学习增强传统SLAM——在薄弱环节用网络替代手工设计在核心框架上保留几何约束和优化理论。上一篇第262篇 语义SLAM——给地图加上这是什么的标签下一篇我们聊SLAM系统性能评估看看怎么评测一个SLAM系统的好坏。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力