查看原文
其他

【综述专栏】Tesla AI DAY 深度分析 硬核!EP1 Tesla Vision

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

来源:知乎—PerceptionX
地址:https://zhuanlan.zhihu.com/p/451814055

01

一页总结 Whole summary
One page summary
这次分享会特斯拉不只是为了展示它的产品,更多的是recruit purpose,所以整场分享会都办得非常技术。以前我们都是通过Andrej Kaparthy(CVPR workshop)或者从一些零散的发布会了解到特斯拉自动驾驶技术。


02

系统地总结一下tesla 近几年的发展

Vision部分:

  • Multi-task: 现在依然是hot topic? 太多帖子提到这方法了,咱们稍后内容也会提到
  • Transformer - nV fusion: tesla 有8个视角,并且都是带畸变的,这方案主要解决遮挡问题和不同视角投影变换,这问题的来源最开始是smart summon 所遇到的,我们下文会有详细解读
  • Spatial - Temporal: 增加视频前后信息,更好的帮助感知,并且有助于后续规控,下文也会详细介绍到,以及比较最近HDMap的工作。

数据标注量方面:

  • In house 的标注团队,目前特斯拉声称有一千人的标注团队
  • 自动标注:怎么做到scalable, 还有ground truth 的声称
  • 目前数据规模:
    • 60亿label (含velocity/depth)
    • 250w video clip
    • 1.5 PB存储
    • 高质量数据(diverse, clean, large)
      • Refer to Waymo
        • 20w frames, 5 hours
        • 12M labels
  • 最近一家国内知名自动驾驶企业,公开了1千万帧数据,可是它主打unsupervised learning, 其实有标注的数据就5w帧,test data probably 1w frame
  • 目前市面上能拿到最大的数据集估计就是20w frame


03

Tesla vision (core)
AutoPilot History

首先提一下特斯拉Vision 的研发历程:

从 2016 年开始, Tesla Autopilot Software 1.0正式上线,主要网络结构为RegNet 搭上 2D detector,当时训练数据还是人工标注,到了2018-2019年,开始加入了multi-tasks learning, 并且把网络改成HydraNet, 还加入了特征提取网络BiFPN这种双向的FPN网络,那时候的标注还是manual labelling为主;然后还新加入了Vector Space 的概念,Vector space 可以理解为 BEV下面的一个feature space/map,区别于image space, 它更多可以理解为perspective view下的一个空间。到了2019-2020,这一年可以称为里程碑的一年,各大自动驾驶公司都开始往 Multi-tasks learning 方向进攻;特斯拉这边发现在smart summon功能研发时,image space 下的车道线拟合得并不如vector space 下的路沿和车道线,所以团队往vector space

以下是各年份一些重要发布or更新:

2016-

    • RegNet:
    • 2D detector

2018-2019

    • 加入了multi-tasks learning 并把网络称为:HydraNet
    • BiFPN 后文会详细介绍
    • 标注主要以manual labelling 为主
    • Vector space 可以理解为 BEV下面的一个feature space/map,区别于image space, image space更多可以理解为perspective view下的一个空间。
    • 自动驾驶系统称为AutoPilot 4.0 ,其实就是现在的L2,集合ACC, ALC/LKA等功能,蓝色是他们的产品线,

2019-2020 可以称为一个milestone

    • 各大自动驾驶公司都开始往 Multi-tasks learning 方向进攻
    • Fusion: for smart summon, 为了需要在vector space /(BEV)下更加好地识别车道线,以及为了做到fusion,加入了传感器融合的功能。
    • 图中灰色是 former version, 彩色的是这一版本的
    • 为了达到scalable, 数据标注从manual label 升级到 auto-labelling

2021 - 7月最新技术

    • 亮点:spacial - temporal,在 former version transformer 基础上,加入了时序信息(video module and feature queue)
    • 其实不论transformer, 3D convolution, spacial RNN等,这些思路大家都能想到,在这一个公司,能把这么工程的想法实现, 其中包括自称60亿的label 和 250w video clip, 耗费数以万计的计算资源,不知道多少张卡,把这些features 都实现,确实令人佩服。


04

Tesla HydraNets
接下来详细介绍 Tesla Vision Neural Network 的发展!
首先tesla第一次做网络也是从比较简单的场景任务入手:
Tesla HydraNet
如图:
  1. 最原始网络就是做一个简单的车辆检测任务
    1. 图像raw data -- RegNet -- BiFPN -- Backbone输出结果
  2. 然后Tesla 逐渐把众多这些任务集合到一个multi-tasks learning 的框架-HydraNet
    1. 输入:raw image (12bit HDR) 36Hz,
  3. 使用这种图像配置的原因:
    1. Sensor 没有过db or ISP,就是1920x960图像

    2. 图像不是rgb图像,也不需要处理三通道图像

    3. 12bit 能给到更大广度的光照范围,在夜晚场景下,对面车的车灯强光照射这种高对比度的环境下,更加能把握暗处的细节,不至于因为这种场景下,暗处的物体检测不到的现象。

    4. 36hz high frame rate 有助于在高速场景下,神经网络能汲取跟多信息,更快做出反应,实时性更加好

BiFPN:

其实是一个 :FPN 的改进版,普通FPN是一个nodes从上往下传的过程;BiFPN除了nodes从上往下传,还有一个从上往下传的过程,并且还有一个跳跃的连接,每一个node都会有权重,来融合不同尺度的feature. Blocks 之间也可以重复多次,不维度的信息交流就会越多,以达到一个更好的效果,基本功能就是融合不同尺度的features。

Multi-tasks

网络的好处

1. 首先是在训练完整个网络后,在做inference的时候,不同的任务share 同一个 backbone, 整体来看可以节省计算资源

2. 第二个点是我们训练完后可以去 fine-tune 每一个子任务的,

3. 第三点是在数据经过backbone后,freeze住backbone, 进入detector head前, 把features都cache下来, 然后可以反复去fine tune detector head, 这样就不需要重复去算backbone的输出结果了。

Demo 4 years ago
如视频:当HydraNet部署到板端的时候,我们也能看到虽然share同一个backbone, 但也能输出不同的任, 并且效果也比较好。

Smart Summon -- multicam lane & road curve

problem

在Smart Summon 功能的研发时,(Smart Summon即在停车场召唤车子开到你跟前), 在实际应用场景中,车子需要有局部地图作为导航,检测可行驶的区域,才可以根据合理路线,规避路沿,防止碰撞。以下为tesla当时遇到的问题:
环视各相机拼接成一个三维的视角时,不同camera 所检测到的路沿并不能很好地拼接在一起,表现出路沿间并不对齐;但是车子需要自主行驶,就需要对世界有一个3D的感知(包括距离、加速度信息),所以就开启了后面的研究:
视频内容是把每个相机 2D视觉检测到的车道线&路沿,投到3D vector space 上,即一个鸟瞰图。基于这种方法融合出来的效果其实并不理想,(可能是得到image feature 然后乘以一个Homography,然后再加后融合去做的)因为:
1. 当我们从image plane 往 BEV 下投的时候,我们假设路面是平的,现实世界上路面不太可能是平的
2. 若想把检测到road curve and lane 的点精确投到3D BEV上,我们需要准确地知道pixel上的深度信息,但是这深度信息当时tesla也没能获得,因为距离越远,每个pixel所代表的间距就越大,远方的车道线就会faded。
per-cam fusion --not working well
如图,当不同camera 看到比较长和大的货车时,对于车子的不同部分融合与拼装也是比较难去实现的。

solution

为了解决这种 2D空间转到3D BEV下不能准确拟合车道线的问题,tesla 在思考这样一个问题:能否不通过image plane 的检测结果去投入3D space,能否将8个camera 输入的数据直接输出结果到vector space。我们人脑可以识别出2D图片下的车道线如何匹配到3D空间中,但机器并不那么容易做到,所以他们想到能否用神经网络去做融合。
1. 其中一个很自然的想法会是 :
Raw image -- RegNet -- BiFPN -- Multi-scale features 之后,基于8个camera的features 通过一个“网络”,融合到同一个vector space 上面去,再出一个新的feature,传到detector head 上面。

BUT

这里就存在3个问题:

1. 模型训练架构需要如何设计,网络才能做梯度下降;

2. 每辆车在安装的过程中 camera的位置都会有稍微的偏差,外参都会有轻微地抖动,并不是理想角度。

3. 如何构建这个vector space 的真值系统(ground truth), 我们在下一期Autolabelling的分析环节会和大家详解。

待解决的问题:如何将特征从图像空间转换到向量空间? 如图:

Caveat 1
目标是把image上面的点和3D BEV视角上的点对应起来,但中途会遇到一些问题,比如:1. 路面不平,当你用Homography 去映射到3D space上, 你会发现投得不准,例如图片右下角的图片的一个点,这个点会被旁边的车子挡住,当我们用Homography方法的时候可能会对应到 grid map 上黄色点距离车子更近的地方,所以tesla他们希望能否用一种end to end 的方式让网络学出3D BEV grid 和 image patch之间映射的规律。

Transformer

Transformer
Tesla 这边的方案是利用类transformer结构的模型,去构建BEV 视角下的features. 实际上是不是需要用到transformer呢?其实我们这边感觉不一定需要。Tesla 这边,首先它会初始化一个raster栅格,每一个栅格上都会有一个position encoding, 类似于segmentation 里面的 position encoding, 然后multi-scale feature 经过pooling后,会跟positioning encoding 做一个context summary, 之后做一个MLP, 生成一个query。Raster上面每一个点(即feature)与2D上的multi-scale feature上pixel-wise的点的关系如何产生呢?这边就是通过query * key,得出weights, 加到value,就可以得到这个pixel-wise的点在 3D BEV 下的feature. 得到feature 后,我们再通过detection head 做road curve and lane detection.
Query 广义上是一种查询,可以把上图中黄色点理解为Query [ location(i,j)], 通过以下这个equation, 若key和query 对上了,就会输出大致的value:

1. 字典里面都是什么key 呢?2D pixel 下的所有features(物体,车道线等等)

2. Novelty 所在点:

利用transformer, 对8 cameras 2D pixel 下的features, 在3D BEV下做一个融合

不直接乘Homography, 而是让网络implicitly学习外参

3. 鼻祖transformer 论文:Attention is all you need,

https://arxiv.org/pdf/1706.03762.pdf 2017

4. Positional encoding: 

https://kazemnejad.com/blog/transformer_architecture_positional_encoding/

Virtual Camera

Virtual Camera
这边还有一个相机安装的误差,上文有提到过,每一辆车camera安装的位置都会有一些偏差,tesla 提出了virtual camera 的概念,主要目的是想把camera parameters给对齐,首先做一个畸变矫正,然后做一个旋转,为了让图片的完整信息不丢失,在最后一步tesla再做一个畸变还原,因为相机在做完畸变矫正后,难免会有信息的丢失,例如筒状畸变,或者整状畸变,就会变成椭球型或者图像会有黑边,为了让图像的整体信息保存下来,防止信息丢失,所以才做一个畸变还原
这里会有两个问题:

1. 我们怎么去训练virtual camera 的参数呢?

这里面的参数其实是任意取的,我们的猜想是这些参数是从 roll/pitch/yaw mount error distribution 里面取的,可能是中位数median, 因为对于相机来说相对误差较小。

2. 为什么还要做一个畸变还原呢?

上文也有提到过,因为不做还原的情况下,image不是一个正方形形状,为了让图片在正方形的设置内且保留更多信息,要做一个畸变还原

在不同相机做完矫正之后,就会出现图中右侧before-after的效果,上面(before)是不同车照自己的后视镜,然后做一个平均,因为每部车都有不同程度的抖动,所以在后视镜边缘这一部分就显得很模糊;当我们做完rectify (畸变还原)后,就能发现图像比较清楚了,说明virtual camera 图像矫正起到一个比较好的效果。然后想要提一点是:rectify 这个过程不是通过网络得来的,更多像是一个转换(transform),然后送到RegNet,

05

总结一下对于多相机融合成vector space

1. 构建类似transformer的网络,把feature融合到一起的机制

2. 在raw image 输入时插入一个 Rectify layer,把不同外参的相机,对齐到同一个虚拟相机的视角下。

3. 目前感觉工业届和学术界还没有像类似的transformer方向,如一个Nueral network 乘以一个Homography 的做法,达到end to end的效果,(不确定有没有做ablation)所以还是novelty 挺高的。

我们可以看到加上 Transformer 和 Rectification 后的效果

before&after
左边路沿与车道线拟合有天差地别

single cam vs multi cam

当不同摄像机捕捉同一辆汽车时,多摄像机检测并融合到的车辆会比单摄像头检测到的要稳定很多。尤其是在大车截断场景时,可以看到多摄像头融合后的效果是会更加好的。这一种融合与前融合不同,不是单纯地concate一下就完事了,他其实更多的是利用transformer,有着巨大无比的参数量,可想像部署到移动平台上要花多少功夫,这也得益于FSD 芯片的强大。


06

介绍一下本组
我们是一研究自动驾驶感知算法的团队 PerceptionX, 致力于研究前沿的学术界与工业界基于深度学习的模型算法,目前本组正从事E2E Deep Learning, Multi-agent RL,轨迹预测,Mono3D , BEV Transformer等工作,若有相同趣味或想加入我们的同学请联系up主 chenli1@pjlab.org.cn

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“综述专栏”历史文章


更多综述专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存