Hi,
I am working on a traffic sign recognition project and have tried several different approaches with no luck.
Goals
- detect _all_ traffic signs in the frame (all refers to all classes not to statistics)
- discriminate round speed limit signs from other signs
- recognize speed limits
Basic approach
My approach is classical 2 phase: CascadeClassification is done on the entire frame for the detection of potential sign ROIs followed by a second recognition phase only on the ROIs.
Status quo: I have trained a CascadeClassifier which detects signs quite well. It is trained for all traffic signs and delivers a certain (but tolerable) amount of false detection which I want to rule out in the recognition phase. ROIs are square, ranging between 20-45 pixels, color. I decided to do all processing on gray images only due to CPU limitations and the requirement to work at night as well.
Problem
My problem is the recognition phase. I describe what I tried so far:
a) "Multi Cascade Classifier": I trained several Cascade Classifiers, each on a particular speed limit class, e.g. one for the 50s, on the 60s and so on. This worked somehow but performance was bad. Main problems:
- 30 and 80 signs (and others as well) got confused.
- I am not able to tell if my ROI shows is a speed limit at all, because this approach delivers always a result even when I did not feed in a speed limit sign.
b) "Features2D": I tried feature based classifiers, "ORB followed by Knn brute-force-hamming" and "SIFT followed by Knn brute force". I used the Lowe criterion but the discrimination was again not good enough:
- signs still got confused
- no possibility to reject "non speed limit" signs
c) "Neuronal net": I trained a Convolutional Neuronal Net with 2 convolution layers and 2 FC layers based on the 9 speed limit sign classes. It somehow worked but again with the same problems a the other approaches. In addition a huge computational burden comes with this. So I would exclude solution (c) for the future.
Question
- What concept would you recommend to solve the problem ?
- Is there benefit from including color into the game ?
- Do you think from your expertise that a) or b) should do the job, if so which one ?
- Any suggestions on completely different approaches ?
Remark: I have read nearly everything that deals with that problem on the net...
Thanks and regards Chris