VAD系列开启全新“多模态端到端自动驾驶革命”,将多模态概率规划推向新高度!

前言🪐

本文由VAD原作Bo Jiang(蒋博)博士梳理,站在原作视角,对VAD系列的两项工作都做了详细的介绍。
蒋博,华中科技大学Vision Lab博士研究生,师从刘文予教授和王兴刚教授,提出VAD, VADv2等算法,在nuScenes和Carla端到端自动驾驶任务上取得多次第一。

VAD系列论文信息:

VAD: Vectorized Scene Representation for Efficient Autonomous Driving

作者:

Bo Jiang, Shaoyu Chen*, Qing Xu, Bencheng Liao, Jiajie Chen, Helong
Zhou, Qian Zhang, Wenyu Liu, Chang Huang, Xinggang Wang*

项目主页:https://github.com/hustvl/VAD

VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning

作者:

Shaoyu Chen, Bo Jiang*, Hao Gao, Bencheng Liao, Qing Xu, Qian Zhang,
Chang Huang, Wenyu Liu, Xinggang Wang*

项目主页:https://hgao-cv.github.io/VADv2

VADv1:基于矢量场景表征的端到端自动驾驶

自动驾驶系统通常采用分阶段模块化的设计,即感知、预测、规划等模块相互解耦,独立优化。但对于模块化方案,模块间无法协同优化,存在误差累积,感知的漏检误检将会影响规划的安全性。近年来,端到端自动驾驶逐渐受到业界的关注。端到端方案基于数据驱动的方式优化整个系统,打通了各个模块的壁垒,并减少了繁琐的后处理,具有很高的研究价值。然而,之前的端到端方案往往基于栅格化的环境表征(如图1)。这种密集的表征不具备高层级的语义信息,并且需要较高的计算代价。

在ICCV 2023上,我们提出基于矢量化场景表征的端到端自动驾驶算法——VAD。VAD摈弃了栅格化表征,对整个驾驶场景进行矢量化建模(如图2),并利用矢量环境信息对自车规划轨迹进行约束。相比于之前的方案,VAD在规划性能和推理速度上具有明显的优势。

在这里插入图片描述
图1|栅格化场景表征©️【深蓝AI】

在这里插入图片描述
图2|矢量化场景表征©️【深蓝AI】

1. VAD架构——基于Transformer的端到端模型

在这里插入图片描述
图3|VAD模型框架©️【深蓝AI】

VAD的各个子模块都是基于统一的Transformer结构(如图3所示)。其实BEV Encoder用于编码输入的环视图像,并将其转化为鸟瞰图视角(BEV)下的特征图;Vectorzied Motion Transformer提取场景中的动态目标信息,实现动态目标检测和矢量化的轨迹预测;Vectorzied Map Transformer提取场景中矢量化的静态元素信息(如车道线,路沿和人行道);Planning Transformer以隐式的动静态场景特征作为输入,提取其中与驾驶决策规划相关的信息,并完成自动驾驶车辆的轨迹规划。另外在模型训练阶段,VAD基于矢量场景表征,对自车的规划轨迹进行矢量化约束,从而提升规划的安全性。

在这里插入图片描述
图4|基于矢量场景表征的规划约束©️【深蓝AI】

2. 基于矢量场景表征的规划约束

此前的工作大多采用各种后处理策略对规划轨迹进行优化,以提升规划安全性。例如,使用占据图预测结果对规划轨迹进行微调,从而使规划轨迹位于可行驶区域内。这种方法破坏了模型的端到端学习能力,另外后处理也会带来额外的计算开销,降低模型的推理速度。VAD完全摈弃了后处理策略,而是选择在训练阶段,使用驾驶先验知识优化规划表现,从而在不引入额外推理计算开销的前提下,提升了规划的安全性。

●自车-他车碰撞约束

基于场景中其他动态目标预测的矢量化轨迹和自车规划轨迹的碰撞约束。VAD将自车安全边界分解为横向和纵向的安全距离,当规划轨迹在任一方向与他车预测轨迹的距离小于指定的安全阈值时,则惩罚该轨迹,从而避免自车规划轨迹与他车预测轨迹相交。

●自车-边界越界约束

基于预测的矢量化边界线,VAD约束自车规划轨迹始终在可行驶区域内。当自车规划轨迹越出道路边界线时,则惩罚该轨迹。

●自车-道路方向约束

VAD基于预测的道路线方向,约束自车规划轨迹朝向与道路前进方向保持一致。当自车规划轨迹朝向与道路前进方向有较大差异时,则惩罚该轨迹。

3. VAD规划性能

VAD在nuScenes开环验证和CARLA闭环验证中均取得了state-of-the-art的规划性能。除此之外,相比之前的方案,大幅提升了模型的推理速度。

在这里插入图片描述
图5|nuScenes开环规划性能©️【深蓝AI】

在这里插入图片描述
图6|CARLA闭环规划性能©️【深蓝AI】

VAD初步探索了基于矢量化场景表征的端到端自动驾驶算法框架。如何建模驾驶决策中的不确定性和多模态特性,从而实现更鲁棒精准的规划决策表现,将在VADv2的工作中展开。

VADv2: 基于概率性规划的端到端自动驾驶

大语言模型(Large Languague Model)通过在互联网级别语料库上的预训练,学习到语法、语义和概念关系等高维知识,进而涌现通用智能。驾驶场景中同样存在着数量庞大并且源源不断产生的人类驾驶数据。从人类驾驶数据中学习拟人的驾驶策略,具备成熟的数据基础。但在算法层面,如何建模和训练,仍需进一步的探索。VADv1初步探索了基于矢量化场景表征的端到端自动驾驶算法框架。在VADv1的基础上,VADv2基于概率性规划,以数据驱动的范式从大量驾驶数据中学习端到端驾驶策略。

1. 概率性规划

与感知不同,规划中存在着更多的不确定性,对于同一场景,存在不同的合理的决策规划结果。环境信息到决策规划不存在明确的映射关系,因此学习拟人的驾驶策略极具挑战性。以往的基于学习的规划方法确定性地通过MLP回归出规划轨迹,无法应对环境信息和决策规划之间不明确的映射关系。同时基于神经网络输出的轨迹无法保证满足运动学约束,仍需要后端的轨迹优化。

VADv2采用概率性规划的方法,从大量的人类驾驶数据中,拟合每一时刻基于环境信息的自车轨迹概率分布,将问题转化为预测每一条轨迹和环境信息的相关性,从而应对规划中的不确定性。

在这里插入图片描述
图7|规划中的不确定性©️【深蓝AI】

2. 算法框架

在这里插入图片描述
图8|VADv2算法框架©️【深蓝AI】

如图8所示,VADv2以车载相机采集的流式图像序列作为输入。鉴于图像信息稀疏性,VADv2将图像信息转换为具有高层语义信息的tokens。具体地,VADv2基于MapTRv2从环视图像数据中提取地图物理层和逻辑层的map tokens,同时从图像中提取关于动态障碍物的agent tokens和交通信号灯的traffic element tokens。此外,由于在连续的动作空间上学习概率分布较为困难,VADv2将动作空间离散化,通过最远轨迹采样的方式从真实的轨迹数据中筛选出N条轨迹构建轨迹集合,用于表征整个动作空间。VADv2将轨迹通过正余弦编码方式编码为planning tokens。planning tokens基于堆叠的Transformer结构与包含环境信息的tokens交互,同时结合稀疏导航信息和自车状态信息,输出每一条轨迹的概率:

p ( a ) = M L P ( T r a n s f o r m e r ( E ( a ) , E e n v ) + E n a v i + E s t a t e ) p(a) = {\rm MLP (\rm Transformer}(E(a), E_{\rm env}) + E_{\rm navi} + E_{\rm state}) p(a)=MLP(Transformer(E(a),Eenv)+Enavi+Estate)
q = E ( a ) , k = v = E e n v q=E(a), k=v=E_{\rm env} q=E(a),k=v=Eenv
a = ( x 1 , y 1 , x 2 , y 2 , . . . , x T , y T ) ] a =(x_{\rm 1},y_{\rm 1},x_{\rm 2},y_{\rm 2},...,x_{\rm T},y_{\rm T})] a=(x1,y1,x2,y2,...,xT,yT)]
E ( a ) = C a t [ Γ ( x 1 ) , Γ ( y 1 ) , Γ ( x 2 ) , Γ ( y 2 ) , . . . , Γ ( x T ) , Γ ( y T ) ] E(a) = {\rm Cat}\Big[\Gamma(x_{\rm 1}), \Gamma(y_{\rm 1}),\Gamma(x_{\rm 2}),\Gamma(y_{\rm 2}),...,\Gamma(x_{\rm T}), \Gamma(y_{\rm T})\Big] E(a)=Cat[Γ(x1),Γ(y1),Γ(x2),Γ(y2),...,Γ(xT),Γ(yT)]
Γ ( p o s ) = C a t [ γ ( p o s , 0 ) , γ ( p o s , 1 ) , . . . , γ ( p o s , L − 1 ) ] \Gamma(pos) = {\rm Cat}\Big[\gamma(pos,0), \gamma(pos,1),...,\gamma(pos,L-1)\Big] Γ(pos)=Cat[γ(pos,0),γ(pos,1),...,γ(pos,L1)]
γ ( p o s , j ) = C a t [ c o s ( p o s / 10000 2 π j / L , s i n ( p o s / 10000 2 π j / L ] \gamma(pos,j) = {\rm Cat}\Big[{\rm cos}(pos/{10000}^{2\pi j/L},{\rm sin}(pos/{10000}^{2\pi j/L}\Big] γ(pos,j)=Cat[cos(pos/100002πj/L,sin(pos/100002πj/L]

在训练阶段,VADv2通过KL散度约束预测的概率分布和驾驶数据对应分布之间的一致性,并引入额外的场景约束进一步降低存在安全风险的轨迹的概率。在推理阶段,VADv2在每一个时刻从轨迹概率分布中采样一条高置信度的轨迹用于车辆控制。由于输出多模式的轨迹簇,VADv2也可以和基于优化或规则的规控架构结合,进行二阶段优化以及筛选过滤。

在这里插入图片描述
图9|CARLA闭环规划性能©️【深蓝AI】

在这里插入图片描述
图10|消融实验©️【深蓝AI】

3. 闭环验证

在CARLA仿真器上,VADv2能够长时间控车稳定地行驶,正确地响应交通信号灯,通过复杂路口,与其他车辆和行人交互,刹停避障等。同时,VADv2也在Town05 Benchmark上取得了显著优于其他方法的闭环性能(图9)。消融实验如图10所示,验证了各类token隐式表征和概率分布约束的有效性。更多闭环验证的可视化结果可以参考项目主页https://hgao-cv.github.io/VADv2。

总结与展望

VADv1提出了基于矢量化场景表征的端到端自动驾驶框架,在模型表现和效率上都取得了不错的表现;VADv2则进一步探索了对于驾驶决策多模态的建模学习方案,从而实现更精确鲁棒的规划表现。VADv2在CARLA仿真器上的闭环实验初步验证了该范式的可行性。

我们未来的研究方向是如何与现有的规控架构结合进一步提升系统的鲁棒性,以及在更加复杂的真实场景中展开验证。

参考文献:

[1] Jiang B, Chen S, Wang X, et al. Perceive, interact, predict: Learning dynamic and static clues for end-to-end motion prediction[J]. arXiv preprint arXiv:2212.02181, 2022.

[2] Liao B, Chen S, Wang X, et al. Maptr: Structured modeling and learning for online vectorized hd map construction. ICLR 2023.

[3] Liao B, Chen S, Zhang Y, et al. MapTRv2: An End-to-End Framework for Online Vectorized HD Map Construction[J]. arXiv preprint arXiv:2308.05736, 2023.

[4] Hu Y, Yang J, Chen L, et al. Planning-oriented autonomous driving. CVPR 2023.

[5] Li Z, Wang W, Li H, et al. Bevformer: Learning bird’s-eye-view representation from multi-camera images via spatiotemporal transformers. ECCV 2022.

[6] Hu S, Chen L, Wu P, et al. St-p3: End-to-end vision-based autonomous driving via spatial-temporal feature learning. ECCV 2022.

[7] Chitta K, Prakash A, Jaeger B, et al. Transfuser: Imitation with transformer-based sensor fusion for autonomous driving[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2022.

移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态👇
深蓝AI·赋能AI+智驾+机器人

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要批量清理多个WAV文件中的静音片段,可以使用Python中的文件操作和循环语句。以下是一种基于Python的实现VAD技术,批量清理多个WAV文件中的静音片段的方法: 1. 导入所需的库:例如pydub, webrtcvad等。 2. 使用os库列出所有待处理的WAV文件。 3. 使用pydub库加载每个WAV文件。 4. 将每个WAV文件转换为PCM数据。 5. 使用webrtcvad库检测PCM数据中的活动和静默部分。 6. 根据检测结果,将静默部分从PCM数据中删除。 7. 将处理后的PCM数据保存为WAV文件。 以下是一个简单的Python代码示例,可以实现VAD技术批量清理多个WAV文件中的静音片段: ``` import os from pydub import AudioSegment import webrtcvad # 定义参数 frame_duration_ms = 30 frame_size = int(frame_duration_ms * 16 / 1000) vad = webrtcvad.Vad() vad.set_mode(3) # 列出所有待处理的WAV文件 wav_files = [f for f in os.listdir() if f.endswith('.wav')] # 循环处理每个WAV文件 for wav_file in wav_files: # 加载音频文件 audio = AudioSegment.from_file(wav_file) # 将音频转换为PCM数据 pcm_data = audio.raw_data # 检测静默部分 active = [] start = 0 audio_length = len(pcm_data) sample_rate = audio.frame_rate while start < audio_length: end = min(start + frame_size, audio_length) frame = pcm_data[start:end] if vad.is_speech(frame, sample_rate): active.extend(range(start, end)) start = end # 提取静默部分 segments = [] for k, g in groupby(enumerate(active), lambda i_x:i_x[0]-i_x[1]): segment = list(map(itemgetter(1), g)) start = segment[0] * 2 end = segment[-1] * 2 segments.append((start, end)) # 删除静默部分 for segment in segments: audio = audio[:segment[0]] + audio[segment[1]:] # 保存处理后的音频文件 audio.export("processed_" + wav_file, format="wav") ``` 这段代码使用了os库列出所有待处理的WAV文件,并使用循环语句依次处理每个WAV文件。请注意,要根据实际情况调整VAD检测器的参数以达到最佳效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值