Published January 21, 2025 | Version 1.0
Dataset Open

SynthRad-Faces: Synthetic Radar Dataset of Human Faces

  • 1. Friedrich-Alexander-Universität Erlangen-Nürnberg

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)