偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

人工智能 深度學(xué)習(xí)
在過去,檢測面部及其特征,包括眼睛、鼻子、嘴巴,甚至從它們的形狀中提取表情是非常困難的,而現(xiàn)在,這項任務(wù)可以通過深度學(xué)習(xí)“神奇”地得到解決,任何一個聰明的年輕人都可以在幾個小時內(nèi)完成。雷鋒網(wǎng) AI 科技評論編譯的這篇來自佐治亞理工大學(xué)學(xué)生 Peter Skvarenina 的文章將介紹這一實現(xiàn)方法。

筆者按:你可能在一些手機軟件上已經(jīng)看到了給人臉增加特效的app,它們將一些可愛有趣的物體添加到自拍視頻中,有些更有趣的還能檢測表情自動選擇相應(yīng)的物體。這篇文章將會科普一種使用深度學(xué)習(xí)進行人臉表情檢測的方法,并簡要介紹下傳統(tǒng)的檢測方法。

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

在過去,檢測面部及其特征,包括眼睛、鼻子、嘴巴,甚至從它們的形狀中提取表情是非常困難的,而現(xiàn)在,這項任務(wù)可以通過深度學(xué)習(xí)“神奇”地得到解決,任何一個聰明的年輕人都可以在幾個小時內(nèi)完成。雷鋒網(wǎng) AI 科技評論編譯的這篇來自佐治亞理工大學(xué)學(xué)生 Peter Skvarenina 的文章將介紹這一實現(xiàn)方法。

“傳統(tǒng)”的方法(CLM)

假設(shè)你和我一樣,現(xiàn)在需要進行人臉追蹤(在這篇文章的情況下,是指將一個人的面部動作通過網(wǎng)絡(luò)攝像頭同步到一個動畫人物上去),你可能會發(fā)現(xiàn),以前實現(xiàn)這個任務(wù)最好的算法是局部約束模型(CLM),基于Cambridge Face Tracker或者OpenFace。這種方法是將檢測的任務(wù)進行分解,分成檢測形狀向量特征(ASM)、布丁圖像模板(AAM)和使用預(yù)先訓(xùn)練的線性SVM進行檢測優(yōu)化這幾個步驟逐一處理。

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

首先對關(guān)鍵點進行粗略估計,然后使用含有部分人臉信息的預(yù)訓(xùn)練的圖像進行SVM處理,同時對關(guān)鍵點的位置進行校正。重復(fù)這個過程多次,直到其產(chǎn)生的誤差低于我們的要求。另外,值得一提的是,這一方法假定了圖像上的人臉位置已經(jīng)被估計,如使用Viola-Jones檢測器(Haar級聯(lián))。但是,這種方法非常復(fù)雜并不是高中級別的學(xué)生可以輕易實現(xiàn)的,整體架構(gòu)如下:

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

深度學(xué)習(xí)(Deep Learning)

為了實現(xiàn)文中一開始提到的,使得青少年可以進行人臉檢測的目標(biāo),我們向大家介紹深度學(xué)習(xí)的方法。在這里,我們將會使用一種非常簡單的卷積神經(jīng)網(wǎng)絡(luò)(CNN,convolutional neural network)并在一些含有人臉的圖像上進行人臉重要部位的檢測。為此,我們首先需要一個訓(xùn)練的數(shù)據(jù)庫,這邊我們可以使用Kaggle提供的人臉部位識別挑戰(zhàn)賽的數(shù)據(jù)庫,包含15個關(guān)鍵點;或者一個更復(fù)雜些的數(shù)據(jù)庫MUCT,它有76個關(guān)鍵點(超棒的!)。

很顯然的,有質(zhì)量的圖像訓(xùn)練數(shù)據(jù)庫是必不可少的,這里,我們向“可憐的”本科學(xué)生致敬,他們?yōu)榱水厴I(yè)“犧牲”了自己的時間和精力對這些圖像進行了標(biāo)注,從而使得我們可以進行這些有趣的實驗。

如下是基于Kaggle數(shù)據(jù)庫的巴洛克面部和關(guān)鍵點的樣子:

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

這個數(shù)據(jù)庫是由灰度96*96分辨率的圖像組成的,并且有15個關(guān)鍵點,分別包含兩個眼睛各5個點、鼻子嘴巴共5個點。

對于任何一個圖像來說,我們首先要對臉部進行定位,即使用上文提到的Viola-Jones檢測器并基于Haar級聯(lián)架構(gòu)(如果說你仔細看看這一實現(xiàn)過程,會發(fā)現(xiàn)它與CNN的概念相近)。如果你想更近一步,也可以使用全卷積網(wǎng)絡(luò)(FCN,F(xiàn)ully Convolutional Network)并使用深度預(yù)測進行圖像分割。

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

不管你使用什么方法,這對OpenCV來說都很簡單:

 

  1. Grayscale_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)  
  2. face_cascade =  
  3. cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’  
  4.  
  5. bounding_boxes =  
  6. face_cascade.detectMultiScale(grayscale_image, 1.25, 6) 

使用如上的幾行代碼,可將圖像中的人臉框出來。

然后,對每一個返回的人臉框,我們提取其中相應(yīng)的子圖像,將它們調(diào)整到灰度圖像并將尺寸轉(zhuǎn)換為96*96。新產(chǎn)生的圖像數(shù)據(jù)則成為了我們完成的CNN網(wǎng)絡(luò)的輸入。CNN的架構(gòu)采用最通用的,5*5的卷積層(實際上是3個layer,每層分別是24、36和48個ReLU),然后用2個3*3的卷積層(每個有64個ReLU),最后使用3個全連接層(包含500、90和30個單元)。同時使用Max Pooling來避免過擬合并使用global average pooling來減少平滑參數(shù)的數(shù)量。這一架構(gòu)的最終輸出結(jié)果是30個浮點數(shù),這對應(yīng)著15個關(guān)鍵點每個的想x,y坐標(biāo)值。

如下是Keras的實現(xiàn)過程:

 

  1. model = Sequential()  
  2. model.add(BatchNormalization(input_shape=(96, 96, 1)))  
  3. model.add(Convolution2D(24, 5, 5, border_mode=”same”,  
  4. init=’he_normal’, input_shape=(96, 96, 1),  
  5. dim_ordering=”tf”))  
  6. model.add(Activation(“relu”))  
  7. model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),  
  8. border_mode=”valid”))  
  9. model.add(Convolution2D(36, 5, 5)) 
  10. model.add(Activation(“relu”))  
  11. model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),  
  12. border_mode=”valid”))  
  13. model.add(Convolution2D(48, 5, 5))  
  14. model.add(Activation(“relu”))  
  15. model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),  
  16. border_mode=”valid”)) 
  17. model.add(Convolution2D(64, 3, 3))  
  18. model.add(Activation(“relu”))  
  19. model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),  
  20. border_mode=”valid”))  
  21. model.add(Convolution2D(64, 3, 3))  
  22. model.add(Activation(“relu”))  
  23. model.add(GlobalAveragePooling2D());  
  24. model.add(Dense(500, activation=”relu”))  
  25. model.add(Dense(90, activation=”relu”))  
  26. model.add(Dense(30)) 

你可能想選擇均方根傳播(rmsprop)優(yōu)化和均方誤差(MSE)作為損失函數(shù)和精度指標(biāo)。只需要在輸入圖像上使用批處理正?;腿制骄闅v(global average polling)和HE normal weight初始化,你就可以在30個訓(xùn)練周期內(nèi)獲得80%-90%的驗證準(zhǔn)確率并實現(xiàn)<0.001的誤差:

 

  1. model.compile(optimizer=’rmsprop’, loss=’mse’, metrics=  
  2. [‘accuracy’])  
  3. checkpointer = ModelCheckpoint(filepath=’face_model.h5',  
  4. verbose=1, save_best_only=True 
  5. epochs = 30  
  6. hist = model.fit(X_train, y_train, validation_split=0.2,  
  7. shuffle=True, epochs=epochs, batch_size=20, callbacks=  
  8. [checkpointer], verbose=1) 

 

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

簡單的執(zhí)行如下指令對關(guān)鍵點位置進行預(yù)測:

  1. features = model.predict(region, batch_size=1) 

好了!現(xiàn)在你已經(jīng)學(xué)會了怎么去檢測面部關(guān)鍵點了!

提醒一下,你的預(yù)測結(jié)果是15對(x,y)坐標(biāo)值,可在如下圖像中表現(xiàn)出來:

教你一個簡單的深度學(xué)習(xí)方法檢測人臉面部特征

如果上述的操作還不能滿足你的需求,你還可以進行如下步驟:

  • 實驗如何在保持精度和提高推理速度的同時減少卷積層和濾波器的數(shù)量;
  • 使用遷移學(xué)習(xí)來替代卷積的部分(Xception是我的最愛)
  • 使用一個更詳細的數(shù)據(jù)庫
  • 做一些高級的圖像增強來提高魯棒性

你可能依然覺得太簡單了,那么推薦你學(xué)習(xí)去做一些3D的處理,你可以參考Facebook和NVIDIA是怎么進行人臉識別和追蹤的。

另外,你可以用已經(jīng)學(xué)到的這些進行一些新奇的事情(你可能一直想做但不知道怎么實現(xiàn)):

  • 在視頻聊天時,把一些好玩的圖片放置在人臉面部上,比如:墨鏡,搞笑的帽子和胡子等;
  • 交換面孔,包括你和朋友的臉,動物和物體等;
  • 在自拍實時視頻中用一些新發(fā)型、珠寶和化妝進行產(chǎn)品測試;
  • 檢測你的員工是因為喝酒無法勝任一些任務(wù);
  • 從人們的反饋表情中提取當(dāng)下流行的表情;
  • 使用對抗網(wǎng)絡(luò)(GANs)來進行實時的人臉-卡通變換,并使用網(wǎng)絡(luò)實現(xiàn)實時人臉和卡通動畫表情的同步。

好了~你現(xiàn)在已經(jīng)學(xué)會了怎么制作你自己的視頻聊天濾鏡了,快去制作一個有趣的吧!

責(zé)任編輯:未麗燕 來源: 雷鋒網(wǎng)
相關(guān)推薦

2021-11-12 15:16:32

深度學(xué)習(xí)數(shù)據(jù)合成人工智能

2023-11-21 09:32:17

深度學(xué)習(xí)人工智能

2024-10-08 08:19:19

2010-03-17 16:59:54

Linux學(xué)習(xí)方法

2021-07-01 15:56:42

深度學(xué)習(xí)人工智能互聯(lián)網(wǎng)

2021-11-02 11:43:59

人臉識別AI人工智能

2021-03-29 15:13:23

深度學(xué)習(xí)人臉解鎖算法

2017-08-07 10:08:29

深度學(xué)習(xí)分類體系信息檢索

2016-09-30 15:33:02

集成學(xué)習(xí)機器學(xué)習(xí)算法

2018-03-26 20:28:24

深度學(xué)習(xí)

2018-03-15 15:40:39

廣告點擊率PaddlePaddlTensorflow

2011-04-14 15:55:35

WPF.NET

2019-05-08 14:37:49

Web服務(wù)器HTTP

2009-09-28 10:40:28

.NET學(xué)習(xí)

2024-09-09 17:06:32

2012-08-07 11:28:13

卸載linux

2018-04-23 14:49:31

表征句子深度學(xué)習(xí)自然語言

2021-10-08 09:46:42

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2010-03-26 13:34:47

CentOS安裝

2021-01-01 19:30:21

Python編程語言
點贊
收藏

51CTO技術(shù)棧公眾號