Skip to content
Chorraha

Exploratory data analysis

What the camera actually sees

We ran a detector and tracker over all four sample videos, then looked at where people and vehicles move, where they stop, what the signal shows and how the footage itself changes. Each finding below carries a confidence level and what it means for the solution.

About the numbers. Counts on this page are tracklets: track IDs from a detector and tracker, not head counts. When a person walks behind a bus or a car is briefly missed, the tracker starts a new ID, so the numbers overcount distinct road users by roughly 20 to 40%. Use them to compare videos.

Findings that shaped our solution

9 findings from 4 videos (18:23 of 4K footage, 5,129 tracklets). Each links to the chart that shows it.

The four sample videos on one grid: the camera view differs between recordings

One frame each of C3905, C3896, C3897 and C3902 under the same pixel grid. Compare the signal heads and the zebra against the grid lines.

The same pixel grid over one frame of each video. Compare the signal heads and the zebra against the lines.

F1high

The camera framing changes between recordings

C3896 and C3897 match to under 1 px. C3902 is re-framed by about 130 px horizontally and 75 px vertically (4K pixels) with about 1° rotation and 1% scale relative to C3897, and C3905 differs by roughly 25 px near the junction. Fixed signal heads move by a consistent 80 to 100 px.

Consequence: Scene zones (stop line, crossings, lanes, parking) must be defined once on a reference frame and aligned to each video at start-up. Coordinates from one video do not transfer to another, and the hidden test videos may be framed differently again.

Dataset table

  1. F2highdominant flowsmediumsingle direction cells

    Two main traffic flows, the same in every video

    The far carriageway runs right to left, away from the camera; the near carriageway runs from top left to bottom right, towards it. In each video 12 to 20 cells of the direction map have low coherence but still get a heading, and flow numbers such as F1 mean different carriageways in different videos.

    Consequence: wrong_way should use the direction map only where coherence and sample support are high, and lanes should be named by geometry, not by flow number.

    Direction map, C3896Trajectories, C3905

  2. F3mediumC3905, C3902unknowndaylight

    Vehicle signal heads are readable from pixel colour in dusk and evening video

    The vehicle head L1 shows clean red, amber and green phases in C3905 and C3902. The automatic analysis picked the pedestrian head as the vehicle signal in C3896 and C3902, so that choice is wrong there. In daylight (C3897) the colour thresholds are not met for most samples, which may be calibration rather than real washout.

    Consequence: Each signal head must be mapped by hand to the approach it controls, lamps read from calibrated regions, and readings checked against human-labelled samples.

    Signal, C3905Signal, C3902Signal in daylight, C3897

  3. F4high

    Cars are parked at the far left edge in every video

    They are visible in the frames of all four videos. Other long-standing vehicles (far kerb, bus stop) appear only in some videos, and their durations are track lifetimes, not verified uninterrupted stops.

    Consequence: stopped_vehicle must exclude the left-edge parking bay. The bus stop area should not be excluded as a whole: a car standing there for 10 s or more may be a real stopped vehicle.

    Vehicle heatmap, C3905Stop map, C3896

  4. F5low

    Stop line position is only roughly known

    Queue fronts during red in C3905 suggest a stop line just before the main zebra, but the automatic estimate disagrees with points read by hand, and the method pools stops over time without requiring a queue at the same moment.

    Consequence: The painted stop line will be drawn by hand on the reference frame.

    Stop map, C3905

  5. F6lowas a jaywalking measure

    People on vehicle lanes is not a jaywalking rate

    19 to 27% of person tracklets enter cells used by moving vehicles, but those cells include the zebra crossings, kerbs and frame edges. The count of people outside the popular crossing corridors depends on thresholds.

    Consequence: Jaywalking needs hand-drawn crossing and sidewalk polygons and continuous occupancy, then validation against labels.

    Pedestrians on lanes, C3902Pedestrian heatmap, C3897

  6. F7highthat it changesunknowncause

    Brightness changes within a clip

    In C3905 brightness rises about 35% between 0:52 and 1:07. Whether this is camera auto exposure or sunlight is not established; the top and bottom of the frame change by different amounts.

    Consequence: Any brightness-based rule, such as fire_smoke, must normalise per frame.

    Brightness, C3905

  7. F8mediumstop statistics

    The stationary threshold is loose

    A vehicle counts as stationary below 25 px/s (4K) anywhere in the frame. That allows visible creeping near the camera and ignores perspective.

    Consequence: Stop maps are indicative only. Rules that depend on standing still need a perspective-aware threshold.

    Stop map, C3905Speed per track, C3905

  8. F9medium

    Detector size matters for pedestrians

    On C3905, YOLO11m produced 2.0x more small person boxes per frame and 1.4x more person boxes overall than YOLO11n at the same input size. These are detection counts, not measured recall.

    Consequence: The tracks on this page use the medium model at input size 1280. A hand-counted sample is needed before we state recall.

    Detector comparisonObject size, C3905

The four sample videos

Raw XAVC recordings from one fixed camera over a Tashkent junction. The site plays 720p copies of them.

Dataset facts

format from the files, counts from the tracker
C3905C3896C3897C3902
Resolution3840 x 21603840 x 21603840 x 21603840 x 2160
Frame rate29.97 fps29.97 fps29.97 fps29.97 fps
CodecH.264 4:2:2 10-bit (XAVC)H.264 4:2:2 10-bit (XAVC)H.264 4:2:2 10-bit (XAVC)H.264 4:2:2 10-bit (XAVC)
Bitrateabout 140 Mbpsabout 140 Mbpsabout 140 Mbpsabout 140 Mbps
Duration2:085:405:185:18
Frames3,82510,2009,5259,525
LightingLow sun and deep shadow (darkest clip), brightness jump at 0:52Bright daylight, steadyBright daylight, steadyEvening, getting darker through the clip
Mean luma, start / end38.6 / 35.895.5 / 95.894.8 / 95.169.1 / 58.2
Person tracklets5417706921,229
Car tracklets211458425502
Bus / truck tracklets20 / 2724 / 4217 / 2235 / 51
Motorcycle / bicycle / rider9 / 11 / 64 / 0 / 26 / 0 / 312 / 5 / 5
Tracks under 1 s22.9%17.5%19.1%19.9%
Person tracklets entering vehicle-used cellsincludes zebra crossings, not a jaywalking rate104 (19%)167 (22%)184 (27%)305 (25%)

Explore each video

Pick a video. Charts are drawn from the analysis files; click any figure to open it full size.

C3905. Low sun and deep shadow (darkest clip), brightness jump at 0:52.

People

541

tracklets

Cars

211

tracklets

Buses

20

tracklets

Trucks

27

tracklets

Two-wheelers

26

tracklets

Per frame, mean

31 / 30

person / vehicle boxes

Tracklets per second

distinct track IDs seen in each second, by class

Traffic by minute

tracklets seen per minute, mean vehicle speed

The last bar covers only 8 s of video, so it is drawn faded.

Vehicle flows

tracks of at least 2 s and 300 px
FlowDirectionTrackletsMedian speedStopped 2 s+
F1 near carriageway, towards camera
left to right73164 px/s32%
F2 far carriageway, away from camera
right to left66172 px/s35%
F3 junction centre to bottom-right
towards camera, left to right10119 px/s40%
F4 bottom edge, right to left
right to left9499 px/s0%
F5 right turn into bottom-left side street
towards camera3131 px/s67%

Flow numbers come from cluster size, so F1 is a different carriageway in different videos. Compare flows by direction.

  • Detector output at 0:40, C3905

    Detector output at 0:40. YOLO11m boxes and track ids on one frame. What the tracker has to work with: dense queues, overlapping cars and small pedestrians at the far kerb.

    Detector output at 0:40

    YOLO11m boxes and track ids on one frame.

    Why it matters: What the tracker has to work with: dense queues, overlapping cars and small pedestrians at the far kerb.

  • Vehicle trajectories, C3905

    Vehicle trajectories. Vehicle tracks over 2 s windows, coloured by heading. Shows the two main flows and the turns. Tracks that bend back at the right frame edge are often ID switches, not U-turns.

    Vehicle trajectories

    Vehicle tracks over 2 s windows, coloured by heading.

    Why it matters: Shows the two main flows and the turns. Tracks that bend back at the right frame edge are often ID switches, not U-turns.

    wrong_wayillegal_u_turn

  • Lane direction map, C3905

    Lane direction map. Mean heading of moving vehicles in each 80 x 80 px cell. A possible reference for wrong_way, but only in cells where the headings agree; faded arrows mark mixed directions.

    Lane direction map

    Mean heading of moving vehicles in each 80 x 80 px cell.

    Why it matters: A possible reference for wrong_way, but only in cells where the headings agree; faded arrows mark mixed directions.

    wrong_way

  • Lane flows, C3905

    Lane flows. Vehicle tracks grouped into flows by entry point, exit point and heading. Gives the flow table above and the turning movements for illegal_turn. Flow numbers differ between videos.

    Lane flows

    Vehicle tracks grouped into flows by entry point, exit point and heading.

    Why it matters: Gives the flow table above and the turning movements for illegal_turn. Flow numbers differ between videos.

    illegal_turn

  • Vehicle heatmap, C3905

    Vehicle heatmap. Where vehicles spend time (ground point density, log scale). Bright spots are queues and parked cars: the places where standing still can be normal.

    Vehicle heatmap

    Where vehicles spend time (ground point density, log scale).

    Why it matters: Bright spots are queues and parked cars: the places where standing still can be normal.

    stopped_vehiclecongestion

  • Pedestrian heatmap, C3905

    Pedestrian heatmap. Where people spend time. Shows the sidewalks, the zebra and the bus stop: the starting point for hand-drawn pedestrian zones.

    Pedestrian heatmap

    Where people spend time.

    Why it matters: Shows the sidewalks, the zebra and the bus stop: the starting point for hand-drawn pedestrian zones.

    jaywalkingfailure_to_yield

  • Stop map, C3905

    Stop map. Where vehicles stand still for 2 s or more, and moving vs stationary vehicles per second. The background colour is the automatically chosen signal head, which is the pedestrian head in C3896 and C3902. Indicative only: the stationary threshold is loose. It still shows the parked cars at the left edge and where queues form.

    Stop map

    Where vehicles stand still for 2 s or more, and moving vs stationary vehicles per second. The background colour is the automatically chosen signal head, which is the pedestrian head in C3896 and C3902.

    Why it matters: Indicative only: the stationary threshold is loose. It still shows the parked cars at the left edge and where queues form.

    stop_linestopped_vehicle

  • Traffic light reading, C3905

    Traffic light reading. Traffic lights found by the detector and their lit colour over time. red_light needs the vehicle phase. The vehicle head (L1) reads cleanly in C3905 and C3902; daylight readability is not established.

    Traffic light reading

    Traffic lights found by the detector and their lit colour over time.

    Why it matters: red_light needs the vehicle phase. The vehicle head (L1) reads cleanly in C3905 and C3902; daylight readability is not established.

    red_light

  • Pedestrians on the carriageway, C3905

    Pedestrians on the carriageway. People in cells used by moving vehicles, inside popular crossing corridors (green) and outside them (red). Not a jaywalking measure: the cells include the zebra and kerbs, and the corridors depend on thresholds.

    Pedestrians on the carriageway

    People in cells used by moving vehicles, inside popular crossing corridors (green) and outside them (red).

    Why it matters: Not a jaywalking measure: the cells include the zebra and kerbs, and the corridors depend on thresholds.

    jaywalking

  • Brightness over time, C3905

    Brightness over time. Mean frame brightness per second, for the whole frame and by region. Brightness can change fast within a clip, so brightness-based rules such as fire_smoke must normalise per frame.

    Brightness over time

    Mean frame brightness per second, for the whole frame and by region.

    Why it matters: Brightness can change fast within a clip, so brightness-based rules such as fire_smoke must normalise per frame.

    fire_smoke

  • Object size, C3905

    Object size. Box height by class, and person height against image row. Far pedestrians are about 80 px tall in 4K, about 13 px at input size 640 and 27 px at 1280. This is why detection runs at 1280.

    Object size

    Box height by class, and person height against image row.

    Why it matters: Far pedestrians are about 80 px tall in 4K, about 13 px at input size 640 and 27 px at 1280. This is why detection runs at 1280.

  • Speed and track length, C3905

    Speed and track length. 85th percentile speed per track by class, and how long each track lives. Many person tracks live under 1 s. Tracks fragment, which is why counts on this page overcount people and vehicles.

    Speed and track length

    85th percentile speed per track by class, and how long each track lives.

    Why it matters: Many person tracks live under 1 s. Tracks fragment, which is why counts on this page overcount people and vehicles.

Detector comparison on C3905

The same clip, the same input size (1280) and the same tracker. The small model ran on our 2-core server CPU, the medium model on a Kaggle T4 GPU. These are detection counts, not recall: nobody has hand-counted the frames yet.

YOLO11n vs YOLO11m

1,275 processed frames
YOLO11nCPUYOLO11mT4
Person boxes per frame23.031.6
Small person boxes (under 96 px) per frame4.79.4
Share of person boxes under 96 px20%30%
Median person box height129 px108 px
Car boxes per frame22.125.3
Person tracklets421547
Car tracklets268211
Median car track length6.0 s8.8 s

Fewer car tracklets for the same traffic means the medium model fragments cars less. On the CPU, YOLO11n at 1280 processed 1.75 frames per second.

Detector comparison figure

C3905
YOLO11n on CPU against YOLO11m on T4 for C3905

YOLO11n (CPU) against YOLO11m (T4) on C3905, same input size and tracker.

How we did it, and what it cannot tell us

Method

Footage
The 4 sample clips, 4K at 29.97 fps. Frames are decoded at 1080p and every box is scaled back to the 4K frame, so coordinates are 4K pixels in each video's own frame.
Detector
YOLO11m with COCO weights, input size 1280, on every 3rd frame (about 10 frames per second of video), on a Kaggle T4 GPU.
Tracker
ByteTrack. Tracks with fewer than 3 detections are dropped. People riding two-wheelers are relabelled as riders.
Positions
The ground point of a box is its bottom centre. Speeds are 4K pixels per second in the image, not metres.
Flows
Vehicle tracks of at least 2 s and 300 px are clustered by entry point, exit point and heading (k-means), then clusters on the same line are merged.
Signal
Traffic lights are found by the same COCO detector on a few frames, then their lit colour is read from pixel colour in every processed frame.
Framing
Median frames of each video are aligned with SIFT feature matching to measure how the camera view differs between recordings.
Tools
Python, Ultralytics YOLO11, ByteTrack, OpenCV, NumPy, pandas and matplotlib. Scripts are in tools/eda of the model repository.

Limitations

  • Counts are tracklets, not head counts, and overcount distinct road users by roughly 20 to 40%. 17 to 23% of tracks last under 1 s.
  • Detection counts are not recall. Nobody has hand-counted a sample yet.
  • Signal phases come from pixel colour. The vehicle head is readable in the low sun and evening clips; daylight is not established, and the automatic choice of head was wrong in two videos.
  • The stationary threshold ignores perspective, so stop maps and stop durations are indicative.
  • Distances and speeds are in image pixels. Perspective makes one pixel about 3 times longer at the far kerb than at the bottom of the frame.
  • Four clips from one camera. The hidden test set may differ in framing, light and traffic.

What we are checking next

Framing
Mark 6 fixed landmarks by hand per video; they must agree with the automatic alignment within a few pixels.
Signal
Map heads to approaches by hand, read lamps from the 4K originals, and check lamp colour by eye at 30 random moments per video.
Brightness cause
Read per-frame exposure, ISO and iris from the camera metadata track.
Stop line and zones
Draw the painted lines and zone polygons by hand on the reference frame.
Counts and recall
Hand-count people and vehicles in 20 random frames per video.
Direction cells
Gate cells by coherence and confirm with labelled wrong_way events, if any.