4. 数据集获取与许可
在自动驾驶研发中,数据集是模型训练、仿真回放与评测闭环的起点。很多团队在算法层面投入巨大,却在“数据怎么拿、怎么放、怎么读、怎么合规用”上反复踩坑:下载中断、目录混乱、格式误读、许可越界,最终导致实验不可复现,甚至引发法律风险。本章围绕数据集获取与许可,从下载方式、目录结构、数据格式、使用协议与合规注意事项五个维度展开,帮助你把数据工程的第一步走稳。
一、核心原理:数据获取是一条“可追溯链路”
数据集获取不是简单的“点下载”,而是一条从来源到落盘的完整链路。它包含四个关键环节:来源确认(官方站点、镜像、合作方)、传输方式(浏览器、命令行、对象存储、API)、完整性校验(哈希、文件数、大小)、许可绑定(协议版本、使用范围、再分发限制)。任何一环缺失,都会让后续训练与评测失去可信基础。
尤其要注意:数据集的“许可”往往与“版本”绑定。同一数据集的不同版本可能采用不同协议,例如早期版本允许非商业研究,后续版本增加商业限制。因此,下载前必须记录数据集名称、版本号、下载时间、来源URL、许可文件哈希,形成可审计的数据台账。
二、下载方式:从浏览器到命令行
小规模数据集可以直接通过浏览器下载,但自动驾驶数据集动辄几十GB到数TB,必须使用命令行或对象存储工具。常见方式包括:wget、curl、aria2c、aws s3 cp、gsutil以及数据集官方提供的Python SDK。推荐使用支持断点续传与多线程的工具,并配合校验脚本。
# 使用 aria2c 多线程下载并断点续传
aria2c -x 16 -s 16 -c \
-d ./raw \
-o nuScenes_v1.0_trainval.zip \
https://www.nuscenes.org/data/v1.0-trainval01_blobs.tgz
# 下载完成后校验 SHA256
sha256sum ./raw/nuScenes_v1.0_trainval.zip
# 与官方提供的 checksum 文件比对
grep "nuScenes_v1.0_trainval.zip" ./raw/checksums.sha256
对于需要登录或申请的数据集,应使用官方API或授权令牌,避免将令牌硬编码在脚本中。建议通过环境变量注入,并记录令牌的申请时间与有效期。
三、目录结构与数据格式:统一规范才能复用
不同数据集的目录结构差异很大。例如KITTI按training/image_2、training/label_2组织,nuScenes按samples、sweeps、maps组织,Waymo Open Dataset则按training、validation分片。若直接混用,会导致数据加载器频繁改写。建议在dataset_root下建立统一抽象层,用meta/记录原始结构映射关系。
| 数据集 | 典型目录/文件 | 主要格式 | 许可要点 |
|---|---|---|---|
| KITTI | training/image_2、label_2、calib | PNG、TXT | 非商业研究,需署名 |
| nuScenes | samples、sweeps、maps、v1.0-trainval | JPG、PCD、JSON | CC BY-NC-SA 4.0,禁商用 |
| Waymo Open | training、validation、testing | TFRecord、Parquet | 自定义协议,需申请 |
| Argoverse | train、val、test、map_files | CSV、Parquet、PNG | CC BY-NC-SA 4.0 |
数据格式方面,图像常用JPEG/PNG,点云常用PCD/BIN,标注常用JSON/XML/CSV。读取时要注意坐标系定义、时间戳单位、标注字段含义。例如nuScenes的标注包含sample_token、instance_token、attribute_tokens,若忽略这些字段,跟踪与预测任务将无法正确构建。
四、使用协议与合规注意事项
使用协议是数据集使用的法律边界。常见协议包括CC BY-NC-SA、CC BY 4.0、Apache 2.0以及自定义协议。核心关注点有四个:是否允许商用、是否允许再分发、是否要求署名、是否要求衍生作品同协议共享。例如CC BY-NC-SA明确禁止商业用途,且衍生作品必须采用相同协议。
合规红线:不要将仅限非商业研究的数据集用于商业产品训练;不要将数据集原始文件上传到公开网盘或代码仓库;不要在未脱敏的情况下使用包含人脸、车牌、地理位置的数据。违反协议可能导致法律追责与账号封禁。
此外,还需注意数据出境与出口管制。部分数据集包含高精地图或敏感地理信息,跨境传输可能受限。团队应建立数据台账,记录每个数据集的来源、版本、许可、使用范围与责任人,并定期审计。
五、案例与复盘:一次“下载成功但训练失败”的排查
某团队在训练nuScenes时发现模型精度异常低。排查后发现:下载时使用了第三方镜像,缺少sweeps目录中的部分文件,且标注JSON版本与图像版本不一致。复盘结论是:下载后必须执行完整性校验与版本一致性检查,不能只看“下载完成”。
最佳实践:建立download.sh与verify.py两个脚本,前者负责下载与断点续传,后者负责校验哈希、文件数、版本号与许可文件。每次获取新数据集时,先运行校验,再进入训练流程。
总结来说,数据集获取与许可是一项工程化、合规化的工作。它要求我们不仅会“下载”,更要会“管理”:管理来源、管理结构、管理格式、管理协议。只有把这一步做扎实,后续的模型训练与评测才有可靠的基础。