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. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转