Waymo数据集介绍(部分下载,仅用于学习)

2023-11-01 02:30

本文主要是介绍Waymo数据集介绍(部分下载,仅用于学习),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

waymo提供了两种数据集,motion与perception两种,请注意,本篇为Perception Dataset v1.2Motion Dataset v1.1版本

其中motion是鸟瞰图,官网中有介绍,主要用于轨迹预测之类的任务

perception主要用于目标检测跟踪之类的任务,是第一视角,有相机和雷达信息,并且在github上有公开的读取数据方法,另外,在读取perception数据时需要安装waymo-open-dataset-tf这个库,安装不上请用清华源,具体请按照官方quick_start教程,另外github有许多已经集成许多功能的代码,搜索waymo就有。

quick_start:

waymo-open-dataset/quick_start.md at master · waymo-research/waymo-open-dataset · GitHub

 而motion读取不需要这些,主只需要安装tensorflow以及一些必要的库就行即可

import math
import os
import uuid
import timefrom matplotlib import cm
import matplotlib.animation as animation
import matplotlib.pyplot as pltimport numpy as np
from IPython.display import HTML
import itertools
import tensorflow as tffrom google.protobuf import text_format
from waymo_open_dataset.metrics.ops import py_metrics_ops
from waymo_open_dataset.metrics.python import config_util_py as config_util
from waymo_open_dataset.protos import motion_metrics_pb2# Example field definition
roadgraph_features = {'roadgraph_samples/dir':tf.io.FixedLenFeature([20000, 3], tf.float32, default_value=None),'roadgraph_samples/id':tf.io.FixedLenFeature([20000, 1], tf.int64, default_value=None),'roadgraph_samples/type':tf.io.FixedLenFeature([20000, 1], tf.int64, default_value=None),'roadgraph_samples/valid':tf.io.FixedLenFeature([20000, 1], tf.int64, default_value=None),'roadgraph_samples/xyz':tf.io.FixedLenFeature([20000, 3], tf.float32, default_value=None),
}# Features of other agents.
state_features = {'state/id':tf.io.FixedLenFeature([128], tf.float32, default_value=None),'state/type':tf.io.FixedLenFeature([128], tf.float32, default_value=None),'state/is_sdc':tf.io.FixedLenFeature([128], tf.int64, default_value=None),'state/tracks_to_predict':tf.io.FixedLenFeature([128], tf.int64, default_value=None),'state/current/bbox_yaw':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/height':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/length':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/timestamp_micros':tf.io.FixedLenFeature([128, 1], tf.int64, default_value=None),'state/current/valid':tf.io.FixedLenFeature([128, 1], tf.int64, default_value=None),'state/current/vel_yaw':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/velocity_x':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/velocity_y':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/width':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/x':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/y':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/current/z':tf.io.FixedLenFeature([128, 1], tf.float32, default_value=None),'state/future/bbox_yaw':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/height':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/length':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/timestamp_micros':tf.io.FixedLenFeature([128, 80], tf.int64, default_value=None),'state/future/valid':tf.io.FixedLenFeature([128, 80], tf.int64, default_value=None),'state/future/vel_yaw':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/velocity_x':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/velocity_y':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/width':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/x':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/y':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/future/z':tf.io.FixedLenFeature([128, 80], tf.float32, default_value=None),'state/past/bbox_yaw':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/height':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/length':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/timestamp_micros':tf.io.FixedLenFeature([128, 10], tf.int64, default_value=None),'state/past/valid':tf.io.FixedLenFeature([128, 10], tf.int64, default_value=None),'state/past/vel_yaw':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/velocity_x':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/velocity_y':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/width':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/x':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/y':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),'state/past/z':tf.io.FixedLenFeature([128, 10], tf.float32, default_value=None),
}traffic_light_features = {'traffic_light_state/current/state':tf.io.FixedLenFeature([1, 16], tf.int64, default_value=None),'traffic_light_state/current/valid':tf.io.FixedLenFeature([1, 16], tf.int64, default_value=None),'traffic_light_state/current/x':tf.io.FixedLenFeature([1, 16], tf.float32, default_value=None),'traffic_light_state/current/y':tf.io.FixedLenFeature([1, 16], tf.float32, default_value=None),'traffic_light_state/current/z':tf.io.FixedLenFeature([1, 16], tf.float32, default_value=None),'traffic_light_state/past/state':tf.io.FixedLenFeature([10, 16], tf.int64, default_value=None),'traffic_light_state/past/valid':tf.io.FixedLenFeature([10, 16], tf.int64, default_value=None),'traffic_light_state/past/x':tf.io.FixedLenFeature([10, 16], tf.float32, default_value=None),'traffic_light_state/past/y':tf.io.FixedLenFeature([10, 16], tf.float32, default_value=None),'traffic_light_state/past/z':tf.io.FixedLenFeature([10, 16], tf.float32, default_value=None),
}
dir = '文件位置'
features_description = {}
features_description.update(roadgraph_features)
features_description.update(state_features)
features_description.update(traffic_light_features)dataset = tf.data.TFRecordDataset(dir, compression_type='')
data = next(dataset.as_numpy_iterator())
parsed = tf.io.parse_single_example(data, features_description)def create_figure_and_axes(size_pixels):"""Initializes a unique figure and axes for plotting."""fig, ax = plt.subplots(1, 1, num=uuid.uuid4())# Sets output image to pixel resolution.dpi = 100size_inches = size_pixels / dpifig.set_size_inches([size_inches, size_inches])fig.set_dpi(dpi)fig.set_facecolor('white')ax.set_facecolor('white')ax.xaxis.label.set_color('black')ax.tick_params(axis='x', colors='black')ax.yaxis.label.set_color('black')ax.tick_params(axis='y', colors='black')fig.set_tight_layout(True)ax.grid(False)return fig, axdef fig_canvas_image(fig):"""Returns a [H, W, 3] uint8 np.array image from fig.canvas.tostring_rgb()."""# Just enough margin in the figure to display xticks and yticks.fig.subplots_adjust(left=0.08, bottom=0.08, right=0.98, top=0.98, wspace=0.0, hspace=0.0)fig.canvas.draw()data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8)return data.reshape(fig.canvas.get_width_height()[::-1] + (3,))def get_colormap(num_agents):"""Compute a color map array of shape [num_agents, 4]."""colors = cm.get_cmap('jet', num_agents)colors = colors(range(num_agents))np.random.shuffle(colors)return colorsdef get_viewport(all_states, all_states_mask):"""Gets the region containing the data.Args:all_states: states of agents as an array of shape [num_agents, num_steps,2].all_states_mask: binary mask of shape [num_agents, num_steps] for`all_states`.Returns:center_y: float. y coordinate for center of data.center_x: float. x coordinate for center of data.width: float. Width of data."""valid_states = all_states[all_states_mask]all_y = valid_states[..., 1]all_x = valid_states[..., 0]center_y = (np.max(all_y) + np.min(all_y)) / 2center_x = (np.max(all_x) + np.min(all_x)) / 2range_y = np.ptp(all_y)range_x = np.ptp(all_x)width = max(range_y, range_x)return center_y, center_x, widthdef visualize_one_step(states,mask,roadgraph,title,center_y,center_x,width,color_map,size_pixels=1000):"""Generate visualization for a single step."""# Create figure and axes.fig, ax = create_figure_and_axes(size_pixels=size_pixels)# Plot roadgraph.rg_pts = roadgraph[:, :2].Tax.plot(rg_pts[0, :], rg_pts[1, :], 'k.', alpha=1, ms=2)masked_x = states[:, 0][mask]masked_y = states[:, 1][mask]colors = color_map[mask]# Plot agent current position.ax.scatter(masked_x,masked_y,marker='o',linewidths=3,color=colors,)# Title.ax.set_title(title)# Set axes.  Should be at least 10m on a side and cover 160% of agents.size = max(10, width * 1.0)ax.axis([-size / 2 + center_x, size / 2 + center_x, -size / 2 + center_y,size / 2 + center_y])ax.set_aspect('equal')image = fig_canvas_image(fig)plt.close(fig)return imagedef visualize_all_agents_smooth(decoded_example,size_pixels=1000,
):"""Visualizes all agent predicted trajectories in a serie of images.Args:decoded_example: Dictionary containing agent info about all modeled agents.size_pixels: The size in pixels of the output image.Returns:T of [H, W, 3] uint8 np.arrays of the drawn matplotlib's figure canvas."""# [num_agents, num_past_steps, 2] float32.past_states = tf.stack([decoded_example['state/past/x'], decoded_example['state/past/y']],-1).numpy()past_states_mask = decoded_example['state/past/valid'].numpy() > 0.0# [num_agents, 1, 2] float32.current_states = tf.stack([decoded_example['state/current/x'], decoded_example['state/current/y']],-1).numpy()current_states_mask = decoded_example['state/current/valid'].numpy() > 0.0# [num_agents, num_future_steps, 2] float32.future_states = tf.stack([decoded_example['state/future/x'], decoded_example['state/future/y']],-1).numpy()future_states_mask = decoded_example['state/future/valid'].numpy() > 0.0# [num_points, 3] float32.roadgraph_xyz = decoded_example['roadgraph_samples/xyz'].numpy()num_agents, num_past_steps, _ = past_states.shapenum_future_steps = future_states.shape[1]color_map = get_colormap(num_agents)# [num_agens, num_past_steps + 1 + num_future_steps, depth] float32.all_states = np.concatenate([past_states, current_states, future_states], 1)# [num_agens, num_past_steps + 1 + num_future_steps] float32.all_states_mask = np.concatenate([past_states_mask, current_states_mask, future_states_mask], 1)center_y, center_x, width = get_viewport(all_states, all_states_mask)images = []# Generate images from past time steps.for i, (s, m) in enumerate(zip(np.split(past_states, num_past_steps, 1),np.split(past_states_mask, num_past_steps, 1))):im = visualize_one_step(s[:, 0], m[:, 0], roadgraph_xyz,'past: %d' % (num_past_steps - i), center_y,center_x, width, color_map, size_pixels)images.append(im)# Generate one image for the current time step.s = current_statesm = current_states_maskim = visualize_one_step(s[:, 0], m[:, 0], roadgraph_xyz, 'current', center_y,center_x, width, color_map, size_pixels)images.append(im)# Generate images from future time steps.for i, (s, m) in enumerate(zip(np.split(future_states, num_future_steps, 1),np.split(future_states_mask, num_future_steps, 1))):im = visualize_one_step(s[:, 0], m[:, 0], roadgraph_xyz,'future: %d' % (i + 1), center_y, center_x, width,color_map, size_pixels)images.append(im)return imagesimages = visualize_all_agents_smooth(parsed)def create_animation(images):""" Creates a Matplotlib animation of the given images.Args:images: A list of numpy arrays representing the images.Returns:A matplotlib.animation.Animation.Usage:anim = create_animation(images)anim.save('/tmp/animation.avi')HTML(anim.to_html5_video())"""plt.ioff()fig, ax = plt.subplots()dpi = 100size_inches = 1000 / dpifig.set_size_inches([size_inches, size_inches])plt.ion()def animate_func(i):ax.imshow(images[i])ax.set_xticks([])ax.set_yticks([])ax.grid('off')anim = animation.FuncAnimation(fig, animate_func, frames=len(images) // 2, interval=100)plt.close(fig)return animanim = create_animation(images[::5])
HTML(anim.to_html5_video())

官方给的教程,生成的是一个动画,当然,这些动画没什么用,只需要里面的数据。上面代码主要的读取数据就是这一句,它包含了一个文件的信息,可以debug看一下,包含了许多属性,具体参见此处https://waymo.com/open/data/motion/tfexample,数据中有许多标注的为-1,这些数据没什么用

parsed = tf.io.parse_single_example(data, features_description)

 完整版数据集下载请前往官网下载 https://waymo.com/open/download/

此处只提供小部分用于学习,如有侵权,请及时联系删除

 百度云链接:

perception(v1.2)里面只提供了train的第一个文件

链接:https://pan.baidu.com/s/1PfPnVsWs7H47fi015vKL-g 
提取码:1lzk

motion(v1.1)提供train valid test里面的第一个文件

链接:https://pan.baidu.com/s/1RX4ISe23rkO-7OXM3imFpg 
提取码:frb9

这篇关于Waymo数据集介绍(部分下载,仅用于学习)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319849

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p