YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

classify_nl_traffic_signs

YOLOv26 image classification model for identifying Dutch traffic sign classes. Trained on cropped sign images from the Panoramax platform.

This model is the second stage in a two-step pipeline:

  1. Detection β€” Panoramax/detect_face_plate_sign localises the sub-sign crop
  2. Classification β€” this model identifies the traffic sign class from the crop

Which signs are included?

The model includes the most common traffic signs in the Netherlands, such as warning signs, priority signs, parking signs, and speed signs. It classifies the signs by the Dutch RVV-code (RVV 1990), for example A1 for a speed limit sign. A full overview of these classes can be found below. In addition, the model also includes some signs that are not strictly traffic signs but are nonetheless detected as a sign by the detection model. Some of these include dry standpipe connection points (droge blusleidingen), chevron signs (bochtschilden), channelizing panels (geleidebakens), a few nautical traffic signs such as max speed for boats, and no-alcohol signs.

Model details

Property Value
Architecture YOLO26s-cls (Ultralytics)
Base model yolo26s-cls.pt (pretrained ImageNet)
Fine-tuning epochs 30
Input size 224 Γ— 224 px
Classes 170
Training images 19,374
Validation images 4,760

Classes

The following are the classes that have an official code:

ID Class Description
0 A04-15 adviessnelheid_15
1 A04-30 adviessnelheid_30
2 D02-LO arrow_left
3 C04-L arrow_left_rect
4 D03 arrow_left_right
5 D02-RO arrow_right
6 C04-R arrow_right_rect
7 D04 arrow_through
8 D05-L arrow_turn_left
9 D07 arrow_turn_left_right
10 D06-L arrow_turn_left_through
11 D05-R arrow_turn_right
12 D06-R arrow_turn_right_through
13 G12 bicycle_end
14 L1002-A bicycle_priority
15 G11 bicycle_start
16 G12-B moped_end
17 G12-A moped_start
18 BW410 bike_route
19 BB12 bochtschild
20 C05 bothways
21 BW03 bromfiets_hier
22 F13 bus_start
23 F14 bus_end
24 L05 doorgaand_plus_einde_rijstrook
25 L06 doorgaand_plus_splitsing
26 G05 erf
27 BB01 exit
28 BB35 geleidebakens
29 B06 give_way
30 J37 hazard
31 J30 hazard_airport
32 J28 hazard_animals
33 J24 hazard_bicycle
34 J39 hazard_bollard
35 J29 hazard_bothways
36 J38 hazard_bump
37 J01 hazard_bumps
38 J08 hazard_crossing
39 J26 hazard_dock
40 J25 hazard_gravel
41 J36 hazard_ice
42 J07 hazard_incline
43 B03 hazard_intersection
44 B04 hazard_intersection_left
45 B05 hazard_intersection_right
46 J03 hazard_left_turn
47 J10 hazard_level_crossing
48 C1-snor hazard_moped
49 J15 hazard_moving_bridge
50 J17 hazard_narrow_both
51 J19 hazard_narrow_left
52 J18 hazard_narrow_right
53 J22 hazard_pedestrian_crossing
54 J23 hazard_pedestrian
55 J16 hazard_road_works
56 J1004 hazard_rocks
57 J09 hazard_roundabout
58 J21 hazard_school
59 J20 hazard_slippery
60 J32 hazard_traffic_signal
61 J11 hazard_train
62 J14 hazard_tram
63 J02 hazard_right_turn
64 J27 hazard_wild_animals
65 J04 hazard_zigzag
66 J05 hazard_zigzag_left
67 G09 horse_start
68 C20 maxaxleweight
69 C19 maxheight
70 C17 maxlength
71 A01-5 maxspeed_5
72 A01-10 maxspeed_10
73 A01-15 maxspeed_15
74 A01-20 maxspeed_20
75 A01-25 maxspeed_25
76 A02-30 maxspeed_30_end
77 A01-40 maxspeed_40
78 A01-50 maxspeed_50
79 A02-50 maxspeed_50_end
80 A01-60 maxspeed_60
81 A02-60 maxspeed_60_end
82 A01-70 maxspeed_70
83 A02-70 maxspeed_70_end
84 A01-80 maxspeed_80
85 A02-80 maxspeed_80_end
86 A01-90 maxspeed_90
87 A01-100 maxspeed_100
88 A02-100 maxspeed_100_end
89 A01-120 maxspeed_120
90 A01-30 maxspeed_30
91 C21 maxweight
92 C18 maxwidth
93 C22-E milieu
94 G02 motorway_end
95 G01 motorway_start
96 C08 no_agriculture
97 C09 no_agriculture_bicycle
98 C22-C no_bestelbus_vrachtwagen
99 C14 no_bicycle
100 C07-A no_bus
101 C12 no_car_motorcycle
102 C06 no_car
103 C22 no_dangerous
104 C02 no_entry
105 L08 noexit
106 C07 no_hgv
107 C13 no_moped
108 C11 no_motorcycle
109 F01 no_overtaking
110 F02 no_overtaking_end
111 F03 no_overtaking_hgv
112 F04 no_overtaking_hgv_end
113 E03 no_parking_bicycle
114 E01 no_parking
115 C16 no_pedestrian
116 E02 no_stop
117 F07 no_u_turn
118 C01 no_way
119 L09-2L noexit_left
120 F08 no_end
121 T201 omleiding
122 C03 oneway
123 G13 onverplicht_fietspad
124 E09 parkeren_vergunninghouders
125 E04 parking
126 E08-9 parking_bicycle
127 E08 parking_car
128 E102-2 parking_card
129 E08o parking_charging
130 E105 parking_covered
131 E07 parking_delivery
132 E06 parking_disabled
133 E08-7 parking_moped
134 E101-2 parking_payment
135 E08-11 parking_police
136 E05 parking_taxi
137 G08 pedestrian_end
138 G07 pedestrian_start
139 L02 pedestrian_crossing
140 B01 pedestrian_start
141 F05 priority_backward
142 B02 priority_end
143 F06 priority_forward
144 L14 rest
145 D01 roundabout
146 B07 stop
147 F15 tram_start
148 F17 tram_bus
149 G04 trunk_end
150 G03 trunk_start
151 BB04 versmalling_vluchtstrook
152 L04 voorsorteren

As mentioned before, there are also a number of other classes that are not strictly traffic signs. Further, there are a number of bad classes such as windows, buildings and the backs of traffic signs. These accidentally get detected as signs in step 1 of the pipeline.

Design choices: numbers on signs and zone signs

As stated above, the model classifies signs by RVV-code, such that it can distinguish between for instance a zebra-crossing sign and a weight limit sign. However, there are no separate classes for different numerical values on the signs, for instance a weight limit sign with weight limit 7.5 tons vs. a weight limit sign with weight limit 20 tons. There is a separate model for reading the numerical values on signs, found at Panoramax/????. Speed limit signs are an exception: For these, separate classes are included per speed limit.

There are also no separate classes for whether a sign is a zone sign or not. For instance, a speed limit 30 sign in the Netherlands can be a regular sign, or a sign indicating the start, end, or repetition of a speed limit zone. Both of these signs will receive the class A1 in this model. To distinguish between them, there is a separate model that classifies signs by whether they are a zone-start, zone-repetition, zone-end, or no-zone sign. The model can be found at Panoramax/????.

Performance

Validation set (4,760 images)

Metric Value
Top-1 accuracy 98.4%
Top-5 accuracy 99.8%

Usage

from ultralytics import YOLO

model = YOLO("Panoramax/????")

results = model.predict("sign_crop.jpg", conf=0.50)
for r in results:
    print(r.probs.top1, model.names[r.probs.top1], float(r.probs.top1conf))

The model expects a cropped image of a sign β€” not a full street photo. Use Panoramax/detect_face_plate_sign to obtain the crop first.

Predictions of classes ????? should be forwarded to XXXX. Predictions of classes ??? should be forwarded to XXXX.

Training

Parameter Value
Epochs 30
Batch size 16
Image size 224 Γ— 224
Optimizer AdamW
Initial LR 0.001
Augmentation RandAugment, fliplr disabled, translate=0.2, shear=10.0, erasing=0.2, dropout=0.3

The training dataset used for this model is based on the dataset Panoramax/Panoramax/classified_nl_road_signs. The dataset was extended with additional Dutch traffic sign and non-traffic sign classes. Zone- and non-zone signs of the same RVV code were merged into a single class.

Dataset

See Panoramax/??? for the training and validation images.

License

Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support