应该说,自动驾驶的算法模块,基本都是数据驱动的训练模型要优于基于规则或者优化的,尤其是感知和预测。 以下图(综述论文 “A Survey of Autonomous Driving: Common Practices and Emerging Technologies”)为例,现在自动驾驶的开发基本是模块化的(a),只有个别是采用端到端模式(b)。 端到端模式可以说绝对是数据驱动的(如图为例),因为传统的优化和规则方法无法处理如此复杂的系统设计和公式化。 “E2E Learning of Driving Models with Surround-View Cameras and Route Planners” 模块化的方法也是可以采用数据驱动方式,可以分成以下模块:
感知:图像/激光雷达/毫米波雷达
地图+定位
预测(感知-预测)
规划决策(预测-规划)
控制(规划-控制)
传感器预处理
模拟仿真
下面以此分别讨论: 1)感知:2-D/3-D 目标检测和分割基本是采用深度学习模型,无论激光雷达、摄像头或者传感器融合的形式;跟踪基本是tracking-by-detection方式,不过把跟踪和检测集成在一起做深度学习模型也是大家讨论的热点之一。 “Keep your Eyes on the Lane: Real-time Attention-guided Lane Detection” “M3DSSD: Monocular 3D Single Stage Object Detector” “PointPillars: Fast Encoders for Object Detection from Point Clouds” “Joint 3D Proposal Generation and Object Detection from View Aggregation” ”Seeing Through Fog: Deep Multimodal Sensor Fusion in Unseen Adverse Weather“ “Fast and Furious: R-T E2E 3D Detection, Tracking & Motion Forecasting with a Single Cnn”2)地图定位:车辆定位中基于语义地图的方法,在语义目标提取也是采用深度学习模型,甚至语义地图的制作也是如此,目前感兴趣的地图更新(或者在线地图)多半需要检测语义目标。定位的后端也可以是数据驱动的解决,包括全局定位和相对定位,最近SLAM和深度学习的结合工作也如火如荼进行。 “LCDNet: Deep Loop Closure Detection andPoint Cloud Registration for LiDAR SLAM” “DeepSFM: Structure From Motion Via DeepBundle Adjustment” “HDMapNet: An Online HD Map Construction and Evaluation Framework”3)预测:障碍物的轨迹预测现在已经是自动驾驶发展至今的重点之一,现在重要性可以说是高于感知。如何建模智体行为、如何建模智体之间的交互和轨迹预测的动作多模态性,自然最佳方式是采用数据来训练。另外,感知-预测结合解决也是需要大量数据训练去得到合理的模型。 “Learning Lane Graph Representations for Motion Forecasting” “PnPNet: End-to-End Perception and Prediction with Tracking in the Loop” “Deep Multi-Task Learning for Joint Localization, Perception, and Prediction” “TNT: Target-driven Trajectory Prediction”4)规划:规划问题可以是传统的规则方法,也可以是强化学习或者模仿学习,其中强化学习也需要数据学习惩罚/奖励和策略。目前人们关心规划的地域化和个性化问题,这个比起感知的类似问题解决起来更加困难,比如激进还是保守地进行换道超车和并道汇入。最近有讨论合并预测和规划的解决方法,甚至包括地图定位一起建模,这个没有数据的“喂养”是很难成立的。 “DSDNet: Deep Structured self-Driving Network” “End-to-end Interpretable Neural Motion Planner” “MP3: A Unified Model to Map, Perceive,Predict and Plan” “Probabilistic Anchor Trajectory Hypotheses For Behavior Prediction” “VectorNet: Encoding HD Maps and Agent Dynamics From Vectorized Representation” “Deep Imitation Learning for AV in Generic Urban Scenarios with Enhanced Safety” “Perceive, Predict, and Plan: Safe Motion Planning Through Interpretable Semantic Rep”5)控制:应该说,控制的传统方法相对成熟,不过并不是说数据驱动就没有价值,实际上规划和控制的确集成在一起建模也是大家感兴趣的领域,前面提到的强化学习和模仿学习同样是不错的解决手段。 “A Fast Integrated Planning and Control Framework for AV via Imitation Learning”“Deep Imitative Models For Flexible Inference, Planning, And Control”6)传感器预处理:在进入感知模块之前,传感器的数据处理,比如污染检测、修补、去噪和增强等,传统的方法也会被数据驱动的机器学习方法取代。 “ZeroScatter: Domain Transfer for Long Distance Imaging and Visionthrough Scattering Media” 7)模拟仿真:模拟仿真需要对车辆/行人、传感器、交通环境和道路环境建模,有时候无法直接获得逼真的合成模型,特别是实际发生的交通事件,有时候不得不采用真实传感器数据来建模合成。下图是GAN-based的雨夜图像合成方法。 “ForkGAN: Seeing into the Rainy Night”
其实AWS的机器学习平台本身也提供了数据标注工具Amazon SageMaker Ground Truth。 如图是微软开源标注工具VOTT(Video Object Tagging Tool): 标注工具可以是全自动、半自动和手工等3类。比如人工标注工具:摄像头图像LabelMe和激光雷达点云PCAT。还有半自动标注工具:摄像头CVAT、VATIC,激光雷达3D BAT、SAnE,图像点云融合Latte。 自动标注工具:基本没有开源(商用也没有吧)的工具可用。 这里有一些自动标注方面的论文: Beat the MTurkers: Automatic Image Labeling from Weak 3D SupervisionAuto-Annotation of 3D Objects via ImageNet Offboard 3D Object Detection from Point Cloud Sequences这里是Nvidia在会议报告中给出的端到端标注流水线:它需要人工介入 在这里顺便提一下“数据可视化”的问题,各种传感器数据除了标注,还需要一个重放、观察和调试的平台。如图是Uber提供的开源可视化工具 Autonomous Visualization System (AVS): 其中”XVIZ“是提出的自动驾驶数据实时传输和可视化协议: 另外,“streetscape.gl“是一个可视化工具包,在XVIZ 协议编码自动驾驶和机器人数据。它提供了一组可组合的 React 组件,对 XVIZ 数据进行可视化和交互。
4 大型模型训练平
模型训练平台,主要是机器学习(深度学习)而言,前面亚马逊AWS提供了自己的ML平台SageMaker。我们知道最早有开源的软件Caffe,目前最流行的是Tensorflow和Pytorch(Caffe2并入)。 Tensorflow Pytorch在云平台部署深度学习模型训练,一般采用分布式。按照并行方式,分布式训练一般分为数据并行和模型并行两种。当然,也可采用数据并行和模型并行的混合。模型并行:不同GPU负责网络模型的不同部分。例如,不同网络层被分配到不同的GPU,或者同一层不同参数被分配到不同GPU。 数据并行:不同GPU有模型的多个副本,每个GPU分配不同的数据,将所有GPU计算结果按照某种方式合并。 模型并行不常用,而数据并行涉及各个GPU之间如何同步模型参数,分为同步更新和异步更新。同步更新等所有GPU的梯度计算完成,再计算新权值,同步新值后,再进行下一轮计算。异步更新是每个GPU梯度计算完无需等待,立即更新权值,然后同步新值进行下一轮计算。 分布式训练系统包括两种架构:Parameter Server Architecture(PS,参数服务器)和Ring -AllReduce Architecture(环-全归约)。 如下图是PS结构图: 这个图是Ring AllReduce的架构图: Pytorch现在和多个云平台建立合作关系,可以安装使用。比如AWS,在AWS Deep Learning AMIs、AWS Deep Learning Containers和Amazon SageMaker,都可以训练Pytorch模型,最后采用TorchServe进行部署。 Pytorch提供两种方法在多GPU平台切分模型和数据:
DataParallel
distributedataparallel
DataParallel更易于使用。不过,通信是瓶颈,GPU利用率通常很低,而且不支持分布式。DistributedDataParallel支持模型并行和多进程,单机/多机都可以,是分布训练。 PyTorch 自身提供几种加速分布数据并行的训练优化技术,如 bucketing gradients、overlapping computation with communication 以及 skipping gradient synchronization 等。 Tensorflow在模型设计和训练使用也方便,可以使用高阶 Keras API;对于大型机器学习训练任务,使用 Distribution Strategy API 在不同的硬件配置上进行分布式训练,而无需更改模型定义。 其中Estimator API 用于编写分布式训练代码,允许自定义模型结构、损失函数、优化方法以及如何进行训练、评估和导出等内容,同时屏蔽与底层硬件设备、分布式网络数据传输等相关的细节。 tf.distribute.MirroredStrategy支持在一台机器的多个 GPU 上进行同步分布式训练。该策略会为每个 GPU 设备创建一个副本。模型中的每个变量都会在所有副本之间进行镜像。这些变量将共同形成一个名为MirroredVariable的单个概念变量。这些变量会通过应用相同的更新彼此保持同步。 tf.distribute.experimental.MultiWorkerMirroredStrategy与MirroredStrategy非常相似。它实现了跨多个工作进程的同步分布式训练,而每个工作进程可能有多个 GPU。与MirroredStrategy类似,它也会跨所有工作进程在每个设备的模型中创建所有变量的副本。 tf.distribute.experimental.ParameterServerStrategy支持在多台机器上进行参数服务器PS训练。在此设置中,有些机器会被指定为工作进程,有些会被指定为参数服务器。模型的每个变量都会被放在参数服务器上。计算会被复制到所有工作进程的所有 GPU 中。(注:该策略仅适用于 Estimator API。)
5 模型测试和检验
模型的测试和检验可以分成多种方式: 一是仿真测试检验。建立仿真测试环境,比如开源的一些软件平台: CarlaAirSim LGSVL 还有一些成熟的商用软件,也可以构建仿真测试环境:Prescan和VTD。存在一些仿真子模块,比如开源的交通流仿真方面SUMO,商用的动力学仿真方面CarSim、Trucksim和Carmaker等。测试方式包括模型在环(MIL)、软件在环(SIL)、硬件在环(HIL)和整车在环(VIL)等。传感器的仿真,特别是摄像头的图像生成,除了图形学的渲染方式,还有基于机器学习的方式。 这里列出Uber ATG发表的一系列仿真建模论文: LiDARsim: Realistic LiDAR Simulation by Leveraging the Real WorldS3: Neural Shape, Skeleton, and Skinning Fields for 3D Human ModelingSceneGen: Learning to Generate Realistic Traffic ScenesTrafficSim: Learning to Simulate Realistic Multi-Agent BehaviorsGeoSim: Realistic Video Simulation via Geometry-Aware Composition for Self-DrivingAdvSim: Generating Safety-Critical Scenarios for Self-Driving Vehicles 另外谷歌Waymo最近推出的传感器仿真工作:SurfelGAN: Synthesizing Realistic Sensor Data for Autonomous Driving二是封闭场地的实车测试检验。各大车企都有自己的测试基地,现在自动驾驶方面也可使用。其开销远大于仿真系统。 谷歌waymo测试场三是开放场地的测试检验。现在好多L4级别的自动驾驶,比如无人出租车/无人卡车/无人送货,都在做这种政府批准的实际驾驶实验区测试。这种测试,必要时候安全员的接管或者遥控接管,都是需要花费大量投入的。 GM的自动驾驶公司Cruise在旧金山测试最后是用户的测试检验。这个是特斯拉特有的影子模式,以及FSD beta版本测试的志愿者模式。特斯拉的“Operation Vacation”模式 如图是英伟达报告描述的车队级别的模型部署闭环:
“Pseudo-label: The simple and efficient semi-supervised learning method for deep neural networks”
“Mean teachers are better role models: Weight-averaged consistency targets improve semi-supervised deep learning results“
“Self-training with Noisy Student improves ImageNet classification“
最近出现一些新实例方法: Unbiased Teacher for Semi-Supervised Object DetectionPseudoseg: Designing Pseudo Labels For Semantic SegmentationSemantic Segmentation of 3D LiDAR Data in Dynamic Scene Using Semi-supervised LearningST3D: Self-training for Unsupervised Domain Adaptation on 3D Object Detection3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection7)自监督学习 自监督学习(self supervised learning)算是无监督学习的一个分支,其目的是恢复,而不是发现。自监督学习基本分为:生成(generative)类, 对比(contrastive)类和生成-对比(generative-contrastive)混合类,即对抗(adversarial)类。 自监督使用借口任务(pretext task)来学习未标记数据的表示。借口任务是无监督的,但学习的表示通常不能直接给下游任务(downstream task),必须进行微调。因此,自监督学习可以被解释为一种无监督、半监督或自定义策略。下游任务的性能用于评估学习特征的质量。 一些著名的自监督学习方法有:
“SimCLR-A Simple framework for contrastive learning of visual representations“
“Momentum Contrast for Unsupervised Visual Representation Learning“
“Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning“
“Deep Clustering for Unsupervised Learning of Visual Features“
“Unsupervised Learning of Visual Features by Contrasting Cluster Assignments“
注意最近的一些新方法: DetCo: Unsupervised Contrastive Learning for Object DetectionPointContrast: Unsupervised Pre-training for 3D Point Cloud UnderstandingMonoRUn: Monocular 3D Object Detection by Reconstruction and Uncertainty PropagationWeakly Supervised Semantic Point Cloud Segmentation: Towards 10x Fewer Labels8)少样本/零样本学习 零样本学习(Zero-shot learning,ZSL)旨在识别在训练期间可能未见过实例的目标。虽然大多数ZSL方法都使用判别性损失(discriminative losses)进行学习,但少数生成模型(generative models)将每个类别表示为概率分布。 对于未见类(unseen classes),ZSL除了无法访问其视觉或辅助信息的inductive设置之外,transductive方法无需访问标签信息,直接用已见类(seen classes)和未见类一起的视觉或语义信息。 ZSL属于迁移学习(TL),源特征空间为训练实例,目标特征空间为测试实例,二者特征空间一样。但对于已见类和未见类,标签空间是不同的。 为了从有限的监督信息中学习,一个新的机器学习方向称为少样本学习 (Few-Shot Learning ,FSL)。基于如何使用先验知识,FSL可分为三个类:1)用数据先验知识来增强监督经验,2)通过模型先验知识约束假设空间,和3)用算法先验知识改变假设空间中最佳参数的搜索方式。 FSL 可以是监督学习、半监督学习和强化学习(RL),取决于除了有限的监督信息之外还有哪些数据可用。许多 FSL 方法是元学习(meta learning)方法,以此作为先验知识。 最近的一些实例方法: Don’t Even Look Once: Synthesizing Features for Zero-Shot DetectionZero-Shot Semantic SegmentationZero-Shot Learning on 3D Point Cloud Objects and BeyondFew-Shot Object Detection and Viewpoint Estimation for Objects in the WildSelf-Supervised Few-Shot Learning on Point CloudsFew-shot 3D Point Cloud Semantic Segmentation9)持续学习/开放世界 持续学习( continual learning)可以不断积累不同任务得到的知识,而无需从头开始重新训练。其困难是如何克服灾难遗忘(catastrophic forgetting)。 如图是持续学习的方法分类:经验重放(ER)、正则化和参数孤立三个方向。开放集识别(Open set recognition,OSR),是在训练时存在不完整的世界知识,在测试中可以将未知类提交给算法,要求分类器不仅要准确地对所见类进行分类,还要有效处理未见类。开放世界学习(Open world learning)可以看作是持续学习的一个子任务。 以下给出最近的一些实例方法: Lifelong Object DetectionIncremental Few-Shot Object DetectionTowards Open World Object DetectionOpenGAN: Open-Set Recognition via Open Data GenerationLarge-Scale Long-Tailed Recognition in an Open World数据闭环的关键是数据,同时采用数据驱动的训练模型是基础。决定了整个自动驾驶迭代升级系统的走向是: