《青你2》中總共召集了109位選手,他們每個人又會有很多風格各異的照片,如何把他們從照片裡準確認出也是一個難題,今天就讓AI人臉識別來幫你。
任務簡介
圖像分類是計算機視覺的重要領域,它的目標是將圖像分類到預定義的標籤。
近期,許多研究者提出很多不同種類的神經網絡,並且極大的提升了分類算法的性能。
本文以自己創建的數據集:青春有你2中選手(當然就是我們上一期的爬蟲成果啦)識別為例子,並且利用PaddleHub進行圖像分類任務。
Step1
基礎工作、導入python包
如果使用gpu則去掉指令前的#
Step2
加載預訓練模型。
接下來我們要在PaddleHub中選擇合適的預訓練模型來Finetune,由於是圖像分類任務,因此我們使用經典的ResNet-50作為預訓練模型。PaddleHub提供了豐富的圖像分類預訓練模型,包括了最新的神經網絡架構搜索類的PNASNet,我們推薦嘗試不同的預訓練模型來獲得更好的性能。
Step3
數據準備。
接著需要加載圖片數據集。我們使用自定義的數據進行體驗。
在自定義數據集中,數據準備需要進行以下工作:
為了加快速度,這裡只以5個人為案例,真實情況中把所有人都放進模型訓練也是完全可以的。
Step4
生成數據讀取器。
接著生成一個圖像分類的reader,reader負責將dataset的數據進行預處理,接著以特定格式組織並輸入給模型進行訓練。
當我們生成一個圖像分類的reader時,需要指定輸入圖片的大小。
Step5
配置策略。
在進行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
組建Finetune Task.
有了合適的預訓練模型和準備要遷移的數據集後,我們開始組建一個Task。
由於該數據設置是一個二分類的任務,而我們下載的分類module是在ImageNet數據集上訓練的千分類模型,所以我們需要對模型進行簡單的微調,把模型改造為一個二分類模型:
1.獲取module的上下文環境,包括輸入和輸出的變量,以及Paddle Program;
2.從輸出變量中找到特徵圖提取層feature_map;
3.在feature_map後面接入一個全連接層,生成Task;
Step7
開始Finetune。
我們選擇finetune_and_eval接口來進行模型訓練,這個接口在finetune的過程中,會週期性的進行模型效果的評估,以便我們瞭解整個訓練過程的性能變化。
Step8
預測。
當Finetune完成後,我們使用模型來進行預測,先通過以上命令來獲取測試的圖片.
預測結果如下,可以發現全部正確,快來動手嘗試一下吧
THE
END
這次的小項目到這裡就結束了,希望你也能自己動手嘗試一下,有問題歡迎來互相交流。
閱讀更多 Python趣分享 的文章