VLM视觉语言大模型在智能驾驶中的应用

目录

VLM在自动驾驶中的任务

E2E

Datasets

BDD-X

 Talk2Car

 BDD-OIA

 SUTD-TrafficQA

 NuPrompt

NuScenes-QA 

Talk2BEV

 OmniDrive

TOD3CAP

 MAPLM-QA

NuScenes-MQA

DriveLM

参考文献


VLM在自动驾驶中的任务

 single or multiple Object Referring

即带条件的目标检测,用语言指示模型识别图像中特定目标。

Referred Object Tracking

和Object Referring相比,Object Referring Tracking会根据自然语言描述在连续帧中对目标进行跟踪。

Open-Vocabulary 3D Object Detection

开放式3D目标检测,利用VLM的zero-shot能力检测场景中在白名单之外的目标类型。

Visual Question Answering

交通场景视觉问答,这需要vlm的高维场景理解能力。自动驾驶领域的问答可以划分为感知、规划、空间推理、时序推理、因果逻辑推理。感知问题可以用来识别交通参与者,如外观描述、存在性、数量、状态等。planning问题则可用于基于当前交通状态做决策。空间推理可以确定目标的相对、绝对位置。时序推理则可以过去或未来的目标行驶轨迹、行为。因果推理则可以通过逻辑推理分析事件的原因。

Captioning

 生成一个对于环境的文本描述。和VQA任务不同之处,captioning更关注于特定的任务如场景描述重要性排序、行为解释。Captioning也可以理解为固定问题的VQA。

captioning和VQA的metrics评测指标都是open-ended VQA。在选择题VQA任务中,正确答案出现次数除以总问题数即为accuracy。在开放式问题形式中BLEU、METEOR、ROUGE、CIDEr等评测指标作为评估预测结果和答案的相关性、正确性。

Language-Guided Navigation

根据语言指令指示VLM找到目标位置并给出到达目标位置的规划结果。

Conditional Autonomous Driving Data Generation

即可控的自动驾驶数据生成,应用大模型合成真实的驾驶场景图片。可控的数据生成可以加入prompts控制,可以让他生成BEV图像,可以让他有特定的行为等等。

E2E

相关端到端文章

《DriveGPT4:Gpt-driver: Learning to drive with gpt》

motion planners需要处理各种不同的输入,如自车信息、地图和感知结果,并预测精确的waypoint坐标。因此在利用LLM做运动规划的时候,需要将不同的输入转化为统一的语言tokens,并把自动驾驶问题转化为语言模型的问题。motion planning问题可以建模如下:

输入是O(Observations)、S(ego states),输出是T(trajectory)。其轨迹可以表示为一个waypoints的集合T:

其中ego states S包含了自车的历史轨迹和他现在的速度、加速度等,observations O包含了感知、预测的输出,如检测到的目标框及他们未来的运动。这样基于学习的motion planners通过模仿人类司机的轨迹即可输出trajectory,Loss函数即选用L1 loss。

在LLM中问题需要特殊处理,轨迹通过tokenizer K转化为tokens,这些tokens就是LLM需要输出的结果,目标函数变成如下:

w1~wi-1是已经规划的轨迹,\widetilde{wi}是人类驾驶员轨迹,目标就是最大化这个概率P。自然语言的结果是输出token,而不是一个回归问题,所以他需要精确地输出结果,例如规划的waypoint是23米,那么LLM只有输出23这个token才是对的,输出22则是完全不同的token。

在本文中,作者还prompting-reasoning-finetuning的方法来激发语言模型潜在的motion planning能力,让模型给出推理逻辑,让规划结果更透明。

提示词prompt

 作者将自动驾驶领域COT分解为3步,1)从感知结果识别影响驾驶的关键目标;2)从预测结果分析这些关键目标未来的运动,给出关键目标影响自车的时间、地点、方式。3)从之前分析结果,规划器需要给出一个高层的驾驶决策和轨迹。其模型输出结果如下图所示:

LLM输出

最后文中通过驾驶日志采集了人类驾驶员轨迹,作为真值去微调LLM。

在结果对比中,作者用了nuscenes的数据来做评测,评测了和GT trajectory的L2距离、3s预测轨迹碰撞率,其结果L2大幅领先,碰撞率接近最优。还对比了few shots能力,用更少的数据比uniad效果好。还比较了in-context learning和finetuning,证明finetuning的必要性。

《DriveVLM》

参见博客DriveVLM

### 关于视觉-语言模型(VLM)微调方法 对于视觉-语言模型(VLM),微调通常涉及调整预训练模型参数以适应特定的任务需求。一种常见的做法是在大规模多模态数据集上预先训练好的基础模型之上添加额外层,这些新加入的组件可以针对具体应用场景定制化设计并优化[^1]。 在实际操作过程中,为了使VLM更好地理解图像与文本之间的关系,会采用联合嵌入空间学习策略来同步更新两个不同模态的数据表示形式。此过程不仅有助于提高下游任务性能,而且能够增强跨领域泛化能力[^2]。 此外,在某些情况下还可以通过迁移学习的方式利用已有的单模态(纯文字或图片)预训练成果作为初始化权重来进行更高效的双模态融合训练[^3]。 ```python from transformers import ViltProcessor, ViltForQuestionAnswering import torch from datasets import load_dataset processor = ViltProcessor.from_pretrained('dandelin/vilt-b32-finetuned-vqa') model = ViltForQuestionAnswering.from_pretrained('dandelin/vilt-b32-finetuned-vqa') def prepare_example(example): encoding = processor( example["image"], example["text"], return_tensors="pt", padding=True) labels = [] for ans in example['answer']: if ans['label'] == "yes": labels.append(0) elif ans['label'] == "no": labels.append(1) encoding.update({"labels":torch.tensor(labels)}) return encoding dataset = load_dataset("rvl_cdip") train_ds = dataset["train"].map(prepare_example) for idx, item in enumerate(train_ds.shuffle(seed=42).select(range(1))): output = model(**item) print(output.loss.item()) ``` 上述代码展示了如何基于Hugging Face库中的`transformers`包加载一个已经过问答任务微调后的ViLT模型实例,并对其进一步处理以便应用于其他相似场景中去[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值