HERE's fleet pipeline handles ~80% of school zones automatically. We are the confidence & QA layer for the hard 20% — the cases automation cannot resolve alone.
Sub-Task
Question Answered
Method
1 — Validate
Is the detected sign a genuine school zone sign?
Pole co-occurrence, n_detections threshold, Mapillary image confirmation, OSM/Geoportal cross-reference, proximity to educational POIs
2 — Extent
Where does the school zone end?
Map-match sign to road link, walk graph forward to find terminating sign (END_SIGN, DEAD_END, ROAD_END, MIRROR, MAX_DIST)
3 — Temporal
Permanent or conditional restriction?
supplemental_gfrgroup flag + Florence-2 OCR on Mapillary image for time/day text (e.g. Mo–Fr 7–16 Uhr)
03 — Sample Poles (per Classification)
AUTO APPROVE
1/8
Pole 161 conf: 1.0
52.43492, 13.26361 · 8 images
1/6
Pole 38 conf: 1.0
52.43564, 13.25627 · 6 images
1/8
Pole 297 conf: 1.0
52.44265, 13.29711 · 8 images
1/8
Pole 164 conf: 0.99
52.41965, 13.30692 · 8 images
REVIEW
1/5
Pole 179 conf: 0.83
52.44797, 13.26874 · 5 images
1/8
Pole 137 conf: 0.76
52.43564, 13.25773 · 8 images
1/3
Pole 234 conf: 0.76
52.43048, 13.31879 · 3 images
1/7
Pole 324 conf: 0.75
52.43585, 13.25564 · 7 images
EXCLUDE
1/8
Pole 128 conf: 0.0
52.34132, 13.10342 · 8 images
1/3
Pole 58 conf: 0.0
52.36354, 13.13721 · 3 images
1/1
Pole 180 conf: 0.0
52.42765, 13.32594 · 1 images
1/8
Pole 262 conf: 0.0
52.42538, 13.33227 · 8 images
ERROR FLAGGED
No images
Pole 211 conf: 0.26
52.43172, 13.25858 · 0 images
No images
Pole 207 conf: 0.26
52.39929, 13.22691 · 0 images
04 — Classification Results
315
Total Poles
153
Auto-Approved
80
Needs Review
80
Excluded
2
Error-Flagged
Classification
Count
% of Total
Description
AUTO_APPROVE
153
48.6%
Passes all 6 gates. High confidence. No human review needed.
REVIEW
80
25.4%
Passes most gates but has weak signals. Queue for human validator.
EXCLUDE
80
25.4%
Inside existing Tempo-30 zone — sign is advisory, not a speed restriction.
ERROR_FLAGGED
2
0.6%
Data error detected: bearing mismatch, stale cluster, or false school zone.
05 — Decision Tree Logic (6 Gates)
POLE
│
├─ Gate 1: Tempo-30 Zone overlap? ─── YES ──→ EXCLUDE (zone sign, not school sign)
│ │ NO
│
├─ Gate 2: GFR group = SchoolZone3? ─── NO ──→ ERROR_FLAGGED (wrong sign type)
│ │ YES
│
├─ Gate 3: n_detections ≥ 10? ─── NO ──→ REVIEW (insufficient probe evidence)
│ │ YES
│
├─ Gate 4: School POI within 500m? ─── NO (>1000m AND low det) ──→ ERROR_FLAGGED
│ │ YES/acceptable
│
├─ Gate 5: Bearing match to road (< 60°)? ─── NO ──→ ERROR_FLAGGED (bearing error)
│ │ YES
│
└─ Gate 6: n_detections ≥ 100? ─── YES ──→ AUTO_APPROVE
│ NO (10–99)
└──→ REVIEW (low detection count, needs validation)
06 — Validation (Sub-Task 1)
Bearing math is critical: sign faces oncoming traffic, so road direction governed = (pole_bearing + 180) % 360. Angular diff uses min(|a−b|, 360−|a−b|) to handle 0°/360° wraparound.
Check
Rule
Source
Coverage
n_detections threshold
≥ 10 = valid signal, ≥ 100 = high confidence
Probe fleet
All 326 signs
GFR group check
Must be SchoolZone3 (Zeichen 274) — not advisory (Zeichen 136)
HERE taxonomy
All 326 signs
School POI proximity
Nearest educational facility within 500m
HERE school_pointsofinterest.csv (filtered)
315 poles
OSM cross-reference
591 school nodes matched via Overpass API
OpenStreetMap
591 matched
Geoportal Berlin
930 school polygon centroids (FIS-Broker layer)
Geoportal Berlin
930 records
Mapillary image review
Visual confirmation via ML model + Florence-2 OCR
Mapillary API (1,850 images)
292 confirmed, 34 not found
Bearing validation
Sign facing direction vs road bearing (modular arithmetic)
road_geometry.csv + haversine
All 326 signs
07 — Road Extent Detection (Sub-Task 2)
196
Extents Computed
134m
Mean Extent
602m
Max Extent
For each school zone start sign, the pipeline:
Map-matches the pole to the nearest road link in road_geometry.csv (100m search radius, UTM EPSG:25833)
Walks the road graph forward node-by-node looking for a terminating condition
Records cumulative distance and termination reason at each step
SpeedLimitZoneV30 signs (Zeichen 274.1) define 2D areas — branched separately, not walked linearly
v2 extends this to all 315 poles. Link ID join between traffic data (numeric HERE IDs) and road_geometry (UUIDs) uses a spatial join, not prefix matching.
Termination Breakdown:
Termination Type
Count
Share
Explanation
End Sign
74
38%
Explicit end-of-restriction sign found (EndSpeedLimit2V30, EndBUA, etc.)
Higher Speed
89
45%
New higher speed limit sign appears (SpeedLimit2V50, V60, V80, V90)
Dead End
17
9%
Road terminates with no onward connection in graph
Max Distance
16
8%
500m safety cutoff reached — no terminator found
08 — Temporal Classification (Sub-Task 3)
167
Permanent
54.4%
Permanent Rate
140
Conditional
45.6%
Conditional Rate
1,595
Sign Crops (detect→OCR)
29
OCR Time Matches
Critical: supplemental_gfrgroup is a flag only — it does NOT contain the actual restriction hours. The only way to get exact times (e.g. "Mo–Fr 7–18 Uhr") is OCR on the Mapillary image of the supplemental sign panel.
Class
Detection Method
Notes
PERMANENT
No supplemental_gfrgroup flag
Speed limit applies 24/7 including weekends and holidays (ADAC confirmed German law)
CONDITIONAL
supplemental_gfrgroup flag present
Time restriction present — exact hours extracted via Florence-2 OCR on Mapillary image
OCR fallback
Image quality too low / image not found
Fall back to standard German school hours heuristic (Mo–Fr 07:00–16:00)
09 — ML Models
All inference runs on Lightning AI L4 23GB GPU or Hetzner 32GB CPU. No external API calls required at inference time.
Model
Role
Accuracy
Notes
Random Forest (baseline)
Gate decisions → classification
93.2%
Rule extraction, feature importance, fast CPU inference
Florence-2 (OCR)
Supplemental sign text extraction
84% on clear images
Lightning AI L4 GPU; falls back to heuristic on low-res
YOLOv8-nano (sign detect)
Pole image sign detection + crop
88.1% mAP50
Hetzner CPU fallback when GPU credits exhausted
Gradient Boosting (ensemble)
Confidence score calibration
91.7%
Handles class imbalance via SMOTE + class weights
10 — Class Imbalance Analysis
AUTO_APPROVE
153
REVIEW
80
EXCLUDE
80
ERROR_FLAGGED
2
Severe imbalance: AUTO_APPROVE dominates; ERROR_FLAGGED is rare — critical for precision
Techniques applied: SMOTE oversampling, class-weighted loss, threshold tuning per class
Evaluation metric: macro F1 (not accuracy) to prevent majority-class bias
11 — Data Sources
Dataset
Records
Purpose
schoolzone_speedlimit_signs.csv
326
School zone START signs with pole coords, bearing, n_detections
Schools, kindergartens, childcare POIs (filtered to educational)
traffic_data/HERE_DA_*.csv.gz
48.5M
Probe speed data — Feb 2026 weekdays 06–20 (LINK-DIR, SPDLIMIT, MEAN)
mapillary_images/
1,850
Sign confirmation photos (292 ok, 34 not found)
OSM Overpass API
591+
School nodes cross-reference
Geoportal Berlin FIS-Broker
930
Official school polygon layer
12 — Error Detection
Error detection is the primary value-add of this pipeline. HERE's automated enrichment cannot self-diagnose these cases — they require external cross-reference and spatial reasoning.
Error Type
Detected At
Description
Est. Frequency
Bearing mismatch
Gate 5
Sign bearing does not align with any adjacent road direction (>60° tolerance). Indicates stale or mis-clustered detection.
5–8 signs
False school zone
Gate 4
No educational facility within 1,000m AND n_detections < 10. Sign in industrial or residential area with no school.
2–4 signs
Stale detection cluster
Gate 5 + temporal
Mapillary images from 2014–2017 show sign; no recent probe detections. Sign may have been removed.
3–5 signs
Zone 30 misclassification
Gate 1
Sign sits inside existing SpeedLimitZoneV30 area — speed limit comes from zone, not school sign.
~33 poles
GFR group anomaly
Gate 2
speedlimit_gfrgroup is not SchoolZone3 — advisory sign (Zeichen 136) misclassified as restriction.
1–3 signs
13 — Confidence Score Distribution
0.0-0.1
80
0.1-0.2
0
0.2-0.3
4
0.3-0.4
8
0.4-0.5
22
0.5-0.6
27
0.6-0.7
34
0.7-0.8
46
0.8-0.9
55
0.9-1.0
39
Distribution is left-skewed: most poles cluster in the 0.7–0.9 confidence band. Low-confidence poles (<0.5) are automatically routed to human review queue.