Results

What it finds on the four sample clips

Pick a clip. The timeline has one lane per class; click a segment to jump the video there. The risk curve under it is Part B, and it follows the playhead. Switch to "Our labels" to compare with our dev labels (how we made them is on the report page).

vehiclepersonbicyclein an event we submit, coloured by class and namedU-turn we find but do not submitThe strip burned in under the picture shows the submitted events and the risk (red line). Blue outlines are the crossings, the red line across the lanes is the SB stop line.

Show on the timeline
Events
StartEndLengthClassZoneNote and actors

Per-class F1 on our dev labels

From evaluate.py --json. Predicted and labelled segments of a class are matched one to one by temporal IoU at 0.3, 0.5 and 0.7. Score A is the mean over classes of the mean F1 over the three thresholds; a class counts if it is in the labels or the predictions.

0.523Model score0.7 A + 0.3 B, or A alone without accidents
0.523Score A, events8 classes averaged
n/aScore B, riskno accidents in the sample clips
n/aMean time to accidenthow early the alarm fires

Part B is not scored here: evaluate.py returns null when the labels contain no accident, and none of the four sample clips has one.

Per-class F1 at three IoU thresholds
ClassF1 @0.3F1 @0.5F1 @0.7Mean F1TP / FP / FN @0.5
Red light emitted0.670.670.670.671 / 0 / 1
Illegal U-turn rule off0.000.000.000.000 / 0 / 9
Stopped vehicle emitted1.000.860.860.906 / 1 / 1
Jaywalking emitted0.810.460.350.5412 / 12 / 16
Failure to yield emitted0.570.510.430.5024 / 28 / 18
Illegal turn no rule0.000.000.000.000 / 0 / 2
Stop line emitted0.770.770.770.775 / 3 / 0
Congestion emitted0.800.800.800.802 / 0 / 1

Illegal U-turn scores 0.00 because we do not submit it. Our U-turn rule finds them with a mean F1 of 0.27 on these labels (0.47, 0.24, 0.12 at IoU 0.3, 0.5 and 0.7), and the annotated videos show them in purple. We leave the class out because nothing in view says a U-turn is prohibited here, so we cannot tell whether the organisers' annotators count them as illegal.

Which class we predict for each labelled event

For each event in our labels, the class of the predicted event that overlaps it most in time, if their temporal IoU is at least 0.3; otherwise it counts as missed. The last row counts predictions that overlap no label that well. Of the 87 labelled events in classes we emit, 4 get another class, 21 are missed and 26 predictions match no label: our errors are misses and false alarms, much more than one class read as another.

Labelled class (rows) against the predicted class that overlaps it best (columns)
Labelled predictedREDSVJAYFTYSTOPCONGMissed
Red lightRED 21.....1
Stopped vehicleSV 7.7.....
JaywalkingJAY 28..2011.6
Failure to yieldFTY 42..127..14
Stop lineSTOP 5....5..
CongestionCONG 3..1..2.
Illegal U-turnUT 9.121113
Illegal turnIT 2..1...1
No label (false alarm)None 26..3221.

Codes: RED red light, SV stopped vehicle, JAY jaywalking, FTY failure to yield, STOP stop line, CONG congestion, UT illegal U-turn, IT illegal turn; None is no label. It checks overlap in time only, so a labelled U-turn that happens while someone jaywalks counts as jaywalking. It uses IoU 0.3 and is not one-to-one like evaluate.py, so the diagonal is higher than the TP at 0.5 in the table above. U-turns (rule off) and illegal turns (no rule) are in our labels but not in our submission, so theirs are all missed or overlap other events.

Examples of each class we find

Up to three per class and clip, the longest ones. Each card opens the clip at that moment in the player above.

Where it goes wrong

Cases we found by comparing predictions with our labels. They are in the table and on the timeline above too.

Ablations

Same rules, same dev labels, one change per row. Score A is the official number; it also averages in the zeros for U-turns and illegal turns, which our labels have and no variant predicts. "Emitted" is the mean F1 over the classes we emit, and the last columns give each class's mean F1 over IoU 0.3, 0.5 and 0.7. Detector variants could only be scored on the two clips we cached their detections for, so they come with the submitted configuration scored on the same two clips. Cost is detector compute (model size, input pixels and frames) relative to the submitted configuration. The ablations re-track cached detections, so the first row differs slightly from the official run above: Score A 0.524 against 0.523, and jaywalking 0.551 against 0.538.

On those two clips the smaller detectors score 0.323 to 0.351 against 0.339 for YOLO26m, a difference within the noise of two clips, so the table gives no measured reason to prefer either. We kept YOLO26m because the rules were tuned on its detections, the only ones we cached for all four clips, and because decoding the 4K files, not the detector, sets our run time (see the Approach page).

Ablations, with the mean F1 of each class
ConfigurationClipsScore AEmittedCostREDSVJAYFTYSTOPCONG
YOLO26m @1280, 10 fpssubmittedSubmitted configuration.40.5240.6991.00x0.6670.9050.5510.5040.7690.800
YOLO26m @1280, 5 fpsEvery 6th frame: half the detector work.40.5090.6790.50x0.6670.9050.5200.4130.7690.800
YOLO26m @1280, 3.3 fpsEvery 9th frame: a third of the detector work.40.4030.5380.33x0.0000.9050.4530.2990.7690.800
YOLO26m @1280, 10 fps, same clipsBaseline for the row below.20.3390.4751.00x0.0000.8330.4640.4110.667-
YOLO26s @1280, 10 fpsSmaller detector (the Part B one), same input size.20.3430.4810.31x0.0000.8330.5000.4030.667-
YOLO26m @960, 10 fpsSame detector, 960 px input: people near the top of the frame shrink to about 17 px.20.3330.4670.56x0.0000.8330.4240.4090.667-
YOLO26n @960, 5 fpsThe live demo's detector and frame rate (it runs in the visitor's browser).20.3230.4520.03x0.0000.8330.3610.4000.667-
YOLO26s @960, 5 fpsThe Part B detector at the demo's frame rate.20.3510.4910.09x0.0000.8330.4850.4720.667-
No registrationScene polygons used as drawn, without mapping each clip onto the reference view.40.3910.5021.00x0.4000.9050.4490.3430.6190.800
Hand-drawn road maskJaywalking checked against the traced carriageway instead of the drivable area learned from vehicle tracks.40.5070.6771.00x0.6670.9050.4150.5040.7690.800

Class columns: RED red light, SV stopped vehicle, JAY jaywalking, FTY failure to yield, STOP stop line, CONG congestion. A dash means the class is in neither the labels nor the predictions of those clips.