[轉]Theano下用CNN(卷積神經網路)做車牌中文字元OCR

來源:互聯網
上載者:User

標籤:org   mic   max   pat   pre   spec   network   out   tps   

Theano下用CNN(卷積神經網路)做車牌中文字元OCR

原文地址:http://m.blog.csdn.net/article/details?id=50989742

 

之前時間一直在看 Michael Nielsen 先生的 Deep Learning 教程。

 

用了他的代碼在theano下測試了下中文車牌字元的識別。由於我沒有GPU,簡單的在進行了16個epoch之後,識別率達到了 98.41% ,由於映像本來品質就不高,達到這個識別率,效果挺不錯了。

一共 31 類 車牌中文字元資料來源於中文車牌識別項目 EasyPR 的資料集 . 由於資料集分布很不均勻。可能會導致個別類別擬合不一致,而降低識別率。所以使用隨機輕微扭曲映像的方式來產生新的資料以保證資料集各個類目的數量的均衡。

下面是用於輕微扭曲映像來產生更多樣本的函數。

 

def rotRandrom(img,factor,size):    """ 使映像輕微的畸變            img 輸入映像        factor 畸變的參數        size 為圖片的目尺規寸    """    img = img.reshape(size);    shape = size;    pts1 = np.float32([[0,0],[0,shape[0]],[shape[1],0],[shape[1],shape[0]]])    pts2 = np.float32([[r(factor),r(factor)],[0,shape[0]-r(factor)],[shape[1]-r(factor),0],[shape[1]-r(factor),shape[0]-r(factor)]])    M  = cv2.getPerspectiveTransform(pts1,pts2);    dst = cv2.warpPerspective(img,M,(shape[0],shape[1]));    return dst.ravel();

 

 

在訓練的時候 使用的CNN結構如下

啟用函數都為 ReLu

Conv(kernel size 5*5 ) * 25個 feature map->  

Pooling 2*2  -> 

Conv(kernel size 5*5) * 16個feature map->

Pooling 2*2 ->

FullConnectedLayer 120 個 Neurons -> 

FullConnectedLayer 84個 Neurons ->

Softmax Output 31類

 

 

 

import network3from network3 import Networkfrom network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayerfrom network3 import ReLUtraining_data, validation_data, test_data= network3.load_data_cPickle("./data.pkl")mini_batch_size = 10
net = Network([        ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),                      filter_shape=(25, 1, 5, 5),                      poolsize=(2, 2),                      activation_fn=ReLU),        ConvPoolLayer(image_shape=(mini_batch_size, 25, 12, 12),                      filter_shape=(16, 25, 5, 5),                      poolsize=(2, 2),                      activation_fn=ReLU),        FullyConnectedLayer(n_in=16*4*4, n_out=120, activation_fn=ReLU),         FullyConnectedLayer(n_in=120, n_out=84, activation_fn=ReLU),        SoftmaxLayer(n_in=84, n_out=31)], mini_batch_size )
net.SGD(training_data, 60, mini_batch_size, 0.03, validation_data, test_data, lmbda=0.1)

 

這個函數用於製作自己的資料。

 

def make_dataset(dirn):    set = [];    labels = [] ;    def findinside(dirname,code,):        print "code",code;        print "dirname",dirname;        for parent,dirnames,filenames in os.walk(dirname):            adder = 1400 -  len(filenames)            len_d = len(filenames)            for filename in filenames:                path  =parent+"/"+filename                if(path.endswith(".jpg")):                            img = cv2.imread(path,cv2.CV_LOAD_IMAGE_GRAYSCALE);                            img = cv2.resize(img,(28,28));                            img = img.astype(np.float32)/255;                            set.append(img.ravel());                            labels.append(code);            for i in range(adder):                c_index = int(np.random.rand() * len_d);                l_set = len(set)                set.append(rotrandom.rotRandrom( set[l_set-len_d + c_index],0.88,(28,28)));                labels.append(code);        print len(set),dirname,len(filenames)    for parent,dirnames,filenames in os.walk(dirn):            num = len(dirnames);            for i in range(num):                        c_path = dir_chars + "/"+ dirnames[i];                        findinside(c_path,i);    shuffle = np.random.permutation(len(set));    print len(set)    set = np.array(set);    labels = np.array(labels);    set, labels = set[shuffle], labels[shuffle]    train_n = int(0.9*len(set))    training_set,test_set = np.split(set, [train_n])    training_labels, test_labels = np.split(labels, [train_n])    print training_labels    validation_set = test_set.copy();    validation_labels = test_set.copy();    training_data = [training_set,training_labels]    validation_data = [validation_set,validation_labels]    test_data = [test_set,test_labels]    data = [ training_data, validation_data, test_data];    fileid  = open("./data.pkl","wb")    cPickle.dump(data,fileid)dir_chars = "./charsChinese"make_dataset(dir_chars);

 

在進行了第14個epoch之後獲得了 98.41% 訓練時間大概在10分鐘左右。

 

 

Training mini-batch number 0Training mini-batch number 1000Training mini-batch number 2000Training mini-batch number 3000Epoch 0: validation accuracy 89.15%This is the best validation accuracy to date.The corresponding test accuracy is 89.15%Training mini-batch number 4000Training mini-batch number 5000Training mini-batch number 6000Training mini-batch number 7000Epoch 1: validation accuracy 94.65%This is the best validation accuracy to date.The corresponding test accuracy is 94.65%Training mini-batch number 8000Training mini-batch number 9000Training mini-batch number 10000Training mini-batch number 11000Epoch 2: validation accuracy 95.44%This is the best validation accuracy to date.The corresponding test accuracy is 95.44%Training mini-batch number 12000Training mini-batch number 13000Training mini-batch number 14000Training mini-batch number 15000Epoch 3: validation accuracy 96.13%This is the best validation accuracy to date.The corresponding test accuracy is 96.13%Training mini-batch number 16000Training mini-batch number 17000Training mini-batch number 18000Training mini-batch number 19000Epoch 4: validation accuracy 96.91%This is the best validation accuracy to date.The corresponding test accuracy is 96.91%Training mini-batch number 20000Training mini-batch number 21000Training mini-batch number 22000Training mini-batch number 23000Epoch 5: validation accuracy 96.52%Training mini-batch number 24000Training mini-batch number 25000Training mini-batch number 26000Training mini-batch number 27000Epoch 6: validation accuracy 96.87%Training mini-batch number 28000Training mini-batch number 29000Training mini-batch number 30000Training mini-batch number 31000Epoch 7: validation accuracy 96.87%Training mini-batch number 32000Training mini-batch number 33000Training mini-batch number 34000Training mini-batch number 35000Epoch 8: validation accuracy 97.58%This is the best validation accuracy to date.The corresponding test accuracy is 97.58%Training mini-batch number 36000Training mini-batch number 37000Training mini-batch number 38000Training mini-batch number 39000Epoch 9: validation accuracy 97.49%Training mini-batch number 40000Training mini-batch number 41000Training mini-batch number 42000Epoch 10: validation accuracy 97.60%This is the best validation accuracy to date.The corresponding test accuracy is 97.60%Training mini-batch number 43000Training mini-batch number 44000Training mini-batch number 45000Training mini-batch number 46000Epoch 11: validation accuracy 97.93%This is the best validation accuracy to date.The corresponding test accuracy is 97.93%Training mini-batch number 47000Training mini-batch number 48000Training mini-batch number 49000Training mini-batch number 50000Epoch 12: validation accuracy 97.83%Training mini-batch number 51000Training mini-batch number 52000Training mini-batch number 53000Training mini-batch number 54000Epoch 13: validation accuracy 98.04%This is the best validation accuracy to date.The corresponding test accuracy is 98.04%Training mini-batch number 55000Training mini-batch number 56000Training mini-batch number 57000Training mini-batch number 58000Epoch 14: validation accuracy 98.20%This is the best validation accuracy to date.The corresponding test accuracy is 98.20%Training mini-batch number 59000Training mini-batch number 60000Training mini-batch number 61000Training mini-batch number 62000Epoch 15: validation accuracy 97.86%Training mini-batch number 63000Training mini-batch number 64000Training mini-batch number 65000Training mini-batch number 66000Epoch 16: validation accuracy 98.41%This is the best validation accuracy to date.The corresponding test accuracy is 98.41%

[轉]Theano下用CNN(卷積神經網路)做車牌中文字元OCR

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.