《基于caffe的表情識别》系列文章索引:http://blog.csdn.net/pangyunsheng/article/details/79434263
一、編譯pycaffe
caffe提供了python、matlab、C++等語言的接口,這裡我們使用python進行測試就需要先編譯python接口,也就是編譯pycaffe,我在之前給出的安裝編譯caffe的教程中,包含了編譯pycaffe的内容,如果讀者是在ubuntu16.04下編譯,可以直接看我的教程:http://mp.blog.csdn.net/postedit/79418896,如果是其他作業系統或其他版本,百度解決一下,這裡就不多介紹了。隻有編譯了pycaffe,才能使用python接口。
二、編寫用于測試的網絡結構deploy.prototxt
在第三篇文章【深度學習】基于caffe的表情識别(三)中講到:在搭建網絡結構時,需要用到3個檔案,我們現在隻用到了其中的兩個,還有一個deploy.prototxt檔案就是今天要介紹的,測試時用到的網絡結構。
deploy.prototxt與train_val.prototxt的内容基本一緻,隻是結構稍微有點不同,因為是同一個模型的兩個網絡結構,一個用于訓練階段,一個用于測試,是以兩者不會有太大差別。
在第三篇文章給出的連結https://pan.baidu.com/s/146EWRldMfRcyvIxtPYeceA中也給出了deploy.prototxt檔案,大家可以下下來看一下它與train_val.prototxt檔案的差別。
三、使用python測試
1.把caffemodel模型下載下傳到本地
之前我們在DevCloud上已經訓練好了用于表情識别的模型,現在要把它下載下傳到本地,用于一會兒的測試。
1)首先用ssh colfax指令登陸到DevCloud
2)檢視訓練好的caffemodel模型

3)在本地使用scp指令将DevCloud上的caffemodel檔案下載下傳到本地,用下面指令:
scp colfax:/home/u12067/faceR/myfacialnet_iter_200000.caffemodel faceR/predict/
其中/home/u12067/faceR/myfacialnet_iter_200000.caffemodel是我caffemodel在DevCloud上的路徑,testpy是我在本地根目錄下建立的一個檔案夾。
2.編寫python程式,測試模型
建立一個名為testfn.py的python檔案,加入下面代碼:
#coding=utf-8
import caffe
import numpy as np
def faceRecognition(imagepath):
root='faceR/' #根目錄
deploy=root + 'model/deploy.prototxt' #deploy檔案
caffe_model=root + 'predict/myfacialnet_iter_200000.caffemodel' #訓練好的 caffemodel
img=root + 'predict/' + imagepath
labels_filename = root + 'data/labels.txt' #類别名稱檔案,将數字标簽轉換回類别名稱
net = caffe.Net(deploy,caffe_model,caffe.TEST) #加載model和network
#圖檔預處理設定
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) #設定圖檔的shape格式(1,1,42,42)
transformer.set_transpose('data', (2,0,1)) #改變次元的順序,由原始圖檔(42,42,1)變為(1,42,42)
#transformer.set_mean('data', np.load(mean_file).mean(1).mean(1)) #減去均值,前面訓練模型時沒有減均值,這兒就不用
transformer.set_raw_scale('data', 255) # 縮放到【0,255】之間
net.blobs['data'].reshape(1,1,42,42)
im=caffe.io.load_image(img,False)#加載圖檔
net.blobs['data'].data[...] = transformer.preprocess('data',im)#執行上面設定的圖檔預處理操作,并将圖檔載入到blob中
#執行測試
out = net.forward()
labels = np.loadtxt(labels_filename, str, delimiter='\t') #讀取類别名稱檔案
prob= net.blobs['prob'].data[0].flatten() #取出最後一層(Softmax)屬于某個類别的機率值,并列印
order=prob.argsort()[-1] #将機率值排序,取出最大值所在的序号
face=labels[order]
return face #face是最終識别的表情
00014.jpg')
print("您的表情是:"+face)
3.運作程式,測試結果
運作剛剛編寫的python程式:
python faceR/predict/testfn.py
得到輸出結果:
再來看我剛剛測試的圖檔:
這個圖檔是我在測試集的第7個檔案夾中随機抽取的,也就是說它的真實表情應該是中性,與我們的模型預測出的結果一緻!!
到這裡,整個基于caffe的表情識别實驗就已經完成了,但是就目前的實驗來講,這并不是最好的模型,還要再加入一些算法上和技巧上的改變才能進一步提高該模型的準确率,但是這就是基于caffe的深度學習模型的完整流程,希望能對一些剛剛入門caffe的新手起到一些幫助,如果有錯誤還請大家原諒并指出,希望與大家共同學習!
下一篇我還将要介紹一個小方法,即使用opencv中的人臉檢測,檢測出一張圖檔的人臉部分并裁剪,然後輸入到我們的模型中進行預測。