0. 引言
在越野机器人、无人车底盘、林地巡检与野外作业等场景中,自动驾驶系统面临着与城市道路截然不同的挑战。城市道路拥有清晰的车道线、交通规则和相对可预测的环境,而越野环境则充满了不确定性:泥地、草地、砂石、积雪、树林边缘、临时障碍物等复杂地形随处可见。更为严峻的是,在夜晚、雨雪、雾霾等恶劣天气条件下,传感器极易出现退化,导致单一模态的感知信息不可靠。现有的大模型驱动的自动驾驶理解方法大多面向规则清晰的城市场景,一旦进入无车道、无规则、传感器更容易退化的越野环境,系统就很容易在黑夜、雨雪、雾霾等条件下出现单模态失效,导致场景描述不稳定、路径规划不准确。此外,传统的**"黑箱"决策方式**在越野场景中更难被信任,因为无法解释系统为什么选择某条路径,是否忽略了潜在风险。
来自东南大学等机构的研究团队提出了Wild-Drive框架,首次将越野场景结构化描述与路径规划统一到一个高效的多模态大模型框架中。该框架不仅能够用结构化语言解释当前环境,还能同时输出未来轨迹。通过引入MoRo-Former(模态路由Transformer),系统能够在摄像头、LiDAR、融合特征之间进行任务条件驱动的模态路由,在单模态退化时优先选择更可靠的信息源。
与传统方法相比,Wild-Drive的创新之处在于将感知理解与运动规划深度耦合,形成了一个端到端的可解释决策系统。系统通过轻量级大语言模型生成结构化的场景描述,这些描述不仅为人类操作员提供了透明的决策依据,更重要的是,它们作为中间语义表示直接指导下游的轨迹生成模块。这种设计使得系统在面对复杂越野场景时,既能保持决策的可追溯性,又能实现实时的路径规划,为野外自主系统的安全部署提供了新的技术路径。论文:Wild-Drive: Off-Road Scene Captioning and Path Planning via Robust Multi-modal Routing and Efficient Large Language Model。代码仓库:https://github.com/wangzihanggg/Wild-Drive。

1. 核心问题:
为什么城市场景的方法在越野环境失效?
1.1 场景无规则、风险长尾
城市道路至少还有车道线、交通规则、目标类别先验作为约束,这些结构化信息为自动驾驶系统提供了清晰的决策边界。而越野环境中常常面对的是泥地、草地、砂石、积雪等多样化地形,树林边缘、临时障碍物等不规则物体,可通行区域边界模糊且缺乏明确标识。更为棘手的是,长尾风险事件频发,如突然出现的野生动物、隐藏的坑洼、不稳定的斜坡等,这些都是传统感知系统难以预测的场景。在这种高度不确定的环境中,单纯输出一条轨迹并不能让操作人员或系统监督者知道模型为什么这么走、是否忽略了潜在风险。这种**"黑箱决策"在越野场景中尤其危险,因为错误的代价可能是车辆损坏、任务失败甚至人员安全问题。因此,系统不仅需要给出"怎么走",更需要解释"为什么这么走",这种可解释性**对于建立人机信任、实现安全接管至关重要。

1.2 传感器退化更常见
在越野场景下,传感器退化是一个普遍且严重的问题。夜晚环境中,摄像头图像质量急剧下降,难以识别地形纹理和障碍物边界,色彩信息几乎完全丢失。雾天条件下,LiDAR点云变得稀疏,激光束在雾气中发生散射,导致距离测量不准确,远距离物体的检测能力显著下降。雨雪天气时,摄像头镜头被水滴遮挡,图像模糊不清,而LiDAR回波受到雨滴和雪花的干扰,产生大量噪点。强反光场景中,阳光直射导致摄像头过曝,局部区域完全失去细节信息。此外,越野作业中泥水遮挡传感器表面的情况时有发生,导致传感器性能持续退化。传统的**"无差别融合"策略默认所有模态都可靠,采用固定权重或简单拼接的方式组合多模态信息。然而,一旦其中一个模态失真,这种策略反而会把错误信息带入后续决策,导致系统性能整体下降。更糟糕的是,系统无法识别哪个模态出现了问题,也无法动态调整融合策略,这在传感器频繁退化的越野环境中是致命的缺陷**。
1.3 缺乏统一的"描述-规划"闭环
此前的相关方法通常只专注于感知或规划的某一个环节,缺少端到端的统一框架。单模态场景描述方法,如LiDAR-LLM只使用激光雷达进行3D场景理解,虽然能够生成场景描述,但这些描述往往是孤立的,无法直接指导下游的路径规划。基于几何的规划方法,如TopoPath直接从点云预测轨迹,虽然能够生成可执行的路径,但缺少语义层面的解释,无法回答"为什么选择这条路径"的问题。这种割裂导致了两个严重问题:一是场景理解的结果无法有效传递给规划模块,造成信息损失;二是规划决策缺乏可解释性,难以进行调试和优化。越野自动驾驶真正需要的是一个能够同时完成结构化环境理解(天气、地形、障碍物)、高层驾驶建议生成(直行、转向、停车)和可执行未来轨迹预测(具体的路径点)的统一框架。这个框架应该让场景理解直接服务于规划决策,让规划结果能够追溯到具体的感知依据,形成一个完整的、可审计的决策闭环。
1.4 缺少统一的评测基准
越野自动驾驶领域长期缺乏标准化的评测基准,这严重阻碍了技术进步和方法对比。如果没有标准化任务定义、标注模板和评测协议,研究者很难系统地回答一些关键问题:模型到底有没有真正理解天气、地形、障碍和可通行区域?文本解释是否真的帮助了规划,还是只是一个附加的展示功能?在模态退化下系统是否依然稳定,还是性能会急剧下降?不同方法之间的性能差异是来自模型架构的优势,还是数据集和评测方式的不同?这些问题的答案对于推动领域发展至关重要,但由于缺乏统一基准,不同研究工作往往使用各自的数据集和评测指标,导致结果无法直接对比。此外,现有的城市自动驾驶数据集(如nuScenes、Waymo)虽然规模庞大,但主要关注结构化道路场景,无法反映越野环境的特殊挑战。因此,构建一个专门针对越野场景、涵盖多种传感器退化条件、包含场景描述和路径规划双重任务的基准数据集,成为推动该领域发展的迫切需求。
核心问题总结:越野自动驾驶需要的不是一个"更大的黑箱模型",而是一个在退化感知条件下依然稳健、同时具备解释能力与规划能力的统一系统。针对上述挑战,Wild-Drive提出了一套完整的解决方案。其核心思想是将多模态感知、语言理解和运动规划三者有机融合,构建一个端到端的可解释决策系统。系统通过任务驱动的模态路由机制,在传感器退化时自适应地选择可靠信息源;通过结构化的语言输出,为决策提供透明的中间表示;通过planning token的设计,将高层语义理解无缝转化为底层运动控制。这种设计不仅提升了系统在恶劣环境下的鲁棒性,更重要的是,它让越野自动驾驶系统的决策过程变得可追溯、可验证,为实际部署奠定了基础。
2. Wild-Drive整体架构:
从感知到规划的统一流程
Wild-Drive的整体思路非常清晰:摄像头+LiDAR输入→任务驱动的模态路由与压缩→高效LLM生成结构化场景描述与规划token→GRU解码未来轨迹。系统架构采用模块化设计,将复杂的感知-理解-规划流程分解为四个紧密耦合的关键模块。
2.1 系统流水线

首先是多模态特征提取模块,该模块使用DINOv3作为视觉编码器提取图像特征,DINOv3是一个自监督学习的视觉Transformer,能够捕捉丰富的语义信息。同时使用VoxelNet提取LiDAR的BEV(鸟瞰图)特征,VoxelNet通过体素化点云并使用3D卷积网络,将稀疏的点云数据转换为密集的特征表示。这两种模态的特征在空间上对齐后,构建融合的多模态特征表示,为后续的智能路由提供基础。
第二个模块是MoRo-Former模态路由,这是Wild-Drive的核心创新。系统定义了5类越野任务(天气描述、可通行区域判断、地形通行性估计、障碍物检测、驾驶建议),每类任务分配64个可学习的query。通过任务条件驱动的模态路由机制,系统能够为每个query动态选择最可靠的信息源:LiDAR专家、Camera专家或Fusion专家。路由决策基于当前的环境条件和任务需求,在传感器退化时自动切换到更可靠的模态。随后,系统对路由后的token进行压缩,将每个任务的多专家表示压缩为紧凑的场景表示,总共生成60个token(5个任务×3个专家×4个token/分支)。
第三个模块是轻量级LLM场景理解,系统提供两种配置:Qwen2.5-0.5B(0.71B参数)和Qwen2.5-3B(3.25B参数)。考虑到野外机器人的计算资源限制,这些轻量级模型在保证性能的同时大幅降低了部署成本。LLM接收压缩后的场景token和用户指令,生成结构化的场景描述,包括天气、地形、障碍物等信息。更重要的是,LLM在生成过程中会输出特殊的planning token,这些token的隐藏状态包含了模型对整个场景的理解和推理结果,是连接语言理解和动作生成的关键桥梁。第四个模块是GRU轨迹解码器,该模块将planning token映射到动作潜在空间,然后通过GRU进行自回归解码,逐步生成未来4个路径点(对应1s、2s、5s、10s的时间范围)。每个路径点包含**(x, y, z, yaw)四个维度,分别表示位置和朝向。自回归解码方式确保了轨迹的时序一致性和平滑性,后续路径点会考虑前面路径点的预测结果。这种设计使得Wild-Drive不是"先caption再另接一个planner"的松散拼接,而是把场景解释和轨迹生成放进同一条条件化链路中**,让语言理解真正成为规划的中间桥梁,实现了从感知到规划的端到端优化。
2.2 配置文件解析
Wild-Drive的配置文件采用了清晰的模块化设计,通过VLMConfig类统一管理所有超参数。这个配置类继承自Transformers库的PretrainedConfig,确保了与Hugging Face生态的兼容性。配置文件的设计体现了系统的三大核心组件:视觉-语言基础模型、多模态融合机制和规划模块。在视觉-语言基础方面,系统使用预训练的DINOv3作为视觉编码器,使用Qwen2.5系列作为语言模型。为了在有限的计算资源下实现高效训练,配置中设置了freeze_vision_model和freeze_llm_model参数,冻结预训练模型的参数,只通过LoRA(低秩适应)技术微调少量参数。这种策略大幅降低了训练成本,同时保持了模型性能。在多模态融合方面,配置文件提供了灵活的选项。use_lidar参数控制是否启用LiDAR分支,use_moroformer参数控制是否使用模态路由机制。当启用MoRo-Former时,系统会自动计算输出token数量(5个任务×3个专家×4个token=60个token),并更新image_pad_num_actual参数。fusion_method参数允许用户选择不同的融合策略,默认使用"moroformer",也可以选择简单的拼接或平均融合作为基线对比。lidar_feature_dim参数控制LiDAR特征的维度,需要与VoxelNet的输出维度匹配。
规划模块的配置同样灵活且易于调整。use_planning参数控制是否启用规划头,num_planning_tokens指定从LLM提取多少个planning token(默认4个),planning_waypoints指定预测多少个未来路径点(默认4个,对应1s、2s、5s、10s),planning_waypoint_dim指定每个路径点的维度(默认4维,包括x、y、z、yaw)。planning_gru_hidden和planning_gru_layers控制GRU解码器的容量,planning_loss_weight控制规划损失在总损失中的权重。这些参数的合理设置对于平衡场景描述和路径规划两个任务的性能至关重要。通过调整这些配置,研究者可以轻松地进行消融实验,验证不同组件的贡献。
3. 核心创新一:
MoRo-Former - 任务驱动的模态路由机制
论文中最关键的设计是MoRo-Former(Modality Routing Transformer)。它不是像常规Q-Former那样把所有query一视同仁,而是明确意识到:在越野环境中,不同任务、不同天气、不同照明条件下,真正可靠的模态并不相同。
3.1 设计理念
传统的多模态融合方法通常采用固定的融合策略,无论环境如何变化,都以相同的方式组合不同模态的信息。这种**"一刀切"的方法在城市道路等结构化场景中可能表现尚可,但在越野场景中存在明显缺陷。具体而言,在夜晚或强弱光条件下,摄像头图像质量严重下降,此时地形可通行性和障碍定位可能更依赖LiDAR的几何信息**,因为LiDAR不受光照条件影响,能够提供准确的距离和形状信息。相反,当LiDAR回波稀疏或局部失效时(如在植被茂密区域或雨雪天气),模型需要更多借助相机的纹理与外观信息来判断地形类型和可通行性。此外,某些任务本身更适合特定模态:天气识别主要依赖视觉信息(云层、降水、光照),而地形通行性估计则更需要几何信息(坡度、高度差、表面粗糙度)。MoRo-Former的核心创新在于引入了任务驱动的动态路由机制,让系统能够根据当前任务需求和环境条件,自适应地选择最可靠的信息源。这种设计不是简单地为每个模态分配固定权重,而是为每个query学习一个路由决策,在LiDAR、Camera和Fusion三个专家之间进行选择。在推理阶段采用硬路由策略,每个query只保留被选中的专家输出,从而**避免"坏模态把好模态拖下水"**的问题。这种机制使得系统在面对传感器退化时具有更强的鲁棒性,能够自动屏蔽不可靠的信息源,专注于可靠的模态进行决策。

3.2 步骤1:按任务分组查询
Wild-Drive针对越野场景的特点,精心设计了5类核心任务,每类任务分配64个可学习的query,形成总共320个任务专用查询向量。这5类任务分别是:**天气描述(Weather Description)**用于识别当前的天气和光照条件;可通行区域判断(Drivable Area)用于确定前方哪些区域可以安全通过;地形通行性估计(Terrain Traversability)用于评估不同地形的通过难度;障碍物检测(Obstacle Detection)用于识别和定位各类障碍物;驾驶建议(Driving Suggestion)用于生成高层的驾驶决策。这种任务分组设计的核心优势在于,不同任务可以关注不同的感知信息,避免了将所有问题混在一起处理导致的信息干扰。为了进一步降低任务间干扰,系统引入了任务组嵌入(task group embedding)机制。每个任务都有一个可学习的组嵌入向量,这个向量会被加到该任务的所有query上,为query注入任务身份信息。在前向传播时,系统首先将任务查询扩展到batch维度,然后将任务嵌入通过广播机制加到对应的query上。这种设计使得模型能够明确区分不同任务的query,每个query在进行交叉注意力时会携带其任务身份,从而为每类越野决策问题保留独立的感知通道。实验表明,这种任务分组机制显著提升了模型在多任务学习中的性能,避免了不同任务之间的负迁移现象。
3.3 步骤2:局部感知的模态路由
对于需要模态选择的任务,每个query会关联一个3D参考点,并被投影到LiDAR BEV和图像平面,只关注局部窗口内的信息。随后,路由器预测该query更应该交给哪个专家:LiDAR expert处理几何和深度信息,Camera expert处理纹理和外观信息,Fusion expert综合两种模态的信息。路由器的实现使用了Gumbel-Softmax技巧,在前向传播时进行硬路由(每个query只选择一个专家),在反向传播时保持可微分。这种设计的关键在于:在推理阶段采用硬路由,每个query只保留被选中的专家输出,从而避免"坏模态把好模态拖下水"。

class ModalityRouter(nn.Module):"""使用Gumbel-Softmax实现可微分的硬路由"""def __init__(self, hidden_dim):super().__init__()self.router = nn.Sequential(nn.Linear(hidden_dim, hidden_dim // 4),nn.ReLU(),nn.Linear(hidden_dim // 4, 3), # 3个专家)def forward(self, query):logits = self.router(query) # [B, N, 3]if self.training:# 训练时:Gumbel-Softmax实现硬路由但保持梯度one_hot = F.gumbel_softmax(logits, tau=1.0, hard=True, dim=-1)else:# 推理时:纯硬路由idx = torch.argmax(logits, dim=-1)one_hot = F.one_hot(idx, num_classes=3).float()assignments = torch.argmax(one_hot, dim=-1)return one_hot, assignments
这种设计的关键在于:在推理阶段采用硬路由,每个query只保留被选中的专家输出,从而避免"坏模态把好模态拖下水"。
3.4 步骤3:路由后压缩token
路由后的任务token会进一步压缩,再送入LLM。这样既提升了有效信息密度,也减轻了轻量级LLM的输入负担:
class BranchCompressor(nn.Module):"""通过交叉注意力将可变长度的专家输出压缩为固定大小的token"""def __init__(self, hidden_dim, num_compress_tokens, num_heads=8):super().__init__()self.compress_queries = nn.Parameter(torch.randn(num_compress_tokens, hidden_dim) * 0.02)self.attn = nn.MultiheadAttention(hidden_dim, num_heads, batch_first=True)self.norm = nn.LayerNorm(hidden_dim)def forward(self, expert_output):"""Args:expert_output: [B, N_variable, D] 可变长度的专家输出Returns:compressed: [B, num_compress_tokens, D] 固定长度的压缩token"""B = expert_output.shape[0]queries = self.compress_queries.unsqueeze(0).expand(B, -1, -1)if expert_output.shape[1] == 0:return torch.zeros_like(queries)compressed, _ = self.attn(queries, expert_output, expert_output)return self.norm(compressed)
最终,MoRo-Former输出的token数量为:5个任务 × 3个专家 × 4个token/分支 = 60个token,这些紧凑的token包含了所有任务的多专家表示。
3.5 MoRo-Former的优势
这套设计破解了越野场景中的一个核心矛盾:不是所有模态都该永远被同等对待,而应该让任务和环境共同决定"此刻最该信谁"。相比传统方法的优势包括:自适应性,根据环境条件动态选择可靠模态;任务专用性,不同任务可以使用不同的模态组合;鲁棒性,单模态失效时不会污染整体决策;效率,通过压缩减少LLM的输入负担。
4. 核心创新二:
轻量级LLM的结构化场景理解
很多人一提到LLM,就会自然想到开放式长文本生成。但Wild-Drive反而走了一个很务实的方向:不追求"会说很多",而追求"说得稳定、说得结构化、说得对规划有用"。考虑到野外机器人的计算资源限制,Wild-Drive采用了两种轻量级配置:Wild-Drive-0.5B使用Qwen2.5-0.5B-Instruct(仅0.71B参数),Wild-Drive-3B使用Qwen2.5-3B-Instruct(3.25B参数)。这些模型相比动辄70B+的大模型,在边缘设备上更容易部署,同时通过精心设计的结构化输出模板,依然能够达到很好的理解效果。
4.1 结构化Q&A模板设计
为适配轻量级LLM的容量,论文专门设计了结构化Q&A模板,把复杂越野理解问题压缩为有限标签空间。天气描述表示为"天气+光照"的配对标签,天气类型包括sunny、cloudy、rainy、snowy、foggy,光照条件包括bright_light、daylight、twilight、darkness,示例输出"foggy, dusk"表示黄昏时的雾天。可通行区域判断前方区域的可通行性和方向,可通行状态包括clear、partially_blocked、blocked,可通行方向包括front、front_left、front_right、left、right,示例输出"clear, front"表示正前方可通行。地形通行性识别地形类型和通行难度,地形类型包括dirt、gravel、grass、mud、sand、snow、rock,通行难度包括easy、moderate、hard、impassable,示例输出"gravel, easy"表示砂石路面容易通过。障碍物检测包括障碍类别(vehicle、pedestrian、animal、rock、tree、pole、building、unknown)、方位(front、front_left、front_right、left、right)和距离(near、mid、far),示例输出"tree, front_left, mid"表示左前方中等距离有树木。驾驶建议基于场景理解给出高层决策,动作类型包括go_straight、turn_left、turn_right、stop,示例输出"turn_left"表示建议左转。

4.2 LLM集成代码实现
在VLM模型中,LLM的集成非常巧妙。系统使用特殊token <|image_pad|> 和 <|plan_pad|> 来标记多模态输入和规划位置:
# 注册特殊tokenspecial_tokens = {"additional_special_tokens": ["<|image_pad|>", "<|plan_pad|>"]}num_added = self.tokenizer.add_special_tokens(special_tokens)if num_added > 0:self.llm_model.resize_token_embeddings(len(self.tokenizer))# 前向传播:融合文本和图像嵌入text_embeds = self.llm_model.get_input_embeddings()(input_ids)inputs_embeds = self._merge_embeddings(text_embeds, image_embeds, input_ids)# LLM生成(需要输出hidden states用于规划)llm_outputs = self.llm_model(inputs_embeds=inputs_embeds,attention_mask=attention_mask,output_hidden_states=self.config.use_planning, # 关键:输出隐藏状态)
4.3 结构化输出的三大好处
相比完全自由生成,闭集模板更容易对齐监督,也更适合0.5B/3B量级的轻量模型学习。模型不需要学习复杂的语言生成,只需要在有限的标签空间中做分类,训练更稳定。结构化输出可以直接用统一协议统计captioning性能,也更容易分析不同模块到底错在天气、障碍还是可通行性判断,使用BLEU和BERT-score等指标可以精确量化性能,评测更准确。规划器并不需要华丽修辞,它需要的是天气、地形、障碍、驾驶建议这些可以直接转化为决策约束的中间变量,Wild-Drive让语言真正成为可执行规划的"接口层",更适合下游规划调用。
5. 核心创新三:从语言到轨迹的端到端规划
Wild-Drive的另一个亮点,是没有止步于场景解释,而是进一步把LLM输出的planning token送入GRU轨迹解码器,直接生成未来轨迹点,形成了一个可审计的"caption-to-plan"闭环。在LLM生成场景描述的同时,系统会在特定位置插入**<|plan_pad|>特殊token**,这些位置的隐藏状态会被提取出来,作为规划的条件信号。这些planning token包含了LLM对整个场景的理解和推理结果,是连接语言理解和动作生成的关键桥梁。轨迹解码器采用GRU(门控循环单元)实现自回归解码,逐步生成未来的路径点。这种设计有几个关键优点:通过自回归方式,后续路径点会考虑前面路径点的预测,保证轨迹的平滑性,实现时序一致性;可以轻松调整预测的时间范围(1s、2s、5s、10s),具有灵活性;每个路径点都有明确的物理意义(位置+朝向),保证可解释性。

5.1 损失函数设计
Wild-Drive使用联合损失函数同时优化场景描述和路径规划。语言建模损失用于场景描述,规划损失用于路径点预测,组合损失为两者的加权和。使用Smooth L1损失(Huber损失)而不是普通L2损失,可以对异常值更加鲁棒,避免极端情况下的梯度爆炸。这里最重要的不是"多做了一个任务",而是完成了让规划结果拥有显式中间语义解释这件事。这意味着系统做出某条轨迹时,我们可以追问:它是否认为前方被障碍阻挡?它是否判断当前地形可通过?它为什么建议停车而不是转向?对于越野机器人和野外无人系统来说,这种"可审计"能力非常关键,因为部署环境复杂、人工接管成本高、错误代价大。
# 提取planning token位置的隐藏状态plan_token_id = self.tokenizer("<|plan_pad|>")["input_ids"][0]plan_batch_idx, plan_seq_idx = torch.where(input_ids == plan_token_id)# 获取最后一层的隐藏状态hidden_states = llm_outputs.hidden_states[-1] # [B, seq_len, D]plan_hidden = hidden_states[plan_batch_idx, plan_seq_idx] # [B*num_plan, D]plan_hidden = plan_hidden.view(b, num_plan, -1) # [B, num_plan, D]
这些planning token包含了LLM对整个场景的理解和推理结果,是连接语言理解和动作生成的关键桥梁。
5.2 GRU轨迹解码器
轨迹解码器采用GRU(门控循环单元)实现自回归解码,逐步生成未来的路径点:
class TrajectoryPlanner(nn.Module):"""将LLM的planning token解码为未来路径点"""def __init__(self,llm_hidden_dim,num_planning_tokens=4, # 从LLM提取4个tokengru_hidden=256, # GRU隐藏层维度gru_layers=2, # GRU层数num_waypoints=4, # 预测4个路径点(1s,2s,5s,10s)waypoint_dim=4, # 每个路径点(x,y,z,yaw)):super().__init__()# Planning tokens → 潜在空间z(论文中的两层MLP)self.token_pool = nn.Sequential(nn.Linear(llm_hidden_dim * num_planning_tokens, llm_hidden_dim),nn.ReLU(),nn.Linear(llm_hidden_dim, gru_hidden),nn.ReLU(),)# GRU解码器:自回归生成路径点self.gru = nn.GRU(input_size=waypoint_dim,hidden_size=gru_hidden,num_layers=gru_layers,batch_first=True,)# GRU隐藏状态 → 路径点预测self.output_head = nn.Linear(gru_hidden, waypoint_dim)# 可学习的起始token(当前位置=原点)self.start_token = nn.Parameter(torch.zeros(1, 1, waypoint_dim))def forward(self, planning_tokens):"""Args:planning_tokens: [B, num_planning_tokens, D] 来自LLM的隐藏状态Returns:waypoints: [B, num_waypoints, waypoint_dim] 预测的(x,y,z,yaw)"""B = planning_tokens.shape[0]# 展平并投影到潜在空间zz = self.token_pool(planning_tokens.reshape(B, -1)) # [B, gru_hidden]# z → GRU初始隐藏状态h0 = z.unsqueeze(0).expand(self.gru.num_layers, -1, -1).contiguous()# 自回归解码gru_input = self.start_token.expand(B, -1, -1) # [B, 1, waypoint_dim]h = h0waypoints = []for _ in range(self.num_waypoints):output, h = self.gru(gru_input, h) # output: [B, 1, gru_hidden]wp = self.output_head(output) # [B, 1, waypoint_dim]waypoints.append(wp)gru_input = wp # 将预测作为下一步输入(自回归)waypoints = torch.cat(waypoints, dim=1) # [B, num_waypoints, waypoint_dim]return waypoints
5.3 自回归解码的优势
这种设计有几个关键优点:
时序一致性:通过自回归方式,后续路径点会考虑前面路径点的预测,保证轨迹的平滑性
灵活性:可以轻松调整预测的时间范围(1s, 2s, 5s, 10s)
可解释性:每个路径点都有明确的物理意义(位置+朝向)
5.4 损失函数设计
Wild-Drive使用联合损失函数同时优化场景描述和路径规划:
# 语言建模损失(场景描述)lm_loss = nn.CrossEntropyLoss(ignore_index=self.tokenizer.pad_token_id)(logits.view(-1, logits.size(-1)),labels.view(-1).to(logits.device),)# 规划损失(路径点预测)planning_loss = F.smooth_l1_loss(pred_waypoints,gt_waypoints.to(pred_waypoints.dtype).to(pred_waypoints.device),)# 组合损失loss = lm_loss + self.config.planning_loss_weight * planning_loss
使用**Smooth L1损失(Huber损失)**而不是普通L2损失,可以对异常值更加鲁棒,避免极端情况下的梯度爆炸。
6. 总结
Wild-Drive不是简单把大模型搬到越野场景,而是围绕**"退化环境下如何可靠理解、解释并规划"这个核心命题,构建了一个从多模态感知到语言解释再到轨迹生成的统一闭环**。其核心价值体现在三个方面:可解释性方面,通过结构化语言描述让系统决策过程透明可审计;鲁棒性方面,通过任务驱动的模态路由在传感器退化时依然稳定;实用性方面,通过轻量级LLM设计兼顾性能与部署效率。对于具身智能、移动机器人、越野无人平台和可解释自动驾驶研究来说,Wild-Drive的价值在于:它不再把"看懂场景"和"做出动作"视为两条平行线,而是让二者通过结构化语言与规划token真正打通。这种思路,可能正是未来复杂野外自主系统走向可信部署的重要一步。



点击“阅读原文”可查看详情