I would like to construct a license plate recognition system using convolutional neural network (CNN). But I do not have appropriate dataset to train from.

If I train my CNN on the MNIST handwritten digits data set and use them for car registration plate recognition, would it work in theory? Thank you.

  • $\begingroup$ Do your license plates have only numbers? MNIST does not have letters. $\endgroup$ – rcpinto Aug 7 '15 at 4:06
  • $\begingroup$ oh yeah.. i overlooked that point. It seems i need to train on specific dataset then? $\endgroup$ – dnth Aug 7 '15 at 8:14
  • $\begingroup$ Yes. But even if you needed only numbers, the domains are very different, which probably would give you poor results. I suggest that you generate a synthetic dataset using the official font of your license plates + affine transformations. Or you could try the Chars74K dataset (the EnglishFnt.tgz subset). $\endgroup$ – rcpinto Aug 7 '15 at 14:51
  • $\begingroup$ Chars74K seems to be a good dataset. Thank you rcpinto $\endgroup$ – dnth Aug 10 '15 at 6:05

This looks promising:


You will need to contact the authors, as it is apparently password protected (if possible, consider posting the datasets on mldata.org for others).

You might also want to contact Ars Technica and Bryce Newell as they have acquired a lot of license plate images from city governments.

I would not limit yourself to a single dataset. You might actually want to first train on a dataset as ImageNet or take a network that has been pretrained on ImageNet. You can then replace the last fully connected layer (the penultimate layer). You can then restrict the training to this layer. This is fairly standard practice. You can then train on license plates and strings of characters and numbers.

You might also want to ask on https://opendata.stackexchange.com/ (in beta at the time of this writing).

  • $\begingroup$ Hi, does taking a pretrained model and retraining them on license plate makes the network significantly better than training the net only on licence plates? $\endgroup$ – dnth Oct 24 '15 at 15:18
  • $\begingroup$ It can be especially helpful if you don't have sufficient images of license plates. If you take pretrained network, you wouldn't even need to retrain the first layers, which would significantly reduce the free parameters. $\endgroup$ – Jonathan Oct 25 '15 at 12:18
  • $\begingroup$ Hi Jonathan, can you elaborate the procedure of "discarding the last fully connected layers"? For instance, I downloaded the pre-trained model (weights), and remove the weights of last fully connected layers, and intialize it randomly, and re-train. Is this correct? $\endgroup$ – user3125 Sep 15 '16 at 2:09
  • $\begingroup$ @user3125 Actually, you can just replace the "penultimate" layer - the layer that reduces the number of channels to the number of output classes. You have to do this (or something equivalent) when the number of classes changes. Then, you can randomize the weights of this layer, (optionally) fix the weights in all other layers, and re-train. $\endgroup$ – Jonathan Apr 21 '17 at 9:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.