编辑推荐: |
本文主要对数据闭环各个组成部分进一步讨论
:训练数据标注工具,大型模型训练平台,模型测试和检验,希望对您的学习有所帮助。
本文来自于汽车电子与软件
,由火龙果软件Alice编辑、推荐。 |
|
本文为系列文章,系列目录:
如何打造自动驾驶的数据闭环?(上)
如何打造自动驾驶的数据闭环?(中)(本篇为中篇)
如何打造自动驾驶的数据闭环?(下)
3 训练数据标注工具
其实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 Supervision “
“ Auto-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 模型测试和检验
模型的测试和检验可以分成多种方式:
一是 仿真测试检验 。建立仿真测试环境,比如开源的一些软件平台:
Carla
AirSim
LGSVL
还有一些成熟的商用软件,也可以构建仿真测试环境:Prescan和VTD。存在一些仿真子模块,比如开源的交通流仿真方面SUMO,商用的动力学仿真方面CarSim、Trucksim和Carmaker等。测试方式包括 模型在环(MIL)、软件在环(SIL)、硬件在环(HIL) 和 整车在环(VIL) 等。传感器的仿真,特别是摄像头的图像生成,除了图形学的渲染方式,还有基于机器学习的方式。
这里列出Uber ATG发表的一系列仿真建模论文:
“LiDARsim: Realistic LiDAR Simulation by Leveraging the Real World“
”S3: Neural Shape, Skeleton, and Skinning Fields for 3D Human Modeling“
”SceneGen: Learning to Generate Realistic Traffic Scenes“
”TrafficSim: Learning to Simulate Realistic Multi-Agent Behaviors“
“AdvSim: 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”模式
如图是英伟达报告描述的车队级别的模型部署闭环:
|