Published January 21, 2025
| Version 1.0
Dataset
Open
SynthRad-Faces: Synthetic Radar Dataset of Human Faces
Description
Radar Image Dataset
Dataset Structure
`dataset.hdf` contains the dataset of 10,000 synthetic radar images with the according parameters.
The data for each instance is saved at the following indices:
[000000 - 065536] : radar amplitude image (unscaled)
[065536 - 065540] : radar image bounding box [x_min, x_max, y_min, y_max]
[065540 - 065739] : shape parameters (199 parameters)
[065739 - 065938] : color parameters (199 parameters)
[065938 - 066038] : expression parameters (100 parameters)
[066038 - 066045] : pose (scaling_factor, rotation(roll, pitch, yaw), translation(x, y, z))
[066045 - 066061] : transformation matrix to radar coordinate system
[066061 - 066067] : synthetic radar parameters (scaling factor, carrier frequency, delta frequency, number antennas, number samples, material factor, antenna size)
[066067 - 131603] : radar depth image (unscaled)
Face Model parameters
We used the face12 mask of the Basel Face Model 2019 (contained in the file model2019_face12.h5) for the sampling of the faces. The face model can be registered for here: https://faces.dmi.unibas.ch/bfm/bfm2019.html. The scalismo face framework (https://github.com/unibas-gravis/scalismo-faces) can be used to generate the face meshes from the shape, (color), and expression parameters. Additionally, they can be transformed by applying the pose.
Load Data
One can load and scale the image data with the following python code:
import h5py
import numpy as np
index = 0 # adjust face index
datafile = h5py.File('dataset.hdf5', 'r')
image = datafile['dataset_0'][index][:256*256]
threshold = 20 # in dB
# scale the amplitude image logarithmically
image[math.isnan(image)] = 0
image = 20 * np.log10(image)
max = np.max(image)
min = max - threshold
image = (image - min) / (max - min)
image[image < 0] = 0
image.reshape((256,256))
# the depth image is between 0.22 m and 0.58 m
image_depth = datafile['dataset_0'][index][-256*256:]
image_depth = image_depth.reshape((256,256))
image_depth[image == 0] = 0.58 # ignore pixels that are ignored in the amlitude image
image_depth = np.nan_to_num(image_depth, nan=0.58)
image_depth[image_depth == 0] = 0.58
image_depth = (image_depth - 0.22) / (0.58-0.22)
# load other data (set start_index and end_index according to the data that shall be loaded)
data = datafile['dataset_0'][index][start_index:end_index]
Acknowledgments
We would like to thank the Rohde & Schwarz GmbH & Co. KG (Munich, Germany) for providing the radar imaging devices and technical support that made this study possible.
Files
Files
(10.5 GB)
Name | Size | Download all |
---|---|---|
md5:f155eb994c3b528d571d6d370d1eedda
|
10.5 GB | Download |
Additional details
Related works
- Is supplement to
- Standard: arXiv:2412.02403 (arXiv)