ACM TOSEM 2026

BHUNTER

Generating Blind-Spot Driving Scenarios for Robustness Testing of Autonomous Driving Perception

Songyang Peng1 Jiarun Dai1,† Yanghao Lv1 Jiaqi Luo1 Zongan Huang1 Yuan Zhang1 Min Yang1,†

1Fudan University, Shanghai, China

† Corresponding authors

sypeng23@m.fudan.edu.cn jrdai14@fudan.edu.cn yhlv22@m.fudan.edu.cn jqluo24@m.fudan.edu.cn zahuang23@m.fudan.edu.cn yuanxzhang@fudan.edu.cn m_yang@fudan.edu.cn

BHUNTER searches simulated traffic until a road user falls into a chosen blind spot, then exports those scenes for detection and tracking.

Motivation

A blind spot is a short stretch of driving in which another road user slips behind an occluder and then reappears. While the target is hidden, a detector or tracker can drop it. The ego vehicle then meets the same road user with too little time to brake. Prior collision studies attribute about 11.6% of vehicle crashes to this kind of occlusion.

Public logs such as KITTI and nuScenes contain few of these moments, and the high-occlusion cases they do contain are unevenly distributed. Editing a single frame, or prompting an image model, does not set occlusion across time. A simulator can move traffic continuously, but it does not by itself decide when a blind spot has reached a chosen level.

Occlusion hides vehicle A from the ego vehicle, and the missed detection leads to a collision.
A road user hidden at T0 can be missed by perception and met again at Tn.

Method

BHUNTER turns a blind spot into three roles, scores how hidden the candidate is, and then searches traffic until that score matches a target.

  1. 01

    Formalize

    Each scene has an ego vehicle, a candidate that should be perceived, and one or more occluders. An occlusion window is the contiguous run of frames in which the candidate is blocked by something else.

  2. 02

    Estimate

    The candidate box is split into voxels. A ray from the ego sensor marks each voxel as visible, blocked by an occluder, or hidden by the candidate itself. Self-occlusion does not count as a blind spot.

  3. 03

    Generate

    Occlusion-guided fuzzing schedules seeds that already lie closer to the target, then moves an occluder toward or away from the line of sight. Edited trajectories stay continuous.

BHUNTER overview: seed scenarios, occlusion estimation, and occlusion-guided scheduling and mutation inside CARLA.
Overview. Seeds are scheduled and mutated against an occlusion estimate computed in CARLA, then exported as synchronized sensor data.
Voxel occlusion at two frames. Visible voxels are green, externally occluded voxels are red, and self-occluded voxels are gray.
Frame occlusion is the share of externally occluded voxels among those that are not self-occluded. STOR averages that rate over the occlusion window. Here it rises from 1/3 to 1 as the occluder crosses the line of sight.
Five trajectory edits around an origin scenario: two that reduce occlusion and two that increase it.
From an origin scenario, shifting the occluder relative to the line of sight either opens the candidate or closes it. Only continuous trajectories are kept.

A scenario is saved when its scenario-level temporal occlusion rate falls inside the requested interval. The export is KITTI-style: camera images, LiDAR, calibration, 3D labels, and, for tracking, poses. An appearance-transfer model adapted from Unsup Recycle-GAN can shift simulated frames toward real imagery. The released checkpoint is epoch 50.

Case Study

The same three roles recur as occlusion grows: the ego vehicle, a candidate that should be perceived, and an occluder that blocks it. Low occlusion leaves the candidate partly visible. Extreme occlusion places the occluder on the line of sight.

Top-down case studies for low, moderate, severe, and extreme occlusion.
Four generated patterns, from a glancing occluder to one that fully covers the candidate.

Benchmark

The first dedicated blind-spot perception benchmark: 2,000 scenarios, 400 at each of five occlusion levels, with synchronized camera and LiDAR, 3D labels, and temporally consistent frames. Retraining widely used detectors and trackers on these scenes improves high-occlusion performance by up to 30.2 and 28.98 percentage points. Generation of a scenario finishes within six minutes, up to 9× faster than the baselines in the paper.

2,000scenarios, 400 per level
+30.2detection, percentage points
+28.98tracking, percentage points
9×faster generation
No occlusion scene

No occlusion

The candidate stays in open view.

Low occlusion scene

Low

A small part of the candidate is blocked.

Moderate occlusion scene

Moderate

Occlusion covers a substantial share of the target.

Severe occlusion scene

Severe

Most of the candidate is hidden from the ego vehicle.

Extreme occlusion scene

Extreme

The candidate is nearly out of sight.

Released under evaluation/benchmark in a KITTI-style layout. Each level includes calibration, RGB images, labels, ground planes, and LiDAR. Tracking also includes poses and an occlusion window.

Detection

Drag the divider on the same frame. Before retraining is on the left. Severe uses frame 000002, and Extreme uses frame 000000. Moderate uses frame 000004, a close vehicle at the edge of the view.

Detections after retraining
Detections before retraining
Before After

No occlusion. Blue boxes are model predictions on frame 000000.

Tracking

These clips are the released camera frames in evaluation/benchmark/tracking, played in order. Each one covers that level's occlusion window.

No occlusion. Camera frames 000000–000201 from the released tracking sequence.

BibTeX

@article{bhunter2026tosem,
  author  = {Peng, Songyang and Dai, Jiarun and Lv, Yanghao and Luo, Jiaqi and Huang, Zongan and Zhang, Yuan and Yang, Min},
  title   = {BHUNTER: Generating Blind-Spot Driving Scenarios for Robustness Testing of Autonomous Driving Perception},
  journal = {ACM Transactions on Software Engineering and Methodology},
  year    = {2026},
  doi     = {10.1145/3857808}
}

Software archive: 10.5281/zenodo.23072481