【动手学轨迹预测】1.6 常用数据集: Waymo Open Dataset

科技   2024-11-26 08:02   上海  

上一节提到了, 评价轨迹预测结果优劣需要有agent的真值, 那么如此大数据量的真值如何获取呢? 有一些开源机构在线上公布了他们采集到的数据集, 本节将介绍轨迹预测常用的一些数据集.

Waymo Open Dataset是Waymo公司为了促进自动驾驶技术、机器感知和相关领域的研究而公开发布的一个大型数据集。该数据集包含了Waymo自动驾驶车队在多个城市和郊区环境中收集的高分辨率传感器数据,涵盖了白天和夜晚、晴天和雨天等多种天气和光照条件下的驾驶场景。

对于轨迹预测需要使用Waymo Motion数据集分为: 70%的训练集(training)、15%的测试集(testing)和15%的验证集(validation)。

Waymo每年都会举办Motion Prediction Challenge, 论文作者可以将自己的模型提交官方测试, 2024参赛模型的表现排行榜如图:

测试集的真值对参赛者是隐藏的。因此,测试集仅包含1秒的历史数据。而训练集和验证集则包含用于模型开发的地面真实未来数据。此外,测试集和验证集还提供了场景中最多8个对象轨迹的列表以供预测。这些对象轨迹的选择旨在包含有趣的行为和平衡的对象类型。

1.6.1 数据格式

Waymo Motion数据集由103,354个片段组成,每个片段包含20秒的对象轨迹,采样率为10Hz,以及覆盖该片段区域的地图数据。这些片段进一步被分割成9秒的时间窗口(包含1秒的历史数据和8秒的未来数据),且这些窗口之间存在不同的重叠。数据以两种形式提供:

  • 以Scenario ****protos buffers存储
  • 将Scenario ****Protocol Buffers转换为 tf.Example protos,其中包含用于构建模型的张量

1.6.2 数据采样方式

在训练集或验证集中的每个9秒序列都包含1秒的历史数据、当前时间的一个样本以及10Hz采样率下的8秒未来真值数据。这对应于10个历史样本、1个当前时间样本和80个未来样本,总共91个样本。

而测试集则隐藏了未来真值数据,因此总共有11个样本(10个历史样本和1个当前时间样本)。

1.6.3 坐标系

数据基于全局坐标,其中X轴代表东向,Y轴代表北向,Z轴代表上方。每个场景中的坐标系统原点都是单独的。

数据集中所有的单位都是米。

1.6.4 Scenario Proto格式

Waymo Motion数据集的由不同的场景Scenario组成. Scenario由proto定义, 包含了当前场景下的所有数据, 包括object的轨迹, 静态地图信息, 动态地图信息(比如交通信号灯)等等. Scenario具体定义如下:

  • scenario_id: 一个独特的场景id

  • timestamps_seconds: 从0开始的时间戳列表

  • tracks: object列表, 每个track包含:

    enum ObjectType {
      TYPE_UNSET=  0;     // 未设置
        TYPE_VEHICLE= 1;    // 汽车
        TYPE_PEDESTRIAN= 2// 行人
        TYPE_CYCLIST= 3;    // 自行车
        TYPE_OTHER= 4;      // 其它
    }
    messageObjectState {
      // 3d坐标
      optionaldouble center_x= 2;
      optionaldouble center_y= 3;
      optionaldouble center_z= 4;
      
      // 长宽高
      optionalfloat length= 5;
      optionalfloat width= 6;
      optionalfloat height= 7;
      
      // 朝向 [-pi, pi).
      optionalfloat heading= 8;
      
      // 速度
      optionalfloat velocity_x= 9;
      optionalfloat velocity_y= 10;
      
      // 有效性标志
      optionalbool valid= 11;
    }

    比如第个时间步时, 第个object的state的数据是tracks[i].states[j]

    • states: 状态列表, state定义如下
    • id: object id
    • object_type: object的类型, 定义如下
  • dynamic_map_states: 对应时间步的动态地图数据列表, 其中包含:

    messageTrafficSignalLaneState {
      // 交通灯控制的lane id
      optional int64 lane= 1;
      
      enum State {
          LANE_STATE_UNKNOWN= 0;// 未知状态
        // 箭头交通灯.
          LANE_STATE_ARROW_STOP= 1//停止:红灯
          LANE_STATE_ARROW_CAUTION= 2//警告:黄灯
          LANE_STATE_ARROW_GO= 3;  //通行:绿灯
      
        // 圆形交通灯.
          LANE_STATE_STOP= 4//停止:红灯
          LANE_STATE_CAUTION= 5//警告:黄灯
          LANE_STATE_GO= 6//通行:绿灯
      
        // 闪烁交通灯.
          LANE_STATE_FLASHING_STOP= 7;  //闪红灯
          LANE_STATE_FLASHING_CAUTION= 8//闪黄灯
        }
      
      //交通灯状态
      optional State state= 2;
      
      //交通灯停止点
      optional MapPoint stop_point= 3;
    }

    比如第个时间步时, 第lane_state的数据是dynamic_map_states[j].lane_states[i]

    • lane_states: 交通信号列表, lane_state定义如下
  • map_features: 场景中的地图数据列表, map_feature定义如下:

messageMapFeature {
// 地图对象ID
optionalint64 id= 1;

// 每个map_features只能是下列对象之一
oneof feature_data {
    LaneCenter lane= 3;// 车道
    RoadLine road_line= 4;// 道路
    RoadEdge road_edge= 5;// 道路边沿
    StopSign stop_sign= 7;// 停止标志
    Crosswalk crosswalk= 8;// 人行横道
    SpeedBump speed_bump= 9;// 减速带
  }
}

每个子对象的结构不再赘述, 可见proto.

  • sdc_track_index: 自动驾驶汽车(自车)在场景中的索引
  • objects_of_interest: 与自车有交互的对象id列表
  • tracks_to_predict: 需要预测的对象列表, 仅在训练集和验证集中提供
messageRequiredPrediction {
// 预测难度等级
enum DifficultyLevel {
    NONE= 0;// 无
    LEVEL_1= 1;// 等级1
    LEVEL_2= 2;// 等级2
  }

// 预测对象的ID
optionalint32 track_index= 1;

// 预测的难度等级
optional DifficultyLevel difficulty= 2;
}
  • current_time_index: 当前时间的时间步长索引, 因为数据中包含过去1秒的历史数据, 此索引之前都是历史数据, 之后都是未来数据.
  • compressed_frame_laser_data: 激光雷达数据列表

参考链接

  • https://waymo.com/open/data/motion/
  • https://github.com/waymo-research/waymo-open-dataset/blob/master/src/waymo_open_dataset/protos/map.proto

推荐阅读:

自动驾驶小白说
输出专业自动驾驶算法教程的开发者社区. 🦈 官网: https://www.helloxiaobai.cn
 最新文章