gpt4 book ai didi

python - 更快地计算 face_descriptor

转载 作者:太空狗 更新时间:2023-10-30 01:04:42 26 4
gpt4 key购买 nike

在我的人脸识别项目中,人脸被表示为 FaceNet 中使用的 128 维嵌入 (face_descriptor) .我可以通过两种方式从图像生成嵌入。

使用 Tensorflow resnet 模型 v1。

emb_array = sess.run(embedding_layer,
{images_placeholder: images_array, phase_train_placeholder: False})

可以传递图像数组并获得嵌入列表。这有点慢。花了 1.6 秒。(尽管对于大量图像来说时间几乎是恒定的)。注意:GPU 不可用

其他方法是使用dlib

dlib.face_recognition_model_v1.compute_face_descriptor(image, shape)

这给出了快速的结果。差不多0.05秒。但是一次只能传递一张图片。时间随着图片数量的增加而增加。

有什么方法可以传递图像数组来计算 dlib 中的嵌入,或者有什么方法可以提高 dlib 中的速度吗?

或者有没有其他更快的方法来生成 128 维人脸嵌入?

更新:我将多个图像连接成单个图像并传递给 dlib

dlib.face_recognition_model_v1.compute_face_descriptor(big_image, shapes)

即将单张人脸的多张图片转换为多张人脸的单张图片。静止时间与连接的图像数量(即人脸数量)成正比。迭代单个图像的时间几乎相同。

最佳答案

这个问题的一个更重要的方面是您没有可用的 GPU。我把它放在这里,这样如果有人阅读这个答案就会更好地理解上下文。

推理消耗的时间有两个主要部分。首先是设置时间。当您第一次运行网络时,Tensorflow 会花很长时间进行 self 设置,因此您测量的 1.6 秒可能是 99.9999% 的设置时间和 0.0001% 的图像处理时间。然后它进行实际的推理计算,与设置相比,这对于一张图像来说可能很小。更好的测量方法是通过它运行 1,000 张图像,然后运行 ​​2,000 张图像并计算差异,除以 1,000 以获得每张图像推断所需的时间。

从外观上看,Dlib 在第一次运行时并没有花太多时间进行设置,但它仍然是一个更好的基准测试,如上文所述。

我怀疑 Tensorflow 和 Dlib 在 CPU 上的执行速度方面应该非常相似,因为它们都使用优化的线性代数库(BLAS、LAPACK),并且对于矩阵乘法可以做的优化有限。

不过,您可能还想尝试另一件事。大多数网络使用 32 位浮点计算进行训练和推理,但研究表明,在大多数情况下,切换到 8 位整数进行推理 doesn't degrade accuracy too much但可以大大加快推理速度。

通常在训练时考虑后期量化来训练网络会更好,这里不是这种情况,因为您使用的是预训练模型,但您仍然可以从量化中受益匪浅。您基本上可以通过运行包含在 Tensorflow 中的命令(具有令人惊讶的名称 quantize_graph)来量化您的模型,但还有更多。有 a nice quantization tutorial跟随,但请记住脚本现在在 tensorflow/tools/quantization 中正如本教程中所写,不再参与贡献。

关于python - 更快地计算 face_descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49649291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com