论文阅读_自动驾驶(一)

cvpr 2023 best paper Planning-oriented Autonomous Driving[2212.10156] Planning-oriented Autonomous Driving (arxiv.org)

Planning-oriented Autonomous Driving

Motivation

为了执行广泛多样的任务,现代性方法要么为单个任务部署独立模型,要么设计具有独立头部的多任务范式。然而,他们可能会出现累积错误或任务协调不足

Contribution

将全栈驾驶任务集成在一个网络中。它经过精心设计,可以利用每个模块的优势,并从全局角度为代理交互提供互补的功能抽象。任务通过统一的查询接口进行通信,以便于彼此进行规划。我们在具有挑战性的nuScenes基准上实例化UniAD。通过广泛的消融,使用这种哲学的有效性被证明在所有方面都大大优于以前的技术状态。代码和模型是公开的。

(a) 我们遵循以规划为导向的哲学,对自动驾驶框架进行了新的展望,并证明了有效的任务协调的必要性,而不是独立设计或简单的多任务学习。

(b)介绍了UniAD,一个全面的端到端系统,可利用广泛的任务。启动的关键组件是将查询设计为连接所有节点的接口。因此,UniAD享有灵活的中间表示和交换多任务知识规划。

(c) 我们在现实场景的具有挑战性的基准上实例化UniAD。通过大面积消融,我们验证了我们的方法在各个方面都优于以前的技术

摘要

背景介绍

现代自动驾驶系统的特点是按顺序执行模块化任务,即感知、预测和规划.

为了执行多种多样的任务并实现高级智能,当代的方法要么是为单个任务部署独立的模型,要么是设计一个具有独立头部的多任务范例

但是,他们可能会出现累积性错误任务协调能力不足的问题。

本文工作

我们将重新审视感知和预测的关键组成部分,并对任务进行优先排序,使所有这些任务都有助于规划。

我们提出了统一自动驾驶(UniAD),这是一个将全栈驾驶任务整合到一个网络中的最新综合框架。它设计精巧,充分利用了每个模块的优势,并从全局角度为代理交互提供了互补的功能抽象。任务之间通过统一的查询界面进行交流,以促进彼此的规划工作

模型有效性(SOTA)

我们在具有挑战性的 nuScenes 基准上对 UniAD 进行了实例化。通过广泛的消融,我们证明了使用这种理念的有效性,在所有方面都大大优于以往的先进水平。

Intro

image-20231006172334738

大多数行业解决方案为每项任务独立部署独立模型,只要板载芯片的资源带宽允许.这样的设计虽然简化了各团队的研发难度,但由于优化目标的孤立性,它也承担着跨模块信息丢失、错误积累和功能错位的风险。

image-20231006172340449

一种更优雅的设计是将多种任务纳入多任务学习multi-task learning(MTL)范式,方法是将多个任务特定的头(head)插入一个共享的特征提取器中.

相当于保留网络的底部,更换网络的head用于特定任务

MTL在general vision,自动驾驶以及工业产品中使用很多.在MTL中,跨任务的共同训练策略可以利用特征抽象,它可以毫不费力地扩展到其他任务,并节省板载芯片的计算成本。这样的方案可能会导致不希望的“负转移”(迁移学习,微调模型)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
finetune_net = torchvision.models.resnet18(pretrained=True)
finetune_net.fc = nn.Linear(finetune_net.fc.in_features, 2) #更换输出层
nn.init.xavier_uniform_(finetune_net.fc.weight); # 初始化权重
# 如果param_group=True,输出层中的模型参数将使用十倍的学习率
def train_fine_tuning(net, learning_rate, batch_size=128, num_epochs=5,
param_group=True):
train_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(
os.path.join(data_dir, 'train'), transform=train_augs),
batch_size=batch_size, shuffle=True)
test_iter = torch.utils.data.DataLoader(torchvision.datasets.ImageFolder(
os.path.join(data_dir, 'test'), transform=test_augs),
batch_size=batch_size)
devices = d2l.try_all_gpus()
loss = nn.CrossEntropyLoss(reduction="none")
if param_group:
params_1x = [param for name, param in net.named_parameters()
if name not in ["fc.weight", "fc.bias"]]
trainer = torch.optim.SGD([{'params': params_1x},
{'params': net.fc.parameters(),
'lr': learning_rate * 10}],
lr=learning_rate, weight_decay=0.001)
else:
trainer = torch.optim.SGD(net.parameters(), lr=learning_rate,
weight_decay=0.001)
d2l.train_ch13(net, train_iter, test_iter, loss, trainer, num_epochs,
devices)
train_fine_tuning(finetune_net, 5e-5)

fine-tuning.ipynb - Colaboratory (google.com)

迁移学习

Transfer Learning的初衷是节省人工标注样本的时间,让模型可以通过已有的标记数据(source domain data)向未标记数据(target domain data)迁移。

负迁移指的是,在源域上学习到的知识,对于目标域上的学习产生负面作用

image-20231006172347353

相比之下,端到端自动驾驶的出现将感知、预测和规划的所有节点统一为一个整体。

image-20231006172352802

应确定先前任务的选择和优先级,以便于规划,该系统应以规划为导向,精心设计,涉及某些组件,以便很少有独立模型中的累积误差MTL方案中的负迁移

端到端的做法中,一种“白板(tabula-rasa)”做法是直接预测计划的轨迹,没有任何明确的感知和预测监督。虽然这样的方向值得进一步探索,但在安全保障和可解释性方面是不够的,特别是对于高度动态的城市场景。在本文中,我们倾向于另一个角度,并提出以下问题:对于可靠且以规划为导向的自动驾驶系统,如何设计有利于规划的管道?前面哪些任务是必需的?

一个直观的解决方案是感知周围的物体,预测未来的行为并明确计划一个安全的操作。当代方法提供了良好的见解并实现了令人印象深刻的性能。但是,以前的工作或多或少没有考虑某些组成部分让人想起以规划为导向的精神

为此,我们推出了UniAD,这是一个统一的自动驾驶算法框架,利用五个基本任务来实现安全可靠的系统。UniAD的设计理念是面向规划的。我们认为,这不是一堆简单的任务,需要简单的工程工作。一个关键组件是基于查询的设计来连接所有节点。与传统的边界框表示形式相比,查询受益于更大的感受域,以减轻上游预测的复合误差。此外,查询可以灵活地对各种交互进行建模和编码

Methodology

UniAD由四个基于transformer decoder-based的感知和预测模块组成,最后由一个规划器组成。查询 Q 扮演连接pipeline的角色,以对驱动方案中实体的不同交互进行建模。

image-20231006172400282

具体来说,将一系列多相机图像输入特征提取器,并通过BEVFormer中的现成BEV编码器将生成的透视图特征转换为统一的鸟瞰图(BEV)特征B.

也就是说,多机位图片通过特征提取器得到透视图特征,再利用BEVFormer中现成的BEV编码器编码得到统一的鸟瞰图特征.

在 TrackFormer 中,我们称为跟踪查询(track queries)的可学习嵌入从 B 查询agents的信息,以检测和跟踪agents。learnable embeddings从B查询信息

MapFormer 将地图查询作为道路元素(例如车道和分隔线)的语义抽象,并对地图进行全景分割.

通过上述表示代理和映射的查询,MotionFormer 捕获agents之间的交互,并映射和预测每个agents的未来轨迹。

由于每个代理的操作可以显著影响场景中的其他代理,因此此模块对所有考虑的代理进行联合预测。同时,我们设计了一个自我车辆查询来显式地建模自我车辆,并使其能够在这种以场景为中心的范式中与其他代理进行交互

OccFormer 使用 BEV 特征 B 作为查询,配备agent-wise知识作为键和值,并在保留agents实体的情况下预测多步骤的未来占用(occupancy)。

Planner利用来自MotionFormer 的自我车辆查询来预测规划结果,使自己远离OccForer预测的占领区域以避免碰撞

image-20231006172407503

Perception: Tracking and Mapping

感知:跟踪和映射

image-20231006172412512

TrackFormer:它可以联合执行检测和多目标跟踪 (MOT),而无需进行无差别的后处理。除了对象检测中使用的传统检测查询 之外,还引入了其他跟踪查询来跨帧跟踪代理.

具体来说,在每个时间步长内,初始化的检测查询负责检测首次感知到的新生agents,而跟踪查询则对前几帧中检测到的agents进行建模

检测查询和跟踪查询都通过关注 BEV 特征 B 来捕捉agents抽象。TrackFormer 包含 N 层,最终输出状态 Q~A~ 为下游预测任务提供 N~a~ 有效代理的知识。

除了对自我车辆(ego-vehicle)周围的其他agents进行编码查询外,我们还在查询集中引入了一个特定的自我车辆查询,以明确模拟自动驾驶车辆本身,并进一步用于规划.

image-20231006172418732

MapFormer:我们根据二维全景分割方法Panoptic SegFormer设计.我们将道路要素稀疏地表示为地图查询,以帮助下游运动预测,并对位置和结构知识进行编码。

我们将道路要素稀疏地表示为map queries,以帮助下游运动预测,并对位置和结构知识进行编码。在驾驶场景中,我们将车道、分隔线和交叉路口设置为 “物”,将可驾驶区域设置为 “物”。

MapFormer 也有 N 个堆叠层,每一层的输出结果都受到监督,只有最后一层的更新查询 Q~M~才会转发给 MotionFormer,以实现agents与地图之间的交互。

Prediction: Motion Forecasting

预测运动预测

这种模式只需一次前向传递就能在帧中生成多代理轨迹,从而大大节省了将整个场景与每个代理的坐标对齐的计算成本。通过分别从 TrackFormer 和 MapFormer 获取的动态代理 QA 和静态地图 QM 的高度抽象查询,MotionFormer 可以以场景为中心预测所有代理的多模态未来运动,即前 k 个可能的轨迹。

这种范式通过单次前向传递在帧中生成多智能体轨迹,这大大节省了将整个场景与每个智能体的坐标对齐的计算成本.通过分别从 TrackFormer 和 MapFormer 获取的动态agents Q~A~ 和静态map Q~M~ 的高度抽象查询,MotionFormer 可以以场景为中心预测所有agents 的多模态未来运动,即前 k 个可能的轨迹。

同时,我们将来自TrackPreer的自我车辆查询传递到MotionFormer 以吸引自我车辆与其他代理进行交互,同时考虑未来的动态。形式上,输出运动公式化为

其中 i 索引agents,k 索引轨迹模态,T 是预测范围的长度。

MotionFormer

它由 N 层组成,每层捕获三种类型的交互:agents-agents、agents-map和agents-goal point.

image-20231006172423971

利用多头交叉注意力和多头自注意力计算车与地图元素的交互

通过deformed注意力计算agent-goal的点注意力

x^l−1^ ~T~ 是前一层预测轨迹的最终值。

Motion queries

MotionFormer的每一层的输入q为motion query.

包括两个Q:由前一层生成的查询上下文 Qctx 和查询位置 Qpos。具体来说,Qpos整合了位置知识

Occupancy Prediction

由于agents知识的使用不足,他们很难预测所有agents的行为,这对于了解场景如何演变至关重要

为了解决这个问题,提出了OccFormer,在两个方面结合了场景级和agents级语义:(1)密集的场景特征通过精心设计的注意力模块获取agent级别的特征

(2) 通过代理级特征和密集场景特征之间的矩阵乘法轻松生成实例occ,而无需进行繁重的后期处理。

Planning

没有高清地图或者可以预测的路径需要高级命令引导路径.

将原始导航信号转为可学习的嵌入.

对BEV特征B进行plan query,使其感知周围环境,然后将其解码为未来的航路点

训练

首先,自动驾驶端到端的训练是很难且不稳定的,因为任务太多,各个任务之间又有依赖关系,因此不能直接训练,得益于UniAD的模块化设计,使得感知,预测等的模块化设计,使得UniAD可以解耦不同的模块,从而分阶段训练。

UniAD分两个阶段训练,首先联合训练感知部分(包括tracking和mapping模块)6个epochs,然后端到端地训练整个模型(包括感知,预测和规划模块)20个epochs。经验表明,两阶段训练更稳定。

Shared matching. 由于UniAD涉及instance-wise的建模,因此在感知和预测任务中需要将预测和gt配对。与DETR类似,在追踪和在线建图阶段引入二分匹配算法。对于tracking,来自检测queries的候选者与新生的gt对象匹配,来自track queries的预测继承了先前帧的分配。tracking模块中的匹配结果在motion会让occupancy节点中被重用,以在端到端的框架中对历史轨迹到未来运动的agent进行一致地建模。

-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道