这篇是系统层面的,就是融合了已有的方法,搭建了一个开源的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. 自动生成robot自动化测试用例

    背景:java项目使用swagger管理接口,随着需求的开发接口也有增加,要从swagger界面中去查找出新增的接口是件很费时,效率很低的事情. 适用情况: java项目且适用swagger管理接口 ...

  2. 超轻量级的c#版基于文件的日志记录工具,可定制输出格式,可指定日志文件

    这是我自己个人编写的日志记录,主要使用在只需要记录日志,偶尔到文件中查看一下日志记录的情况.我自己写的一些服务之类的是使用了这个的,代码很少,使用很简单. 第一步 搜索和安装我的Nuget包 搜索和安 ...

  3. LVS负载均衡(1)-- LVS概述及LVS网络模型

    目录 1. 负载均衡集群概述 2. LVS理论基础 2.1 LVS常用术语 2.2 LVS数据调度原理 2.3 LVS工作模型 2.3.1 NAT模型 2.3.2 DR模型 2.3.3 TUNNEL模 ...

  4. SpringBoot-RSA加密

    前言 最近由于工作业务的需要,需要对指定的字段信息进行非对称加解密:由于需要加密的内容过于庞大:自己执行程序会出现:Data must not be longer than 117 bytes 的异常 ...

  5. SQL Server实战六:T-SQL、游标、存储过程的操作

      本文介绍基于Microsoft SQL Server软件,实现数据库T-SQL语言程序设计,以及游标的定义.使用与存储过程的创建.信息查找的方法. 目录 1 计算1-100间所有可被3整除的数的个 ...

  6. angualr2+ 性能优化-trackBy

    1.使用trackBy提高性能 为什么使用trackBy进行性能优化,在平时的开发中,我们对数组的处理基本都是通过接口获取新的数组进行替换或push,但是在这个过程中,Angular不知道你是要做什么 ...

  7. 环境变量管理工具Modules的安装

    一.软件依赖tcl软件 (1)tcl下载地址:http://www.tcl-lang.org/software/tcltk/(2)编译安装 cd unix/ ./configure --prefix= ...

  8. ModelScope初体验

    使用环境:windows 11 前置条件:已安装 anaconda 参考文档:环境安装 step1:新建一个 conda 环境,命名为 modelscope conda create -n model ...

  9. 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分

    目录 介绍 使用代码 添加项目和项目状态处理 下载源文件 - 989.1 KB 介绍 这是一篇由多部分组成的文章的第三部分,演示了通过EntityFramework Core 2.1(EF)将C#en ...

  10. iOS 如何保持线程一直在运转

    1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...