Tesla AI DAY 深度分析 硬核!

来源 |  PerceptionX @知乎


一页总结 Whole summary


Tesla AI DAY 深度分析 硬核!的图1
One page summary

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


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


Vision部分:


1、Multi-task: 现在依然是hot topic? 太多帖子提到这方法了,咱们稍后内容也会提到

2、Transformer - nV fusion: tesla 有8个视角,并且都是带畸变的,这方案主要解决遮挡问题和不同视角投影变换,这问题的来源最开始是smart summon 所遇到的,我们下文会有详细解读

3、Spatial - Temporal: 增加视频前后信息,更好的帮助感知,并且有助于后续规控,下文也会详细介绍到,以及比较最近HDMap的工作。


数据标注量方面:


1、In house 的标注团队,目前特斯拉声称有一千人的标注团队

2、自动标注:怎么做到scalable, 还有ground truth 的声称

3、目前数据规模:
  • 60亿label (含velocity/depth)

  • 250w video clip

  • 1.5 PB存储

  • 高质量数据(diverse, clean, large)

    3.1 Refer to Waymo

    3.1.1 20w frames, 5 hours

    3.1.2 12M labels


4、最近一家国内知名自动驾驶企业,公开了1千万帧数据,可是它主打unsupervised learning, 其实有标注的数据就5w帧,test data probably 1w frame

5、目前市面上能拿到最大的数据集估计就是20w frame


Tesla vision (core)


Tesla AI DAY 深度分析 硬核!的图2
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-


1、RegNet:


2、2D detector


2018-2019


1、加入了multi-tasks learning 并把网络称为:HydraNet


2、BiFPN 后文会详细介绍


3、标注主要以manual labelling 为主


4、Vector space 可以理解为 BEV下面的一个feature space/map,区别于image space, image space更多可以理解为perspective view下的一个空间。


5、自动驾驶系统称为AutoPilot 4.0 ,其实就是现在的L2,集合ACC, ALC/LKA等功能,蓝色是他们的产品线,


2019-2020 可以称为一个milestone


1、各大自动驾驶公司都开始往 Multi-tasks learning 方向进攻


2、Fusion: for smart summon, 为了需要在vector space /(BEV)下更加好地识别车道线,以及为了做到fusion,加入了传感器融合的功能。


3、图中灰色是 former version, 彩色的是这一版本的


4、为了达到scalable, 数据标注从manual label 升级到 auto-labelling


2021 - 7月最新技术


1、亮点:spacial - temporal,在 former version transformer 基础上,加入了时序信息(video module and feature queue)


2、其实不论transformer, 3D convolution, spacial RNN等,这些思路大家都能想到,在这一个公司,能把这么工程的想法实现, 其中包括自称60亿的label 和 250w video clip, 耗费数以万计的计算资源,不知道多少张卡,把这些features 都实现,确实令人佩服。


Tesla HydraNets


接下来详细介绍 Tesla Vision Neural Network 的发展!

首先tesla第一次做网络也是从比较简单的场景任务入手:

Tesla AI DAY 深度分析 硬核!的图3
Tesla HydraNet
如图:

1、最原始网络就是做一个简单的车辆检测任务

  • 图像raw data -- RegNet -- BiFPN -- Backbone输出结果


2、然后Tesla 逐渐把众多这些任务集合到一个multi-tasks learning 的框架-HydraNet

  • 输入:raw image (12bit HDR) 36Hz,


3、使用这种图像配置的原因:

  • Sensor 没有过db or ISP,就是1920x960图像

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

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

  • 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

4、head前, 把features都cache下来, 然后可以反复去fine tune detector head, 这样就不需要重复去算backbone的输出结果了。
Tesla AI DAY 深度分析 硬核!的图4

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


Smart Summon -- multicam lane & road curve


problem


在Smart Summon 功能的研发时,(Smart Summon即在停车场召唤车子开到你跟前), 在实际应用场景中,车子需要有局部地图作为导航,检测可行驶的区域,才可以根据合理路线,规避路沿,防止碰撞。以下为tesla当时遇到的问题:

1、环视各相机拼接成一个三维的视角时,不同camera 所检测到的路沿并不能很好地拼接在一起,表现出路沿间并不对齐;但是车子需要自主行驶,就需要对世界有一个3D的感知(包括距离、加速度信息),所以就开启了后面的研究:
视频内容是把每个相机 2D视觉检测到的车道线&路沿,投到3D vector space 上,即一个鸟瞰图。基于这种方法融合出来的效果其实并不理想,(可能是得到image feature 然后乘以一个Homography,然后再加后融合去做的)因为:

1、当我们从image plane 往 BEV 下投的时候,我们假设路面是平的,现实世界上路面不太可能是平的

2、若想把检测到road curve and lane 的点精确投到3D BEV上,我们需要准确地知道pixel上的深度信息,但是这深度信息当时tesla也没能获得,因为距离越远,每个pixel所代表的间距就越大,远方的车道线就会faded。

Tesla AI DAY 深度分析 硬核!的图5
per-cam fusion --not working well

如图,当不同camera 看到比较长和大的货车时,对于车子的不同部分融合与拼装也是比较难去实现的。

solution


为了解决这种 2D空间转到3D BEV下不能准确拟合车道线的问题,tesla 在思考这样一个问题:能否不通过image plane 的检测结果去投入3D space,能否将8个camera 输入的数据直接输出结果到vector space。我们人脑可以识别出2D图片下的车道线如何匹配到3D空间中,但机器并不那么容易做到,所以他们想到能否用神经网络去做融合。

1、其中一个很自然的想法会是 :

Tesla AI DAY 深度分析 硬核!的图6

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的分析环节会和大家详解。

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

Tesla AI DAY 深度分析 硬核!的图7
Caveat 1

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


Transformer


Tesla AI DAY 深度分析 硬核!的图8
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:

Tesla AI DAY 深度分析 硬核!的图9

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

2、Novelty 所在点:

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

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

  • 鼻祖transformer 论文:Attention is all you need, arxiv.org/pdf/1706.0376 2017

  • Positional encoding: kazemnejad.com/blog/tra


Virtual Camera


Tesla AI DAY 深度分析 硬核!的图10
Virtual Camera

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

1、这里会有两个问题:

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

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

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

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

Tesla AI DAY 深度分析 硬核!的图11

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

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

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

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

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

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

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

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

先大层面概括下 Tesla 目前(2021.8.19)所展示的总架构为:


Tesla AI DAY 深度分析 硬核!的图12

1、首先raw image进来,16bit 36hz

2、通过rectify layer, 把图片转到virtual camera下

3、通过一个RegNet, 其实是一个ResNet的形式,然后给出不同尺度下的features

4、通过BiFPN, 把不同尺度下的features, 从上到下,又从下到上,来来回回对不同尺度下的features 做一个融合。

5、通过transformer的形式投到BEV视角下,得到一个俯视的feature

6、给到feature queue里面,加入时序信号,video module 实际是对时序信号
的一次融合。之后得到一个多camera 融合并加入了时序信号的features

7、最后给到不同的detection head 里面去做检测;

以上我们重点讨论了HydraNet,以及对于多相机融合成vector space

那么当tesla camera fusion得到一个比较好的效果之后,在自动驾驶这深不见底的海洋里,仅仅拥有对当前环境感知与道路线重构是不够的,特别是一些变幻莫测的城市道路场景,还不能满足高质量的L2+自动驾驶。如何进一步提高性能呢?

加入时序信息

相信大家都能想到,就是加时序,加入时序信息有几点好处:

Tesla AI DAY 深度分析 硬核!的图13

1、在遮挡的情况下,可预测出被遮挡物体的位置

2、对路面的标识会有一些记忆,例如左下图片的直走与左拐的road mark, 可以帮助
  • 预测前车的轨迹,即前面的车大概率会往前或往左拐

  • 可预测未来的可行驶区域


为了加上时序这一功能于是在网络上增加以下模块:

Tesla AI DAY 深度分析 硬核!的图14

加入了kinematics / IMU (里程计信息) ,与transformed 后的 multi-cam feature 结合,形成一个feature queue;feature queue包含时序信号,所以我们就需要把时序信息放进来:

Tesla AI DAY 深度分析 硬核!的图15

1、Ego car kinematics 更多是一个动力信息,这里面给到 1x1x4x60 这里面其中一个x4的维度我们推测是 velocity (Vx,Vy), acceleration(Ax,Ay)

2、Multi-cam features 带上时序,以及positional encoding 加上时序的位置信息。

3、增加video module 模块

4、最后给出一个multi-camera video features 这一个模块,就是对多个features 做一个融合

Video Module Queue

Tesla AI DAY 深度分析 硬核!的图16

当我们Query 建立起来后, 我们要怎么去使用它呢?换而言之,我们要什么时候push or pop 我们的数据呢?

1、Tesla 这边给出了一个方案,例如,每隔27ms,push一个key,

2、同时我们可以根据路程来定的一个序列,例如我们在这里看到一个左拐和一个直行的标志,这一部分的query 是我的ego car 每走一米,query都会做一个push and pop operation. 这样我们就可以建立起 time based query and space based query.

3、这个例子非常生动形象,可能当时Andrej都没有讲透,为什么我们要加入这个时序信息呢?假如说我们network下一步直接输出trajectory 的话,因为我之前看到了左转车道,所以即使前面没有一辆车带着我走,我都能知道我在这个十字路口下一步的trajectory应该引导到哪一个方向。这估计是加入时序信息最大的motivation。

4、Video Module:

Tesla AI DAY 深度分析 硬核!的图17

1、Video module 其实就是把feature query 再做一次融合,大家可以看到3D Conv 上输入一个20x80x300x12的query,这里x12是之前Time-60经过sub-sample 变成 Time-12的时序信息。为了把features做一个融合,我们可以用 3D Convolution or Transformer的方法,把Time的维度降为1,再传到detection head。Tesla 这边还用了一个Spatial RNN,并且详细地介绍了他们的方法, 主要是想凸显他们在做道路重建的模块:
  • Transformer: 这里有篇论文大家可以参考看看:AXIAL ATTENTION IN MULTIDIMENSIONAL TRANSFORMERS arxiv.org/pdf/1912.1218

  • 其实当时Andrej轻描淡写30秒把3D convolution or Transformer的方法给讲过去了,实际上如果要复现,估计一个季度的时间也不一定可以..


Spatial RNN


Spatial RNN 是一个20x80x256的feature, 同时组合上动力学信号,为什么需要kinematics(动力学信号)呢?首先他需要维护一个很大的Spatial Grid,如图:


Tesla AI DAY 深度分析 硬核!的图18

然后这个feature 里面有很多小的cell,每一个cell 都是一个可以迭代的RNN,相当于在每个cell 里面都存在一个hidden state,即h(t);当我们的kinematics信号进来的时候,我们就可以积分,然后得到车子下一时刻的位置。灰色长方形的grid即为车子可见的区域,我们认为是20x80x256里面的20x80的范围,也就是俯视图的一个feature,我们每一次都去更新车辆可见区域的hidden state, 然后不断去迭代里面256个vector, 这样就可以对20x80区域内每一个cell进行更新, 给到后面detection head 去输出这一个cell, 比如路沿或者车道线信息.

Tesla AI DAY 深度分析 硬核!的图19

1、如图是Tesla 把spatial RNN train 出来后 hidden state feature map的可视化; 我们可以看到Tesla提取了比较丰富的道路语义信息; 同时我们可以看前10个通道平均的一个可视化输出, 可以看出车在运动过程中对道路有一个比较好的感知.

2、当把这些features(10个通道)放在一起的时候, 根据spatial RNN 不断地去迭代与输出hidden state, 根据hidden state 上面的feature, 检测出路沿和车道线,就可以对周围的环境建图, 如图: Tesla 的网络是一个纯视觉的网络, 输出的是在BEV视角下的地图. 这是一种不依赖高精地图, 自主建图导航的一种方法. 这里大家可能会疑惑对于这个网络, 我们的ground truth是怎么取得呢?

HDMap Net

除了Tesla 这种vector space 的方法, 学术界也有一些工作能实现相应的feature. 例如今年7月份挂在archive的一个工作, HDMap Net

Tesla AI DAY 深度分析 硬核!的图20

Li, Qi, et al. "HDMapNet: An Online HD Map Construction and Evaluation Framework." arXiv preprint: 2107.06307

这篇文章的motivation是提出了一种强大的在线地图学习方法,实现直接从相机图像和激光雷达点云预测本地语义地图。相比于传统建图方式: Lidar, IMU, GPS, Wheel Odo 做SLAM,再通过手工进行标注, 得到一个高精地图,在线地图学习的方法节省了大量的人力和资源,也给系统开发人员在 scalability和准确性之间提供了另一个可能的选择。该方法的实现过程非常类似于tesla video module,接下来我们给大家介绍一下这篇工作:

Tesla AI DAY 深度分析 硬核!的图21

1、网络结构,输入是surrounding images and lidar point clouds, 这两个数据可以同时给,也可以单独给。image过一个perspective view 下的一个encoder, 得到3维的features, 然后再过一个 MLP 转换到 BEV。Lidar 这边也做相似的处理,转换到 BEV decoder下,然后我就可以给不同的head 去做任务,例如 BEV 视角下的一个segmentation,instance embedding, 还有direction prediction. 通过instance embedding去结合semantics segmentation,加上道路的方向信息,就可以产生一个向量化的HD Map,右边BEV feature表示后面他将在BEV下做检测任务。

2、简单来说就是image plane 投到 BEV视角下去做检测,这跟Tesla 有异曲同工之妙。这里想说明一点是这个技术不只有tesla 能想到,其实业界中也会有类似的方法,只是 tesla 很少发paper。上图的pipeline很像 tesla 加入时序信号前的网络,都是raw image进来,然后经过encoder, 转到BEV视角下,再给到detector去做segmentation 等。都是在转换后的“Vector space” / BEV 视角下做各种任务。

3、HD Map Net 的视频结果


加入时序信息后效果


加上时序信息后,被遮挡的物体在vector space上也能很好的检测以及轨迹预测,相对与single frame 会有很大的效果提升。不仅对Object detection 有帮助,还对depth and velocity的检测也有提升,如图

Tesla AI DAY 深度分析 硬核!的图22

这里有两个chart,上面是depth estimation, 下面的是velocity estimation. 对legend方面做一下解释:绿色线是radar的输出,假设为ground truth, 蓝色线未加入时序信息video module的输出结果,黄色是根据single camera 的深度做一个微分的结果。大家可以看到,加入video module后,整个深度与速度信息的估计性能的提升是很明显的。

Put everything together, Tesla 目前所展示的总架构为:

Tesla AI DAY 深度分析 硬核!的图23
1、首先raw image进来,16bit 36hz

2、通过rectify layer, 把图片转到virtual camera下

3、通过一个RegNet, 其实是一个ResNet的形式,然后给出不同尺度下的features.

4、通过BiFPN, 把不同尺度下的features, 从上到下,又从下到上,来来回回对不同尺度下的features 做一个融合。

5、通过transformer的形式投到BEV视角下,得到一个俯视的feature

6、给到feature queue里面,加入时序信号,video module 实际是对时序信号的一次融合。之后得到一个多camera 融合并加入了时序信号的features

7、最后给到不同的detection head 里面去做检测;

8、最后得到的效果是:

CVPR 2021 workshop Andrej Recap

Tesla AI DAY 深度分析 硬核!的图24

在CVPR 2021 workshop的时候,当时Andrej就透露过他们的架构,如上图,对于camera fusion这模块上,当img -- multicam -- detector head 的时候,我们猜测tesla 会用上3种 fusion的方法:3D convolution, transformer, Spatial RNN.

Future Work, 未来可改进的地方:


Tesla AI DAY 深度分析 硬核!的图25

1、Tesla vision 在融合时序信号时引用 feature queue的方法,其实是在网络比较靠后的部分,他们未来尝试在比较靠前的部分就把spatial temporal的信号输入进来,比如说用一些光流的手段,直接把时序信号加到底层网络里面。

2、Spatial RNN 是用一个 dense raster output, 后处理也比较复杂,但是应用在一个对时延要求比较高的场景下,可见这个网络还需要优化;所以Tesla在研究对于各个场景,比如说道路场景,有没有一种更为稀疏的表示方法,计算成本也小一点。

Warpping up this session

说到这里,我们应该也能感受到这一公司的伟大吧?但这一切 (HydraNet, Vector Space, Video Module等)都离不开数据标注和硬件的配合,如果没有这两样:
1、没有大量数据,这个HydraNet,Transformer网络是训练不出来的;
2、同时,算力不足,也跑不动这些算法。
默认 最新
当前暂无评论,小编等你评论哦!
点赞 评论 收藏
关注