news 2026/8/22 14:21:44

tusimple-benchmark车道线标注格式详解:h_samples、lanes与-2占位符到底怎么用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
tusimple-benchmark车道线标注格式详解:h_samples、lanes与-2占位符到底怎么用

tusimple-benchmark车道线标注格式详解:h_samples、lanes与-2占位符到底怎么用

【免费下载链接】tusimple-benchmarkDownload Datasets and Ground Truths: https://github.com/TuSimple/tusimple-benchmark/issues/3项目地址: https://gitcode.com/gh_mirrors/tu/tusimple-benchmark

tusimple-benchmark 是 CVPR 2017 自动驾驶车道线检测挑战赛的官方数据集,包含约 7000 段高速行车视频片段。本文用 3 个真实标注例子,带你快速看懂车道线标注格式:h_sampleslanes-2占位符到底怎么用,并附上可视化验证方法和新手避坑清单。

🚗 一、30 秒认识 tusimple-benchmark 车道线检测数据集

tusimple-benchmark是 TuSimple 公司为 CVPR 2017 自动驾驶挑战赛发布的官方基准项目,包含两项挑战:车道线检测和车速估计,本文聚焦前者。

车道线是高速公路上的主要静态要素,为车辆控制提供定位信息。数据集的核心信息如下:

项目说明
训练集3626 段视频片段,对应 3626 张标注帧
测试集2782 段视频片段(无标注,需提交预测)
片段规格每段 1 秒、共 20 帧,相机方向接近行车方向
标注方式仅标注每段的第 20 帧(最后一帧)
标注范围当前车道 + 左右车道,最多 4 条车道线(变道时允许 5 条)

💡 关键认知:标注不是逐像素的掩码,而是在固定行距上采样出的一串点坐标。这也是h_sampleslanes两个字段存在的原因。

📁 二、目录结构快速定位:标注文件在哪里

数据集的目录结构非常简洁:

dataset/ ├── clips/ # 视频片段目录 │ └── some_clip/ # 每段 20 张连续图像 └── tasks.json # 训练集为标注数据;测试集为提交模板

label_data_(date).json每一行 JSON 对应一个片段第 20 帧的标注,用raw_file字段指向对应的图像路径。官方标注样例如下,绿色圆圈就是按行采样得到的车道线标注点:

🔍 三、h_samples 与 lanes 字段逐项拆解(附完整示例)

一条完整的标注 JSON 长这样(车道数据已截断):

{ "lanes": [ [-2, -2, -2, -2, 632, 625, 617, 609, ... 314, 307, 299], [-2, -2, -2, -2, 719, 734, 748, 762, ... 1236, 1265, -2, -2, -2, -2, -2], [-2, -2, -2, -2, -2, 532, 503, 474, ... 271, 241, 212, 183, 154, 125, 96, 67, 38, 9, -2, ...], [-2, -2, -2, 781, 822, 862, 903, ... 1269, -2, -2, -2, -2, -2, -2] ], "h_samples": [240, 250, 260, 270, 280, 290, ... 690, 700, 710], "raw_file": "path_to_clip" }

三个字段各司其职:

字段类型含义
raw_filestr该片段第 20 帧的图像路径
laneslist[list[int]]最多 5 条车道线,每条车道线是一个横坐标 x列表
h_sampleslist[int]采样点的纵坐标 y(行号),等间距排列

三条核心规则

  1. 长度对齐len(lanes[i]) == len(h_samples),每条车道线的 x 列表必须与h_samples等长;
  2. 等距采样h_samples按与拍摄车相同的距离间隔取值(上例为 240→710、步长 10,共 48 个采样行);
  3. 配对成点:把lanes[i]中每个元素与h_samples对应位置的 y 一一配对,就得到该车道线在图像上的(x, y)坐标点序列。

官方指南 doc/lane_detection/guideline.md 中概括为:"zip每条车道线与h_samples,即可得到该车道线的连续点序列"。配对后的效果如下图所示:

❌ 四、-2 占位符到底怎么用:缺失车道线的标记规则

-2是新手最容易困惑的地方,记住一句话即可:

lanes中的-2表示"在该 h_sample 行上,不存在车道线"。

出现-2的典型场景有三种:

  • 车道线从某个行才出现(如从远处驶来、从画面外进入);
  • 车道线在某行延伸出画面(x 超出图像范围);
  • 车道线被车辆、路障遮挡,该段不可见。

回到上面的示例:第一条车道线的前 4 个值都是-2(对应 240~270 行),它的第一个有效点是 (632, 280)——即第 280 行、横坐标 632 像素处。

⚠️ 提交预测结果时同理:某个采样行超出视野或没有车道线,就记录-2,而不是 0 或随意插值。

评估代码在打分时会统一忽略负值,只需按x >= 0过滤即可,参考实现见 evaluate/lane.py。

🖼️ 五、如何快速可视化验证标注:配对 h_samples 与 lanes

拿到标注后,最快的验证方式是把点画回图像上。核心逻辑只有 5 行:

import json, cv2 line = json.loads(open('label_data.json').readline()) img = cv2.imread(line["raw_file"]) for lane in line["lanes"]: for x, y in zip(lane, line["h_samples"]): if x >= 0: # 过滤 -2 占位符 cv2.circle(img, (x, y), 5, (0, 255, 0), -1)

官方示例笔记本 example/lane_demo.ipynb 就用这种方式展示:先读取原始图像,再把lanesh_samples配对绘制绿色圆点,最后与预测结果对比打分,是理解标注格式的最好的入门材料。

⚠️ 六、新手避坑清单:5 个最常见的错误

  1. 长度不对齐:某条车道线的 x 列表长度 ≠len(h_samples),评估代码会直接抛出Format of lanes error
  2. 提交车道线过多:提交条数 > 真实条数 + 2 时,该图 accuracy 直接记 0。真实标注最多 4 条(少量 5 条),请只提交最有把握的车道线;
  3. 缺少 run_time:预测结果必须包含run_time列表(每帧耗时,单位毫秒),漏写直接报错;
  4. 算法太慢:官方说明低于 5 fps(单帧约 200ms)会被视为"无预测车道线",虽然不按时速排名,但太慢同样拿 0 分;
  5. 误用 -2-2不是"不标注",而是"该行确实没有车道线"。预测时缺失行必须显式写-2

📌 打分阈值速记(定义见 evaluate/lane.py):预测点与真实点横向误差小于20 像素(按车道线角度修正)记为正确点;一条车道线正确点比例达到85%才算匹配成功。

🚀 七、快速开始:克隆仓库跑通第一个示例

git clone https://gitcode.com/gh_mirrors/tu/tusimple-benchmark

克隆后建议按以下顺序阅读:

  • 挑战赛完整说明与标注格式:doc/lane_detection/readme.md
  • 数据格式与评估指南:doc/lane_detection/guideline.md
  • 可视化 + 评估演示笔记本:example/lane_demo.ipynb
  • 官方评估实现:evaluate/lane.py

数据集文件较大,下载地址请在项目仓库的Issue #3中获取。


一句话总结h_samples给出"在哪些行采样",lanes给出"每行车道线的横坐标",-2表示"这行没有车道线"。三者配对后就是完整的一条车道线,理解了这个点,tusimple-benchmark 的车道线标注就再没有门槛了。

【免费下载链接】tusimple-benchmarkDownload Datasets and Ground Truths: https://github.com/TuSimple/tusimple-benchmark/issues/3项目地址: https://gitcode.com/gh_mirrors/tu/tusimple-benchmark

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 14:21:19

不配证书,3步抓通安卓App全部流量

不配证书,3步抓通安卓App全部流量 【免费下载链接】r0capture 安卓应用层抓包通杀脚本 项目地址: https://gitcode.com/gh_mirrors/r0/r0capture 装完App想看看它到底发了什么请求,结果证书校验全挡住了?r0capture是一款基于Frida的安…

作者头像 李华
网站建设 2026/8/22 14:19:37

MAA自动公招设置教程:明日方舟的公开招募怎么一键搞定?

MAA自动公招设置教程:明日方舟的公开招募怎么一键搞定? 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址:…

作者头像 李华
网站建设 2026/8/22 14:19:09

Git撤销提交全攻略:从reset、revert到团队协作规范

1. 项目概述:当提交记录成为“历史包袱” 在团队协作开发或者个人项目迭代中,使用 Git 进行版本控制几乎是现代开发者的标配。我们常常会使用 fork 操作来复制一个远程仓库,然后在自己的副本上进行功能开发或问题修复。在这个过程中&#x…

作者头像 李华
网站建设 2026/8/22 14:17:14

Peacock快速入门教程:5个步骤从零部署你的HITMAN暗杀世界私服

Peacock快速入门教程:5个步骤从零部署你的HITMAN暗杀世界私服 【免费下载链接】Peacock The Peacock Project is a HITMAN™ World of Assassination trilogy server replacement. 项目地址: https://gitcode.com/gh_mirrors/pe/Peacock Peacock 是一个免费的…

作者头像 李华
网站建设 2026/8/22 14:16:25

LLM-as-a-Verifier插件:为DeepSeek Harness工作流构建AI质检员

最近在折腾 DeepSeek Harness 这类 LLM 应用框架时,我遇到了一个几乎所有开发者都会头疼的问题:如何让 AI 生成的内容不只是“看起来对”,而是“真的能用”?你肯定也经历过。用框架跑一个任务,比如生成一段代码、写一份…

作者头像 李华