Ask Your Question
2

Traffic Sign Recognition Concept

asked 2017-05-11 01:37:36 -0500

chnbr gravatar image

updated 2017-05-11 01:40:48 -0500

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 40-90 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.

image description image description image description

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

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
3

answered 2017-05-11 01:47:21 -0500

berak gravatar image

updated 2017-05-11 02:46:49 -0500

forget cascade classifiers (for the classification, as they can only handle a single class, while you got many).

also forget any features2d matching (again, for the classification part, as the matching part of this was never made for that purpose. (maybe BOW & SVM, but not Flann or BF matcher)

cnn's will do a great job at classification, but you have to feed them with cropped patches of potential candidates, so, for a typical large image, you would still need some detection/cropping process in front of that.

there are cnns like RCNN and YOLO, which are able to do object segmentation and classification at the same time, quite advanced, and not at all covered from opencv atm, unfortunately.

(and yes, use color !)

edit flag offensive delete link more

Comments

Thanks for your suggestions. Meanwhile I got a cascade classifier running for finding ROIs and a CNN for classifying the sign. The CNN works fine, however I still have problems with the cascade classifier. No matter how I train, it always detects "round signs" much better than "triangle signs" or "filled signs". I have trained many many cascades with image counts from 1000 up to 40000, same numbers for negatives. I tried to equalize the distribution between these sign types (to avoid getting biased towards the better represented signs). Question: Is it at all possible to train a _single_ cascade for "round", "quadratic", "triangle" features altogether ? If not I am stuck because I don't have computation power to do 3 or 4 detect_multiscale calls. Any suggestions ?

chnbr gravatar imagechnbr ( 2017-06-01 15:37:41 -0500 )edit

is any of this on github? I might be able to contribute.

cellurl gravatar imagecellurl ( 2018-03-25 12:42:20 -0500 )edit
1

@cellurl, the dnn module has improved a lot since last may, kindly take a look.

(and all of the links in the answer ARE on github.)

berak gravatar imageberak ( 2018-03-25 13:07:44 -0500 )edit
Login/Signup to Answer

Question Tools

2 followers

Stats

Asked: 2017-05-11 01:37:36 -0500

Seen: 1,788 times

Last updated: Mar 25