当前位置: 首页 > news >正文

Vision-Language-Action:LMDrive双损失函数训练模块与 LangAuto 基准评测框架

LMDrive 双损失函数训练模块与 LangAuto 基准评测框架


1. 双损失函数训练模块

1.1 损失函数设计

核心思想:同时优化轨迹点回归和终点分类两个任务,通过加权联合损失实现多任务学习。

损失函数定义drive.py:166-167, 506-514):

损失类型任务目标损失函数权重
Waypoints Loss回归5个未来轨迹点坐标L1Loss1.0
End Loss二分类判断轨迹终点CrossEntropyLoss0.2

联合损失公式

loss = waypoints_loss + end_loss * 0.2

代码实现

self.waypoints_loss=torch.nn.L1Loss()# L1损失:对异常值更鲁棒self.end_loss=torch.nn.CrossEntropyLoss()# 交叉熵:分类任务标准损失waypoints_loss=self.waypoints_loss(predicted_waypoints,gt_waypoints)end_loss=self.end_loss(predicted_end_prob,gt_end_flags)loss=waypoints_loss+end_loss*0.2

权重设计原因

  • Waypoints 回归是核心任务,权重设为 1.0
  • End 分类是辅助任务,权重设为 0.2 防止过度拟合
  • 终点判断对安全至关重要但样本可能不平衡

1.2 优化器配置

算法原理:使用 AdamW 优化器,支持梯度裁剪和权重衰减。

配置参数runner_base.py:105-123):

self._optimizer=torch.optim.AdamW(optim_params,lr=float(self.config.run_cfg.init_lr),# 初始学习率betas=(0.9,beta2),# 动量系数weight_decay=weight_decay,# 权重衰减)

关键参数

参数典型值说明
lr1e-4初始学习率
betas(0.9, 0.999)Adam 动量系数
weight_decay0.05权重衰减(正则化)
lr_layer_decay1层学习率衰减因子

1.3 学习率调度器

算法原理:采用线性预热 + 余弦退火策略,初期缓慢提升学习率,后期平滑下降。

代码实现optims.py:56-94):

classLinearWarmupCosineLRScheduler:defstep(self,cur_epoch,cur_step):ifcur_epoch==0:# 线性预热阶段warmup_lr_schedule(step=cur_step,max_step=self.warmup_steps,init_lr=self.warmup_start_lr,max_lr=self.init_lr,)else:# 余弦退火阶段cosine_lr_schedule(epoch=cur_epoch,max_epoch=self.max_epoch,init_lr=self.init_lr,min_lr=self.min_lr,)

学习率曲线

学习率 ^ | /\ | / \ | / \ | / \ | / \ |/__________\ +-------------> 迭代次数 预热期 余弦退火期

余弦退火公式

lr = min_lr + 0.5 * (init_lr - min_lr) * (1 + cos(π * epoch / max_epoch))

1.4 训练循环流程

核心训练循环drive.py:185-287):

def_train_inner_loop(self,epoch,iters_per_epoch,model,data_loader,optimizer,lr_scheduler,scaler=None,accum_grad_iters=1):foriinrange(iters_per_epoch):samples=next(data_loader)# 获取训练样本lr_scheduler.step(cur_epoch=inner_epoch,cur_step=i)# 更新学习率withtorch.cuda.amp.autocast(enabled=use_amp):loss,loss_dict=self.train_step(model=model,samples=samples)loss/=accum_grad_iters# 梯度累积ifuse_amp:scaler.scale(loss).backward()# 混合精度反向传播else:loss.backward()if(i+1)%accum_grad_iters==0:# 梯度累积更新ifuse_amp:scaler.step(optimizer)scaler.update()else:optimizer.step()optimizer.zero_grad()

训练流程详解

阶段操作说明
数据加载next(data_loader)加载批次训练数据
学习率更新lr_scheduler.step()根据当前 epoch/step 更新学习率
前向传播model(samples)计算损失
梯度累积loss /= accum_grad_iters模拟更大批次训练
反向传播loss.backward()计算梯度
参数更新optimizer.step()更新模型参数
梯度清零optimizer.zero_grad()准备下一轮

1.5 AMP 混合精度训练

算法原理:使用 FP16 进行前向传播,FP32 进行梯度累积,减少显存占用并加速训练。

配置runner_base.py:126-133):

@propertydefscaler(self):amp=self.config.run_cfg.get("amp",False)ifamp:ifself._scalerisNone:self._scaler=torch.cuda.amp.GradScaler()returnself._scaler

优势

  • 显存占用减少约 50%
  • 训练速度提升约 20-30%
  • 不影响模型精度

1.6 分布式训练

算法原理:使用 PyTorch Distributed Data Parallel (DDP) 进行多卡训练。

配置runner_base.py:86-99):

@propertydefmodel(self):ifself._model.device!=self.device:self._model=self._model.to(self.device)ifself.use_distributed:self._wrapped_model=DDP(self._model,device_ids=[self.config.run_cfg.gpu],find_unused_parameters=False)returnself._wrapped_model

关键特性

  • 每张卡独立计算,梯度同步通过 all-reduce
  • 支持多节点训练
  • find_unused_parameters=False优化性能

2. LangAuto 基准评测框架

2.1 框架概述

LangAuto是 LMDrive 项目的自动驾驶基准评测框架,基于 Carla 模拟器构建,用于评估语言指令驱动的自动驾驶模型性能。

核心设计理念

  • 多城镇覆盖:Town01-Town10HD
  • 多天气场景:晴天、雨天、雾天、夜晚等
  • 多路线长度:tiny(短)、short(中)、long(长)

2.2 基准配置文件

三个基准级别

基准名称路线数量waypoint数用途
benchmark_tiny.xml162快速验证、调试
benchmark_short.xml162常规评测
benchmark_long.xml322-4全面评估

路线特征

  • Tiny/Short:每条路线仅包含起点和终点两个 waypoint
  • Long:每条路线包含 2-4 个 waypoint,路线更长、更复杂

文件结构langauto/benchmark_tiny.xml):

<routes><routeid="0"town="Town01"><waypointx="-2.96"y="233.65"yaw="90.0"/><!-- 起点 --><waypointx="33.55"y="330.46"yaw="0.0"/><!-- 终点 --><weatherid="SoftRainNoon"precipitation="30.0".../><!-- 天气 --></route>...</routes>

2.3 评测城镇覆盖

基准覆盖 8 个城镇

城镇特点
Town01小型城镇,简单道路
Town02中型城镇,多交叉路口
Town03丘陵地形,坡道
Town04大型城镇,高速公路
Town05密集城区,复杂交通
Town06大型城市,立交桥
Town07乡村道路,自然景观
Town10HD高清城镇,复杂建筑

2.4 天气条件配置

支持多种天气场景

天气 ID描述关键参数
ClearNoon晴朗正午cloudiness=5
CloudyNight多云夜晚sun_altitude_angle=-90
SoftRainNoon小雨正午precipitation=30
HardRainNoon大雨正午precipitation=100
WetCloudyNight湿滑多云夜wetness=60
MidRainyNight中雨夜晚precipitation=60
ClearSunset晴朗日落sun_altitude_angle=15
CloudySunset多云日落cloudiness=60

天气参数说明

参数范围说明
cloudiness0-100云量百分比
precipitation0-100降水量
precipitation_deposits0-100地面积水
fog_density0-100雾密度
wetness0-100地面湿润度
sun_altitude_angle-90~90太阳高度角(-90为夜晚)

2.5 路线定义格式

每个 route 包含

  1. route id:路线唯一标识
  2. town:城镇名称
  3. waypoint(起点):包含 x, y, z 坐标和 yaw 方向
  4. waypoint(终点):目标位置
  5. weather:天气配置

示例benchmark_tiny.xml第2-5行):

<routeid="0"town="Town01"><waypointpitch="0.0"roll="0.0"x="-2.96"y="233.65"yaw="90.000374"z="0.0"/><waypointpitch="0.0"roll="0.0"x="33.55"y="330.46"yaw="0.0"z="0.0"/><weathercloudiness="20.0"fog_density="3.0"precipitation="30.0"sun_altitude_angle="45.0"id="SoftRainNoon"/></route>

waypoint 参数

  • x,y,z:世界坐标位置
  • yaw:朝向角度(0-360度)
  • pitch,roll:俯仰角和滚转角

2.6 Waypoint-to-Control 转换

算法原理:模型预测的 waypoints 需转换为车辆控制指令(转向、油门、刹车),采用 PID 控制器实现。

代码实现lmdriver_agent.py:581-623):

defcontrol_pid(self,waypoints,velocity):waypoints=waypoints.data.cpu().numpy()waypoints[:,1]*=-1# 坐标系转换# 计算期望速度desired_speed=np.linalg.norm(waypoints[0]-waypoints[1])*2.0# 判断是否需要刹车brake=desired_speed<self.config.brake_speedor(speed/desired_speed)>self.config.brake_ratio# 计算转向角度aim=(waypoints[1]+waypoints[0])/2.0# 取前两个waypoint的中点angle=np.degrees(np.pi/2-np.arctan2(aim[1],aim[0]))/90steer=self.turn_controller.step(angle)steer=np.clip(steer,-1.0,1.0)# 计算油门delta=np.clip(desired_speed-speed,0.0,self.config.clip_delta)throttle=self.speed_controller.step(delta)throttle=np.clip(throttle,0.0,self.config.max_throttle)returnsteer,throttle,brake,metadata

控制流程

预测 waypoints [5, 2] → 取前2个点计算目标方向 → PID转向控制 → 计算期望速度 → PID速度控制 → 输出控制指令

PID 控制器参数lmdriver_config.py):

  • 转向控制:turn_KP,turn_KI,turn_KD
  • 速度控制:speed_KP,speed_KI,speed_KD

2.7 评测指标

核心评测指标

指标类型说明
路线完成率百分比成功到达终点的路线比例
平均轨迹误差预测轨迹与真实轨迹的平均距离
碰撞次数计数与障碍物/车辆的碰撞次数
违规次数计数闯红灯、逆行等违规行为
行驶速度km/h平均行驶速度
任务成功率百分比正确执行语言指令的比例

评估流程

1. 加载基准配置文件 (langauto/benchmark_xxx.xml) 2. 在 Carla 中生成路线和天气 3. LMDriveAgent 运行模型执行驾驶任务 4. 记录车辆状态和行为(速度、位置、控制指令) 5. Carla Leaderboard 计算评测指标 6. 输出评估报告

评测执行流程lmdriver_agent.py:415-569):

defrun_step(self,input_data,timestamp):tick_data=self.tick(input_data)# 预处理传感器数据# 提取特征image_embeds=self.net.visual_encoder(input_data)image_embeds=self.update_and_collect(image_embeds)# 模型推理waypoints,is_end=self.net(input_data,inference_mode=True,image_embeds=image_embeds)waypoints=waypoints[-1].view(5,2)# 终点判断end_prob=self.softmax(is_end)[-1][1]ifend_prob>0.75:self.visual_feature_buffer=[]# waypoint → 控制指令steer,throttle,brake,metadata=self.control_pid(waypoints,velocity)# 返回控制指令control=carla.VehicleControl()control.steer=float(steer)*0.8control.throttle=float(throttle)control.brake=float(brake)returncontrol

2.8 评测执行方式

使用 Carla Leaderboard 框架

# 启动 Carla 模拟器CarlaUE4.exe# 运行评测python leaderboard/leaderboard/evaluate.py\--scenario_runnerleaderboard/scenario_runner\--agentleaderboard/team_code/lmdriver_agent.py\--routeslangauto/benchmark_tiny.xml\--checkpointlmdrive_llava.pth\--port2000

关键组件

  • lmdriver_agent.py:LMDrive 智能体实现
  • evaluate.py:评测执行入口
  • routes:基准路线配置文件

3. 训练与评测协同架构

┌─────────────────────────────────────────────────────────────────────────┐ │ 训练与评测协同架构 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────┐ │ │ │ 训练数据加载 │ │ │ │ (WebDataset) │ │ │ └────────┬─────────┘ │ │ │ 多视角图像 + LiDAR + 文本指令 + 轨迹标注 │ │ ▼ │ │ ┌──────────────────┐ │ │ │ 双损失函数训练 │ │ │ │ ┌─────────────┐ │ │ │ │ │ Waypoints │ │ L1Loss → 轨迹回归 │ │ │ │ Loss (1.0) │ │ │ │ │ └─────────────┘ │ │ │ │ ┌─────────────┐ │ │ │ │ │ End Loss │ │ CrossEntropyLoss → 终点分类 │ │ │ │ (0.2) │ │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ loss = L1 + 0.2×CE │ │ │ │ │ │ │ │ ▼ │ │ │ │ AdamW + CosineLR + AMP │ │ └────────┬─────────┘ │ │ │ 模型权重 │ │ ▼ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ LangAuto 评测 │ │ 训练验证循环 │ │ │ │ 基准测试集 │ │ val_step 评估 │ │ │ │ 8城镇×多天气 │ │ after_evaluation │ │ │ │ benchmark_tiny │ │ TensorBoard记录 │ │ │ │ benchmark_short │ │ │ │ │ │ benchmark_long │ │ │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────────────────────────────┐ │ │ │ 性能指标反馈 │ │ │ │ 路线完成率 / 轨迹误差 / 碰撞次数 / 成功率 │ │ │ └─────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────┘

4. 关键技术参数总结

4.1 训练参数

参数默认值说明
init_lr1e-4初始学习率
min_lr1e-5最小学习率
max_epoch10训练轮数
warmup_steps1000预热步数
weight_decay0.05权重衰减
beta20.999AdamW beta2
accum_grad_iters1梯度累积步数
ampTrue混合精度训练

4.2 损失参数

参数说明
waypoints_loss_typeL1Loss轨迹回归损失
end_loss_typeCrossEntropyLoss终点分类损失
end_loss_weight0.2终点损失权重

4.3 评测参数

参数说明
城镇数量8Town01-Town10HD
路线数量(tiny)16快速验证
路线数量(short)16常规评测
路线数量(long)32全面评估
waypoint数(tiny/short)2起点+终点
waypoint数(long)2-4多途经点
天气类型10+晴/雨/雾/夜等
传感器5摄像头+LiDAR+GPS+IMU多模态感知

5. 总结

双损失函数训练模块

LMDrive 的训练模块采用多任务学习策略,通过加权联合损失同时优化:

  1. Waypoints Loss(L1Loss):回归 5 个未来轨迹点,权重 1.0
  2. End Loss(CrossEntropyLoss):分类判断轨迹终点,权重 0.2

训练过程使用:

  • AdamW 优化器 + 余弦退火学习率调度
  • AMP 混合精度训练减少显存占用
  • DDP 分布式训练支持多卡加速
  • 梯度累积模拟大批次训练

LangAuto 基准评测框架

LangAuto 提供标准化的自动驾驶评测环境

  • 覆盖 8 个不同地形城镇(小型→大型,简单→复杂)
  • 支持 10+ 种天气条件(晴天、雨天、雾天、夜晚等)
  • 提供三个基准级别(tiny/short/long)适应不同评测需求
  • 基于 Carla 模拟器,可复现性强

通过训练与评测的闭环迭代,LMDrive 模型不断优化语言指令理解和驾驶决策能力。

http://www.jsqmd.com/news/1131833/

相关文章:

  • HarmonyKit | 鸿蒙新特性对比:Tabs vs HdsTabs 选型深度解析
  • 嘉立创SMT 2026下单实战:3种器件库存状态解析与5步高效备料策略
  • 高并发秒杀三大核心技术实战
  • vsftpd 3.0.5 安全配置实战:5项关键设置加固FTP服务器
  • KubeFed v0.3.1 实战部署:2集群联邦配置与Nginx应用分发验证
  • 最小权限原则实战:从Linux进程到云原生的五层权限收缩
  • 小产和流产有什么区别?
  • 2026最新8款AI编程助手学生党平替实测合集
  • 【共创季稿事节】随机数生成器:Math.random() 的原理与应用
  • NVMe 2.0b 控制器架构解析:3种控制器类型与2种模型的核心差异
  • web第十一次作业
  • 基于51单片机指纹密码锁/指纹解锁/指纹识别门禁系统/电子21(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • 现代密码学实战:Python实现3种经典密码(凯撒、维吉尼亚、RSA)
  • SmileCli04 Multi_Agent实现
  • 如何轻松获取大疆无人机历史固件:5个简单步骤实现固件自由
  • OpenCV 4.x 形态学操作实战:3种结构元素与5种算子对字符识别效果对比
  • 2026最新5款AI编程工具平替实测合集|开发者全方位权威榜单
  • C++中内存池的简单原理及实现详解
  • 告别AI能力局限:从零读懂Tool Calling,实现大模型调用外部工具、落地真实业务
  • PCIe 6.0 DMWr 实战:3步配置与 64B/128B 负载性能对比
  • OnlyOffice 编译包跨平台部署:CentOS 7 系统 5 项关键服务配置详解
  • 今天我重读了一次《重构》,说说我觉得能在AI中用到的几个地方
  • 5分钟解锁:FGA如何让你每天从FGO刷本中解放3小时
  • 河南洛阳无人机维修机构推荐|河南筋斗云翼航空一站式低空产业实训基地
  • 首月半价cursor
  • 26-MCP协议是什么
  • Plone安全架构解析:默认拒绝与五维控制的开源实践
  • 深度学习过拟合实战:L1/L2正则化与Dropout在Auto MPG回归任务中的5方案对比
  • VOC、COCO、YOLO 3 种目标检测数据集格式对比与 Python 转换脚本
  • mba法律论文选题