基於卷積神經網絡(CNN)的人臉在線識別系統
本設計研究人臉識別技術,基於卷積神經網絡構建了一套人臉在線檢測識別系統,系統將由以下幾個部分構成:
制作人臉數據集、CNN神經網絡模型訓練、人臉檢測、人臉識別。經過實驗,確定該系統可對本人的人臉進行快速並准確的檢測與識別。
關鍵詞: 神經網絡; 圖像處理; 人臉檢測;人臉識別;TensorFlow;模型訓練
一、設計目標
1.掌握人臉識別原理;
2.掌握卷積神經網絡算法原理
3.掌握卷積神經網絡模型訓練過程;
4.掌握常用圖像處理技術;
設計內容與要求
1.完成基於卷積神經網絡的人臉在線識別系統算法設計;
2.完成基於卷積神經網絡的人臉在線識別系統模型訓練;
3.檢測並且識別出人臉;
二、制作人臉數據集
2.1、制作我的人臉數據集
人臉檢測出人臉位置,返回坐標、尺寸把臉用數組切片的方法截取下來,把截取的小圖片保存下來作為數據集。
本系統獲取本人的人臉數據集10000張,使用的是dlib來識別人臉,雖然速度比OpenCV識別慢,但是識別效果更好。
其中,人臉大小:64*64。
2.2、主要步驟
(1)加載 dlib機器學習的開源庫
(2)圖像預處理 cvtColor(灰度化)。
(3)使用dlib自帶的frontal_face_detector進行特征提取。
(4)使用特征提取器進行人臉檢測。
(5)人臉保存。
2.3、制作結果
2.5 、制作其他人臉數據集
本系統使用人臉數據集下載:http://vis-www.cs.umass.edu/lfw/lfw.tgz。
先將下載的圖片集放在img_source目錄下,用dlib來批量識別圖片中的人臉部分,
並保存到指定目錄faces_other。人臉大小為64*64。
2.6、主要步驟
(1)讀入人臉數據集源文件
(2)加載 dlib機器學習的開源庫。
(3)用dlib來批量識別圖片中的人臉部分。
(4)人臉保存。
2.7、制作結果
三、 神經網絡模型訓練
3.1、卷積神經網絡內部分析
第一、二層(卷積層1、池化層1),輸入圖片64*64*3,輸出圖片32*32*32;
第三、四層(卷積層2、池化層2),輸入圖片32*32*32,輸出圖片16*16*64;
第五、六層(卷積層3、池化層3),輸入圖片16*16*64,輸出圖片8*8*64;
第七層(全連接層),輸入圖片8*8*64,reshape到1*4096,輸出1*512;
第八層(輸出層),輸入1*512,輸出1*2。
輸出神經網絡輸出的1*2,與標簽y_ [0,1]、[1,0]對比得出損失,損失函數為交叉熵,優化器采用Adan優化器,計算模型准確率。
代碼實現:
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=out, labels=y_))
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(out, 1), tf.argmax(y_, 1)), tf.float32))
3.2、輸入層
人臉檢測出人臉位置,返回坐標、尺寸把臉用數組切片的方法截取下來,把截取的小圖片送入神經網絡進行訓練,輸入的圖片64*64*3。
3.3、卷積層
本網路共三層卷積層,卷積核大小為(3,3),卷積步長為[1,1,1,1],即一步,padding=“SAME”。卷積層提取特征,
增加通道數,圖片大小不變。
3.4、池化層
本文提出的池化層采用最大值采樣,采樣大小為2*2,即把輸入的特征圖分割成不重疊的2*2大小的矩形,對每個矩形取最大值,
所以輸出特征圖的長和寬均是輸入特征圖的一半。
3.5、全連接層
為了增強網絡的非線性能力,同時限制網絡規模的大小,網絡在特征提取層提取特征后,接入一個全連接層,該層的每一個神經元
與前一層的所有神經元互相連接,將圖片的卷積輸出壓扁成一個一維向量,輸出1*512。
3.6、輸出層
本系統共分兩類,一類我的人臉(yes),另一類其他人臉(no),從全連接層輸入1*512,輸出層輸出1*2。為求loss做准備。
3.7、主要步驟
(1)讀入制作好的人臉數據集,將圖片數據與標簽轉化成數組。
(2)划分測試集:訓練集=20:1,做歸一化處理。
(3)傳入卷積神經網絡。
(4)訓練。
3.8、訓練結果
四、利用模型進行人臉識別
4.1 、主要步驟
(1)打開攝像頭獲取圖片進行灰度化。
(2)人臉檢測。
(3)導入訓練好的神經網絡模型。
(4)人臉識別。
4.2、識別結果
五、總結
本次設計主要研究了基於卷積神經網絡的人臉在線識別系統。設計了基於機器視覺的人臉圖像采集系統,
自己制作了訓練需要的人臉數據集。設計並實現了基於卷積神經網絡的人臉識別系統,完成了基於卷積神經網絡的
人臉在線識別系統算法設計、神經網絡模型訓練,實現了對人臉的在線檢測與識別。檢測出本人人臉,則在人臉上
顯示”yes, my face”,若不是我的人臉,則在人臉上顯示”no, other face ”。
六 、代碼
見個人GitHub:https://github.com/hhhvvvddd/CNN_faces_recognition
淺談則止,深入理解AI大道理
掃描下方“AI大道理”,選擇“關注”公眾號
歡迎加入!