这篇是系统层面的,就是融合了已有的方法,搭建了一个开源的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也可以单独进行 单元测试检查等,体现便于调试这点

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的更多相关文章

  1. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  2. 【CV论文阅读】+【搬运工】LocNet: Improving Localization Accuracy for Object Detection + A Theoretical analysis of feature pooling in Visual Recognition

    论文的关注点在于如何提高bounding box的定位,使用的是概率的预测形式,模型的基础是region proposal.论文提出一个locNet的深度网络,不在依赖于回归方程.论文中提到locne ...

  3. 【论文阅读】FaceBoxes- CPU Real-time Face Detector with High Accuracy

    前言 参考 1. FaceBoxes_paper; 2. Faceboxes_github_tf; 3. 翻译: 4. 理解1: 5. 理解2: 完

  4. 论文阅读(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 ...

  5. BITED数学建模七日谈之三:怎样进行论文阅读

    前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...

  6. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  7. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  8. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

  9. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

  10. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

随机推荐

  1. Threading Programming Guide:One

    苹果支持的产生线程的方式 Operation Object 使用OperationQueue,具体可以参考:Concurrency Programming Guide GCD 使用诸如dispatch ...

  2. linux文件查找工具详解

    linux文件查找详解 目录 linux文件查找详解 1.linux文件查找工具 1.1 find命令详解 1.1.1 根据文件名查找 1.1.2 根据属主属组查找 1.1.3 根据文件类型查找 1. ...

  3. 设置WordPress文章关键词自动获取,文章所属分类名称,描述自动获取文章内容,给文章的图片自动加上AlT标签

    最近在优化网站,SEO优化标准:每一篇文章都要有关键词,关键词的个数为3到6个.每一篇文章都要有描述,描述的字数为汉字在70~80之间,在160个字符之间.每一篇文章的图片都要有Alt标签,自动给图片 ...

  4. mac升级node

    sudo npm cache clean -f //清除nodejs的cache sudo npm install -g n //使用npm安装n模块 npm view node versions / ...

  5. IPv6 — 综合组网技术

    目录 文章目录 目录 前文列表 IPv4v6 综合组网技术(转换机制) 双栈策略 隧道策略 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> ...

  6. IPv6 — 地址格式与寻址模式

    目录 文章目录 目录 前文列表 IPv6 的地址格式 站点前缀 地址生成方式 IPv6 地址的分类以及寻址模式 单播(Unicast)地址 Interface ID 全球唯一地址(Global Uni ...

  7. 自己动手实现一个轻量无负担的任务调度ScheduleTask

    至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简 ...

  8. 终于搞懂了!原来 Vue 3 的 generate 是这样生成 render 函数的

    前言 在之前的 面试官:来说说vue3是怎么处理内置的v-for.v-model等指令? 文章中讲了transform阶段处理完v-for.v-model等指令后,会生成一棵javascript AS ...

  9. 部署springboot+vue项目文档(若依ruoyi项目部署步骤)

    摘自:https://blog.csdn.net/Dreamboy_w/article/details/104389797 部署springboot+vue项目文档(若依ruoyi项目部署步骤)一:部 ...

  10. FLV 分析脚本

    一.需求 通过脚本,可以检查本地flv文件格式是否正确,可以打印每个Tag中的二进制内容 二.效果 可以看到VideoTag中开始处增加了一段SEI数据,并且可以看到部分字段,gameid.time. ...