DOI: 10.5281/zenodo.18346755
title: UNIVRFall: IMU-based pre-impact, impact, and post-impact fall detection dataset

description: Overview

This dataset provides comprehensive IMU-based recordings for pre-impact, impact, and post-impact fall detection in both daily life and occupational settings. It addresses critical gaps in existing fall detection resources by including working-age adults and elevation-related fall scenarios common in construction environments such as warehouses and construction sites.

The dataset is specifically designed for AutoML research, providing an ideal benchmark for neural architecture search, hyperparameter tuning, and hardware-aware model compression for edge-AI deployment on resource-constrained wearable devices.

Dataset Characteristics




Characteristic
Value


Total Participants
39 (29 lab + 10 construction site)


Laboratory Participants
29 (25 male, 6 female)


Age Range
20-49 years (mean: 23.6 ± 6.2)


Activities of Daily Living (ADLs)
24


Fall Types
21 (including 6 elevation-specific)


Total Recording Duration
~46.05 hours


Controlled Lab Sessions
3.41 hours


Real Construction Site Data
42.64 hours


Total Fall Events
573


Fall Duration
150-1200 ms (mean: 476.70 ± 183.91 ms)


Class Imbalance
2.22% falls (lab only), 0.16% (entire dataset)




Technical Specifications

Sensor System




Component
Specification


Microcontroller
STM32F722RET6 (ARM Cortex-M7, 216 MHz)


Accelerometer
LIS3DH tri-axis MEMS, ±16g, 1mg resolution


Gyroscope
LSM6DS3 tri-axis, ±2000 dps, 0.07 dps resolution


Sampling Frequency
100 Hz (both sensors)


Sensor Placement
Lower back (vertebrae L1-L2)


Video Synchronization
100 fps with LED markers


Data Format
CSV (sensor data), Excel (annotations)




Coordinate System



X-axis: Points downward

Y-axis: Points to the right

Z-axis: Perpendicular to sensor board


Data Distribution




Category
Duration
Percentage


Controlled Environment - Activities (23 tasks)
2.35 hours
5.16%


Controlled Environment - Falls (21 types)
1.06 hours
2.33%


Construction Site - Workplace Activities (Task 88)
42.64 hours
93.57%


Actual Falling Time
4.55 minutes
0.16% (total), 2.22% (lab only)


TOTAL
46.05 hours
100%




Activities Taxonomy

Daily Living Activities (ADLs) - 24 Tasks




ID
Activity Description
Type


01
Stand for 30 seconds
Static


02
Stand, slowly bend, tie shoe lace, get up
Dynamic


03
Pick up an object from the floor
Dynamic


04
Gently jump (try to reach an object)
Dynamic


05
Stand, sit to ground, wait, get up with normal speed
Transition


06
Walk normally with turn
Locomotion


07
Walk quickly with turn
Locomotion


08
Jog normally with turn
Locomotion


09
Jog quickly with turn
Locomotion


10
Stumble with obstacle while walking
Near-fall


11
Sit on a chair for 30 seconds
Static


12
Walk downstairs normally
Locomotion


13
Sit down to chair normally, get up normally
Transition


14
Sit down to chair quickly, get up quickly
Transition


15
Sit, trying to get up, collapse into chair
Near-fall


16
Walk downstairs quickly
Locomotion


17
Lie on the floor for 30 seconds
Static


18
Sit, lie down normally, get up normally
Transition


19
Sit, lie down quickly, get up quickly
Transition


35
Walk upstairs normally
Locomotion


36
Walk upstairs quickly
Locomotion


43
Climb up and climb down the stairs
Work-specific


44
Walk slowly and jump over the obstacle
Work-specific


88
On-field construction site activities
Work-specific




Fall Types - 21 Categories




ID
Fall Description
Category


20
Forward fall when trying to sit down
Sitting transitions


21
Backward fall when trying to sit down
Sitting transitions


22
Lateral fall when trying to sit down
Sitting transitions


23
Forward fall when trying to get up
Sitting transitions


24
Lateral fall when trying to get up
Sitting transitions


25
Forward fall while sitting, caused by fainting
Fainting


26
Lateral fall while sitting, caused by fainting
Fainting


27
Backward fall while sitting, caused by fainting
Fainting


28
Vertical (forward) fall while walking caused by fainting
Fainting


29
Fall while walking, using hands to dampen fall
Fainting


30
Forward fall while walking caused by a trip
Moving falls


31
Forward fall while jogging caused by a trip
Moving falls


32
Forward fall while walking caused by a slip
Moving falls


33
Lateral fall while walking caused by a slip
Moving falls


34
Backward fall while walking caused by a slip
Moving falls


37
Backward fall while slowly moving back
Elevation


38
Backward fall while quickly moving back
Elevation


39
Forward fall from height
Elevation


40
Backward fall from height
Elevation


41
Backward fall while climbing up the ladder
Elevation


42
Backward fall while climbing down the ladder
Elevation




Note: Tasks 37-42 (highlighted) represent elevation-related falls unique to this dataset, addressing critical workplace safety scenarios absent from existing benchmarks.

File Structure

UniVrFall_Dataset/
├── laboratory/
│   ├── sensors_data/
│   │   ├── SA09/
│   │   │   └── S09T[XX]R[ZZ].csv          # Subject 09, Task XX, Repetition ZZ
│   │   ├── SA10/
│   │   │   └── S10T[XX]R[ZZ].csv
│   │   ├── SA11/
│   │   │   └── S11T[XX]R[ZZ].csv
│   │   ├── ...
│   │   └── SA37/
│   │       └── S37T[XX]R[ZZ].csv
│   └── labels_data/
│       ├── SA09_label.xlsx                # Subject 09 annotations
│       ├── SA10_label.xlsx
│       ├── SA11_label.xlsx
│       ├── ...
│       └── SA37_label.xlsx
└── OnField/
    ├── 20241106/                          # Session: 2024-11-06
    │   └── 20241106_[ID].csv              # Session date, Worker ID
    ├── 20241223/                          # Session: 2024-12-23
    │   └── 20241223_[ID].csv
    ├── 20250108/
    │   └── 20250108_[ID].csv
    ├── ...
    └── 20250218/                          # last session date
        └── 20250218_[ID].csv



Data Format Specifications

CSV Files (Raw Sensor Data) - 11 Columns




Column
Variable
Unit
Description


1
TimeStamp(s)
seconds
Sample timestamp


2
FrameCounter
integer
Sequential frame number


3
AccX
m/s²
Lateral axis acceleration


4
AccY
m/s²
Anterior-posterior acceleration


5
AccZ
m/s²
Vertical axis acceleration


6
GyrX
rad/s
Roll angular velocity


7
GyrY
rad/s
Pitch angular velocity


8
GyrZ
rad/s
Yaw angular velocity


9
EulerX
degrees
Roll orientation angle


10
EulerY
degrees
Pitch orientation angle


11
EulerZ
degrees
Yaw orientation angle




Annotation Files (Excel) - 5 Columns




Column
Variable
Type
Description


1
Task Code (Task ID)
String
Fall type code and numeric ID (e.g., F01 (20))


2
Description
String
Detailed fall event description


3
Trial ID
Integer
Trial repetition number


4
Fall onset frame
Integer
Frame number at fall initiation


5
Fall impact frame
Integer
Frame number at ground contact




Preprocessing Scripts

Data Windowing

The dataset requires preprocessing to segment continuous sensor recordings into fixed-size windows for model training. The windowing process applies a low-pass filter and creates overlapping segments.

Key Preprocessing Steps:



Windowing: Segments continuous sensor data into fixed-size windows (e.g., 300ms)

Overlap: Creates overlapping windows to increase training samples (e.g., 50% overlap)

Low-pass Filtering: Applies Butterworth filter (cutoff: 5Hz) to reduce noise

Label Assignment: Assigns labels based on annotation files (binary or multiclass)


Windowing Function:

def windowing(x, y, window_size, sampling_rate, overlap_percentage, apply_filter):
    # Calculate samples per window
    samples_per_window = int((window_size / 1000) * sampling_rate)
    
    # Calculate step size based on overlap
    step_size = int(samples_per_window * (1 - (overlap_percentage / 100)))
    
    segmented_x = []
    segmented_y = []
    
    # Create windows with overlap
    for start in range(0, len(x) - samples_per_window + 1, step_size):
        end = start + samples_per_window
        window = x[start:end]
        
        if apply_filter:
            window = low_pass_filter(window, cutoff=5, fs=sampling_rate)
        
        segmented_x.append(window)
        segmented_y.append(y[start])
    
    return np.array(segmented_x), np.array(segmented_y)


Low-Pass Filter:

from scipy.signal import butter, filtfilt

def low_pass_filter(data, cutoff, fs):
    nyquist = 0.5 * fs
    normal_cutoff = cutoff / nyquist
    b, a = butter(1, normal_cutoff, btype='low', analog=False)
    
    filtered_data = np.zeros_like(data)
    for i in range(data.shape[1]):
        filtered_data[:, i] = filtfilt(b, a, data[:, i])
    
    return filtered_data


Processing Laboratory Data:

# Read sensor data
df = pd.read_csv(file_path, index_col=1)

# Extract sensor columns
x = df[["AccX", "AccY", "AccZ", "GyrX", "GyrY", "GyrZ", 
        "EulerX", "EulerY", "EulerZ"]].values

# Read annotations from Excel
annotations = pd.read_excel(label_file, sheet_name="Sheet1").ffill()

# Assign labels based on fall frames
df.loc[:start_fall_frame, "label"] = "Activity"
df.loc[start_fall_frame:end_fall_frame, "label"] = "Falling"
df.loc[end_fall_frame:, "label"] = "Activity"

y = df["label"].values

# Apply windowing
x_windows, y_windows = windowing(x, y, window_size=300, 
                                  sampling_rate=100, 
                                  overlap_percentage=50, 
                                  apply_filter=True)


Processing On-Field Data:

# Read and convert on-field data
df = pd.read_csv(file_path, index_col=0)
df = df[df["type"] == 1]  # Filter sensor type

# Extract sensor columns (different naming convention)
x = df[["accX", "accY", "accZ", "gyrX", "gyrY", "gyrZ", 
        "roll", "pitch", "yaw"]].values

# All on-field data labeled as "Activity"
y = ["Activity"] * len(x)

# Apply windowing
x_windows, y_windows = windowing(x, y, window_size=300, 
                                  sampling_rate=100, 
                                  overlap_percentage=50, 
                                  apply_filter=True)


Output Format:

Processed segments are saved as NumPy arrays:

segments/
└── 300ms_50ov_npseg_filt_binary/
    └── {subject_id}/
        └── {task_id}/
            └── {trial}/
                ├── segments.npy  # Shape: (n_windows, samples_per_window, 9)
                └── labels.npy    # Shape: (n_windows,)


Usage Examples

Data Preprocessing

Process the raw sensor data into windowed segments for model training:

Process Laboratory Data:

python -m preprocessing.windowing \
    -d /path/to/UniVrFall_Dataset/laboratory \
    -w 300 \
    -o 50 \
    -b 1 \
    -s 100


Process On-Field Recordings:

python -m preprocessing.windowing \
    -d /path/to/UniVrFall_Dataset/OnField \
    -w 300 \
    -o 50 \
    -b 1 \
    -s 100 \
    -f 1


Parameter Explanation:




Parameter
Description
Value




-d
Dataset directory path
Path to raw sensor data folder


-w
Window size (milliseconds)
300 ms (30 samples at 100 Hz)


-o
Overlap percentage
50% (150 ms stride)


-b
Binary classification mode
1 (Activity vs. Falling)


-s
Sampling frequency (Hz)
100 Hz


-f
On-field data flag
1 (use for construction site data)




Key Features & Applications

Research Applications



Pre-impact fall detection for wearable airbag systems

AutoML benchmarking for neural architecture search

Edge-AI deployment on resource-constrained microcontrollers

Imbalanced learning with extreme class imbalance (97.78% non-fall)

Cross-dataset generalization (compatible with KFall)

Construction site safety monitoring systems


AutoML Use Cases



Neural architecture search (NAS) under hardware constraints

Hyperparameter optimization for time-series classification

Model compression and quantization for edge deployment

Data augmentation strategy selection

Feature engineering automation


Unique Characteristics



Elevation falls from ladders and scaffolds (absent in existing datasets)

Real worksite data from construction environments

Short fall durations (mean: 476 ms) requiring fast detection

Frame-level annotations for precise temporal alignment

Video-synchronized ground truth labels

Subject-independent 5-fold cross-validation protocol


Citation

If you use this dataset in your research, please cite:

@inproceedings{turetta2025lightweight,
  title={A Lightweight CNN for Real-Time Pre-Impact Fall Detection},
  author={Turetta, Cristian and Ali, Muhammad Toqeer and Demrozi, Florenc and Pravadelli, Graziano},
  booktitle={2025 Design, Automation \& Test in Europe Conference (DATE)},
  year={2025},
  organization={IEEE}
}

@inproceedings{ali2026imu_fall_dataset,
  title     = {IMU-based pre-impact, impact, and post-impact fall detection dataset},
  author    = {Ali, Muhammad Toqeer and Turetta, Cristian and Demrozi, Florenc and Pravadelli, Graziano},
  booktitle = {Proceedings of the 22nd International Workshop on Context and Activity Modeling and Recognition with AI (CoMoRe-AI 2026), co-located with the 24th IEEE International Conference on Pervasive Computing and Communications (PerCom 2026 Workshops)},
  year      = {2026},
  address   = {Pisa, Italy},
  month     = mar,
  note      = {Accepted for publication}
}


Acknowledgments



Protechto s.r.l. for providing the smart safety jacket and sensor system

All 29 laboratory participants for their time and effort

10 construction workers for contributing real worksite data

University of Verona for supporting this research

Funding projects: PREPARE, UNISCO, CollaborICE (MICS Extended Partnership)