Waymo Open Dataset 仿真智能体挑战赛教程:从数据加载到结果提交

Waymo Open Dataset 仿真智能体挑战赛教程:从数据加载到结果提交

【免费下载链接】waymo-open-dataset Waymo Open Dataset 【免费下载链接】waymo-open-dataset 项目地址: https://gitcode.com/gh_mirrors/wa/waymo-open-dataset

概述

本文将深入解析Waymo Open Dataset中的仿真智能体(Sim Agents)挑战赛教程,帮助读者理解如何利用该数据集进行智能体行为仿真。教程涵盖了从数据加载、简单策略实现、可视化展示到最终结果提交的完整流程。

环境准备

首先需要安装Waymo Open Dataset的TensorFlow支持库:

!pip install waymo-open-dataset-tf-2-12-0==1.6.7

然后导入必要的Python库:

import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

from waymo_open_dataset.protos import scenario_pb2
from waymo_open_dataset.protos import sim_agents_submission_pb2
from waymo_open_dataset.utils import trajectory_utils
from waymo_open_dataset.utils.sim_agents import submission_specs
from waymo_open_dataset.utils.sim_agents import visualizations

数据加载与准备

数据集路径配置

需要设置数据集文件的路径,教程中使用验证集(validation set)进行演示:

DATASET_FOLDER = '/waymo_open_dataset_'
VALIDATION_FILES = os.path.join(DATASET_FOLDER, 'validation.tfrecord*')

加载单个场景

filenames = tf.io.matching_files(VALIDATION_FILES)
dataset = tf.data.TFRecordDataset(filenames)
dataset_iterator = dataset.as_numpy_iterator()

bytes_example = next(dataset_iterator)
scenario = scenario_pb2.Scenario.FromString(bytes_example)

仿真参数配置

挑战赛对仿真过程有明确要求,这些参数可以通过submission_specs模块获取:

challenge_type = submission_specs.ChallengeType.SIM_AGENTS
submission_config = submission_specs.get_submission_config(challenge_type)

print(f'仿真步数: {submission_config.n_simulation_steps}')
print(f'每步持续时间: {submission_config.step_duration_seconds}秒')
print(f'每个场景的并行仿真次数: {submission_config.n_rollouts}')

仿真实现

确定需要仿真的对象

sim_agent_ids = submission_specs.get_sim_agent_ids(scenario, challenge_type)
print(f'需要仿真的对象ID: {sim_agent_ids}')

简单策略实现

教程展示了一个基于线性外推的简单策略:

def simulate_with_extrapolation(scenario):
    # 加载并预处理轨迹数据
    logged_trajectories = trajectory_utils.ObjectTrajectories.from_scenario(scenario)
    logged_trajectories = logged_trajectories.gather_objects_by_id(
        tf.convert_to_tensor(sim_agent_ids))
    
    # 计算最后速度作为动作
    states = tf.stack([logged_trajectories.x, logged_trajectories.y, 
                      logged_trajectories.z, logged_trajectories.heading], axis=-1)
    last_velocities = states[:, -1, :3] - states[:, -2, :3]
    
    # 添加噪声创建多个仿真
    simulated_states = tf.tile(states[tf.newaxis, :, -1:, :], 
                             [submission_config.n_rollouts, 1, 1, 1])
    
    for _ in range(submission_config.n_simulation_steps):
        current_state = simulated_states[:, :, -1, :]
        next_state = current_state + last_velocities[None, :, :]
        simulated_states = tf.concat([simulated_states, next_state[:, :, None, :]], axis=2)
    
    return logged_trajectories, simulated_states[:, :, 1:, :]

结果可视化

使用Matplotlib对仿真结果进行可视化:

fig, ax = plt.subplots(1, 1, figsize=(10, 10))
visualizations.get_animated_states(
    fig, ax, scenario,
    simulated_states[0, :, :, 0],  # x坐标
    simulated_states[0, :, :, 1],  # y坐标
    simulated_states[0, :, :, 3],  # 朝向
    lengths, widths)

结果提交格式

仿真结果需要按照特定协议格式进行封装:

  1. SimulatedTrajectory: 单个对象的仿真轨迹
  2. JointScene: 单个仿真中的所有对象轨迹
  3. ScenarioRollouts: 一个场景的所有并行仿真
  4. SimAgentsChallengeSubmission: 完整提交文件

封装函数示例:

def joint_scene_from_states(simulated_states, scenario):
    joint_scene = sim_agents_submission_pb2.JointScene()
    for obj_idx in range(simulated_states.shape[1]):
        traj = joint_scene.simulated_trajectories.add()
        traj.object_id = sim_agent_ids[obj_idx]
        for step in range(simulated_states.shape[2]):
            point = traj.waypoints.add()
            point.center_x = simulated_states[0, obj_idx, step, 0]
            point.center_y = simulated_states[0, obj_idx, step, 1]
            point.center_z = simulated_states[0, obj_idx, step, 2]
            point.heading = simulated_states[0, obj_idx, step, 3]
    return joint_scene

总结

本教程展示了Waymo Open Dataset仿真智能体挑战赛的基本流程,从数据加载到简单策略实现,再到结果可视化与提交。虽然示例中使用的线性外推策略较为简单,但为开发者提供了构建更复杂仿真系统的基础框架。实际参赛时,开发者需要设计更加智能的策略来生成更真实、多样化的行为仿真。

【免费下载链接】waymo-open-dataset Waymo Open Dataset 【免费下载链接】waymo-open-dataset 项目地址: https://gitcode.com/gh_mirrors/wa/waymo-open-dataset

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值