C++和cpu环境采用OpenVINO对facenet人脸识别模型的实际部署

相关介绍:

如何在 Keras 中加载 FaceNet 模型

有许多项目提供了用于训练基于 FaceNet 的模型和利用预训练模型的工具。

 

David Sandberg 的 FaceNet它提供了利用 TensorFlow 构建和训练的 FaceNet 模型。虽然在撰写本文时还没有提供基于库的安装,也没有提供干净的 API,但这个项目看起来已经成熟。有用的是,David 的项目提供了许多高性能的预训练 FaceNet 模型,并且有许多项目可以移植或转换这些模型,以便能够在 Keras 中使用。

一个值得注意的例子是 Hiroki Taniai 的 Keras FaceNet,他的项目提供了一个脚本,用于将 Inception ResNet v1 模型从 TensorFlow 转换为 Keras。他还提供了预训练 Keras 模型,可供随时使用。使用 Hiroki Taniai 提供的预训练 Keras FaceNet 模型,它是在 MS-Celeb-1M 数据集上训练的,并要求输入图像是彩色的,其像素值要进行白噪化(在所有三个通道中进行标准化),并且具有 160x160 像素的正方形。

Keras FaceNet 预训练模型 (88 MB) 下载网址如下:

https://drive.google.com/open?id=1pwQ3H4aJ8a6yyJHZkTwtjcL4wYWQb7bn

实际操作

1. keras的hdf5模型转为tf的pb冻结文件:

C++和cpu环境采用OpenVINO对facenet人脸识别模型的实际部署_第1张图片

2. pb文件转为openvino优化后的IR文件

python mo_tf.py --input_model facenet_keras.pb --input_shape=[1,160,160,3]    --data_type FP32   --model_name facenet

 facenet fp32精度的IR文件下载地址:https://download.csdn.net/download/qq_35054151/12500493

C++和cpu环境采用OpenVINO对facenet人脸识别模型的实际部署_第2张图片

3. openvino常规套路操作

 把图像转为blob数据

主要注意的是模型输入为160*160*3形状,且进行归一化操作,同理在c++环境也需要预处理。

/** Iterating over all input blobs **/
	for (auto & item : input_info) {
		auto input_name = item.first;
		cout << "input_name:" << input_name << endl;
		/** Getting input blob **/
		auto input = infer_request.GetBlob(input_name);
		size_t num_channels = input->getTensorDesc().getDims()[1];
		size_t h = input->getTensorDesc().getDims()[2];
		size_t w = input->getTensorDesc().getDims()[3];
		size_t image_size = h*w;
		Mat blob_image;
		resize(src, blob_image, Size(h, w));

		// NCHW
		unsigned char* data = static_cast(input->buffer());
		for (size_t row = 0; row < h; row++) {
			for (size_t col = 0; col < w; col++) {
				for (size_t ch = 0; ch < num_channels; ch++) {
					data[image_size*ch + row*w + col] = (blob_image.at(row, col)[ch]-100)/50;
				}
			}
		}
	}

因为facenet输出是一个128维度的向量,openvino转化后预测输出也是一个128位的数组,有了特征向量我们只需要根据标准图的特征向量匹配即可;这个模型确实期望将正方形彩色图像作为具有形状为 160x160 的输入,并将输出一个包含 128 个元素向量的人脸嵌入,我们看下结果解析如下:

平均单张80ms在i7-8700k上,很实时有木有!

C++和cpu环境采用OpenVINO对facenet人脸识别模型的实际部署_第3张图片

C++和cpu环境采用OpenVINO对facenet人脸识别模型的实际部署_第4张图片

参考资料:

https://www.infoq.cn/article/4wT4mNvKlVvEQZR-JXmp

你可能感兴趣的:(openvino,人脸识别)