训练Tensorflow目标检测模型,制作人脸检测识别应用程序

人工智能使得人脸检测识别程序成为可能。在这篇文章中,我将重点介绍一个带有自定义类别的人脸检测识别检测器。你要做的第一件事就是去设置它。这里有一个编写了如何在本地机器上进行设置的Tensorflow文档。文档地址如下:

https://github.com/tensorflow/models/blob/4f32535fe7040bb1e429ad0e3c948a492a89482d/research/object_detection/g3doc/installation.md

我们将使用Tensorflow对象目标检测来训练一个实时对象识别应用程序。这个存储库中可以找到可以使用经过训练的模型:https://github.com/qdraw/tensorflow-face-object-detector-tutorial

训练Tensorflow目标检测模型,制作人脸检测识别应用程序

OpenCV

你可以使用以下脚本在Ubuntu的/usr/local中自动安装OpenCV。该脚本安装OpenCV 3.2,并与Ubuntu 16.04一起使用。

$ curl -L https://raw.githubusercontent.com/qdraw/tensorflow-object-detection-tutorial/master/install.opencv.ubuntu.sh | bash

在Mac上,我使用OpenCV 3.3.0 en Python 2.7.13。我尝试了OpenCV 3.2和3.3,但它们无法在Python 3.6中使用。可是,在Ubuntu Linux上,这种组合运行良好。

$ brew install homebrew/science/opencv

 

slim和目标检测(object_detection)模块的设置

第一步是复制Tensorflow-models存储库。对于本教程,我们只使用slim和目标检测(object_detection)模块。

$ nano .profile
export PYTHONPATH=$PYTHONPATH:/home/dion/models/research:/home/dion/models/research/slim

还需要编译protobuf库。

$ protoc object_detection/protos/*.proto --python_out=.

复制教程存储库并安装依赖项

示例代码在tensorflow 人脸目标检测器教程存储库中可用。你可以复制这个repo。

$ git clone https://github.com/qdraw/tensorflow-face-object-detector-tutorial.git

转到子文件夹:

 $ cd tensorflow-face-object-detector-tutorial/

使用PIP安装依赖项:我使用Python 3.6和安装了绑定OpenCV的Python。

$ pip install -r requirements.txt

下载训练和验证数据

香港中文大学(Chinese University of Hong Kong)有大量的标注图像数据集。WIDER FACE数据集是一个人脸检测基准数据集。我用labelImg(https://github.com/tzutalin/labelImg)来显示边框。所选的文本是人脸检测注释。

训练Tensorflow目标检测模型,制作人脸检测识别应用程序

001_down_data.py脚本将用于下载WIDERFace数据集(http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/)和ssd_mobilenet_v1_coco_11_06_2017(https://medium.com/@qdraw/how-to-train-a-tensorflow-face-object-detection-model-3599dcd0c26f#%20downloading%20from:%20https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md)。我将使用预先训练的模型来加速训练时间。

$ python 001_down_data.py

将WIDERFace转换为Pascal XML

首先,我们需要将人脸检测数据集转换为Pascal XML。Tensorflow和labelImg使用不同的格式。这些人脸检测图像将下载到WIDER_train文件夹中。我们将使用002 _data-to-pascal-xml.py转换WIDERFace数据并且将数据复制到一个不同的子文件夹中。我的电脑需要5分钟处理9263张图片。

$ python 002_data-to-pascal-xml.py

训练Tensorflow目标检测模型,制作人脸检测识别应用程序

创建Pascal XML到Tensorflow CSV的索引

当数据转换为Pascal XML时,索引已经被创建。通过训练和验证数据集,我们将这些文件作为输入来制作TFRecords。也可以用labelImg这样的工具来手动标记图像,并使用这个步骤在这里创建一个索引。

$ python 003_xml-to-csv.py

训练Tensorflow目标检测模型,制作人脸检测识别应用程序

创建TFRecord文件

TFRecords文件是一个大型的二进制文件,该文件被读取以训练机器学习模型。在下一步中,该文件将被Tensorflow按顺序读取。训练和验证数据将被转换成二进制文件。

TFRecord的训练数据(847.6 MB)

$ python 004_generate_tfrecord.py --images_path=data/tf_wider_train/images --csv_input=data/tf_wider_train/train.csv  --output_path=data/train.record

TFRecord 的验证数据(213.1MB)

$ python 004_generate_tfrecord.py --images_path=data/tf_wider_val/images --csv_input=data/tf_wider_val/val.csv  --output_path=data/val.record

设置配置文件

在存储库中,ssd_mobilenet_v1_face.config文件用来训练人工神经网络的配置文件。该文件基于pet检测器。

在本例中,num_classes的数量仍然是一个,因为只有人脸才会被识别。

变量fine_tune_checkpoint用于指示以前模型的路径以获得学习。微调检查点文件(fine tune checkpoint file)在应用转移学习上被使用。转移学习是一种机器学习方法,它专注于将从一个问题中获得的知识应用到另一个问题上。

在类train_input_reader中,用带有TFRecord文件的链接以训练模型。在配置文件中,需要将其自定义到正确的位置。

变量label_map_path包含索引ID和名称。使用这个文件,0被用作占位符,所以我们从数字1开始。

item {
  id: 1
  name: 'face'
}

验证有两个很重要的变量。在eval_config类中的变量 num_examples用于设置示例的数量。

eval_input_reader类描述了验证数据的位置。在这个位置也有一条路径。

此外,还可以改变学习速度、批量大小和其他设置。现在,我保留了默认设置。

训练

现在,它将开始真正的工作。计算机将从人脸检测数据集中学习并建立一个神经网络。当我在CPU上模拟训练时,需要几天的时间才能得到一个好的结果。但强大的Nvidia显卡可以将时间缩短为几个小时。

$ python ~/tensorflow_models/object_detection/train.py --logtostderr --pipeline_config_path=ssd_mobilenet_v1_face.config  --train_dir=model_output

Tensorboard深入的了解了学习过程。该工具是Tensorflow的一部分,且可以自动安装。

$ tensorboard --logdir= model_output

训练Tensorflow目标检测模型,制作人脸检测识别应用程序

将检查点转换为protobuf

在带有计算机视觉库Tensorflow目标识别检测中使用该模型。 以下命令提供了模型存储库的位置和最后一个检查点。文件夹文件夹将包含frozen_inference_graph.pb。

$ python ~/tensorflow_models/object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path ssd_mobilenet_v1_face.config \
--trained_checkpoint_prefix model_output/model.ckpt-12262 \
--output_directory model/

TL; DR;

在github资料库中的模型/ frozen_inference_graph.github.pb文件夹是人工神经网络的一个冻结模型。香港中文大学(Chinese University of Hong Kong)有一个WIDERFace数据集,这个数据集已经被用来训练模型。

评估

除了用于Tensorflow目标识别检测训练的数据外,还有一个评估数据集。基于此评估数据集,可以计算精度。对于我的模型,我计算了精度(平均精度)。我以14337步的速度获得了83.80%的分数(epochs)。对于这个过程,Tensorflow有一个脚本,使它可以在Tensorboard中看到分数是多少。除了训练之外,建议你运行评估过程。

python ~/tensorflow_models/object_detection/eval.py --logtostderr --pipeline_config_path=ssd_mobilenet_v1_face.config  --checkpoint_dir=model_output --eval_dir=eval

然后可以使用Tensorboard监视进程。

tensorboard --logdir=eval --port=6010

 

 

 

本文为ATYUN(www.atyun.com)编译作品,ATYUN专注人工智能
请扫码或微信搜索ATYUN订阅号及时获取最新内容

6 回复 “训练Tensorflow目标检测模型,制作人脸检测识别应用程序

  1. 您好,在训练那步$ python ~/tensorflow_models/object_detection/train.py –logtostderr –pipeline_config_path=ssd_mobilenet_v1_face.config –train_dir=model_output时
    出现这个如下错误:TypeError: __new__() got an unexpected keyword argument ‘file’
    请问可能的原因是什么,怎么解决?

      1. 哦,这个问题解决了,谢谢!还想请教下,如果想把训练的模型转换成pb文件移植到android,又该怎么做呢?

发表评论