当前位置: 代码网 > it编程>编程语言>C/C++ > LSS算法核心原理详细解读,一看就懂,不懂请打我!

LSS算法核心原理详细解读,一看就懂,不懂请打我!

2024年08月01日 C/C++ 我要评论
一看就懂!

核心

  • 将2d图像特征转换到bev feature特征

  • 该算法是bev领域中的一大基石

整体流程

  • 流程步骤

    • (1)利用backbone获得环视图像(6张图片)的特征;

    • (2)利用几何关系创建每张图片的视锥;

    • (3)利用相机的内外参,将视锥点云投影到ego坐标系下;

    • (4)利用voxel pooling 将环视图像特征转换为bev特征;

    • (5)bev encoder 对特征进一步融合,添加network head获得任务结果

  • 整体流程的示意图如下所示

在这里插入图片描述

分步阐述

backbone

  • 使用efficientnet网络作为backbone,提取每张图片中的深度特征d=41,语义特征c=61

  • 特征图获取流程

    • 使用efficientnet-b0获得特征图:24 x 512 x 8 x 22

      • 24:b x n -> b=4,n=6 -> 考虑前面3帧和当前帧图像;6张图片(从该部分看相机的数量只能为6,除非重新训练)

      • fh:8;fw:22

    • 利用1 x 1卷积将特征图的通道数变为512->105(64+41),24 x 105 x 8 x 22

      • 105个特征通道中前64个通道为语义通道,后41个通道为深度通道

      • 该部分网络进行了深度估计,通过训练所得

    • 取出后41个特征通道(深度通道),进行softmax概率估计

    • 利用广播机制,将语义通道24 x 64 x 1 x 8 x 22 与深度通道24 x 1 x 41 x 8 x 22进行外积最终获得24 x 64 x 41 x 8 x 22特征图

      • 取出上述某一帧中一张图片的特征图:64 x 41 x 8 x 22,其中的每个特征点的维度为 64 x 41

        • 如果该特征点的表征为3m距离的狗,则64个语义通道内,表示狗的语义通道的值最大;3m对应的深度通道距离最大。两个通道利用广播的机制相乘,最大的通道即可表示为3m距离的狗

        • 广播机制如下所示,c x a 获得matirx_(c x a),可以通过该方式获得最大的通道
          在这里插入图片描述

几何关系(创建视锥)和视锥投影到ego

  • 总体流程:像素视锥点->剔除图像增强矩阵的影响->生成camera坐标系下的三维视锥点->将视锥点投影到ego坐标系下

  • 像素视锥点(u,v,d)的选择:

    • 由于最终的特征图尺寸为:8 x 22,则在原始图像上将图片分为8 x 22个图片块(patch)

    • 将每个图像块的顶点 + 预设深度(4~45m),即可完成视锥点的构建,形状为d x fh x fw x 3

    • 下图所示,第一列为x坐标、第二列为y坐标,第三列为预设深度值
      在这里插入图片描述

    • 代码如下所示:

在这里插入图片描述

  • 剔除增强矩阵的影响

    • 目的:例如,可消除图片旋转的影响

    • 利用下列公式消除图像增强的像素视锥的影响
      p i m g ′ = a − 1 p i m g p^{'}_{img}=a^{-1}p_{img} pimg=a1pimg

  • 获得camera坐标系下视锥点的坐标:

    • 利用下列公式,最终才能获得三维坐标系下的视锥点(形状如视锥
      p c a m = i − 1 ( p i m g ∗ d ) p_{cam} = i^{-1}(p_{img}*d) pcam=i1(pimgd)
      在这里插入图片描述
  • 将camera坐标系下的视锥点转换到ego坐标系

    • 利用camera->ego的tf变换关系能够直接获得,略

    • 最终获得的视锥点形状为:b x n x d x h x w x 3

voxel pooling

  • 目的:将环视图像特征转换为bev特征

  • 已有图像特征:b x n x d x h x w x c;视锥点:b x n x d x h x w x 3

    • 将图像特征铺开,变为(b x n x d x h x w) x c;将视锥点铺开,变为(b x n x d x h x w) x 3。此时,视锥点与图像特征一一对应,可通过训练获得该内在联系

    • 将视锥点分配到预设的bev网格内,获得栅格坐标。如下公式所示,其中bx:第一个网格的中心点;dx:每个网格的宽度;gemofeats为视锥点。

      • 由于计算栅格坐标时,是取整操作(int),所以存在某几个视锥点位于一个栅格网格内
      • 由于预设的xyz范围为[-50, 50]、[-50, 50]、[-10, 10],所以可剔除超出该范围的视锥点。同时,也剔除对应的图像特征点

g e m o f e a t = g e m o f e a t − ( b x − d x / 2 ) / d x gemofeat = gemofeat - (bx - dx / 2) / dx gemofeat=gemofeat(bxdx/2)/dx

  • 将一个栅格内多个视锥点对应的特征点进行sum pooling,也就是将落在同一个栅格内的多个特征点进行相加操作

    • 由于特征点的shape大小不一,无法进行批量操作,需要使用如下代码部分进行操作,但实现的效果如上所示。

    • 论文中,经过sum pooling后,图像特征的shape为:17375 x 64

在这里插入图片描述

  • 将图像特征按照对应视锥点的位置(即bev栅格的位置)填入bev特征图中,获得最终的bev特征图

    • bev栅格的索引位置远大于图像特征数量

在这里插入图片描述

head

  • 依据不同的任务添加不同的head即可,略

总结

  • lss算法通过相机内外参显式的获取图像深度。其中,生成视锥点、图像特征转换到bev特征的思想值得深究

  • 不足

    • 没有考虑相邻环视图像的特征,图像特征分散获取

    • 图像特征重叠时,使用sum pooling的方式,太过简单、粗暴

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com