Vision-Language-Action:LMDrive项目架构与核心算法组件
2026/7/6 1:54:00 网站建设 项目流程

LMDrive 项目架构与核心算法组件

一、项目概述

LMDrive 是一个基于大型语言模型(LLM)和多模态视觉编码器的端到端自动驾驶系统。它能够理解自然语言指令,并从多视角摄像头和 LiDAR 传感器输入中生成驾驶控制信号。

核心特性

  • 自然语言指令理解
  • 多模态传感器数据融合(RGB + LiDAR)
  • 端到端闭环驾驶
  • CARLA 模拟器集成

二、文件夹与文件目录架构

2.1 项目根目录

LMDrive/ ├── LAVIS/ # 视觉-语言模型库(基于 BLIP2/LLaVA) ├── vision_encoder/ # 视觉特征提取与多模态融合模块 ├── leaderboard/ # CARLA Leaderboard 评估框架 ├── scenario_runner/ # 场景管理与交通事件模拟 ├── data_collection/ # 自动化数据收集脚本 ├── dataset/ # 数据集初始化与管理 ├── langauto/ # 语言指令基准测试 ├── assets/ # 资源文件(架构图等) ├── environment.yml # Conda 环境配置 ├── LICENSE └── README.md

2.2 LAVIS/ - 视觉-语言模型库

LAVIS/ ├── app/ # 应用程序(推理演示) │ ├── caption.py # 图像描述 │ ├── vqa.py # 视觉问答 │ ├── classification.py # 分类任务 │ └── main.py # 主入口 ├── lavis/ # 核心库代码 │ ├── common/ # 通用工具 │ │ ├── config.py # 配置管理 │ │ ├── dist_utils.py # 分布式训练工具 │ │ ├── registry.py # 注册机制 │ │ └── utils.py # 工具函数 │ ├── configs/ # 配置文件 │ │ ├── datasets/ # 数据集配置 │ │ │ └── carla/ # CARLA 数据集配置 │ │ └── models/ # 模型配置 │ ├── datasets/ # 数据集定义 │ │ ├── builders/ # 数据集构建器 │ │ └── datasets/ # 具体数据集实现 │ └── models/ # 模型定义 │ ├── albef_models/ # ALBEF 模型 │ ├── alpro_models/ # ALPRO 模型 │ └── blip2_models/ # BLIP2 模型 │ ├── blip2.py # BLIP2 基础模型 │ ├── Qformer.py # Q-Former 编码器 │ ├── memfuser.py # Memfuser 融合模型 │ └── modeling_llama.py # LLaMA 模型封装 ├── examples/ # Jupyter 示例 ├── docs/ # 文档 └── evaluate.py # 评估脚本

2.3 vision_encoder/ - 视觉特征提取模块

vision_encoder/ ├── timm/ # 视觉模型库(基于 PyTorch Image Models) │ ├── data/ # 数据处理 │ │ ├── carla_dataset.py # CARLA 数据集 │ │ ├── carla_loader.py # CARLA 数据加载器 │ │ └── parsers/ # 数据解析器 │ └── models/ # 视觉模型定义 │ ├── layers/ # 基础层 │ │ ├── activations.py # 激活函数 │ │ ├── attention.py # 注意力机制 │ │ ├── mlp.py # MLP 层 │ │ ├── norm.py # 归一化层 │ │ └── patch_embed.py # Patch Embedding │ ├── memfuser.py # Memfuser 多模态融合模型(核心) │ ├── interfuser.py # Interfuser 多模态融合模型 │ ├── pointpillar.py # PointPillar LiDAR 处理 │ ├── resnet.py # ResNet 骨干网络 │ ├── vision_transformer.py # Vision Transformer │ └── factory.py # 模型创建工厂 ├── scripts/ # 训练脚本 ├── distributed_pretrain.sh # 分布式预训练脚本 └── hubconf.py # PyTorch Hub 配置

2.4 leaderboard/ - CARLA 评估框架

leaderboard/ ├── leaderboard/ # 评估核心代码 │ ├── autoagents/ # 代理接口 │ │ ├── autonomous_agent.py # 自主代理基类 │ │ └── dummy_agent.py # 示例代理 │ ├── envs/ # 环境接口 │ │ ├── sensor_interface.py # 传感器接口 │ │ └── instruction_dict.json # 指令字典 │ ├── scenarios/ # 场景管理 │ │ ├── scenario_manager.py # 场景管理器 │ │ └── route_scenario.py # 路线场景 │ ├── utils/ # 工具函数 │ │ ├── route_parser.py # 路线解析 │ │ ├── result_writer.py # 结果写入 │ │ └── statistics_manager.py # 统计管理 │ └── leaderboard_evaluator.py # 评估器 ├── team_code/ # 参赛队伍代码(LMDrive 核心) │ ├── lmdriver_agent.py # LMDrive 代理实现(核心) │ ├── lmdriver_config.py # 配置文件 │ ├── planner.py # 路线规划器 │ ├── pid_controller.py # PID 控制器 │ ├── controller.py # 控制器基类 │ ├── auto_pilot.py # 自动驾驶控制 │ └── utils.py # 工具函数 ├── data/ # 评估数据 │ ├── 42routes/ # 42 条评估路线 │ ├── training_routes/ # 训练路线 │ ├── validation_routes/ # 验证路线 │ ├── scenarios/ # 场景配置 │ └── official/ # 官方数据 ├── scripts/ # 评估脚本 │ ├── run_evaluation.sh # 运行评估 │ └── eval.sh # 评估命令 └── requirements.txt # 依赖列表

2.5 scenario_runner/ - 场景运行器

scenario_runner/ ├── srunner/ # 场景运行器核心 │ ├── autoagents/ # 代理接口 │ ├── scenarioconfigs/ # 场景配置 │ ├── scenariomanager/ # 场景管理器 │ │ ├── scenario_manager.py # 场景管理核心 │ │ ├── actorcontrols/ # 角色控制 │ │ ├── scenarioatomics/ # 原子行为/条件 │ │ └── traffic_events.py # 交通事件 │ ├── scenarios/ # 场景定义 │ │ ├── follow_leading_vehicle.py # 跟车场景 │ │ ├── change_lane.py # 变道场景 │ │ ├── junction_crossing_route.py # 路口穿越 │ │ └── signalized_junction_left_turn.py # 信号灯左转 │ ├── tools/ # 工具函数 │ └── metrics/ # 指标计算 ├── examples/ # 场景示例 ├── Docs/ # 文档 └── scenario_runner.py # 主入口

三、框架架构

3.1 整体架构图

┌─────────────────────────────────────────────────────────────────────┐ │ CARLA Simulator │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │ │ │ RGB Front │ │ RGB Left │ │ RGB Right │ │ RGB Rear │ │ │ │ (1200x900) │ │ (400x300) │ │ (400x300) │ │ (400x300) │ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └─────┬─────┘ │ │ ┌─────────────┐ ┌─────────────┐ │ │ │ LiDAR │ │ GPS/IMU/Speed│ │ │ │ (Ray-Cast) │ │ Sensors │ │ │ └──────┬──────┘ └──────┬──────┘ │ └─────────┼────────────────┼───────────────────────────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────┐ │ LMDrive Agent │ │ │ │ ┌────────────────── 传感器数据预处理 ───────────────────┐ │ │ │ 图像变换 → CenterCrop → Normalize → Tensor │ │ │ │ LiDAR → PointPillar → BEV Feature Map │ │ │ └───────────────────────┬──────────────────────────────┘ │ │ │ │ │ ┌─────────────────── 视觉编码器 ──────────────────────┐ │ │ │ ┌───────────────────────────────────────────────┐ │ │ │ │ │ ResNet Backbone (r26/r50) → HybridEmbed │ │ │ │ │ │ → PositionEmbeddingSine → View Embedding │ │ │ │ │ └───────────────────┬───────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼───────────────────────────┐ │ │ │ │ │ Transformer Encoder (enc_depth layers) │ │ │ │ │ │ - Multi-View Feature Fusion │ │ │ │ │ │ - Cross-Modal Attention │ │ │ │ │ └───────────────────┬───────────────────────────┘ │ │ │ └───────────────────────┼──────────────────────────────┘ │ │ │ │ │ ┌─────────────────── LLM 融合 ───────────────────────┐ │ │ │ ┌───────────────────────────────────────────────┐ │ │ │ │ │ Q-Former → LLaVA/Vicuna LLM │ │ │ │ │ │ - Instruction Understanding │ │ │ │ │ │ - Visual-Language Alignment │ │ │ │ │ └───────────────────┬───────────────────────────┘ │ │ │ └───────────────────────┼──────────────────────────────┘ │ │ │ │ │ ┌─────────────────── 决策输出 ───────────────────────┐ │ │ │ ┌───────────────────────────────────────────────┐ │ │ │ │ │ Transformer Decoder → Waypoints Predictor │ │ │ │ │ │ - GRUWaypointsPredictor │ │ │ │ │ │ - 5 waypoints (x, y) │ │ │ │ │ └───────────────────┬───────────────────────────┘ │ │ │ │ │ │ │ │ │ ┌───────────────────▼───────────────────────────┐ │ │ │ │ │ PID Controller → Steering/Throttle/Brake │ │ │ │ │ └───────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘

3.2 数据流

  1. 传感器输入:CARLA 模拟器提供多视角图像、LiDAR 点云、GPS、IMU 和速度数据
  2. 数据预处理:图像裁剪、归一化;LiDAR 点云转换为 BEV 特征图
  3. 视觉编码:ResNet 提取特征 → Transformer Encoder 融合多视图特征
  4. 语言理解:Q-Former 将视觉特征与 LLM 对齐,理解自然语言指令
  5. 决策生成:Transformer Decoder 生成轨迹点(waypoints)
  6. 控制输出:PID 控制器将轨迹点转换为驾驶控制信号

四、核心算法组件

4.1 Memfuser 多模态融合模型

文件路径vision_encoder/timm/models/memfuser.py

Memfuser 是 LMDrive 的核心多模态融合模型,采用 Transformer Encoder-Decoder 架构。

4.1.1 模型结构
classMemfuser(nn.Module):def__init__(self,img_size=224,# 主视角图像尺寸multi_view_img_size=112,# 侧视角图像尺寸embed_dim=768,# 嵌入维度enc_depth=6,# Encoder 层数dec_depth=6,# Decoder 层数num_heads=8,# 注意力头数rgb_backbone_name="r26",# RGB 骨干网络with_lidar=True,# 是否使用 LiDARwith_right_left_sensors=True,# 是否使用左右摄像头with_rear_sensor=True,# 是否使用后摄像头waypoints_pred_head="gru",# 轨迹预测头类型):
4.1.2 关键组件
组件功能
HybridEmbed将 ResNet 特征转换为 Transformer 可处理的 token
PositionEmbeddingSine正弦位置编码
View Embedding区分不同视角的嵌入向量
LidarModel基于 PointPillar 的 LiDAR 处理
TransformerEncoder融合多视图视觉特征
TransformerDecoder生成轨迹点和交通预测
GRUWaypointsPredictorGRU 轨迹点预测器
TrafficPredHead交通参与者预测头
4.1.3 前向传播流程
defforward_features(self,front_image,left_image,right_image,rear_image,front_center_image,lidar,num_points):# 1. 多视角图像特征提取front_image_token,front_image_token_global=self.rgb_patch_embed(front_image)left_image_token,left_image_token_global=self.rgb_patch_embed(left_image)right_image_token,right_image_token_global=self.rgb_patch_embed(right_image)rear_image_token,rear_image_token_global=self.rgb_patch_embed(rear_image)front_center_image_token,front_center_image_token_global=self.rgb_patch_embed(front_center_image)# 2. LiDAR 特征提取lidar_token=self.lidar_backbone(lidar,num_points)# 3. 拼接所有特征features=torch.cat([front_image_token,front_image_token_global,...],0)returnfeatures,lidar_token
defforward(self,x):# 1. 提取特征features,lidar_token=self.forward_features(...)# 2. Encoder 编码memory=self.encoder(features,mask=self.attn_mask)# 3. Decoder 解码query=torch.cat([lidar_token,query_embed],0)hs=self.decoder(query,memory,query_pos=tgt)[0]# 4. 输出预测waypoints=self.waypoints_generator(waypoints_feature,target_point)traffic=self.traffic_pred_head(traffic_feature_with_vel)traffic_light_state=self.traffic_light_pred_head(traffic_light_state_feature)stop_sign=self.stop_sign_head(stop_sign_feature)returntraffic,waypoints,traffic_light_state,stop_sign,traffic_feature

4.2 Interfuser 多模态融合模型

文件路径vision_encoder/timm/models/interfuser.py

Interfuser 是另一种多模态融合模型,与 Memfuser 类似但采用不同的注意力机制策略。

4.2.1 主要区别
特性MemfuserInterfuser
LiDAR 处理PointPillarResNet 骨干
注意力掩码None支持分离视图注意力
轨迹预测头GRU多种(GRU/Linear/Heatmap)
额外输出交通灯/停车标志路口检测/交通灯/停车标志
4.2.2 支持的轨迹预测头
  • gru:GRU 序列预测
  • gru-command:带指令的 GRU 预测
  • linear:线性预测
  • linear-sum:线性累加预测
  • heatmap:热力图预测(MultiPath)

4.3 LMDrive Agent

文件路径leaderboard/team_code/lmdriver_agent.py

LMDriveAgent 是 CARLA Leaderboard 的代理实现,负责与模拟器交互并执行驾驶决策。

4.3.1 传感器配置
defsensors(self):return[{"type":"sensor.camera.rgb","id":"rgb_front",...},# 前视摄像头{"type":"sensor.camera.rgb","id":"rgb_left",...},# 左视摄像头{"type":"sensor.camera.rgb","id":"rgb_right",...},# 右视摄像头{"type":"sensor.camera.rgb","id":"rgb_rear",...},# 后视摄像头{"type":"sensor.lidar.ray_cast","id":"lidar",...},# LiDAR{"type":"sensor.other.imu","id":"imu",...},# IMU{"type":"sensor.other.gnss","id":"gps",...},# GPS{"type":"sensor.speedometer","id":"speed",...},# 速度计]
4.3.2 核心方法
方法功能
setup()初始化模型、控制器和传感器变换
tick()处理传感器数据,计算车辆状态
run_step()执行单步驾驶决策(核心)
control_pid()PID 控制器生成控制信号
4.3.3 驾驶决策流程
@torch.no_grad()defrun_step(self,input_data,timestamp):# 1. 数据预处理tick_data=self.tick(input_data)# 2. 图像变换rgb_front=self.rgb_front_transform(Image.fromarray(tick_data["rgb_front"])).cuda()rgb_left=self.rgb_left_transform(Image.fromarray(tick_data["rgb_left"])).cuda()rgb_right=self.rgb_right_transform(Image.fromarray(tick_data["rgb_right"])).cuda()rgb_rear=self.rgb_right_transform(Image.fromarray(tick_data["rgb_rear"])).cuda()rgb_center=self.rgb_center_transform(Image.fromarray(cv2.resize(...))).cuda()# 3. 获取自然语言指令last_instruction=self._instruction_planner.command2instruct(...)# 4. 视觉编码image_embeds=self.net.visual_encoder(input_data)# 5. LLM 推理生成轨迹点waypoints,is_end=self.net(input_data,inference_mode=True,image_embeds=image_embeds)# 6. PID 控制生成驾驶信号steer,throttle,brake,metadata=self.control_pid(waypoints,velocity)# 7. 返回控制指令control=carla.VehicleControl()control.steer=float(steer)*0.8control.throttle=float(throttle)control.brake=float(brake)returncontrol

4.4 PID 控制器

文件路径leaderboard/team_code/pid_controller.py

PID 控制器将预测的轨迹点转换为车辆控制信号。

defcontrol_pid(self,waypoints,velocity):# 计算期望速度desired_speed=np.linalg.norm(waypoints[0]-waypoints[1])*2.0# 计算转向角aim=(waypoints[1]+waypoints[0])/2.0angle=np.degrees(np.pi/2-np.arctan2(aim[1],aim[0]))/90# PID 控制steer=self.turn_controller.step(angle)throttle=self.speed_controller.step(desired_speed-speed)# 刹车判断brake=desired_speed<self.config.brake_speedor(speed/desired_speed)>self.config.brake_ratioreturnsteer,throttle,brake,metadata

4.5 路线规划器

文件路径leaderboard/team_code/planner.py

包含两个规划器:

规划器功能
RoutePlanner基于 GPS 的路线规划,生成下一个目标点和命令
InstructionPlanner将驾驶命令转换为自然语言指令

4.6 视觉-语言模型集成

文件路径LAVIS/lavis/models/blip2_models/memfuser.py

将 Memfuser 视觉编码器与 LLM(LLaVA/Vicuna)集成。

classMemfuser(nn.Module):def__init__(self,preception_model,llm_model,...):self.visual_encoder=create_model(preception_model)# 视觉编码器self.llm=load_llm_model(llm_model)# LLM 模型self.qformer=Qformer(...)# Q-Former 桥接层

五、关键技术点

5.1 多模态特征融合

  • 图像特征:ResNet + HybridEmbed → 图像 Token
  • LiDAR 特征:PointPillar → BEV 特征图 → LiDAR Token
  • 位置编码:正弦位置编码(PositionEmbeddingSine)
  • 视图编码:可学习的 View Embedding 区分不同视角

5.2 指令理解

  • 使用 LLaVA/Vicuna 作为语言模型
  • Q-Former 作为视觉-语言桥接
  • 支持自然语言指令如:“Turn left at the next intersection”

5.3 端到端闭环

  • 从传感器输入直接到控制输出
  • 无需手工设计的感知模块
  • 支持实时推理(约 20Hz)

5.4 分布式训练

  • 使用 PyTorch Distributed Data Parallel
  • 支持多 GPU 训练
  • 预训练 + 指令微调两阶段

六、数据流程总结

CARLA Simulator │ ▼ ┌─────────────────┐ │ 传感器数据采集 │ RGB(5视角) + LiDAR + GPS/IMU/Speed └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 数据预处理 │ 图像裁剪/归一化 + LiDAR点云处理 └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 视觉特征提取 │ ResNet + HybridEmbed + Position Encoding └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 多模态特征融合 │ Transformer Encoder (多视图注意力) └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 语言指令理解 │ Q-Former + LLaVA/Vicuna └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 轨迹点预测 │ Transformer Decoder + GRU └────────┬────────┘ │ ▼ ┌─────────────────┐ │ 控制信号生成 │ PID Controller → Steering/Throttle/Brake └────────┬────────┘ │ ▼ CARLA Simulator (执行控制)

七、模型配置与变体

7.1 Memfuser 模型变体

模型名称Encoder DepthDecoder DepthBackbone用途
memfuser_baseline24ResNet50基础版本
memfuser_baseline_e3d333ResNet50平衡版本
memfuser_baseline_e1d313ResNet50轻量版本
memfuser_baseline_e1d3_r2613ResNet26更轻量版本
memfuser_baseline_return_feature24ResNet50返回中间特征

7.2 Interfuser 模型变体

模型名称Encoder DepthDecoder Depth注意力策略
interfuser_baseline33全注意力
interfuser_baseline_seperate_all66分离视图注意力
interfuser_baseline_wolidar66无 LiDAR

八、评估与数据集

8.1 评估路线

  • 42routes:官方评估路线
  • training_routes:训练路线(Town01-Town10)
  • validation_routes:验证路线(Town05)
  • evaluation_routes:评估路线

8.2 场景配置

  • 交通场景(红绿灯、停车标志)
  • 路口场景(左转、右转、直行)
  • 变道场景
  • 跟车场景

8.3 评估指标

  • 路线完成率
  • 时间效率
  • 安全性(碰撞次数)
  • 交通规则遵守

九、部署与运行

9.1 环境依赖

conda env create-f environment.yml conda activate lmdrive

9.2 模型训练

# 视觉编码器预训练cdvision_encoderbashdistributed_pretrain.sh# 指令微调cdLAVIS python train.py --cfg-path configs/models/blip2/blip2_coco.yaml

9.3 评估运行

cdleaderboardbashscripts/run_evaluation.sh

9.4 关键环境变量

变量说明
CARLA_ROOTCARLA 模拟器路径
ROUTES评估路线文件
SCENARIOS场景配置文件
TEAM_AGENT代理代码路径
TEAM_CONFIG代理配置文件
SAVE_PATH结果保存路径

十、核心文件清单

文件路径功能描述
vision_encoder/timm/models/memfuser.pyMemfuser 多模态融合模型
vision_encoder/timm/models/interfuser.pyInterfuser 多模态融合模型
vision_encoder/timm/models/pointpillar.pyPointPillar LiDAR 处理
leaderboard/team_code/lmdriver_agent.pyLMDrive CARLA 代理
leaderboard/team_code/pid_controller.pyPID 控制器
leaderboard/team_code/planner.py路线规划器
leaderboard/team_code/lmdriver_config.py代理配置
LAVIS/lavis/models/blip2_models/memfuser.pyBLIP2 + Memfuser 集成
LAVIS/lavis/models/blip2_models/Qformer.pyQ-Former 编码器
vision_encoder/timm/data/carla_dataset.pyCARLA 数据集
vision_encoder/timm/data/carla_loader.pyCARLA 数据加载器

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询