上一节提到了, 评价轨迹预测结果优劣需要有agent的真值, 那么如此大数据量的真值如何获取呢? 有一些开源机构在线上公布了他们采集到的数据集, 本节将介绍轨迹预测常用的一些数据集.
Waymo Open Dataset是Waymo公司为了促进自动驾驶技术、机器感知和相关领域的研究而公开发布的一个大型数据集。该数据集包含了Waymo自动驾驶车队在多个城市和郊区环境中收集的高分辨率传感器数据,涵盖了白天和夜晚、晴天和雨天等多种天气和光照条件下的驾驶场景。
对于轨迹预测需要使用Waymo Motion数据集分为: 70%的训练集(training)、15%的测试集(testing)和15%的验证集(validation)。
测试集的真值对参赛者是隐藏的。因此,测试集仅包含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