7085090
doi
10.5281/zenodo.7085090
oai:zenodo.org:7085090
user-autopilot
Sertolli, Benjamin
Volkswagen AG
Fricke, Jenny
Volkswagen AG
Klingner, Marvin
TU Braunschweig
Fingscheidt, Tim
TU Braunschweig
3DHD CityScenes: High-Definition Maps in High-Density Point Clouds
Plachetka, Christopher
Volkswagen AG
info:eu-repo/semantics/openAccess
Creative Commons Attribution 4.0 International
https://creativecommons.org/licenses/by/4.0/legalcode
automated driving
high-definition (HD) maps
map deviation detection
map verification
point clouds
LiDAR
traffic signs
traffic lights
poles
markings
lanes
construction sites
<p><strong>Overview</strong></p>
<p>3DHD CityScenes is the most comprehensive, large-scale high-definition (HD) map dataset to date, annotated in the three spatial dimensions of globally referenced, high-density LiDAR point clouds collected in urban domains. Our HD map covers 127 km of road sections of the inner city of Hamburg, Germany including 467 km of individual lanes. In total, our map comprises 266,762 individual items.</p>
<p>Our corresponding paper (published at ITSC 2022) is available <a href="https://www.researchgate.net/publication/364309881_3DHD_CityScenes_High-Definition_Maps_in_High-Density_Point_Clouds">here</a>.<br>
Further, we have applied 3DHD CityScenes to map deviation detection <a href="https://www.researchgate.net/publication/368983255_DNN-Based_Map_Deviation_Detection_in_LiDAR_Point_Clouds">here</a>. </p>
<p>Moreover, we release code to facilitate the application of our dataset and the reproducibility of our research. Specifically, our 3DHD_DevKit comprises:</p>
<ul>
<li>Python tools to read, generate, and visualize the dataset,</li>
<li>3DHDNet deep learning pipeline (training, inference, evaluation) for<br>
map deviation detection and 3D object detection.</li>
</ul>
<p>The DevKit is available here:</p>
<p><a href="https://github.com/volkswagen/3DHD_devkit">https://github.com/volkswagen/3DHD_devkit</a>.</p>
<p>The dataset and DevKit have been created by <a href="https://de.linkedin.com/in/christopher-plachetka-42b325115">Christopher Plachetka</a> as project lead during his PhD period at Volkswagen Group, Germany.</p>
<p>When using our dataset, you are welcome to cite:</p>
<pre><code>@INPROCEEDINGS{9921866,
author={Plachetka, Christopher and Sertolli, Benjamin and Fricke, Jenny and Klingner, Marvin and
Fingscheidt, Tim},
booktitle={2022 IEEE 25th International Conference on Intelligent Transportation Systems (ITSC)},
title={3DHD CityScenes: High-Definition Maps in High-Density Point Clouds},
year={2022},
pages={627-634}}</code></pre>
<p><strong>Acknowledgements </strong></p>
<p>We thank the following interns for their exceptional contributions to our work.</p>
<ul>
<li><a href="https://www.linkedin.com/in/sertolli/">Benjamin Sertolli</a>: Major contributions to our DevKit during his master thesis</li>
<li>Niels Maier: Measurement campaign for data collection and data preparation</li>
</ul>
<p>The European large-scale project Hi-Drive (<a href="http://www.Hi-Drive.eu">www.Hi-Drive.eu</a>) supports the publication of 3DHD CityScenes and encourages the general publication of information and databases facilitating the development of automated driving technologies.</p>
<p><strong>The Dataset</strong></p>
<p>After downloading, the 3DHD_CityScenes folder provides five subdirectories, which are explained briefly in the following.</p>
<p>1. Dataset</p>
<p>This directory contains the training, validation, and test set definition (train.json, val.json, test.json) used in our publications. Respective files contain samples that define a geolocation and the orientation of the ego vehicle in global coordinates on the map.</p>
<p>During dataset generation (done by our DevKit), samples are used to take crops from the larger point cloud. Also, map elements in reach of a sample are collected. Both modalities can then be used, e.g., as input to a neural network such as our 3DHDNet.</p>
<p>To read any JSON-encoded data provided by 3DHD CityScenes in Python, you can use the following code snipped as an example.</p>
<pre><code class="language-python">import json
json_path = r"E:\3DHD_CityScenes\Dataset\train.json"
with open(json_path) as jf:
data = json.load(jf)
print(data)</code></pre>
<p>2. HD_Map</p>
<p>Map items are stored as lists of items in JSON format. In particular, we provide:</p>
<ul>
<li>traffic signs,</li>
<li>traffic lights,</li>
<li>pole-like objects,</li>
<li>construction site locations,</li>
<li>construction site obstacles (point-like such as cones, and line-like such as fences),</li>
<li>line-shaped markings (solid, dashed, etc.),</li>
<li>polygon-shaped markings (arrows, stop lines, symbols, etc.),</li>
<li>lanes (ordinary and temporary),</li>
<li>relations between elements (only for construction sites, e.g., sign to lane association).</li>
</ul>
<p>3. HD_Map_MetaData</p>
<p>Our high-density point cloud used as basis for annotating the HD map is split in 648 tiles. This directory contains the geolocation for each tile as polygon on the map. You can view the respective tile definition using QGIS. Alternatively, we also provide respective polygons as lists of UTM coordinates in JSON.</p>
<p>Files with the ending .dbf, .prj, .qpj, .shp, and .shx belong to the tile definition as “shape file” (commonly used in geodesy) that can be viewed using QGIS. The JSON file contains the same information provided in a different format used in our Python API.</p>
<p>4. HD_PointCloud_Tiles</p>
<p>The high-density point cloud tiles are provided in global UTM32N coordinates and are encoded in a proprietary binary format. The first 4 bytes (integer) encode the number of points contained in that file. Subsequently, all point cloud values are provided as arrays. First all x-values, then all y-values, and so on. Specifically, the arrays are encoded as follows.</p>
<ul>
<li>x-coordinates: 4 byte integer</li>
<li>y-coordinates: 4 byte integer</li>
<li>z-coordinates: 4 byte integer</li>
<li>intensity of reflected beams: 2 byte unsigned integer</li>
<li>ground classification flag: 1 byte unsigned integer</li>
</ul>
<p>After reading, respective values have to be unnormalized. As an example, you can use the following code snipped to read the point cloud data. For visualization, you can use the pptk package, for instance.</p>
<pre><code class="language-python">import numpy as np
import pptk
file_path = r"E:\3DHD_CityScenes\HD_PointCloud_Tiles\HH_001.bin"
pc_dict = {}
key_list = ['x', 'y', 'z', 'intensity', 'is_ground']
type_list = ['<i4', '<i4', '<i4', '<u2', 'u1']
with open(file_path, "r") as fid:
num_points = np.fromfile(fid, count=1, dtype='<u4')[0]
# print(num_points)
# Init
for k, dtype in zip(key_list, type_list):
pc_dict[k] = np.zeros([num_points], dtype=dtype)
# Read all arrays
for k, t in zip(key_list, type_list):
pc_dict[k] = np.fromfile(fid, count=num_points, dtype=t)
# Unnorm
pc_dict['x'] = (pc_dict['x'] / 1000) + 500000
pc_dict['y'] = (pc_dict['y'] / 1000) + 5000000
pc_dict['z'] = (pc_dict['z'] / 1000)
pc_dict['intensity'] = pc_dict['intensity'] / 2**16
pc_dict['is_ground'] = pc_dict['is_ground'].astype(np.bool_)
fid.close()
print(pc_dict)
# Visualization
# Normalize (due to large UTM values)
x_utm = pc_dict['x'] - np.mean(pc_dict['x'])
y_utm = pc_dict['y'] - np.mean(pc_dict['y'])
z_utm = pc_dict['z']
xyz = np.column_stack((x_utm, y_utm, z_utm))
viewer = pptk.viewer(xyz)
viewer.attributes(pc_dict['intensity'])
viewer.set(point_size=0.03)</code></pre>
<p>5. Trajectories</p>
<p>We provide 15 real-world trajectories recorded during a measurement campaign covering the whole HD map. Trajectory samples are provided approx. with 30 Hz and are encoded in JSON.</p>
<p>These trajectories were used to provide the samples in train.json, val.json. and test.json with realistic geolocations and orientations of the ego vehicle.</p>
<ul>
<li>OP1 – OP5 cover the majority of the map with 5 trajectories.</li>
<li>RH1 – RH10 cover the majority of the map with 10 trajectories.</li>
</ul>
<p>Note that OP5 is split into three separate parts, a-c. RH9 is split into two parts, a-b. Moreover, OP4 mostly equals OP1 (thus, we speak of 14 trajectories in our paper). For completeness, however, we provide all recorded trajectories here. </p>
Zenodo
2022-09-16
info:eu-repo/semantics/other
7085089
user-autopilot
1.0
1687423283.712101
2000000000
md5:fc393b0740925e2e7cbbccb1f56d7efd
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.006
147082
md5:ece580506b736ecdb46e71f24e6aaa32
https://zenodo.org/records/7085090/files/3DHD_CityScenes_Documenation_v1.0.pdf
2000000000
md5:4a8c7414bbbb9d6f3c6243ec26a7112f
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.005
2000000000
md5:0abf9f5b9c2704ef21c636d5d8da19a9
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.002
2000000000
md5:d76fc9f5c4f901b4a7662d141b38d00a
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.001
2000000000
md5:0c296b05e1b7dad4fd7fe388130b7859
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.004
2000000000
md5:73f5b1aeceac9c9b8798e15de3eeea7c
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.003
23972449
md5:721b2d6b8ea188f6e3baf2af84b3e9c7
https://zenodo.org/records/7085090/files/3DHD_CityScenes.zip.007
public
10.5281/zenodo.7085089
isVersionOf
doi