01 — Executive Summary
02 — The 3 Sub-Tasks
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-TaskQuestion AnsweredMethod
1 — ValidateIs 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 — ExtentWhere 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 — TemporalPermanent 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

Pole 161 conf: 1.0
52.43492, 13.26361 · 8 images
Pole 38 conf: 1.0
52.43564, 13.25627 · 6 images
Pole 297 conf: 1.0
52.44265, 13.29711 · 8 images
Pole 164 conf: 0.99
52.41965, 13.30692 · 8 images

REVIEW

Pole 179 conf: 0.83
52.44797, 13.26874 · 5 images
Pole 137 conf: 0.76
52.43564, 13.25773 · 8 images
Pole 234 conf: 0.76
52.43048, 13.31879 · 3 images
Pole 324 conf: 0.75
52.43585, 13.25564 · 7 images

EXCLUDE

Pole 128 conf: 0.0
52.34132, 13.10342 · 8 images
Pole 58 conf: 0.0
52.36354, 13.13721 · 3 images
Pole 180 conf: 0.0
52.42765, 13.32594 · 1 images
Pole 262 conf: 0.0
52.42538, 13.33227 · 8 images

ERROR FLAGGED

Pole 211 conf: 0.26
52.43172, 13.25858 · 0 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
ClassificationCount% of TotalDescription
AUTO_APPROVE15348.6%Passes all 6 gates. High confidence. No human review needed.
REVIEW8025.4%Passes most gates but has weak signals. Queue for human validator.
EXCLUDE8025.4%Inside existing Tempo-30 zone — sign is advisory, not a speed restriction.
ERROR_FLAGGED20.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.
CheckRuleSourceCoverage
n_detections threshold≥ 10 = valid signal, ≥ 100 = high confidenceProbe fleetAll 326 signs
GFR group checkMust be SchoolZone3 (Zeichen 274) — not advisory (Zeichen 136)HERE taxonomyAll 326 signs
School POI proximityNearest educational facility within 500mHERE school_pointsofinterest.csv (filtered)315 poles
OSM cross-reference591 school nodes matched via Overpass APIOpenStreetMap591 matched
Geoportal Berlin930 school polygon centroids (FIS-Broker layer)Geoportal Berlin930 records
Mapillary image reviewVisual confirmation via ML model + Florence-2 OCRMapillary API (1,850 images)292 confirmed, 34 not found
Bearing validationSign facing direction vs road bearing (modular arithmetic)road_geometry.csv + haversineAll 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:

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 TypeCountShareExplanation
End Sign7438%Explicit end-of-restriction sign found (EndSpeedLimit2V30, EndBUA, etc.)
Higher Speed8945%New higher speed limit sign appears (SpeedLimit2V50, V60, V80, V90)
Dead End179%Road terminates with no onward connection in graph
Max Distance168%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.
ClassDetection MethodNotes
PERMANENTNo supplemental_gfrgroup flagSpeed limit applies 24/7 including weekends and holidays (ADAC confirmed German law)
CONDITIONALsupplemental_gfrgroup flag presentTime restriction present — exact hours extracted via Florence-2 OCR on Mapillary image
OCR fallbackImage quality too low / image not foundFall 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.
ModelRoleAccuracyNotes
Random Forest (baseline)Gate decisions → classification93.2%Rule extraction, feature importance, fast CPU inference
Florence-2 (OCR)Supplemental sign text extraction84% on clear imagesLightning AI L4 GPU; falls back to heuristic on low-res
YOLOv8-nano (sign detect)Pole image sign detection + crop88.1% mAP50Hetzner CPU fallback when GPU credits exhausted
Gradient Boosting (ensemble)Confidence score calibration91.7%Handles class imbalance via SMOTE + class weights
10 — Class Imbalance Analysis
AUTO_APPROVE
153
REVIEW
80
EXCLUDE
80
ERROR_FLAGGED
2
11 — Data Sources
DatasetRecordsPurpose
schoolzone_speedlimit_signs.csv326School zone START signs with pole coords, bearing, n_detections
remaining_speedlimit_signs.csv11,607END signs + all other speed limit signs
road_geometry.csv27,943Road network links (WKT geometry, travel direction, UUID IDs)
school_pointsofinterest.csv4,780Schools, kindergartens, childcare POIs (filtered to educational)
traffic_data/HERE_DA_*.csv.gz48.5MProbe speed data — Feb 2026 weekdays 06–20 (LINK-DIR, SPDLIMIT, MEAN)
mapillary_images/1,850Sign confirmation photos (292 ok, 34 not found)
OSM Overpass API591+School nodes cross-reference
Geoportal Berlin FIS-Broker930Official 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 TypeDetected AtDescriptionEst. Frequency
Bearing mismatchGate 5Sign bearing does not align with any adjacent road direction (>60° tolerance). Indicates stale or mis-clustered detection.5–8 signs
False school zoneGate 4No educational facility within 1,000m AND n_detections < 10. Sign in industrial or residential area with no school.2–4 signs
Stale detection clusterGate 5 + temporalMapillary images from 2014–2017 show sign; no recent probe detections. Sign may have been removed.3–5 signs
Zone 30 misclassificationGate 1Sign sits inside existing SpeedLimitZoneV30 area — speed limit comes from zone, not school sign.~33 poles
GFR group anomalyGate 2speedlimit_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.