2D 高斯地图的初始化是在 VIO(视觉惯性里程计)前端处理完首批关键帧后进行的。首先,对于每一帧图像,系统会筛除深度过大或不确定性高的像素点,确保输入数据的可靠性。随后,从剩余的像素中随机采样 50,000 个点,并将它们投影到世界坐标系中,生成点云。接着,这些点的高斯属性会按照 2DGS 方法进行初始化,包括均值、尺度、透明度和颜色等信息。
在渲染过程中,系统会按照 2DGS 方法生成 颜色、深度、法向量和累积值,并使用深度信息和法向量的方向来优化高斯椭球的渲染结果。渲染过程中,每个高斯点的深度值决定其在相机坐标系中的位置,而法向量的方向与相机视线对齐,以保证正确的可视化效果。
建图模块与 VIO 前端并行运行,并持续进行增量式地图更新。在原始 3DGS 方法中,密集化(densification)采用的是克隆-分裂策略,但该方法在 GS-SLAM(高斯 SLAM)中表现不佳,特别是在需要重置透明度时效果欠佳。因此,本文采用了先添加大量高斯点,再进行筛选的方法,以提高建图质量。
当前端添加新的关键帧时,新的高斯椭球会被加入地图,并在训练前进行优化。首先,系统会渲染该关键帧的颜色和深度信息,然后执行两个关键操作:
1. 删除冲突高斯点:
2. 添加新的高斯点
:
-
在低累积值区域(即当前高斯点较少的地方),会根据深度信息添加新的高斯点。
-
添加新高斯点的数量取决于低累积像素区域相对于总像素区域的比例。
-
先添加冗余的高斯点,再进行选择性筛选,确保最终的建图结果具有更好的质量。
这种先增加、再筛选的策略在前向视角场景(如自动驾驶)中尤其有效,能够避免密集化过程中出现的透明度问题,并提高地图的完整性。
在新增高斯点后,系统会从最新的关键帧列表中随机抽取帧进行训练。训练过程中,系统会计算一个损失函数,包括颜色损失、深度损失、法向量损失和累积损失。其中,累积损失用于确保被遮挡的区域不会出现不合理的黑色高斯点。在每次训练迭代时,系统会记录并更新每个高斯点的局部贡献分数和误差分数,这些变量用于管理高斯点。