UNIVRFall: IMU-based pre-impact, impact, and post-impact fall detection dataset
Abstract
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 (24 male, 5 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) milliseconds (ms) Sample timestamp 2 FrameCounter integer Sequential frame number 3 AccX mg Lateral axis acceleration 4 AccY mg Anterior-posterior acceleration 5 AccZ mg Vertical axis acceleration 6 GyrX mdps Roll angular velocity 7 GyrY mdps Pitch angular velocity 8 GyrZ mdps 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/ └── {
Fields of Study & Subjects
Context-Aware Activity Recognition Systems
Balance
Gait
and Falls Prevention
Gait Recognition and Analysis
Publication details
- Journal / source
- Zenodo (CERN European Organization for Nuclear Research)
- Publication date
- 23 January 2026
- Language
- EN
- Document type
- Dataset