ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从零搭建 LMDrive 自动驾驶数据集:采集、清洗与标注四步实战

从零搭建 LMDrive 自动驾驶数据集:采集、清洗与标注四步实战 从零搭建 LMDrive 自动驾驶数据集采集、清洗与标注四步实战【免费下载链接】LMDrive[CVPR 2024] LMDrive: Closed-Loop End-to-End Driving with Large Language Models项目地址: https://gitcode.com/gh_mirrors/lm/LMDrive训练一个能听懂前方路口左转注意右侧来车这类自然语言指令的自动驾驶大模型你遇到的第一个拦路虎往往是数据——真实道路数据买不起、版权不清、标注成本极高。而 CVPR 2024 的 LMDrive 项目恰好把整条语言引导端到端驾驶的数据生产链路完整开源了从 CARLA 模拟器里的规则专家车采集多视角传感器数据到拼接、清洗、打上导航与提示指令再到直接喂给视觉编码器和语言模型做两阶段训练。本文将这套链路拆解为四个可独立上手的模块手把手带你跑通一次完整的 LMDrive 数据集构建流程。一、先搞懂它怎么运作三个输入、一套闭环LMDrive 的核心思路可以概括为一句话把驾驶当作看得见的对话。它同时接收三类信息来生成方向盘、油门、刹车控制信号多视角传感器流前、左、右、后四路相机画面外加 360° 激光雷达点云让模型看清当前场景导航指令来自导航软件或人类的自然语言如第二个出口驶出环岛人类提示指令notice针对突发与长尾场景的提醒如前方有车辆切入请注意减速。项目把这三类信号组织成约 6.4 万条数据片段每段持续 2~20 秒采集频率约 10Hz。每条片段由一段导航指令、若干提示指令、一组多模态多视角传感器帧和对应的控制真值组成。训练分两步走先用视觉编码器把传感器数据压缩成视觉 token对应vision_encoder目录再在 LAVIS 框架下做指令微调对齐语言 视觉 → 控制的映射关系。了解了这个闭环下面四个模块的操作你就能明白每一步到底在为模型准备什么。二、模块一搭好采集流水线让 4 台 CARLA 并行产数据数据采集是整套流程的地基目标是让规则专家车leaderboard/team_code/auto_pilot.py在 8 个城镇、随机天气与随机交通场景下反复跑路线把每一帧的多模态数据落盘。项目默认用 4 台并行的 CARLA 服务器提速端口分别占用 2000/2002/2004/2006。第 1 步克隆并初始化目录结构git clone https://gitcode.com/gh_mirrors/lm/LMDrive cd LMDrive python dataset/init_dir.pyinit_dir.py会自动创建sub-0到sub-3四个采集槽位每个槽位下再生成一个results文件夹用于存放对应服务器的运行结果与检查点。执行后你可以用ls dataset/确认四个子目录是否就位。第 2 步生成采集脚本先编辑data_collection/generate_bashs.py它内部维护了一张路线 → 场景映射表例如routes_town01_short.xml对应town01_all_scenarios.json。你可以按需增删路线或把ip_ports列表从 4 台扩展到更多服务器。随后依次运行cd data_collection python generate_bashs.py # 为每个槽位生成带端口/种子参数的脚本 python generate_batch_collect.py # 生成一键并行执行的聚合脚本执行后你会看到bashs/sub-0/等目录下出现了大量形如routes_town01_short.sh的单路线脚本以及batch_run/下的聚合入口。单个脚本内部由base_script.sh拼装而成核心是调用leaderboard_evaluator.py并把SAVE_PATH指向dataset/sub-N/data。这里值得留意auto_agent.yaml中的两个参数save_skip_frames: 2控制抽帧间隔waypoint_disturb: 0.2给专家车的目标点加随机扰动让同一条路线每次跑出的轨迹略有差异从而提升数据多样性。第 3 步启动服务器并开跑先在 CARLA 根目录分别用不同 GPU 启动 4 个实例也可改用 Docker 拉取carlasim/carla:0.9.10.1CUDA_VISIBLE_DEVICES0 ./CarlaUE4.sh --world-port2000 -opengl CUDA_VISIBLE_DEVICES1 ./CarlaUE4.sh --world-port2002 -opengl CUDA_VISIBLE_DEVICES2 ./CarlaUE4.sh --world-port2004 -opengl CUDA_VISIBLE_DEVICES3 ./CarlaUE4.sh --world-port2006 -opengl 然后挑一条路线开始采集bash data_collection/batch_run/run_route_routes_town01_short.sh每个跑完的路线会在dataset/sub-N/data/下生成一个以城镇_路线长度_天气_时间戳命名的文件夹内部按帧存放rgb_front/left/right/rear、lidar、measurements、actors_data、affordances等子目录。这一步是整个流程中最耗时的环节建议先用tiny路线验证全链路通畅再大规模铺开。三、模块二预处理五连招把原始帧整理成可训练样本采集得到的原始数据散落在大量小文件中直接训练会让 IO 成为瓶颈。tools/data_preprocessing下的脚本按固定顺序完成整合与清洗务必依次执行# 1. 生成索引文件 dataset_index.txt python get_list_file.py $DATASET_ROOT # 2. 合并多视角图像与测量数据可选强烈建议 python batch_merge_data.py $DATASET_ROOT # 3. 删除合并后冗余的原始文件可选 python batch_rm_rgb_data.py $DATASET_ROOT # 4. 统计长时间被堵住的帧 python batch_stat_blocked_data.py $DATASET_ROOT # 5. 删除被堵帧并重排帧号 python batch_rm_blocked_data.py $DATASET_ROOT python batch_recollect_data.py $DATASET_ROOT # 6. 把全部帧的测量数据合并为单个文件 python batch_merge_measurements.py $DATASET_ROOT几个关键细节值得单独说明get_list_file.py会统计每个路线文件夹的帧数不足 32 帧的路线会被直接剔除——太短的片段对训练毫无价值只会在索引里制造噪声batch_merge_data.py是拼图 整合二合一它把四路相机帧按固定偏移粘成一张 800×2400 的大图存入rgb_full同时把measurements、actors_data和停车标志信息合并成measurements_full训练时只需按帧号读取一次显著减少 IO 次数batch_stat_blocked_data.py通过一组启发式条件判断堵车帧当车速低于 0.1、前方无红灯但车辆仍长时间刹停超过 10 帧时判定该路段数据无效统计结果写入blocked_stat.txt供下一步删除。预处理完成后每个路线文件夹就规范成了rgb_full、lidar、measurements_full、affordances等标准结构顶层索引文件形如routes_town06_long_w7_11_28_18_28_35/ 1062 routes_town01_short_w2_11_16_08_27_10/ 1785每行是相对路径 帧数训练代码会用它拼接出完整的读取路径。四、模块三规则引擎标注指令让每一帧都有台词这一步是把普通传感器数据变成语言驾驶数据的魔法时刻。tools/data_parsing下四个规则文件定义了四类标注器turn_rules.py转向类指令如 Turn-01 到 Turn-06覆盖单左转、单右转、直行、环岛出口、连续变道等组合follow_rules.py跟车类指令按跟车风格与方向细分notice_rules.py提示类指令对应 CARLA 官方场景库里的 Scenario1~Scenario9例如前方车辆切入、行人穿行等other_rules.py兜底规则覆盖前两类覆盖不到的杂项场景。运行解析脚本即可批量产出三种标注文件python3 parse_instruction.py $DATASET_ROOT # 输出 navigation_instruction_list.txt python3 parse_notice.py $DATASET_ROOT # 输出 notice_instruction_list.txt python3 parse_misleading.py $DATASET_ROOT # 输出 misleading_data.txt每种规则都会从一整段路线里掐出对应的时间窗口输出一条 JSON 记录包含帧号区间、指令文本、指令 ID、城镇编号、天气编号、路线路径等字段。例如一条右转指令会被解析为带有frame_id、instruction、town_id、route_path的完整样本训练时直接按这些字段切取对应的视觉帧。misleading_data.txt记录的是带误导性的片段用来训练模型在错误指令下保持安全的鲁棒性——这个设计在多数同类数据集中是少见的值得你在复现时重点验证。五、模块四两阶段训练闭环验证数据质量数据是否合格最终要看模型能不能学会。LMDrive 的训练分为两阶段用你刚构建的数据即可完整跑通阶段一视觉编码器预训练cd vision_encoder bash scripts/train.sh此阶段把多视角图像与点云编码成视觉 token产出预训练 checkpoint默认保存在output/目录。脚本里可配置 GPU 数量、DATASET_ROOT路径、模型结构如memfuser_baseline_e1d3_r26以及--train-towns、--val-towns这类数据过滤选项——你可以刻意让训练集与验证集使用不同的城镇组合检验泛化能力。阶段二指令微调cd LAVIS bash run.sh 8 lavis/projects/lmdrive/notice_llava15_visual_encoder_r50_seq40.yaml微调阶段对齐指令文本 视觉 token → 控制信号训练配置里要注意preception_model_ckpt指向阶段一的输出storage指向你的数据集根目录token_max_length控制最多输入多少帧、sample_interval控制抽帧步长。use_notice_prompt开关决定是否把提示指令混入训练——在 LangAuto-Notice 基准上验证模型对人类提示的响应能力时这个开关必须打开。闭环评估启动 CARLA 服务器后设置leaderboard/scripts/run_evaluation.sh中的TEAM_AGENT为leaderboard/team_code/lmdrive_agent.py、ROUTES指向langauto/下的benchmark_long.xml短/微小基准则换成 short/tiny 版本再运行脚本即可得到驾驶分数。官方报告中长基准约 36.2、短基准约 50.6 的成绩可以作为你数据集质量的对照基准。六、避坑指南新手最容易翻车的 5 个细节端口与种子不一致generate_bashs.py里每个槽位的PORT必须和实际启动的 CARLA 端口一一对应否则采集脚本会连上错误的模拟器甚至静默失败。建议改完脚本后先抽查一个生成文件里的export PORT是否与预期一致。漏装 CARLA Python APIbase_script.sh中硬编码了carla-0.9.10-py3.7的 egg 路径如果你的 Python 版本或 CARLA 小版本不同必须同步修改这行PYTHONPATH这是报ModuleNotFoundError: carla的头号来源。跳步执行预处理batch_merge_data.py依赖dataset_index.txt已生成batch_rm_blocked_data.py依赖统计结果顺序颠倒会得到空索引或误删数据。建议把七条命令写成一行串联每次执行前先确认上一步的输出文件存在。忽视 32 帧过滤get_list_file.py会静默丢弃短路线若你发现索引里的路线数远少于采集数先别怀疑脚本去检查是否大量路线因异常中断只有个位数帧。微调配置与阶段一产物不匹配preception_model_ckpt路径写错或模型结构不一致会在加载权重时抛出形状不匹配错误。建议训练前用一行 Python 脚本torch.load检查 checkpoint 的键结构是否与配置文件中的模型定义一致。七、提速技巧让采集与清洗快 3 倍并行度拉满所有预处理脚本底层都用了multiprocessing.Pool(8)如果机器核数更多直接把process调用处的进程数改到 CPU 核数附近多路线处理近乎线性加速。按需裁剪路线验证链路时只保留routes_town01_tiny.xml这类短路线一条几十秒就能跑完确认无误后再启用 long 路线全量采集能省下大量试错时间。多机联合采集generate_bashs.py的ip_ports列表不仅支持 localhost也可以填局域网内其他机器的 IP——把 4 台 CARLA 分布到多台 GPU 机器上采集吞吐可以成倍放大。先复用官方数据再自建官方已在公开渠道发布了约 6.4 万条数据片段想先验证训练流程正确性可以直接下载官方数据跑通两阶段训练再回头用自建数据替换避免数据采完才发现代码有问题的尴尬。总结与下一步至此你已完整走通 LMDrive 数据集的四条主线用规则专家车在 CARLA 里并行采集多视角数据、按固定顺序做整合与清洗、用规则引擎自动标注导航与提示指令、再通过两阶段训练完成闭环验证。这套流水线的价值在于它把语言驾驶数据的生产成本压到了极低——不需要人工标注不依赖真实路采一台 GPU 服务器就能按需生成海量多样化数据。如果你打算更进一步可以从三个方向深入一是修改tools/data_parsing下的规则类为数据集注入自定义场景语义二是调整auto_agent.yaml的扰动参数与天气组合系统性提升数据分布覆盖率三是把采集的天气、城镇、场景类型做成分布统计表作为论文或技术报告中的数据多样性论证。数据是你训练的第一个动作也是决定模型上限的那块地基值得多花时间打磨。【免费下载链接】LMDrive[CVPR 2024] LMDrive: Closed-Loop End-to-End Driving with Large Language Models项目地址: https://gitcode.com/gh_mirrors/lm/LMDrive创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表