今天分享的这篇论文的重要性,不言自明,在工业界具有非常重要的地位。
自从BEV下的感知在TeslaAIDay被提出后,业内很多公司开始进行BEV工程化的探索。当前在BEV下进行感知方法大致分为两类,一类是以Transformer为主体的隐式深度(Depth)信息进行转换的架构,另一类则是基于显示的深度估计投影到BEV下的方法,也就是本文的主人公——LSS(Lift,Splat,Shoot)。而这篇发表于ECCV2020的文章在BEV探索的道路上成为了一把利剑,有不少SOTA的论文是在此基础上改进得出,例如CaDDN,BEVDet等文章均是在此基础上改进得到。当前,这套由NVIDIA提出的LSS仍然是目前业内实现BEV感知的最佳利器之一。
题目:Lift,Splat,Shoot:EncodingImagesfromArbitraryCameraRigsbyImplicitlyUnprojectingto3D
论文链接:Lift,Splat,Shoot:EncodingImagesfromArbitraryCameraRigsbyImplicitlyUnprojectingto3D
代码链接:GitHub-nv-tlabs/lift-splat-shoot:Lift,Splat,Shoot:EncodingImagesfromArbitraryCameraRigsbyImplicitlyUnprojectingto3D(ECCV2020)
关于论文的解读,网上已经有太多优秀的论文思路和源码详解,我再重复也不过是画蛇添足。在此推荐一个由宏景智驾的一位工程师出的的手撕代码视频,如果想了解论文思路和源码,看这个视频就够了,供诸君参考:
手撕BEV的开山之作:lift,splat,shoot(没完全shoot)_哔哩哔哩_bilibili
LSS最大的贡献在于:提供了一个端到端的训练方法,解决了多个传感器融合的问题。传统的多个传感器单独检测后再进行后处理的方法无法将此过程损失传进行反向传播而调整相机输入,而LSS则省去了这一阶段的后处理,直接输出融合结果。
在这篇文章中,最关键的就是这个Lift部分,可以简单回顾一下:
整个Lift过程,其实分为三个部分。这个过程其实CaDDN论文中的画的图比较容易理解,我大致画了下:
多视角相机输入后,进入Backbone,同时利用一个深度估计网络估计出Depth的feature。值得注意的是,这里的Depthfeature与Imagefeature的size是相等的,因为后续要进行外积(Outerproduct)操作。
2.外积(Outerproduct)
这一步是LSS的最灵魂的操作。作者在原文中多次提到,Depth的信息是"ambiguous"(模棱两可)的,因为作者并没有使用每个pixel直接预测的Depth具体值,而是使用Depthdistrbution的方式来表示每个pixel的Depth信息。因此,其实无法确定每个pixel的特征投影BEV视角下的具体位置,因此对于每个pixel特征,作者使用的是“allpossibledepths”。使用外积操作,将Imagefeature(维度H\timesW\timesC)和Depthfeature(维度H\timesW\timesD)构造成一个(H\timesW\timesD\timesC)的Frustumfeature。
3.GridSampling
这一步的目的就是将上面构造出的FrustumFeature利用相机外参和内参转换到BEV视角下。具体过程是,通过限定好BEV视角的范围,划定好一个个的grid,将能够投影到相应grid的Feature汇总到一个grid里,之后再进行"Splat"操作。这一步虽然听起来平平无奇,但是在具体的代码实现方面却有很多trick值得学习,感兴趣的可以去看我上面分享的大佬代码带读的链接。
LSS从提出到现在已经经过了时间的验证,大量学者在其基础上进行了更进一步的研究,提出了各种花里胡哨的SOTA模型。总结来看,值得提及的有以下几点:
优点:
1.LSS的方法提供了一个很好的融合到BEV视角下的方法。基于此方法,无论是动态目标检测,还是静态的道路结构认知,甚至是红绿灯检测,前车转向灯检测等等信息,都可以使用此方法提取到BEV特征下进行输出,极大地提高了自动驾驶感知框架的集成度。
2.虽然LSS提出的初衷是为了融合多视角相机的特征,为“纯视觉”模型而服务。但是在实际应用中,此套方法完全兼容其他传感器的特征融合。如果你想融合超声波雷达特征也不是不可以试试。
缺点:
1.极度依赖Depth信息的准确性,且必须显示地提供Depth特征。当然,这是大部分纯视觉方法的硬伤。如果直接使用此方法通过梯度反传促进Depth网络的优化,如果Depth网络设计的比较复杂,往往由于反传链过长使得Depth的优化方向比较模糊,难以取得较好效果。当然,一个好的解决方法是先预训练好一个较好的Depth权重,使得LSS过程中具有较为理想的Depth输出。
2.外积操作过于耗时。虽然对于机器学习来说,这样的计算量不足为道,但是对于要部署到车上的模型,当图片的featuresize较大,且想要预测的Depth距离和精细度高时,外积这一操作带来的计算量则会大大增加。这十分不利于模型的轻量化部署,而这一点上,Transformer的方法反而还稍好一些。
以上均为个人见解,如果大佬们有其他高见,希望在评论区怒斥。
我是Uber,关注我,了解更多关于自动驾驶、机器学习的知识~
全部评论 (0)