# Need help optimizing training setup to detect all german traffic signs

Hello dear OpenCV gurus,

I am a beginner with computer vision and need your help.

I need to detect all different types of german traffic signs (~600) and want to use OpenCV to do so.

In an Android and iOS App the user either takes a picture of a sign post or a single traffic sign where most of the picture is filled by that single sign (size of the longer side is 1536px).

Picture from mobile where vz151 should be detected

I want to ease the process of selecting the type of the traffic sign by detecting which sign is on that picture.

I have the official SVG files of each traffic sign, so I created PNGs for each with a transparent background and from those samples using opencv_createsamples with several background images using -num and -max*angle parameters, but training using those did not work well - and apparently using real-world images is a better source.

SVGs of traffic signs

I also have a database (which is small yet, but will grow fast in the near future) where for each traffic sign I have a number of real-world pictures with the manually set annotations where exactly in the picture the sign is located (x y width height - like opencv_annotation).

I created samples (.vec) (via opencv_createsamples using the annotations from the database in sizes 102x90 and 102x102 according to their ratio) and trained using a list of negatives (.neg) for the five signs vz114, vz151, vz205, vz267, vz306 - the ones I currently have the most real-world pictures of.

Picture from mobile of a background for a sign

First I tried using only backgrounds in which the signs might occur as negatives (in their original size 2448x3264px). As the identification did not work well I tried with those backgrounds downscaled to 816x216px and prepending downscaled versions (to 125px for the longer side) of the all the other signs to the negatives of each sign (so vz114 has the positives of vz151, vz205, vz267, vz306 and downscaled backgrounds as negatives, vz151 has the positives of vz114, vz205, vz267, vz306 and downscaled backgrounds as negatives and so on).

downscaled version of an annotated vz114 used as a negative when training vz151

downscaled version of an annotated vz151 used as a negative when training vz114

Log of training for vz114 (109 samples):

PARAMETERS:
vecFileName: vz114_102x90.vec
bgFileName: vz114.neg
numPos: 102
numNeg: 1000
numStages: 20
precalcValBufSize[Mb] : 1024
precalcIdxBufSize[Mb] : 1024
acceptanceRatioBreakValue : 0.0001
stageType: BOOST
featureType: LBP
sampleWidth: 102
sampleHeight: 90
boostType: GAB
minHitRate: 0.999
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
Number of unique features given windowSize [102,90] : 2292195

===== TRAINING 0-stage =====
<BEGIN
POS count : consumed   102 : 102
NEG count : acceptanceRatio    1000 : 1
Precalculation time: 10
+----+---------+---------+
|  N |    HR   |    FA   |
+----+---------+---------+
|   1|        1|        1|
+----+---------+---------+
|   2|        1|    0.015|
+----+---------+---------+
END>
Training until now has taken 0 days 0 hours 3 minutes 27 seconds.

===== TRAINING 1-stage =====
<BEGIN
POS count : consumed   102 : 102
NEG count : acceptanceRatio    1000 : 0.262055
Precalculation ...
edit retag close merge delete