讀古今文學網 > 刷臉背後:人臉檢測 人臉識別 人臉檢索 > 5.7 基於Fast R-CNN訓練人臉檢測網絡模型和測試 >

5.7 基於Fast R-CNN訓練人臉檢測網絡模型和測試

通過前幾節的介紹,讀者應該對Fast R-CNN有了基本的瞭解,並且準備好了訓練和測試的數據集。本節基於Fast R-CNN源碼分別介紹訓練、測試、評估和優化網絡的方法,訓練和測試過程主要參考文獻[8]。

5.7.1 訓練階段

下面以側臉數據集在Fast R-CNN上訓練人臉檢測網絡模型為例,說明Fast R-CNN的訓練過程。

1.下載預訓練網絡

首先下載預訓練網絡,本實驗使用的是ImageNet模型。

2.準備數據集

在FRCNN項目下,新建一個DataSet文件夾存放訓練和測試的數據集和對應的文件,目錄結構如下:

在 5.6 節中使用EdgeBoxes方法在訓練數據集上提取了對應的OP矩陣:edges_celianTrain.mat,將該矩陣放在FRCNN/data/selective_search_data路徑下。

3.修改程序

FRCNN/lib/datasets下的文件是與訓練和檢測相關的程序,因此本實驗對pasca_voc.py、factory.py、imdb.py和__init__.py進行修改。

將pascal_voc.py重命名為wang_detect_face.py,修改的一些主要代碼如程序2所示。

程序2:wang_detect_face.py

程序3是factory.py修改後的代碼,如下所示。

程序3:factory.py

此外,將wang_detect_face.py、factory.py、imdb.py和__init__.py頭文件中的from.pascal_voc import pascal_voc修改為from.wang_detect_face import wang_detect_face。

讀者可以按照參考文獻[8]修改這些文件。

4.修改網絡

在FRCNN/data下的fast_rcnn_models文件夾和imagenet_model文件夾內,分別有3個網絡,表5-1所示為每個網絡模型對應的類型。

表5-1 網絡模型的介紹

本實驗使用的網絡模型是imagenet_models文件夾中的VGG_CNN_M_1024.v2.caffemodel。在選擇好預訓練模型後,還需要對網絡中的參數進行修改。打開FRCNN/models/VGG_CNN_M_1024/train.prototxt,進行如下修改。

首先,將data層的num_classes 21修改為2(原來是20類+背景,本實驗為人臉+背景,即2類)。

其次,將cls_score層的num_output 21修改為2。

最後,將bbox_pred層的num_output 84 修改為8(類別數乘以4)。

5.運行訓練命令

通過前面幾個步驟,已經完成了數據的處理、程序的調整和訓練網絡參數的修改。接下來,使用如下命令訓練人臉檢測模型。

訓練結果模型保存在FRCNN/output/default下。

5.7.2 測試階段

在進行測試前,首先需要修改測試網絡和測試程序。

1.修改測試網絡

將FRCNN/models/VGG_CNN_M_1024/test.prototxt文件中cls_score層的num_output 21修改為2,bbox_pred層的num_output 84修改為8。

2.修改測試程序

本書使用MATLAB測試程序,需要修改 FRCNN/matlab/fast_rcnn_demo.m文件,修改後的文件如程序4所示。

程序4:fast_rcnn_demo.m

3.運行測試程序

修改完成後,將待測試的圖片路徑和名稱放在FRCNN/DataSet/test.txt內,並且每張圖片的同級目錄下,需要存放對應的OP矩陣,以_boxes.mat為後綴。

最後,執行如下命令:

運行完成後,檢測結果會保存在detect_result.txt文件中,如下是本實驗的運行結果文件。圖5-2所示是一些測試圖片的檢測結果。

運行結果文件:detect_result.txt

圖5-2 一些測試圖片的檢測結果

5.7.3 評估階段

在測試完成後,需要對測試數據集進行評估。本書使用的評估方法和通常的評估方法一致,即若檢測框和真實邊界框的面積交集/面積並集…0.5,則認為該檢測框檢測到的為人臉區域。程序5是本書的評估程序。

程序5:eval_result.m

按照程序5評估後,可得到如表5-2所示的結果。

表5-2 檢測結果

5.7.4 優化階段

由表5-2可知,本次訓練出的人臉檢測模型的正確率只有86.4%。為了獲得更優的人臉檢測模型,需要調整modelsVGG_CNN_M_1024solver.prototxt文件中的參數,主要調整base_lr和stepsize。

網絡參數文件:solver.prototxt