2017-04-22 46 views
1

我對Caffe和Deep Learning很新,所以請耐心等待我的經驗和天真的問題。 現在,我想使用FER2013數據集來訓練GoogleNet(它由臉部組成,目的是識別面部所處的7個類別之一)。然而,數據不是圖像格式,而是48x48 = 2304的值,每個值都在0和255之間。所以,爲了創建供給Caffe所需的lmdb文件,我編寫了以下Python腳本來轉換數組轉換成真實圖像。Caffe Python | GoogleNet的低精確度可能是由輸入數據的糟糕形式造成的?

import numpy as np 
from PIL import Image 
import csv 
import itertools 

with open('fer2013.csv', 'rb') as f: 
    mycsv = csv.reader(f) 
    i=0 
    for row in itertools.islice(mycsv, 340): 
     data = row[1] 
     data = data.split() 
     data = map(int, data) 
     data = np.array(data) 
     im = Image.fromarray(data.reshape((48,48)).astype('uint8')*255) 
     directory='imagestotest/' 
     path_to_save = directory+"image"+str(i)+".jpg" 
     path = "image"+str(i)+".jpg" 
     im.save(path_to_save) 
     i=i+1 
     with open("testset.txt", "a") as myfile: 
      myfile.write(path+" "+row[0]+"\n") 

我再準備我lmdb文件用下面的命令

GLOG_logtostderr = 1 ./deep-learning/caffe/build/tools/convert_imageset --resize_height = 256 --resize_width = 256 - -shuffle /家庭/張全景圖/桌面/圖像/ /home/panos/Desktop/trainingset.txt /家庭/張全景圖/桌面/ train_lmdb

最後,我計算image_mean,我改變train_val.prototxt和設置loss1,loss2,loss3圖層有num_output = 7(因爲我有7個類,0-6)。

我運行我的模型(訓練大小:5000,測試大小:340),準確性相當令人失望,接近23%(前1名),88.8%(前5名)。

這可能是一個超參數配置問題,還是我的輸入文件沒有正確創建? (因爲我害怕我的Python烹飪技巧)

如果有幫助,我的主要超參數是:test_iter:7,test_interval:40,base_lr:0.001,動量:0.9,weight_decay:0.0002。

在此先感謝!

+0

您正在調整'48 X 48'到'256 X 256'的大小。這可能是一個問題。您是否使用Googlenet預訓練模型進行體重初始化? – lnman

+0

@Inman我該怎麼做?它提供了什麼?萬分感謝您的快速回復! – Damager

回答

1

要使用預訓練模型,您需要先從here下載googlenet模型。現在你可以使用這個命令:

caffe train —solver solver.prototxt —weights bvlc_googlenet.caffemodel

一個培訓的主要問題是重初始化。如果沒有正確的初始化,模型可能不會收斂,表現出糟糕的表現您無法使用相同的值初始化所有權重。其他一些建議是權重應該是稀疏的,正交的,規範化的等。所以通常建議使用來自預訓練模型的權重。它可以被稱爲轉移學習。有關重量初始化的詳細信息,請參閱this by karpathy。您還可以看到What are good initial weights in a neural network?如果您想深入瞭解,請參閱以下論文。

[1] Bengio,Yoshua。 「深度架構梯度訓練的實用建議」。神經網絡:貿易的訣竅。 Springer Berlin Heidelberg,2012. 437-478。

[2] LeCun,Y.,Bottou,L.,Orr,G.B。和Muller,K。(1998a)。有效的支柱。在神經網絡中,貿易的技巧。

[3] Glorot,Xavier和Yoshua Bengio。 「瞭解訓練深度前饋神經網絡的難度。」國際人工智能和統計會議。 2010.

+0

非常感謝您的幫助!我會馬上嘗試。我可以再問一個問題嗎?我可以在Googlenet的數據層看到crop_size = 224。當我創建我的lmdb文件時,我將調整大小的參數更改爲48x48,並且它不接受它們,因爲它們比我剛纔提到的224小。所以現在我將它們改爲224,因爲它們希望它們成爲。這不是有點奇怪嗎?我的輸入是48x48,爲什麼我要把它放大?我應該干預googlenet train_val並將裁剪大小更改爲48?或者這會影響文件的每個方面?謝謝! – Damager

+0

我想你應該嘗試兩種。找到哪個更好,可能會很有趣。 – lnman

+0

使用預培訓的GoogleNet使我從23%(top1)的準確率提高到24%(top1)。關於如何改進它的任何其他想法?只是提到FER2013數據集很難實現高精度,因爲臉部在野外拍攝,而不是在工作室拍攝。然而,我讀過的幾篇論文已經達到了60%以上(top1)。 – Damager