Vision-Language-Action:LMDrive双损失函数训练模块与 LangAuto 基准评测框架
LMDrive 双损失函数训练模块与 LangAuto 基准评测框架1. 双损失函数训练模块1.1 损失函数设计核心思想同时优化轨迹点回归和终点分类两个任务通过加权联合损失实现多任务学习。损失函数定义drive.py:166-167, 506-514损失类型任务目标损失函数权重Waypoints Loss回归5个未来轨迹点坐标L1Loss1.0End Loss二分类判断轨迹终点CrossEntropyLoss0.2联合损失公式loss waypoints_loss end_loss * 0.2代码实现self.waypoints_losstorch.nn.L1Loss()# L1损失对异常值更鲁棒self.end_losstorch.nn.CrossEntropyLoss()# 交叉熵分类任务标准损失waypoints_lossself.waypoints_loss(predicted_waypoints,gt_waypoints)end_lossself.end_loss(predicted_end_prob,gt_end_flags)losswaypoints_lossend_loss*0.2权重设计原因Waypoints 回归是核心任务权重设为 1.0End 分类是辅助任务权重设为 0.2 防止过度拟合终点判断对安全至关重要但样本可能不平衡1.2 优化器配置算法原理使用 AdamW 优化器支持梯度裁剪和权重衰减。配置参数runner_base.py:105-123self._optimizertorch.optim.AdamW(optim_params,lrfloat(self.config.run_cfg.init_lr),# 初始学习率betas(0.9,beta2),# 动量系数weight_decayweight_decay,# 权重衰减)关键参数参数典型值说明lr1e-4初始学习率betas(0.9, 0.999)Adam 动量系数weight_decay0.05权重衰减正则化lr_layer_decay1层学习率衰减因子1.3 学习率调度器算法原理采用线性预热 余弦退火策略初期缓慢提升学习率后期平滑下降。代码实现optims.py:56-94classLinearWarmupCosineLRScheduler:defstep(self,cur_epoch,cur_step):ifcur_epoch0:# 线性预热阶段warmup_lr_schedule(stepcur_step,max_stepself.warmup_steps,init_lrself.warmup_start_lr,max_lrself.init_lr,)else:# 余弦退火阶段cosine_lr_schedule(epochcur_epoch,max_epochself.max_epoch,init_lrself.init_lr,min_lrself.min_lr,)学习率曲线学习率 ^ | /\ | / \ | / \ | / \ | / \ |/__________\ ------------- 迭代次数 预热期 余弦退火期余弦退火公式lr min_lr 0.5 * (init_lr - min_lr) * (1 cos(π * epoch / max_epoch))1.4 训练循环流程核心训练循环drive.py:185-287def_train_inner_loop(self,epoch,iters_per_epoch,model,data_loader,optimizer,lr_scheduler,scalerNone,accum_grad_iters1):foriinrange(iters_per_epoch):samplesnext(data_loader)# 获取训练样本lr_scheduler.step(cur_epochinner_epoch,cur_stepi)# 更新学习率withtorch.cuda.amp.autocast(enableduse_amp):loss,loss_dictself.train_step(modelmodel,samplessamples)loss/accum_grad_iters# 梯度累积ifuse_amp:scaler.scale(loss).backward()# 混合精度反向传播else:loss.backward()if(i1)%accum_grad_iters0:# 梯度累积更新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-133propertydefscaler(self):ampself.config.run_cfg.get(amp,False)ifamp:ifself._scalerisNone:self._scalertorch.cuda.amp.GradScaler()returnself._scaler优势显存占用减少约 50%训练速度提升约 20-30%不影响模型精度1.6 分布式训练算法原理使用 PyTorch Distributed Data Parallel (DDP) 进行多卡训练。配置runner_base.py:86-99propertydefmodel(self):ifself._model.device!self.device:self._modelself._model.to(self.device)ifself.use_distributed:self._wrapped_modelDDP(self._model,device_ids[self.config.run_cfg.gpu],find_unused_parametersFalse)returnself._wrapped_model关键特性每张卡独立计算梯度同步通过 all-reduce支持多节点训练find_unused_parametersFalse优化性能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每条路线仅包含起点和终点两个 waypointLong每条路线包含 2-4 个 waypoint路线更长、更复杂文件结构langauto/benchmark_tiny.xmlroutesrouteid0townTown01waypointx-2.96y233.65yaw90.0/!-- 起点 --waypointx33.55y330.46yaw0.0/!-- 终点 --weatheridSoftRainNoonprecipitation30.0.../!-- 天气 --/route.../routes2.3 评测城镇覆盖基准覆盖 8 个城镇城镇特点Town01小型城镇简单道路Town02中型城镇多交叉路口Town03丘陵地形坡道Town04大型城镇高速公路Town05密集城区复杂交通Town06大型城市立交桥Town07乡村道路自然景观Town10HD高清城镇复杂建筑2.4 天气条件配置支持多种天气场景天气 ID描述关键参数ClearNoon晴朗正午cloudiness5CloudyNight多云夜晚sun_altitude_angle-90SoftRainNoon小雨正午precipitation30HardRainNoon大雨正午precipitation100WetCloudyNight湿滑多云夜wetness60MidRainyNight中雨夜晚precipitation60ClearSunset晴朗日落sun_altitude_angle15CloudySunset多云日落cloudiness60天气参数说明参数范围说明cloudiness0-100云量百分比precipitation0-100降水量precipitation_deposits0-100地面积水fog_density0-100雾密度wetness0-100地面湿润度sun_altitude_angle-90~90太阳高度角-90为夜晚2.5 路线定义格式每个 route 包含route id路线唯一标识town城镇名称waypoint起点包含 x, y, z 坐标和 yaw 方向waypoint终点目标位置weather天气配置示例benchmark_tiny.xml第2-5行routeid0townTown01waypointpitch0.0roll0.0x-2.96y233.65yaw90.000374z0.0/waypointpitch0.0roll0.0x33.55y330.46yaw0.0z0.0/weathercloudiness20.0fog_density3.0precipitation30.0sun_altitude_angle45.0idSoftRainNoon//routewaypoint 参数x,y,z世界坐标位置yaw朝向角度0-360度pitch,roll俯仰角和滚转角2.6 Waypoint-to-Control 转换算法原理模型预测的 waypoints 需转换为车辆控制指令转向、油门、刹车采用 PID 控制器实现。代码实现lmdriver_agent.py:581-623defcontrol_pid(self,waypoints,velocity):waypointswaypoints.data.cpu().numpy()waypoints[:,1]*-1# 坐标系转换# 计算期望速度desired_speednp.linalg.norm(waypoints[0]-waypoints[1])*2.0# 判断是否需要刹车brakedesired_speedself.config.brake_speedor(speed/desired_speed)self.config.brake_ratio# 计算转向角度aim(waypoints[1]waypoints[0])/2.0# 取前两个waypoint的中点anglenp.degrees(np.pi/2-np.arctan2(aim[1],aim[0]))/90steerself.turn_controller.step(angle)steernp.clip(steer,-1.0,1.0)# 计算油门deltanp.clip(desired_speed-speed,0.0,self.config.clip_delta)throttleself.speed_controller.step(delta)throttlenp.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_KD2.7 评测指标核心评测指标指标类型说明路线完成率百分比成功到达终点的路线比例平均轨迹误差米预测轨迹与真实轨迹的平均距离碰撞次数计数与障碍物/车辆的碰撞次数违规次数计数闯红灯、逆行等违规行为行驶速度km/h平均行驶速度任务成功率百分比正确执行语言指令的比例评估流程1. 加载基准配置文件 (langauto/benchmark_xxx.xml) 2. 在 Carla 中生成路线和天气 3. LMDriveAgent 运行模型执行驾驶任务 4. 记录车辆状态和行为速度、位置、控制指令 5. Carla Leaderboard 计算评测指标 6. 输出评估报告评测执行流程lmdriver_agent.py:415-569defrun_step(self,input_data,timestamp):tick_dataself.tick(input_data)# 预处理传感器数据# 提取特征image_embedsself.net.visual_encoder(input_data)image_embedsself.update_and_collect(image_embeds)# 模型推理waypoints,is_endself.net(input_data,inference_modeTrue,image_embedsimage_embeds)waypointswaypoints[-1].view(5,2)# 终点判断end_probself.softmax(is_end)[-1][1]ifend_prob0.75:self.visual_feature_buffer[]# waypoint → 控制指令steer,throttle,brake,metadataself.control_pid(waypoints,velocity)# 返回控制指令controlcarla.VehicleControl()control.steerfloat(steer)*0.8control.throttlefloat(throttle)control.brakefloat(brake)returncontrol2.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.pyLMDrive 智能体实现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 beta2accum_grad_iters1梯度累积步数ampTrue混合精度训练4.2 损失参数参数值说明waypoints_loss_typeL1Loss轨迹回归损失end_loss_typeCrossEntropyLoss终点分类损失end_loss_weight0.2终点损失权重4.3 评测参数参数值说明城镇数量8Town01-Town10HD路线数量tiny16快速验证路线数量short16常规评测路线数量long32全面评估waypoint数tiny/short2起点终点waypoint数long2-4多途经点天气类型10晴/雨/雾/夜等传感器5摄像头LiDARGPSIMU多模态感知5. 总结双损失函数训练模块LMDrive 的训练模块采用多任务学习策略通过加权联合损失同时优化Waypoints LossL1Loss回归 5 个未来轨迹点权重 1.0End LossCrossEntropyLoss分类判断轨迹终点权重 0.2训练过程使用AdamW 优化器 余弦退火学习率调度AMP 混合精度训练减少显存占用DDP 分布式训练支持多卡加速梯度累积模拟大批次训练LangAuto 基准评测框架LangAuto 提供标准化的自动驾驶评测环境覆盖 8 个不同地形城镇小型→大型简单→复杂支持 10 种天气条件晴天、雨天、雾天、夜晚等提供三个基准级别tiny/short/long适应不同评测需求基于 Carla 模拟器可复现性强通过训练与评测的闭环迭代LMDrive 模型不断优化语言指令理解和驾驶决策能力。