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

从零搭建自动驾驶训练数据:跟着 LMDrive 走通 7 个环节

从零搭建自动驾驶训练数据:跟着 LMDrive 走通 7 个环节

【免费下载链接】LMDrive[CVPR 2024] LMDrive: Closed-Loop End-to-End Driving with Large Language Models项目地址: https://gitcode.com/gh_mirrors/lm/LMDrive

想训练一辆由大语言模型驱动的自动驾驶汽车,第一道坎往往不在模型本身,而在"自动驾驶训练数据"从哪里来。LMDrive 是 CVPR 2024 的开源项目,它把大语言模型装进了端到端驾驶系统,同时还自带一条从采集到训练的全自动数据生产线。这篇文章不堆理论,只讲实操——我带你以"跑通一次完整的数据生产"为目标,从环境搭建一路走到模型训练,把 7 个环节挨个过一遍。

先看全景:这条数据生产线为什么一环都不能少

动手之前,先花一分钟看懂上图这条流水线。LMDrive 工作时拿到两样输入:一句人类能读懂的导航指令(比如"下一个路口左转"),以及车身四周的多视角 RGB 图像和 LiDAR 点云。指令被分词器翻译成序列,画面被视觉编码器抽成特征,两者汇合后交给大语言模型做推理,最终通过适配器输出转向、油门这类控制信号。

看到这里你应该明白了:模型要学的东西,就是"指令 + 感知 → 控制"这三者之间的对应关系。所以你要产出的训练数据,也必须以同样的结构成对出现。而 CARLA 模拟器恰好能帮你批量制造这种"带剧本"的驾驶场景——这正是整个数据集构建流程的起点。

环节一:三分钟备齐工具,把采集环境搭起来

老规矩,先把项目拿到手:

git clone https://gitcode.com/gh_mirrors/lm/LMDrive cd LMDrive pip install -r requirements.txt

紧接着执行一行初始化命令:

python dataset/init_dir.py

它的作用其实特别朴素,就是帮你提前建好存放数据的目录骨架:

for i in range(4): os.mkdir("sub-%d" % i) # 建 4 个批次目录:sub-0 ~ sub-3 os.mkdir("sub-%d/results" % i) # 每个批次里再放一个 results

相当于在硬盘上挖好了 8 个"收纳格",后面采集的原始数据会按批次丢进去,不会混在一起。

💡 小贴士:建议用虚拟环境装依赖,避免和系统里的其他 Python 包打架。装完之后可以先python dataset/init_dir.py再检查一下目录是否真的建出来了,确认无误再往下走。

环节二:圈定路线和场景,让 CARLA 按"剧本"出车

数据不是随便跑出来的,得先定好"去哪条路、遇见什么状况"。项目用两个文件来定义采集计划:

  • 路线文件.xml格式,描述车辆在某个城镇里怎么走,比如routes_town01_short.xml
  • 场景文件.json格式,描述路上会插入什么突发情况,比如行人穿行、前车急刹,对应town01_all_scenarios.json

这两个文件的配对关系写在data_collection/generate_bashs.py里。表格里列出的就是项目预置的几组"套餐":

路线(怎么走)场景(遇什么)适用城镇
routes_town01_short.xmltown01_all_scenarios.json城镇 01
routes_town05_tiny.xmltown05_all_scenarios.json城镇 05
routes_town06_long.xmltown06_all_scenarios.json城镇 06

想自定义?直接改这个脚本,往字典里加一组"路线 → 场景"的映射就行,完全不用碰采集主程序。

环节三:一键生成批量脚本,多城镇并行开跑

采集计划定好后,下一步是把它们批量变成可执行的 shell 脚本:

python data_collection/generate_batch_collect.py

运行后会在batch_run目录下自动生成一堆脚本,比如run_route_routes_town01_short.sh,一个路线对应一个脚本。想采集哪条路线,就执行哪个:

bash batch_run/run_route_routes_town01_short.sh

采集开始后,CARLA 里的虚拟车会按既定路线行驶,沿途把以下数据一帧一帧地记录下来:

  1. 前、左、右、后四个视角的 RGB 图像;
  2. LiDAR 点云数据;
  3. 车辆自身的位姿、速度等测量值(measurements);
  4. 周围交通参与者的位置信息(actors_data);
  5. 红绿灯、停车标志等环境属性(affordances)。

💡 小贴士:第一次跑,强烈建议先只选一两条 tiny 路线试水,确认整条链路通畅后再放开批量采集,否则很容易攒下一堆"路径错了才发现"的废数据。

环节四:把四路相机画面缝成一张全景图

采集出来的画面是四个独立视角,但模型更习惯"一张图看全局"。tools/data_preprocessing/batch_merge_data.py就是干这个的——把四张图拼成一张 800×2400 的竖版全景图:

new = Image.new(img_front.mode, (800, 2400)) new.paste(img_front, (0, 0)) # 前视:第一块 new.paste(img_left, (0, 600)) # 左视:第二块 new.paste(img_right, (0, 1200)) # 右视:第三块 new.paste(img_rear, (0, 1800)) # 后视:第四块

看到没有,其实就是"新建一张大画布,四张图依次贴上去"。与此同时,脚本还会把actors_data和停车标志信息合并进measurements,生成一份内容更完整的measurements_full,让每一帧的数据都"一次配齐"。

💡 小贴士:这个脚本会读取dataset_index.txt来定位所有路线目录。拼接前先抽查几帧原始图,确认四路相机没装反、没黑屏,再批量跑,能省下不少返工时间。

环节五:让脚本自动给数据"批改作业"打标签

原始数据只有"图像 + 传感器读数",模型还看不懂。它需要知道"这一帧我在执行什么指令、该守什么规则"。tools/data_parsing目录下的一组脚本就是干这件事的"批改老师":

  • parse_instruction.py:解析导航指令,比如把"下个路口左转"拆成结构化指令;
  • follow_rules.py/turn_rules.py:识别跟车、转弯场景下的驾驶规则;
  • parse_notice.py/parse_misleading.py:处理提示信息与容易误导驾驶员的场景。

最终产出的标注数据大致长这样(已精简):

{ "timestamp": 1620000000, "position": {"x": 100.0, "y": 200.0, "z": 0.0}, "velocity": {"x": 10.0, "y": 0.0, "z": 0.0}, "stop_sign": true }

💡 小贴士:标注脚本是规则驱动的,跑完记得抽样对比"人工判断 vs 脚本结果",确认它对特殊场景(环岛、无信号灯路口)的判断也靠谱,再整批应用。

环节六:用统计脚本筛出垃圾数据,守住质量底线

数据量大不代表数据好。采集过程中难免混入被前车完全挡住视野的帧、传感器异常的数据,这些"垃圾"如果不筛掉,会直接污染训练。tools/data_preprocessing下有两兄弟专门管这事:

  • batch_stat_blocked_data.py:先做体检,统计哪些路线、哪些帧存在被遮挡等异常情况;
  • batch_rm_blocked_data.py:根据体检结果,批量移除有问题的数据。

推荐顺序是"先统计、后删除":先跑统计脚本拿到一份问题清单,人工确认无误,再执行删除。删完之后,还可以配合LAVIS/app/dataset_browser.py这类可视化工具,像翻相册一样逐帧抽查拼接图和标注是否正常。

💡 小贴士:删除是不可逆操作,动手前务必先备份一份dataset_index.txt。养成"先统计、后删除、再抽查"的习惯,你的数据集质量会稳定很多。

环节七:把数据集喂进模型,跑通训练与评估

数据准备妥当,终于到了收获时刻。训练的入口配置文件在lavis/projects/lmdrive/drivegpt.yaml,你只需要在文件里把数据集路径、模型参数改成自己的实际值:

python train.py --cfg lavis/projects/lmdrive/drivegpt.yaml

训练完成后再用评估脚本看看模型的闭环表现:

python evaluate.py --cfg lavis/projects/lmdrive/drivegpt.yaml

💡 小贴士:第一次训练先把 batch size 调小、只加载一小部分数据,目的是验证数据加载、模型前向、loss 计算这条链路能正常跑通。确认没问题再调大配置正式训练,能帮你省下排查"数据格式错误"的大量时间。

写在最后:下一步你可以做什么

回到开头那句话:自动驾驶训练数据这道坎,LMDrive 已经帮你铺好了路。它把"采集 → 拼接 → 标注 → 清洗 → 训练"串成了一条可以反复跑通的流水线,你要做的只是理解每个环节在干什么,然后按自己的需求去调整。

下一步的玩法其实很多:在generate_bashs.py里扩充更多城镇和长路线,让数据覆盖更多路况;调整场景配置引入雨天、夜间等天气变化;或者基于已清洗的数据做一次消融实验,看看不同数据量对模型闭环表现的影响。每多走一步,你对"数据如何决定模型上限"的理解就会深一层——现在,先从跑通一条 tiny 路线开始吧。

【免费下载链接】LMDrive[CVPR 2024] LMDrive: Closed-Loop End-to-End Driving with Large Language Models项目地址: https://gitcode.com/gh_mirrors/lm/LMDrive

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

相关文章:

  • 诚信的 日照海边民宿 日照海边民宿
  • Unity 6光线追踪实战:DanbaidongRP光追阴影与高质量SSR从入门到精通
  • 杭州西湖区防水补漏本地实体房屋渗漏检测维修服务商 - 超人防水
  • 黄山徽州区 2026 靠谱防水补漏本地实体房屋渗漏检测维修服务商 #黄山 - 超人防水
  • RustDesk 远程桌面一键部署与使用全指南:新手到进阶的完整教程
  • 无锡滨湖漏水检测维修全城上门2026全网口碑优选:防水补漏公司#无锡 - 超人防水
  • 一篇讲透 NS-USBloader:Switch 游戏安装从文件传输到 payload 注入的完整路径
  • 阴阳师自动化脚本实战:10分钟装好,把日常肝度全交给 OnmyojiAutoScript
  • 大麦自动抢票保姆级指南:开售倒计时全流程实战
  • 5 分钟上手 terraform-aws-ecs:从零部署你的第一个 Fargate ECS 集群
  • 嵌入式项目构建实战:embedded-resources的Meson配置、交叉编译与LTO详解
  • 突破 60 帧天花板:原神帧率解锁工具 genshin-fps-unlock 从入门到调优全指南
  • 应急广播远程取号技术研究取得新突破
  • 并行编程实战—CUDA Tile编程入门之二创建和应用
  • ZenTimings完整指南:AMD Ryzen内存时序监控、电压与频率实时查看的全流程教程
  • 5分钟免费搞定PotPlayer实时字幕翻译:百度API配置从零到流畅
  • 深耕四川单招十余年!成都竞元精品小班定向培养,助你上岸公办院校 - 成都竞元单招
  • 苹果用户实测:2026年抖音去水印最稳方法分享 - 工具软件使用方法推荐
  • 成考本科怎么拿学位证?英语差也能顺利申请吗?三湘学历教育详解 - 米諾
  • PiliPlus 完整攻略:免费、无广告、手机电脑都能用的 B 站客户端
  • Lingarr插件开发实战:如何用.NET编写自定义翻译服务插件(附Cloudflare示例)
  • database/sql标准库:直接操作数据库
  • Lingarr字幕解析器源码解读:SRT与SSA解析/写入的完整实现原理
  • Input Leap 开源 KVM 深度解析:一套键鼠无缝穿越多台电脑的 5 个关键机制
  • 越华环保集团污水边缘数采与HJ212对接:数字化污水治理分层架构实践
  • 5分钟快速上手quanttrader:从pip安装到跑通第一个回测策略
  • 2026 年 8 月北京西城区,旧金资产优化处置优选途径 - 大牌科普时报
  • 还在为呆板的 Windows 任务栏发愁?TranslucentTB 的 5 种通透玩法,3 分钟让你的桌面焕然一新
  • 2026年8月优质的手工型板生产厂家推荐,水平线模具/铸铝铁模具/煤粉砂铸造模具/铁件产品加工,手工型板源头厂家有哪些 - 企业权威推荐大使
  • 丽水漏水检测维修全城上门2026全网口碑优选:防水补漏公司#丽水莲都区 - 超人防水