首页 » 刷脸背后:人脸检测 人脸识别 人脸检索 » 刷脸背后:人脸检测 人脸识别 人脸检索全文在线阅读

《刷脸背后:人脸检测 人脸识别 人脸检索》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