代码改变世界

激光雷达和相机的在线语义初始化与校准

  计算机视觉life  阅读(1022)  评论(0编辑  收藏  举报

激光雷达和相机的在线语义初始化与校准

论文名称: SOIC: Semantic Online Initialization and Calibration for LiDAR and Camera
作者: Weimin Wang, Shohei Nobuhara, Ryosuke Nakamura and Ken Sakurada

论文下载:https://arxiv.org/pdf/2003.04260v1.pdf

论文代码:https://github.com/−−/SOIC

本文的核心思想

文章提出了一种基于语义信息的雷达和相机的标定方法. 以往的在线标定方法需要先验信息作为算法的初始值,我们通过引入语义质心(SCs)将初始化问题转化为PnP问题,从而消除了这种局限性.尽管现有的工作已经给出了PnP问题的解析解, 但是由于点云的质心通常与其对应图像的质心不匹配, 即使经过非线性化处理, 参数的精度也无法得到提高.我们基于点云和图像数据的语义元素之前的对应关系, 构造了一个代价函数, 通过最小化代价函数来估计最优的外部参数. 并在KITTI数据集上对算法进行了评估.

研究背景

雷达传感器能够稳定地获取物体的空间数据,但是分辨率低, 无法获得物体的颜色信息; 而相机传感器能够获得高分辨率的RGB图像,但是其对光照敏感同时也无法得到距离信息. 当代移动机器人和无人驾驶汽车通过激光雷达与相机传感器的信息融合,来弥补彼此的不足. MV3D[1], AVOD[2],F-PointNet[3]等神经网络利用融合过后的信息来提高物体检测和语义分割任务的性能. 准确的外参标定是进行融合的前提条件,通常是第一步,也是最重要的一步.
在过去的几年中, 研究人员提出了许多激光雷达与相机的标定方法, 传统方法使用棋盘格标定法, 需要人工从点云和图像中选择特征之间的对应关系. 有些学者提出了更为便利的方法, 可以自动检测特征之间的匹配关系.为了提高灵活性, 在线无目标检测方法得到广泛使用,一种方法是基于观测数据, 利用观测到的点云和图像数据之间的强度或边缘特征的相关性来寻找外部参数. 同时也有基于神经网络的方法. 这类方法通常需要良好的初值. 另外一种方法是通过匹配两个传感器的运动来获得标定参数, 为了达到较高的精度, 需要充分和准确的自我运动估计。
在本文中, 我们提出了在线语义标定方法, 通过利用点云和相机的语义信息来解决初值的问题. 如图1所示.SOIC利用语义分割的结果估计初值和最终的外参.因为只要有足够多的语义对象之间的变化而不需要整个场景SOIC就可以工作. 它甚至可以用于离线场景(如室内机器人的校准). 本文的主要贡献如下:

  • (1).提出了一种基于语义分割的雷达和相机的外参标定方法

  • (2).引入语义质心(SC)来估计优化的初始值.

  • (3).在KITTI数据集上对方法进行了评估, 以验证可行性.

  • (4).源代码已开源
    图1 SOIC通过点云和图像的语义标签匹配计算外参

在这里插入图片描述

方法

我们的方法包括三个步骤:

  • (1).利用现有的方法对图像和点云进行了预训练, 得到语义分割结果, 基于这些语义分割结果,通过语义质心(SCs)来得到一个初始的位姿估计值.
  • (2).在语义对应信息约束下, 定义了代价函数.
  • (3).最后以初始值为基准, 对代价函数进一步的优化,得到更加精确的参数.

A.公式形式

对于点云和图像的匹配点, 我们描述PL={p1L,p2L,,pnL}, 其中piL=(xi,yi,zi)R3, n是点云的数量, L表示为激光雷达坐标系.
另外, 我们标记每个点pi的语义标签,[l,m]imgS, S={0,1,2N}表示语义集合.
类似地, 我们对WxH的图像每个像素也进行了标注, [l,m]imgS表示像素I[l,m]的类别. 其中l[0,W] and m[0,H], 由于分辨率的差异像素的数量远大于点云的数量.
我们定义旋转角θ=(θx,θy,θz)和平移向量t=(tx,ty,tz)表示从点云PL到相机PC的坐标变换. 因此许多点被投影到相同类别的图像像素上.
激光雷达坐标系下的点可以通过旋转角和平移向量通过下式变换到相机坐标系下:

piC=R(θ)piL+t

如果我们知道相机内参K和投影函数P, 可以通过如下方法将位于相机坐标系下的空间点投影到像素坐标[ui,vi]上.

[ui,vi]=P(K,piC)

注意: 由于错误的外参估计可能会使一些空间点投影到图像后, 超出像素范围.
我们定义代价函数来使得点云的标签ipcdS和像素标签[ui,vi]imgS的一致性最大化, 因此我们定义代价函数为:

C=1eϵ1(ipcdui,viimg))

其中ϵ是一个很小量这也导致了eϵ1接近于0. 如果点pi和像素[ui,vi]标签是一致的, 那么代价函数C近似为0, 如果类别不相同代价函数C将会趋近于1.
对于转换到相机坐标系的点piC, 如果超出图像或者与像素标签不一致, 则通过定义一个距离函数D来计算原始激光雷达坐标系下的点piL的损失.

D(piL)=min[l,m]img=ipcd(M([u,v]i,[l,m]))|piL|2

因此这个函数计算图像中具有相同标签的曼哈顿距离. 因此上式的M定义如下:

M([u,v],[l,m])=|ul|+|vm|

由于语义分割会有多个类别, 我们对不同类别进行了加权, 这样可以根据不同类别对损失函数进行计算, 我们定义的类别加权函数1A如下:

1A(x):={1 if xA0 if xA

结合上述的公式, 我们可以得到点云和图像的最终的代价函数, 分母表示有效的语义标签的个数

L=sSin1{s}(ipcd)C(piL)D(piL)sSin1{s}(ipcd)

最终我们通过最小化代价函数来求解外参变量θ^t^

θ^,t^=argminθ,tL

B. 代价函数的初始化

受到解决PnP问题的控制点决策的启发, 我们提出了语义质心来构造一个可以解析求解的含噪声的PnP问题. 如图2所示, 我们通过如下式子类别s的语义信息.

PsL={ps,1L,ps,2L,ps,iLPL,ipcd=s}

语义质心如下

SCsL=pi{PdL}pi|{PsL}|

在PnP问题中, 我们将点云的语义质心3DSC与图像的语义质心2DSC视为3D-2D的匹配点对.需要注意的是, 点云的三维语义质心通常与图像的几何中心不一致. 这意味着点云的语义质心和图像的语义质心可能没有很好的对应. 因此, 这里计算的结果仅作为代价函数的初始值.
图2 展示了点云和图像的语义分割结果以及语义质心

在这里插入图片描述

实验结果

我们首先在KITTI有标签的数据集上评估了所提出的方法的性能. 并将其与在线的方法进行了比较.
随后我们证明不同的外参变量对代价函数的影响以及收敛情况
图3 代价函数的收敛情况

在这里插入图片描述

图4 展示了100帧数据车辆类别的语义质心分布情况
我们使用RANSAC算法从3D-SCs中估计出绿色平面, 红色箭头表示平面的法线, 可以看出所有的质心都近似地分布在同一个平面上.

在这里插入图片描述

图5 展示了语义质心与参数估计值的对应关系
绿色数字表示图像的语义质心, 蓝色数据表示投影点云的语义质心, 数字表示图像点云对的索引值.

在这里插入图片描述

由于我们发现在图4中可视化的语义质心都近似分布在一个平面上, 使用EPnP的方法来求解这个PnP问题将会变得很困难, 因此我们选择使用IPPE方法来进行求解.

显然语义分割的标签的可以帮助提升算法的性能, 因此我们选择训练好的预测KITTI车辆的网络PointRCNN来完成语义标签的预测工作.
图6 展示了使用网络预测出来的语义标签和真实的GT对优化结果的影响

在这里插入图片描述

图7 展示了使用MI的结果

在这里插入图片描述

表1 展示了不同条件下的误差值

在这里插入图片描述

图8 展示了实例场景的实验结果
我们用于语义分割的图像是图8(a), 图8(b)展示了通过PointRCNN网络预测出来的属于车辆类别的点云. 并利用SOIC预测出来的外参将属于车辆类别的点云投影到图像中.图8(c)使用SOIC的预测的外参将GT指定的车辆类别的点云投影到图像上, 图8(d)是使用GT提供的车辆点云的类别, 并且使用GT的外参将属于车辆类别的点云投影到图像上.粉红色框的内容表示车辆类别的点云,在经过外参投影到图像的像素中时会和原始语义图像(图像的语义类别由图像的GT提供)车辆的像素位置发生轻微错位.图8(b)的错位情况较为严重,是由于车辆的类别和外参都是预测得到的.

在这里插入图片描述

本文由计算机视觉life旗下 从零开始学习SLAM 知识星球翻译

欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com
在这里插入图片描述

长按关注计算机视觉life
在这里插入图片描述

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示