2. Data acquisition for occupant injury responses

Multi-output injury prediction models are only as good as the crash data that feeds them. Before any network architecture or loss function matters, you must understand where occupant injury labels come from, which sensor channels describe the crash event, how injuries are coded, and how those heterogeneous records are assembled into a consistent multi-output target tensor. This chapter walks through the practical pipeline: from public crash databases to a labeled, channel-aligned dataset suitable for training.

Crash Test Databases: NHTSA and CISS

The two most widely used sources for occupant injury research in the United States are the NHTSA crash test programs and the Crash Investigation Sampling System (CISS). They serve different purposes and their data characteristics differ substantially.

NHTSA crash tests (FMVSS compliance and NCAP programs) are controlled, instrumented barrier and sled tests. Each test produces a structured record: vehicle make/model/model year, test configuration (frontal rigid barrier at 56 km/h, oblique moving deformable barrier, side pole, etc.), dummy type and seating position, and a dense set of sensor time histories. Because the test is controlled, the crash pulse is well characterized and the dummy instrumentation is standardized. The trade-off is limited real-world variety: a small number of configurations, a single occupant per test, and dummies rather than human occupants.

CISS samples real-world crashes from selected geographic regions and reconstructs them. Investigators document vehicle damage, occupant characteristics (age, sex, height, weight, restraint use), and injury outcomes from medical records, then often perform a computer reconstruction to estimate the crash pulse (delta-v, principal direction of force). CISS captures the diversity that controlled tests lack — real occupants, real restraint behavior, real injury patterns — but the data is noisier: missing fields, inconsistent injury documentation, and reconstructed rather than measured kinematics.

A practical strategy is to pretrain on the large, clean NHTSA test corpus and fine-tune or validate on CISS real-world cases. The two sources complement each other: NHTSA gives you precise signals and labels, CISS gives you distributional realism.

Sensor Channels

Occupant injury response is a time-series problem. The channels you extract determine what the model can learn. For NHTSA tests, the standard channels include:

  • Vehicle kinematics: longitudinal, lateral, and vertical acceleration at the vehicle center tunnel or sill, plus yaw rate and roll rate. These define the crash pulse.
  • Dummy/occupant kinematics: head acceleration (tri-axial), chest acceleration and chest deflection, pelvis acceleration, and belt force/pretensioner load where instrumented.
  • Restraint state: belt usage, pretensioner firing, airbag deployment timing.

Each channel is sampled at a fixed rate (commonly 10 kHz for accelerometers in NHTSA tests, downsampled to 1–10 kHz for modeling) and must be time-aligned to a common trigger (typically t = 0 at barrier contact). For CISS reconstructions, channels are simulated rather than measured, so you must treat them as lower-fidelity inputs and document the reconstruction method.

Two preprocessing decisions matter early. First, resampling and windowing: crop each event to a fixed window (e.g., −20 ms to +200 ms around impact) and resample to a uniform rate so tensors are rectangular. Second, normalization: acceleration channels span orders of magnitude across crash severities, so per-channel standardization using training-set statistics is essential; otherwise severe crashes dominate the gradient.

Labeling Schemes: AIS and Body Region

Injury labels are not a single number. The clinical standard is the Abbreviated Injury Scale (AIS), an ordinal severity score from 1 (minor) to 6 (maximal, currently untreatable), with 9 reserved for unknown. AIS is assigned per injury, and each injury is mapped to a body region: head, face, neck, thorax, abdomen, spine, upper extremity, lower extremity.

For multi-output learning, the natural target structure is a body-region × severity matrix. For each occupant, you compute the maximum AIS (MAIS) within each region, yielding a vector such as [head, face, neck, thorax, abdomen, spine, upper_ext, lower_ext]. This supports two useful formulations:

  • Multi-class per region: predict AIS 0–6 for each body region independently (8 classification heads).
  • Ordinal regression: treat AIS as ordered and use cumulative-link or ordinal loss per region, which respects the severity ordering that plain cross-entropy ignores.

Label quality is the dominant source of error. CISS injury data comes from medical records with varying coding granularity; a "chest contusion" and a "rib fracture" both map to thorax but carry different AIS. You must define a deterministic mapping from raw injury codes to (region, AIS) and apply it consistently. Keep an audit trail: for every occupant, store the raw injury strings alongside the derived labels so disagreements can be traced.

Constructing the Multi-Output Target

The final dataset is a set of aligned records, each containing an input tensor (channels × time) and a target tensor (body regions × severity). The construction steps are:

  1. Join the crash-level record (configuration, delta-v, vehicle class) with occupant-level records (demographics, restraint, injuries).
  2. Filter to occupants with complete sensor windows and at least one documented injury assessment; drop records with all-unknown AIS.
  3. Encode injuries into the region × AIS matrix using the fixed mapping.
  4. Align channels to the impact trigger and resample to the common rate.
  5. Split by crash event, not by occupant, to prevent leakage when multiple occupants share a vehicle.

A minimal record schema that supports all of the above looks like this:

record = {
  "case_id": "CISS-2021-00417",
  "source": "CISS",
  "config": "frontal_offset",
  "delta_v_kmh": 42.0,
  "occupant": {"age": 34, "sex": "F", "belt": True, "seat": "driver"},
  "channels": {"accel_x": [...], "accel_y": [...], "chest_defl": [...]},
  "sample_rate_hz": 1000,
  "targets": {"head": 0, "face": 0, "neck": 0, "thorax": 2,
              "abdomen": 0, "spine": 1, "upper_ext": 0, "lower_ext": 1}
}

Note the deliberate separation of inputs (channels), context (demographics, restraint), and targets (region × AIS). Context features are not time series but are strong predictors of injury and should be concatenated to the encoded time-series representation rather than discarded.

Common Pitfalls and Verification

Three failure modes recur in practice. Class imbalance: AIS 0 dominates most regions, so a model that predicts "no injury" everywhere achieves high accuracy but is useless. Use per-region class weights or focal loss, and report per-region recall at AIS ≥ 2, not just overall accuracy. Leakage: splitting by occupant instead of by crash event lets near-duplicate records appear in both train and test. Label drift: mixing NHTSA dummy-based AIS with CISS clinical AIS without documenting the difference produces a model that learns source artifacts rather than injury physics.

To verify the pipeline, inspect a handful of records end to end: confirm the channel window brackets the impact, confirm the target vector matches the raw injury strings, and confirm the train/validation split contains no shared case_id. A quick sanity check is to plot the crash pulse for a few cases and confirm peak acceleration aligns with the documented delta-v. If a record's channels are flat or its targets are all zeros despite documented injuries, the join or mapping step is broken — fix it before training, because no architecture can recover from corrupted labels.

From Crash Records to Multi-Output Target Tensor NHTSA Crash Tests controlled, instrumented dense sensor channels CISS Real-World reconstructed crashes clinical injury records Join & Filter crash + occupant drop unknown AIS complete windows Channel Pipeline align to t=0 impact resample uniform rate per-channel z-score Label Pipeline AIS code → region max AIS per region region × severity matrix Target Tensor 8 body regions AIS 0–6 each + context features split by case_id class weights Example target vector (illustrative): head: 0 face: 0 neck: 0 thorax: 2 abdomen: 0 spine: 1 upper_ext: 0 lower_ext: 1 Blue = AIS 0 (no injury); amber = AIS ≥ 1. Each region is an independent output head. Context (age, sex, belt, seat, delta-v) concatenated to the encoded time-series representation.

The diagram summarizes the two parallel pipelines — channels and labels — that converge into a single target tensor. The key engineering discipline is keeping them independent until the final join: channel preprocessing should never peek at labels, and label encoding should never depend on sensor values. That separation is what makes the resulting dataset auditable and the trained model interpretable.