深入理解OverlapNet架构:基于改进Siamese网络的LiDAR数据处理流程
【免费下载链接】OverlapNetOverlapNet - Loop Closing for 3D LiDAR-based SLAM (chen2020rss)项目地址: https://gitcode.com/gh_mirrors/ov/OverlapNet
OverlapNet是一个专为3D LiDAR SLAM系统设计的回环检测框架,通过改进的Siamese网络架构实现高效的点云数据匹配与位姿估计。本文将系统解析其核心技术原理、网络结构设计及数据处理流程,帮助开发者快速掌握这一前沿SLAM组件的工作机制。
核心架构解析:双分支网络设计
OverlapNet采用创新的双分支(Siamese)网络结构,通过共享权重的特征提取器处理成对的LiDAR扫描数据。其核心架构包含多模态特征输入层、共享卷积特征提取腿和双任务输出头三大部分,形成端到端的回环检测解决方案。
图1:OverlapNet网络架构示意图,展示了从多模态输入到双任务输出的完整处理流程
多模态数据输入模块
系统支持四种LiDAR衍生数据作为网络输入,通过ImagePairOverlapOrientationSequence类实现数据加载与预处理:
- 深度图(depth):点云距离信息,存储于
data/preprocess_data_demo/depth/目录 - 法向量图(normal):表面几何特征,存储于
data/preprocess_data_demo/normal/目录 - 强度图(intensity):激光反射强度,存储于
data/preprocess_data_demo/intensity/目录 - 语义概率图(semantic):场景分类信息,存储于
data/preprocess_data_demo/semantic/目录
这些数据通过prepareOneInput方法(位于src/two_heads/ImagePairOverlapOrientationSequence.py)被组织为多通道张量,默认配置下形成4通道输入(1通道深度+3通道法向量)。
共享卷积特征提取腿
特征提取部分采用10层卷积网络结构,通过generate360OutputkLegs函数(位于src/two_heads/generateNet.py)实现。网络设计特点包括:
- 非对称卷积核:大量使用(1, n)形状的卷积核(如1x15、1x9),适应LiDAR数据的环形分布特性
- 阶梯式降采样:通过strides参数控制空间维度压缩,最终将输入压缩为360维特征向量
- 可配置化结构:支持通过
config参数调整卷积步长(strides_layer1)和额外层添加(additional_unsymmetric_layer3a)
# 特征提取腿核心代码片段(src/two_heads/generateNet.py) conv1 = Conv2D(16, (5, 15), strides=config['strides_layer1'], activation='relu', input_shape=input_shape) conv2 = Conv2D(32, (3, 15), strides=(2, 1), activation='relu') conv3 = Conv2D(64, (3, 15), strides=(2, 1), activation='relu') # ...后续7层卷积操作...创新双任务输出头设计
OverlapNet的输出层采用独特的双任务设计,通过两个并行头实现重叠率预测和相对方位角估计:
Delta Head:重叠率回归
DeltaLayer(位于src/two_heads/generateNet.py第15行)通过计算左右分支特征图的全像素绝对差实现重叠度度量。其创新点在于:
- 将特征图重塑为向量并进行矩阵化扩展
- 计算所有可能位置的特征差异
- 通过1x15和15x1卷积核进行信息聚合
- 最终通过sigmoid激活输出0-1的重叠率值
Correlation Head:方位角估计
方位角预测采用NormalizedCorrelation2D层(位于src/two_heads/generateNet.py第343行),通过计算特征向量间的归一化互相关实现。网络输出360维向量,每个维度对应特定角度(1°分辨率)的匹配概率,峰值位置即相对方位角。
数据处理流程详解
OverlapNet的完整工作流程包含三个关键阶段,对应于demo目录下的示例脚本:
1. 数据预处理(demo1_gen_data.py)
将原始LiDAR点云(data/scans/目录下的.bin文件)转换为网络输入格式:
- 深度图生成:通过
src/utils/gen_depth_data.py实现 - 法向量计算:通过
src/utils/gen_normal_data.py实现 - 强度图提取:通过
src/utils/gen_intensity_data.py实现 - 语义信息处理:通过
src/utils/gen_semantic_data.py实现
2. 模型推理(demo2_infer.py)
加载训练好的模型对预处理数据进行推理,核心调用src/two_heads/infer.py中的推理函数,输出重叠率和方位角结果。
3. 回环检测(demo3_lcd.py)
基于模型输出构建回环检测系统,通过src/utils/com_overlap_yaw.py计算姿态约束,实现SLAM系统的全局一致性优化。
快速上手与实验验证
环境准备
首先克隆项目仓库并安装依赖:
git clone https://gitcode.com/gh_mirrors/ov/OverlapNet cd OverlapNet pip install -r requirements.txt运行演示
项目提供完整的演示流程,通过以下命令即可体验端到端回环检测:
# 生成预处理数据 python demo/demo1_gen_data.py # 运行推理演示 python demo/demo2_infer.py # 执行回环检测示例 python demo/demo3_lcd.py演示结果可通过pics/demo3.gif查看,该动画展示了回环检测过程中姿态优化的效果。
总结与扩展
OverlapNet通过创新的双分支网络架构和多模态特征融合策略,为LiDAR SLAM系统提供了高效准确的回环检测解决方案。其核心优势包括:
- 多模态特征融合:充分利用LiDAR数据的几何与语义信息
- 端到端学习:直接从原始数据学习重叠度和方位角特征
- 轻量级设计:通过精心设计的卷积结构实现实时性能
开发者可通过修改config/network.yml配置文件调整网络参数,或基于src/two_heads/generateNet.py扩展新的网络结构,以适应不同应用场景需求。
未来工作可探索引入Transformer结构增强长距离依赖建模,或结合动态图卷积网络(DGCNN)直接处理原始点云数据,进一步提升回环检测的鲁棒性和精度。
【免费下载链接】OverlapNetOverlapNet - Loop Closing for 3D LiDAR-based SLAM (chen2020rss)项目地址: https://gitcode.com/gh_mirrors/ov/OverlapNet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考