前段时间百度自动驾驶事业部杨凡对Apollo数据开放平台进行了介绍,介绍内容大纲如下:
Apoll能力开放简介
Apoll的“云+端”研发迭代新模式
数据开放平台与训练平台实战
本文的大部分内容转载于微信群的文字交流,最终版权归百度和AI前线所有。本想等AI前线发布后转载,可是AI前线迟迟没有发布,最近读者朋友们纷纷留言想看Apollo数据开放平台的相关内容,为了让热爱apollo的开发者小伙伴在第一时间了解进度,这里就不等A前线发布了,我做了一个整理和总结(内容大部分来源于杨老师的技术分享),如下。
Apoll能力开放简介
先来看第一部分,Apollo能力开放简单介绍:
先向大家介绍一下百度做自动驾驶的背景。就像百度总裁COO陆奇在CES大会上讲的,可能不少朋友已经了解到了——百度已经是一家AI公司。 我们可以看到科技大潮的演进,已经从命令行、客户端服务器、互联网、移动互联网一路走来,进入到了AI时代。 在百度AI开放生态战略中,体系分成云和端,支撑的云技术是智能云和百度大脑,而端的输出就是自动驾驶Apollo生态和唤醒外物的DuerOS生态。
同时更重要的,更振奋人心的是AI把移动互联网带入一个全新的时代,我们把它叫做新移动。 在这个新移动时代手机有很强的感知能力,有更多的AI基产能力,每个手机都能听、能看、能说、能学习、能懂用户。百度的核心产品,手机百度,爱奇艺等等,将充分利用这新的能力,全面推进新的技术和产品来引领新一代的移动时代的用户体验。特别是手机百度,手机百度将把搜索和个性化有机融合在一块,打造新一代的更懂用户的体验。
Apollo生态是百度AI重要的、最先落地的生态之一。
自4月19号宣布开放后,收到很多伙伴的反馈,其核心总结为Apollo宣言。自动驾驶行业正在快速走向未来,而最大的痛点在于技术壁垒太高,每个企业需要技术与人力的多年积累,才可以进入实质的研发。百度起步较早,有将近4年的技术积累,投入较早,将把能力开放给每一个合作伙伴,从0到1,很快进入到无人驾驶的研发,从而提高无人驾驶行业的创新速度,避免重复造轮子。大家都把精力放在更有效的创新上。共享资源,合作伙伴使用Apollo技术资源,拿来即用;同时,每个合作伙伴,都可以贡献资源,贡献得越多,得到的越多。Apollo受益,合作伙伴更受益。加速创新:数据加创新,汇集数据资源,公里数,覆盖的场景数,以后将远远大于任何一个封闭的体系持续共赢:百度的商业模式,基于百度的核心能力。能力与合作伙伴互补,Apollo将是汽车工业的里程碑,Apollo将产生核心的影响力。
上图是Apollo开放路线图。Apollo从2017年4月份宣布开放计划,到7月份发布1.0,9月份发布1.5,2018年1月的CES发布2.0,迭代与发布速度非常快。 Apollo Roadmap可以看到,Apollo开放由两部分构成,开放能力和开放资源。 在2017年7月1.0中开放封闭场地循迹自动驾驶能力和资源,在9月1.5中开放固定车道自动驾驶能力和资源,在2018年1月2.0中开放简单城市路况自动驾驶能力和资源,之后会在2018、2019、2020年逐步开放特定区域高速和城市道路自动驾驶能力和资源,高速和城市道路和自动驾驶Alpha版,并最终到达高速和城市道路与全路网自动驾驶能力和资源。关于开源框架的详解可以参考前几篇的文章<深度剖析Apollo自动驾驶平台>,<解析百度Apollo 2.0代码>。
Apoll的“云+端”研发迭代新模式
智能自动驾驶汽车需要一颗聪明的车载大脑。我们在自己的研发中一路探索过来,智能汽车的“云+端”研发迭代新模式是我们对于加速自动驾驶汽车研发效率提出的解决办法。我们在车辆上积累海量的数据。 把这些积累的数据用云端的服务器集群高效地生成人工智能的模型,也就是车辆大脑。 把汽车大脑更新到车辆上,为车辆赋予自动驾驶的能力。
我们在自己研发过程中发现,研发L4自动驾驶量产车需要用非常复杂的算法策略解决非常复杂的场景。 根据兰德公司报告,量产需积累100亿公里自动驾驶里程经验,100辆车7*24小时跑上百年;如果是传统的直接在车端研发、车端调试的效率是不够的。 所以我们提出的解决办法是通过“云+端”的研发迭代新模式提高研发效率。我们非常高兴向Apollo生态分享这种模式。
- 自动驾驶大数据部分:
自动驾驶数据可以分为四大类: 自动驾驶车辆产生的数据首先是原始数据。主要是传感器数据、车辆自身数据、驾驶行为数据等。这些数据的特点是数据量极大、类型多样、以非结构化半结构化数据为主。无论对存储、传输、处理都构成比较大的挑战。 为了在深度学习中使用数据,我们还需要大量标注数据。主要有红绿灯数据集,障碍物数据集(2D、3D),语义分割数据集,自由空间数据集,行为预测数据集等等。 为了刻画自动驾驶行为,我们还需要将数据抽象成逻辑数据。主要是完美感知数据,环境抽象数据,车辆动力学模型等。 最后,我们会用为仿真构建仿真数据,主要是参数模糊化数据,三维重建数据,互动行为数据等。
- 自动驾驶数据平台架构:
数据平台是我们支撑智能汽车的“云+端”研发迭代新模式的核心平台。 由数据采集与传输,自动驾驶数据仓库,自动驾驶计算平台三个部分构成。 首先是数据采集与传输部分。使用Data-Recorder会按Apollo数据规范产生,完整的、精确记录的数据包,可以完成问题复现,也同时完成数据积累。通过传输接口,可以将数据高效地传输到运营点和云集群中。 接着是自动驾驶数据仓库部分,会将全部海量数据成体系地组织在一起,快速搜索,灵活使用,为数据流水线和各业务应用提供数据支撑。 自动驾驶计算平台部分,基于云资源异构计算硬件提供超强算力,通过细粒度容器调度提供多种计算模型,来支撑起各业务应用。如训练平台、仿真平台、车辆标定平台等等。
数据开放平台与训练平台实战
数据平台概要
- Apollo数据集:
Apollo开放资源数据集分为以下三大部分: 仿真数据集,包括自动驾驶虚拟场景和实际道路真实场景; 演示数据集,包括车载系统演示数据,标定演示数据,端到端演示数据,自定位模块演示数据; 标注数据集,包括6部分数据集:激光点云障碍物检测分类,红绿灯检测,Road Hackers,基于图像的障碍物检测分类,障碍物轨迹预测,场景解析;
除开放数据外,还配套开放云端服务,包括数据标注平台,训练学习平台以及仿真平台和标定平台,为Apollo开发者提供一整套数据计算能力的解决方案,加速迭代创新。
- Apollo训练平台:
我们还通过Apollo训练平台为每一个数据集提供类配套的计算能力。 训练平台的特色是: 通过Docker+GPU集群,提供提供与车端的一致硬件计算能力。 集成多种框架,提供完整的深度学习解决方案。 通过交互式可视化结果分析,方便算法调试优化。
- 云端开放平台架构逻辑介绍:
我们在自动驾驶的算法开发中,最大的痛点之一就是需要对海量数据集,反复尝试。我们通过将深度学习算法的研发流程(开发、训练、验证、调试)在云端实现,可以在充分利用云端大量计算资源的同时,将数据的流动仅在云端的服务器内完成,从而大幅提高算法研发效率。具体来说,首先开发者在本地开发机中基于Docker开发算法,并部署依赖环境。 接着将开发好的环境推到云端的私有Docker Repository中。 接下来在平台上挑选数据集,发起训练任务。Apollo训练平台的云计算调度就会将任务调度到计算集群上执行。这个过程中,在云集群的内部,开发者的程序使用数据获取接口,获得自动驾驶数据仓库中的数据集。最终由业务管理框架将执行过程、评估的结果和Model返回给可视化平台,完成可视化的调试。
具体怎么操作?接下来,我将介绍数据平台的实际操作。 打开Apollo的官网apollo.auto,可以看到首页。 点击Github可以查看Apollo车端开放能力的源代码。 在顶部菜单栏的“开发者”菜单中,选择“数据平台”即可进入Apollo数据开放平台。推荐使用PC打开使用,效果更佳。
在Apollo数据开放平台的页面右上角,有登录菜单,点击后登陆百度帐号,会简化之后的使用流程。
从上图可以看出数据开放平台的首页由几个小节构成,分别是仿真场景数据、标注数据、演示数据、相关产品与服务、上传我的数据。 开发者可以直接使用Apollo已经开放的数据,也可以通过Apollo的Data-Recorder记录数据上传到云上使用。 通过选择特定数据,可以进入特定数据的应用。 开发者可以在标定平台中标定车辆参数,通过上传数据,申请数据加工,使用数据标注服务,在训练平台中训练Model,将前几步应用平台的结果合并到Github的Apollo代码中,将编译结果或源码提交到仿真平台中完成评估,这样就通过“云+端”完成了自有车载系统的研发迭代。
仿真场景数据实战
首先,可以看到仿真场景数据集。仿真场景数据包括人工编辑以及真实采集的场景,覆盖多种路型、障碍物类型以及道路环境,同时开放云端仿真平台,支持算法模块在多场景中并发在线验证,加速算法迭代速度。点击两个仿真数据集下的“立即使用”按钮,可以进入到仿真场景数据集详情页。
仿真场景数据的详情页中,可以进一步通过条件筛选,查看场景的细节。点击右上角的仿真平台按钮,可以进入仿真平台。
在打开的仿真平台中,可以以默认Apollo模块运行仿真场景,也可以提交自己的自动驾驶系统运行仿真场景。Apollo仿真的具体使用,会有单独分享,这里由于时间关系就不再具体展开了。
标注数据
接下来是标注数据。 标注数据是为满足深度学习训练需求,经人工标注而生成的数据,目前我们开放了多种标注数据,同时在云端配套提供相应的计算能力,供开发者在云端训练算法,提升算法迭代效率。
Apollo开放了6个标注数据集和社区中比较流行的算法,以便开发者调试云端环境:
激光点云障碍物检测分类,我们提供基于规则算法的Demo(传统机器学习); 红绿灯检测,我们提供基于SSD算法的Demo(Paddle、Caffe); Road Hackers,我们提供基于CNN+LSTM的Demo(Keras、TensorFlow); 基于图像的障碍物检测分类,我们提供基于SSD算法的Demo(Caffe); 障碍物轨迹预测,我们提供基于MLP算法的Demo(TensorFlow); 场景解析
下面我们看下“激光点云障碍物检测分类”,可以进入数据集详情页。其他的标注数据各位朋友可以自己查看。
在数据集详情页中,可以看到数据集的介绍。点击右上角有一排操作按钮。点击“查看使用手册”,可以查看更加详细的数据集说明和使用说明。这是“查看使用手册”后打开的PDF 链接:http://data.apollo.auto/static/pdf/lidar_obstacle_label.pdf 点击样例数据,可以下载少量的样例数据,具体理解数据格式。点击“申请使用”,可以申请在云端使用数据集中的大量数据。
这是点击“申请使用”后弹出的对话框。 当前我们针对科研机构,企业单位开放云端计算能力,即您可以在线使用大量标注数据进行模型训练,并通过API访问开放数据。在您申请后,稍后会有Apollo商务负责人与您联系。
训练平台实战
在申请通过后,“申请使用”按钮会变成“在线使用”,点击后会进入Apollo训练平台的新建任务(Apollo训练平台有着较高的安全校验机制。初次使用需要设定云属性和联系方式,并签订使用协议书;当登录后过长时间未使用时,需要再次登录,在我们新建一个任务以前,我们先简单浏览一下训练平台的其他页面。 左侧的菜单栏有以下菜单:平台概览,任务管理中的任务列表、新建任务,入门指南,用户帮助、关于Apollo功能简单,我们就不展开了,下面着重介绍下前四项。
- 训练平台概览
平台概览页包含对训练平台整体的介绍。在训练平台,我们会开放大量级的数据,并配套提供相应的计算资源,供开发者在深度学习平台在线训练算法,致力于赋能每一位拥有较强软件、算法研发能力的合作伙伴,推动自动驾驶技术的普及。
- 任务列表
任务列表页中有个人拥有任务的列表。
- 入门指南
入门指南有Docker创建和算法开发的使用说明。 用户帮助中有一些常见问题的解答。 如果开发者有更多的问题,可以使用左下角的联系我们。也可以使用右上角的工单系统。接下来,就让我们按入门指南,以红绿灯检测为例,讲解一下深度学习算法的研发。在最上部显示的是为每个有权限的开发者分配的docker用户名和密码。接下来是流程概览:
步骤一:本地开发环境搭建
步骤二:Apollo demo镜像获取说明
步骤三:数据使用方法,接口规范
步骤四:提交镜像,提交任务,任务查看,结果查看
其中请参考相关任务对应的demo镜像中开源的代码,学习数据使用方法,编写自己的代码,写入镜像。
步骤一,为了搭建本地环境,可以下载VirtualBox对应的OVA镜像包,通过导入OVA创建一个预先配置好的虚拟机。
步骤二,Apollo官方demo镜像列表,镜像获取说明,我们挑选这个镜像(红绿灯检测paddle demo镜像)作为开发基础。
启动
docker sudo service docker start
登录仓库
sudo docker login apollo-docker.baidu.com
输入用户名和密码 (在页顶的红字中显示的Docker仓库用户名和密码)
username: … password: …
拉取镜像 以红绿灯检测paddle demo镜像为例
sudo docker pull apollo-docker.baidu.com/public/demo2.0:paddle_traffic_lights_detection
步骤三,平台数据使用方法,接口规范 参考相关任务对应的demo镜像中开源的代码,学习数据使用方法,编写自己的代码。
1.训练程序的启动入口为/admin/run_agent.sh,用户可以修改文件内容来控制训练程序的行为。平台以run_agent.sh结束状态来判断训练任务的状态;
2.任务运行时环境在/dataset_test/目录下有供测试使用的数据集,根据提交任务时选择的任务类型自动下载部署。
3.用户需要参考平台提供的demo镜像的入口(/admin/run_agent.sh)的实现来熟悉不同数据的使用方式;
点击数据工具使用,可以了解开发者在计算平台云端,通过Apollo训练工具下载和上传数据的方式。下面展开介绍下数据工具。
开发者可以使用以下三个接口程序,在自己的算法程序中动态获取数据、输出数据、输出日志、输出评测、输出图表、输出预测结果 apollo_data_get dataSetId outputPath [tag] [offset] [limit] apollo_data_put …
以红绿灯检测Demo算法为例,我们的Demo中提供了作者原本的Caffe版,以及PaddlePaddle版。有兴趣的朋友可以看下MIT的论文和作者在Github上的源码。
步骤四,提交镜像,提交任务,任务查看,结果查看。
使用以下命令提交Docker镜像到仓库中。以红绿灯检测demo镜像为例,修改镜像tag:
sudo docker tag apollo-docker.baidu.com/public/demo2.0:paddle_traffic_lights_detection apollo-docker.baidu.com/1f89aa012dc599ef8be90180b587c7e6/traffic_lights:paddle_traffic_lights_detection
进入镜像:
sudo docker run -it --privileged=true apollo-docker.baidu.com/1f89aa012dc599ef8be90180b587c7e6/traffic_lights:paddle_traffic_lights_detection /bin/bash
修改镜像内容如:在/admin/run_agent.sh路径下开发自己的算法程序,完成后exit退出容器,得到容器container_id :
sudo docker commit -m 'comments' container_id apollo-docker.baidu.com/1f89aa012dc599ef8be90180b587c7e6/traffic_lights:paddle_traffic_lights_detectionsudo docker push apollo-docker.baidu.com/1f89aa012dc599ef8be90180b587c7e6/traffic_lights:paddle_traffic_lights_detection
提交训练任务,进入到训练平台的新建任务中,填写任务信息后提交任务。
[图片上传失败...(image-6e9fab-1517140087913)]
在任务列表中可以查看自己的任务,点击任务的任务详情链接,可以进入任务详情查看任务执行状态和结果。
我们为开发者准备了任务信息、表格信息、图表、日志等基本信息,也提供了每一种数据类型的显示,如3D点云。
开发者可以在此页面了解到任务的执行情况、loss的收敛情况。页面加载时间随着数据量增长,可能需要一点加载时间。
演示数据实战
演示数据是为了配合车端代码,通过演示数据体验各模块的能力。
目前我们开放了多种演示数据,覆盖了车载系统演示数据、自定位、端到端数据等模块数据,旨在帮助开发者调试各模块代码,确保Apollo最新开放的代码模块能够在开发者本地环境运行成功,通过演示数据体验各模块的能力。
例如,下载车载系统演示数据,可以通过Github的apollo源码的编译执行步骤体验完整的Apollo车端能力。该演示数据集包含传感器数据,下载该数据集。按照QuickStart的说明,编译Apollo,使用rosbag play –l 命令播放该数据集演示即可。
数据上传实战
数据上传实战入口如下图所示:
开发者需要填写名称、设备、采集区域、场景属性信息。然后进行上传的时候我们提供三种数据上传方式,您可根据上传数据的大小以及宽带速度,选择合理的上传方式。
在线 < 5G时
客户端 < 1T时
线下磁盘提供 更大数据
综上所述,开发者可以在标定平台中标定车辆参数,通过上传数据,申请数据加工,使用数据标注服务,在训练平台中训练Model,将前几步应用平台的结果合并到Github的Apollo代码中,将编译结果或源码提交到仿真平台中完成评估,这样就通过“云+端”完成了自有车载系统的研发迭代。
推荐阅读: