《青你2》人臉識別,從此告別臉盲


《青你2》中總共召集了109位選手,他們每個人又會有很多風格各異的照片,如何把他們從照片裡準確認出也是一個難題,今天就讓AI人臉識別來幫你。


任務簡介


圖像分類是計算機視覺的重要領域,它的目標是將圖像分類到預定義的標籤。


近期,許多研究者提出很多不同種類的神經網絡,並且極大的提升了分類算法的性能。


本文以自己創建的數據集:青春有你2中選手(當然就是我們上一期的爬蟲成果啦)識別為例子,並且利用PaddleHub進行圖像分類任務。

《青你2》人臉識別,從此告別臉盲

《青你2》人臉識別,從此告別臉盲

Step1


《青你2》人臉識別,從此告別臉盲

基礎工作、導入python包


如果使用gpu則去掉指令前的#

Step2


《青你2》人臉識別,從此告別臉盲

加載預訓練模型。


接下來我們要在PaddleHub中選擇合適的預訓練模型來Finetune,由於是圖像分類任務,因此我們使用經典的ResNet-50作為預訓練模型。PaddleHub提供了豐富的圖像分類預訓練模型,包括了最新的神經網絡架構搜索類的PNASNet,我們推薦嘗試不同的預訓練模型來獲得更好的性能。

Step3


數據準備。

接著需要加載圖片數據集。我們使用自定義的數據進行體驗。

在自定義數據集中,數據準備需要進行以下工作:

《青你2》人臉識別,從此告別臉盲

《青你2》人臉識別,從此告別臉盲

《青你2》人臉識別,從此告別臉盲

《青你2》人臉識別,從此告別臉盲

為了加快速度,這裡只以5個人為案例,真實情況中把所有人都放進模型訓練也是完全可以的。

《青你2》人臉識別,從此告別臉盲

Step4


《青你2》人臉識別,從此告別臉盲

生成數據讀取器。

接著生成一個圖像分類的reader,reader負責將dataset的數據進行預處理,接著以特定格式組織並輸入給模型進行訓練。

當我們生成一個圖像分類的reader時,需要指定輸入圖片的大小。

Step5


《青你2》人臉識別,從此告別臉盲

配置策略。

在進行Finetune前,我們可以設置一些運行時的配置,例如如下代碼中的配置,表示:

use_cuda:設置為False表示使用CPU進行訓練。如果您本機支持GPU,且安裝的是GPU版本的PaddlePaddle,我們建議您將這個選項設置為True;


epoch:迭代輪數;


batch_size:每次訓練的時候,給模型輸入的每批數據大小為32,模型訓練時能夠並行處理批數據,因此batch_size越大,訓練的效率越高,但是同時帶來了內存的負荷,過大的batch_size可能導致內存不足而無法訓練,因此選擇一個合適的batch_size是很重要的一步;


log_interval:每隔10 step打印一次訓練日誌;


eval_interval:每隔50 step在驗證集上進行一次性能評估;


checkpoint_dir:將訓練的參數和數據保存到cv_finetune_turtorial_demo目錄中;


strategy:使用DefaultFinetuneStrategy策略進行finetune;

Step6


《青你2》人臉識別,從此告別臉盲

組建Finetune Task.


有了合適的預訓練模型和準備要遷移的數據集後,我們開始組建一個Task。


由於該數據設置是一個二分類的任務,而我們下載的分類module是在ImageNet數據集上訓練的千分類模型,所以我們需要對模型進行簡單的微調,把模型改造為一個二分類模型:


1.獲取module的上下文環境,包括輸入和輸出的變量,以及Paddle Program;

2.從輸出變量中找到特徵圖提取層feature_map;

3.在feature_map後面接入一個全連接層,生成Task;

Step7


《青你2》人臉識別,從此告別臉盲

開始Finetune。


我們選擇finetune_and_eval接口來進行模型訓練,這個接口在finetune的過程中,會週期性的進行模型效果的評估,以便我們瞭解整個訓練過程的性能變化。

Step8


《青你2》人臉識別,從此告別臉盲

預測。


當Finetune完成後,我們使用模型來進行預測,先通過以上命令來獲取測試的圖片.


預測結果如下,可以發現全部正確,快來動手嘗試一下吧

《青你2》人臉識別,從此告別臉盲

THE

END

這次的小項目到這裡就結束了,希望你也能自己動手嘗試一下,有問題歡迎來互相交流。



分享到:


相關文章: