Back

关于SegFormer-B2 ADE20K

对SegFormer-B2 ADE20K的思考

正文从这里开始。

https://chatgpt.com/share/68592322-5850-8002-8395-7aa7eec4a7eb

SegFormer-B2 ADE20K 与 MonoGS 融合笔记

1. SegFormer-B2 ADE20K 回顾


2. Transformer 层与解码器


3. 与 MonoGS 融合思路

MonoGS(Monocular Gaussian Splatting SLAM)的核心是基于单目相机生成三维高斯表示,并进行跟踪与重建。将 SegFormer-B2 ADE20K 融入 MonoGS,可以给 SLAM 增加语义信息,在动态剔除、语义地图构建、优化策略上带来改进。下面是关键思路与实践要点。

3.1 基本框架与数据流

  1. 相机采集:获取 RGB 图像(可同步或结合深度估计模块)。
  2. 语义分割:对每帧 RGB 图像运行 SegFormer-B2,得到 seg_map(每像素类别 ID)。
  3. 深度/点云生成:MonoGS 通常通过单目深度估计或多视角融合得到 3D 点或高斯分布。
  4. 投影与语义附加
    • 将像素级语义投影到 3D 点或高斯:利用相机内外参计算像素到 3D 坐标的映射(单目需深度估计;若已有稠密深度或重建结果,可直接投影)。
    • 每个 3D 点/高斯附上对应像素的语义类别或分布概率。
  5. 语义驱动处理
    • 动态剔除:若某些像素/点属于动态类别(如 person, car, bicycle),剔除或降低其在地图构建中的权重,避免将动态物体错误融合到静态地图。
    • 语义权重:针对不同语义类别,可赋予不同置信度或融合权重,例如:墙、地面、家具等高置信度,植被、天等可视场景外的类别处理方式可调。
    • 语义地图构建:在高斯表示中记录类别标签,实现带语义的 3D 重建,可用于语义查询、语义导航等。
  6. 优化与控制
    • 在优化步骤中(如 pose 优化或高斯分布参数优化),结合语义信息进行约束或加权:例如,同类别点之间更易关联,避免跨语义区域匹配错误。
  7. 可视化与后续应用
    • 输出带语义的高斯点云/体渲染,或者生成语义拓扑图,用于机器人理解、路径规划等。

3.2 详细实现要点

3.2.1 相机标定与时间同步

3.2.2 语义分割调用频率

3.2.3 投影到 3D

3.2.4 动态剔除与滤波

3.2.5 语义权重优化

3.2.6 存储与可视化

3.2.7 代码示例思路(伪代码)

# 在 SLAM 主循环或回调中:
rgb_image = get_current_frame()
# 异步请求分割
seg_map = segformer_inference(rgb_image)  # 返回 HxW 的类别 ID 矩阵
# 若使用单目深度估计:
depth_map = monocular_depth_net(rgb_image)  # HxW 浮点深度
# 投影到 3D:
points3D = []
semantics = []
for v in range(0, H, stride):
    for u in range(0, W, stride):
        d = depth_map[v,u]
        if not valid(d): continue
        X, Y, Z = backproject(u, v, d, K)
        cls_id = seg_map[v,u]
        points3D.append([X,Y,Z])
        semantics.append(cls_id)
# 构建或更新 Gaussian:
for p, cid in zip(points3D, semantics):
    if cid in dynamic_classes:
        continue  # 剔除
    weight = class_weight_map.get(cid, default=1.0)
    add_or_update_gaussian(p, weight, semantic_label=cid)
# 在优化时,可用语义一致性:
# 例如,损失项 L_semantic = sum_over_correspondences( semantic_distance(...) * weight )

3.2.8 性能与资源


4. 总结


备注:请根据你的硬件资源与具体任务,调整模型推理分辨率、类别处理策略及 SLAM 优化模块中的语义约束设计。