【论文阅读】Pylot: A Modular Platform for Exploring Latency-Accuracy Tradeoffs in Autonomous Vehicles
参考与前言 resource
代码:https://github.com/erdos-project/pylot
论文地址:https://www.ionelgog.org/data/papers/2021-icra-pylot.pdf
这篇是系统层面的,就是融合了已有的方法,搭建了一个开源的AV研究平台(python),基本涵盖了整个无人驾驶的所有模块,正好拿来练一下熟悉程度
1. Motivation
近况:一般大家都把整个自动驾驶进行拆分成几个模块,以便进行错误分析 (problem-specific evaluation metrics),而本文也正是由此出发给大家提供一种便于进行模块化测试的框架
整个自动驾驶大框架
问题提出
问题提出:端到端的自动驾驶行为不太好进行错误分析,比如基于驾驶数据的KITTI和Cityspaces的数据集,只是静态结果比如准确率但是没法考虑整个模型的运行时间
所以,如何平衡 模块的延迟 与 其在离线数据集上的准确性之间对于安全关键应用程序(例如 AV)至关重要,其中 correctness function 与 算法准确性 及 其端到端运行时间 有关
问题解决:Pylot就是这样一个模块化的平台 供大家去评估自己的自身的模块latency and accurarcy,同时也可以关注下游的整个表现。
- 为啥没法考虑模型的运行时间?不是有算法运行时间的对比吗?是因为不是实时的数据?只是在bag包这种里面就不算吗
- 所以这个主要是说如果评估单独模块 应该放到整个框架下去评估的意思吗?
Contribution 贡献
一句话总结就是:提出了一个 模块化 开源 的自动驾驶平台,供大家使用,同时CARLA HD map的排名证明了 我们的平台效果很不错
截图至原文
这篇可以看成是怎么去写一篇比较系统级的论文的参考用语
2. Method
整个系统需要满足三个关键要求:模块化(modularity)、可移植(portability)、便于调试(debuggability)
2.1 系统要求
模块化 modularity
细节上都是在讨论pylot这个的通信方式和ROS Cyber有什么不同:
- ROS获得传感器消息后需要一个固定频率的Publisher,在Pub和Sub的模型中交换具有不同运行时的组件需要微调下游运算符调用其计算的频率
- Dataflow system允许开发人员在跨请求的流中同步数据到达时就callback进行调用。Pylot dataflow system 通过要求在这些流上发布的操作员在特定时间戳 [37]-[40] 的传出数据完成后发送特殊水印消息,来无缝地跨多个流同步数据。 dataflow system 对此类运行时可变性具有鲁棒性,并支持高度模块化的应用程序。
可移植 portability
不同仿真器:只需要修改相关传感器数据的接口和车辆控制指令即可
仿真与实车:
必须支持高吞吐量的数据的接收 → highthroughput processing of the data
- pylot 的高吞吐量、低延迟 dataflow系统,比ROS更好
底层系统根据它们的资源需求透明地调度这些算子跨机器的并行执行,并通过共享内存队列为并置模块提供零拷贝通信
此外,这种透明的调度和通信不需要任何代码更改,再加上用于遗留 ROS 代码的 shim 层,允许 Pylot 无缝和零碎地移植到不同的硬件平台。
便于调试 debuggability
这一点的申明主要是因为集成了carla leaderboard的scenario runner,也就是在carla里进行场景测试的功能包
而基于pylot的dataflow system 允许用户重播放相关场景,更偏于调试。这点挺棒的,因为carla官方只给出一个json文件,不给出具体整个画面记录 除非自己写...,json文件又特别简略,例如:
展开查看
"meta": {
"exceptions": [
[
"RouteScenario_16",
0,
"Failed - Agent got blocked"
],
[
"RouteScenario_17",
1,
"Failed - Agent got blocked"
],
[
"RouteScenario_18",
2,
"Failed - Agent got blocked"
],
[
"RouteScenario_20",
4,
"Failed - Agent got blocked"
],
[
"RouteScenario_21",
5,
"Failed - Agent got blocked"
],
[
"RouteScenario_22",
6,
"Failed - Agent got blocked"
],
[
"RouteScenario_23",
7,
"Failed - Agent got blocked"
],
[
"RouteScenario_24",
8,
"Failed - Agent got blocked"
],
[
"RouteScenario_25",
9,
"Failed - Agent got blocked"
]
]
},
同时这种确定性执行是通过对 watermark message 的接收执行计算来实现的 [38]、[39]、[45]。 这将整个 AV pipeline 的执行减少到 Kahn Process Network [46],从而保证了确定性。
另外,因为仿真世界里可以提供某些真实的数据,所以pylot也可以单独进行 单元测试检查等,体现便于调试这点
套娃了解一下ROS的shim layer是个啥
套娃 Kahn Process Network
2.2 模块实现
以下主要是介绍其无人驾驶系统的各个模块有什么样的方法
目标检测 Object Dectection
使用相机、激光雷达数据进行检测、定位目标等、车道线、红绿灯等。输出的消息由 ObstacleMessage定义:bounding box 和 由ML方法返回的 confidence score
主要用的Tensorflow object detection [28]:
- Faster-RCNN
- SSD
- EfficientDet,这是一个family models
对应代码位置:https://github.com/erdos-project/pylot/tree/master/pylot/perception/detection
目标追踪 Object Tracking
跟踪:estimates the bouding boxes of object over time,主要方案两种:
- tracking by detection,也就是使用检测的jieg
- detection-free tracking,只跟踪设定好的数量的物体
集成的库:
SORT [49]
轻量化,使用tracking by detection方案,假设是跟踪的物体是恒定速度的线性模型,然后用卡尔曼滤波来估计物体位置,随之基于检测的更新,用hungraian算法进行匹配bounding box
但是呢 这种方法虽然速度快,精度较低特别是在object occlusions or camera motion的情况
DeepSORT [50]
改进了前者的缺点,但是因为用到了CNN 所以实时性更新上 可能跟不上
DaSiamRPN [51]
detection-free tracking方案,通过incorporating 跟踪物体的外在apperance信息来改进了相关缺点,但是在执行CNN特征提取模型的运行时间还是比较大
它利用 siamese feature extraction network 来学习干扰器感知特征。 跟踪器依靠神经网络推理来跟踪对象,以检测时提供更准确的估计。
但是,“最佳”选择取决于具体情况。 例如,当运行时间很重要时,SORT 在紧急情况下表现最佳,而 DeepSORT 在常规驾驶情况下表现最佳,而 DaSiamRPN 在对少量对象(例如城市驾驶)要求高精度的场景中表现出色。
预测 Prediction
预测模块主要依赖于跟踪模块的结果,然后使用LiDAR扫描到的信息来进行预测。细节点就是收到boundingbox 然后从ObstacleTrajectoryMessage得到物体的id,然后再输出包含有过去和未来的物体轨迹信息的ObstaclePredictionMessage
实现了的方法:
线性规划模型 假定大家是恒定速度线性模型
R2P2 [10]
a state-of-the-art single-agent trajectory forecasting model which learns a distribution over potential future trajectories that is parameterized by a one-step policy using a gated recurrent unit, and attempts to optimize for both quality and diversity of samples.
为了将 R2P2 扩展到多agent设置,Pylot 通过将场景上下文和其他agent的过去轨迹旋转到自我车辆坐标系,在每个agent上都运行 R2P2
Multipath [52]
使用轻量级神经网络来获得场景的有用表示,然后为每个agent应用较小的网络特征来输出预测。 由于每个agent的计算可以分批进行,因此 Multipath 速度快但准确度较低,因为它无法明确考虑agent交互。 相比之下,Multiple Futures Prediction (MFP) [53] 联合建模agent行为,导致运行时间增加但预测更准确。
规划 Planning
规划模块的目标是产生一个安全、舒适和可行的轨迹,以解释当前和未来可能的环境状态。 为了实现这一点,Pylot 中的规划模块同步所有其他模块的输出以构建一个 World 表示,其中包含场景中所有agent的过去和未来轨迹,以及静态对象(如交通灯)的位置和状态, 交通标志等。 至关重要的是,这允许 Pylot 有选择地利用任何先前组件或模块的地面实况信息,并确定一组选定组件的准确性和系统整体运行时间。
规划模块由三个组件组成:路线规划器、行为规划器和运动规划器 (route, behavioral, and motion planners),后者对 AV 的舒适度 和 系统整体运行时间 较为重要。 因此,Pylot 为三大类运动规划器中的每一个提供了实现:
Graph-based search planners [5]
Hybrid A*,把整个configuration space 离散化成 graph,这样在低离散分辨率的情况下 可以非常快速的得到结果;但也正因为如此 对于分辨率的选择就变得至关重要了
Incremental search planners
RRT* [4],通过对 configuration space 进行采样而不是预先计算一组固定的 configuration node 来逐步构建路径。 它们不受初始 graph 构造的限制,因此能够在任何给定的计算时间内微调结果的准确性。
Trajectory generation planners
Frenet Optimal Trajectory [6], [57],构建一组候选路径,计算它们 碰撞、物理约束及相关cost。 虽然生成的路径通常比对应的路径更平滑,但如果在低离散分辨率,轨迹生成可能会生成不出可行的方案
控制 Control
当接收到planning模块的路径点和目标速度后,由控制模块来跟随这些路径点和保持目标速度,pylot实现了以下两个控制器
- PID
- MPC
当然开发者也可以在 motion planning and control 使用MPC来实现两者,同时也可以替换掉这些 使用端到端的方法去验证算法。
【论文阅读】Pylot: A Modular Platform for Exploring Latency-Accuracy Tradeoffs in Autonomous Vehicles的更多相关文章
- 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
- 【CV论文阅读】+【搬运工】LocNet: Improving Localization Accuracy for Object Detection + A Theoretical analysis of feature pooling in Visual Recognition
论文的关注点在于如何提高bounding box的定位,使用的是概率的预测形式,模型的基础是region proposal.论文提出一个locNet的深度网络,不在依赖于回归方程.论文中提到locne ...
- 【论文阅读】FaceBoxes- CPU Real-time Face Detector with High Accuracy
前言 参考 1. FaceBoxes_paper; 2. Faceboxes_github_tf; 3. 翻译: 4. 理解1: 5. 理解2: 完
- 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)
白翔的CRNN论文阅读 1. 论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...
- BITED数学建模七日谈之三:怎样进行论文阅读
前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...
- 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework
作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...
- Deep Reinforcement Learning for Dialogue Generation 论文阅读
本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...
- 论文阅读笔记 Word Embeddings A Survey
论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...
- 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)
今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...
- 论文阅读笔记 Improved Word Representation Learning with Sememes
论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...
随机推荐
- 微分流形Loring W. Tu section19 19.12 解答
微分流形Loring W. Tu section19 19.12 解答,当然咯我自己也不知道是否严谨正确,反正就是自己的思考与想法,简单一写,欢迎友好讨论. 19.12 对于任意的\(f \in C^ ...
- 模型评测-书生浦语大模型实战营学习笔记7&大语言模型12
大语言模型学习-12.模型评测 书生浦语大模型实战营学习笔记7 视频教程特别像广告,所以这篇博客参考了很多其他内容给大家参考,主要是下面几个页面: https://zhuanlan.zhihu.com ...
- LLM基础能力实现-书生浦语大模型实战营学习笔记2&大语言模型4
大语言模型-4.LLM基础能力实现 书生浦语大模型实战营学习笔记-2.LLM基础能力实现 本文包括第二期实战营的第2课内容.本来是想在笔记中给官方教程做做补充的,没想到官方教程的质量还是相当高的,跟着 ...
- Linux下的目录
FHS 因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰. 你能想象,你进入一个企业 ...
- snmpwalk命令详解
snmp安装 yum -y install net-snmp-libs net-snmp net-snmp-utils 系统镜像里面就有这些包.可yum安装 snmpwalk集合 snmpwalk + ...
- 开发人员必知的5种开源协议(GPL、LGPL、BSD、MIT、Apache License)
软件开源是许多软件企业需要关注的问题,不同的开源软件协议,对应不同的源代码使用限制.只有了解这些开源软件协议,才能更好地使用和回馈开源软件,否则就有可能触犯法律.今天介绍四种常见的开源软件协议: GP ...
- CSS——样式继承
CSS的样式表继承指的是,特定的CSS属性向下传递到子孙元素.总的来说,一个HTML文档就是一个家族,然后html元素有两个子元素,相当于它的儿子,分别是head和body,然后body和head各自 ...
- react 数据请求分层
封装一个接口请求类 数据模型 请求uri配置设置 数据统一存储于redux中,在本项目中创建一个store目录,此目录中就是redux仓库源 定义仓库入口 reducer methods方法 acti ...
- CF1184E1题解
CF11841E1 & blog 尽然想让第一条边最大且这条边在最小生成树中,那么这条边就需要尽量晚. 但是假如加上一条边 \(i\) 可以使 \(u_1\) 和 \(v_1\) 联通并且第 ...
- C#开发的目录图标更改器 - 开源研究系列文章 - 个人小作品
因为有一些项目保存在文件夹里,然后想着用不同的图标来显示该文件夹,但是Windows提供的那个修改文件夹的操作太麻烦,需要的操作太多(文件夹里鼠标右键,属性,自定义,更改图标,选择文件,选择图标,点击 ...