5

GoFaceRec:基于 Go 的深度学习人脸识别工具

 1 year ago
source link: https://www.jdon.com/67197.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

GoFaceRec:基于 Go 的深度学习人脸识别工具

GoFaceRec是一个用 Go 构建的人脸识别工具,利用 MTCNN 进行人脸检测和 QMagFace 进行人脸识别。

该项目的诞生是出于将深度学习模型的力量引入 Go 社区的愿望。经过一番努力,我得出的结论是,最好的方法是将模型转换为 TensorFlow,然后使用 tfgo(一个与 TensorFlow 的 C API 绑定的 Go)。

在 GoFaceRec 中,首先处理输入图像,然后将其嵌入与已经从我们的数据集计算出的嵌入进行比较。如果嵌入之间的距离低于特定阈值,则该面部被视为未知。否则,将打印正确的标签。

该项目在 Ubuntu 20.04 上使用 Go 1.17 进行测试。对于gocv,安装的OpenCV版本是4.7。对于tfgo,我安装的是这个版本而不是官方版本。

您可以通过在项目中运行以下命令来安装此软件包:

go get github.com/modanesh/[email protected]

转换模型
将非 TF 模型转换为 TF 模型的方法有很多种。为此,我使用 ONNX 作为中介将QMagFace 的模型从 PyTorch 转换为 TF。
使用model_converter.py脚本先将 PyTorch 模型转换为 ONNX,然后再将 ONNX 模型转换为 TF。

model_converter.py中的一些代码取自官方QMagFace 的实现

提取图层
为了使用 tfgo 运行模型,您应该知道输入层和输出层的名称。

为了提取此类信息,该saved_model_cli命令可能很有用。导出的模型tf.saved_model.save()会自动带有“serve”标签,因为 SavedModel 文件格式是为服务而设计的。该标签包含导出的各种函数。

其中,始终存在“serving_default” signature_def。此签名 def 的工作方式与 TF 1.x 图完全相同。获取输入张量和输出张量,并将它们分别用作占位符来馈送和输出来获取。

运行模型
该项目使用 MTCNN 进行人脸检测,使用 QMagFace 进行人脸识别。对于 MTCNN,三个阶段(PNet、RNet、ONet)的使用方式与FaceNet类似。每个阶段都在其相应的函数中完成:

挑战
迄今为止的主要挑战是gocv.Mattfgo.Tensorgonum和 Go 原生切片之间的转换。需要进行转换,因为某些矩阵变换仅在 中可用,gocv而另一些则在tfgo. 此外,模型的输入tfgo应该是 类型tfgo.Tensor,因此不可避免地需要将读取的图像转换gocv为tfgo。此外,某些矩阵运算在这些软件包中都不可用,因此我必须自己从头开始实现它们。为此,我必须使用 Go 的原生切片。因此,这些类型之间不可避免的转换在整个代码中很频繁。

相比之下,这些类型转换在 Python 中完成得非常简单和快速。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK