最近開(kāi)始學(xué)習(xí)Qt,結(jié)合之前學(xué)習(xí)過(guò)的caffe一起搭建了一個(gè)人臉識(shí)別登錄系統(tǒng)的程序,新手可能有理解不到位的情況,還請(qǐng)大家多多指教。
我的想法是用opencv自帶的人臉檢測(cè)算法檢測(cè)出面部,利用caffe訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)來(lái)提取特征,通過(guò)計(jì)算當(dāng)前檢測(cè)到的人臉與已近注冊(cè)的所有用戶(hù)的面部特征之間的相似度,如果大的相似度大于一個(gè)閾值,就可以確定當(dāng)前檢測(cè)到的人臉對(duì)應(yīng)為這個(gè)相似度大的用戶(hù)了。
###Caffe人臉識(shí)別
因?yàn)椴粩嘤行碌挠脩?hù)加入,然而添加新用戶(hù)后重新調(diào)整CNN的網(wǎng)絡(luò)結(jié)構(gòu)太費(fèi)時(shí)間,所以不能用CNN去判別一個(gè)用戶(hù)屬于哪一類(lèi)。一個(gè)訓(xùn)練好的人臉識(shí)別網(wǎng)絡(luò)擁有很強(qiáng)大的特征提取能力(例如這里用到的VGG face),我們finetune預(yù)訓(xùn)練的網(wǎng)絡(luò)時(shí)會(huì)調(diào)整最后一層的分類(lèi)數(shù)目,所以最后一層的目的是為了分類(lèi),倒數(shù)第二個(gè)全連接層(或者前面的)提取到的特征通過(guò)簡(jiǎn)單的計(jì)算距離也可以達(dá)到很高的準(zhǔn)確率,因此可以用計(jì)算相似度的方式判斷類(lèi)別。
載入finetune后的VGG模型
代碼就不詳細(xì)解釋了,我用的是拿1000個(gè)人臉微調(diào)后的VGGface,效果比用直接下載來(lái)的weight文件好一點(diǎn),這里可以用原始的權(quán)重文件代替。
import caffe model_def = 'VGG_FACE_deploy.prototxt' model_weights = 'VGG_Face_finetune_1000_iter_900.caffemodel' # create transformer for the input called 'data' net = caffe.Net(model_def, # defines the structure of the model model_weights, # contains the trained weights caffe.TEST) transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2,0,1)) # move image channels to outermost dimension transformer.set_mean('data', np.array([104, 117, 123])) # subtract the dataset-mean value in each channel transformer.set_raw_scale('data', 255) # rescale from [0, 1] to [0, 255] transformer.set_channel_swap('data', (2,1,0)) # swap channels from RGB to BGRxpor
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。