计算面描述符fas

2024-06-10 20:47:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的人脸识别项目中,一张脸被表示为一个128维嵌入(人脸描述符),如FaceNet中所用。 我可以用两种方法从图像生成嵌入。在

使用Tensorflow resnet模型v1。在

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

可以传递一个图像数组并获得一个嵌入列表。 这有点慢点。拿着1.6s(尽管对于大量图像,时间几乎是恒定的)。 注意:GPU不可用

另一种方法是使用dlib

^{pr2}$

这会产生快速的结果。差不多0.05秒。 但在时间。时间随图像数量增加。在

有没有什么方法可以通过图像数组来计算dlib中的嵌入量或提高dlib中的速度?在

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

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

dlib.face_recognition_model_v1.compute_face_descriptor(big_image, shapes)

即将具有单个面的多个图像转换为具有多个面的单个图像。 静止时间与连接的图像数(即面数)成比例。对单个图像进行迭代的时间几乎相同。在


Tags: 项目方法图像时间数组arrayplaceholder描述符
1条回答
网友
1楼 · 发布于 2024-06-10 20:47:08

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

推理所花费的时间主要有两部分。首先是设置时间。当您第一次运行网络时,Tensorflow需要很好的时间来设置自己,因此1.6秒的测量值可能是99.9999%的设置时间和0.0001%的图像处理时间。然后进行实际的推理计算,与设置相比,对于一个图像来说,这可能是很小的。一个更好的测量方法是运行1000个图像,然后运行2000个图像,然后计算差值,除以1000得到每个图像推断所需的时间。在

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

我怀疑Tensorflow和Dlib在CPU上的执行速度应该相当相似,因为它们都使用优化的线性代数库(BLAS、LAPACK),而且对于矩阵乘法只有那么多的优化。在

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

一般来说,在训练时最好考虑到后期的量化训练网络,这里不是这种情况,因为您使用预先训练的模型,但是您仍然可以从量化中获益很多。您可以通过运行Tensorflow中包含的命令来量化您的模型(有一个令人惊讶的名称quantize_graph),但还有一点要做。接下来是a nice quantization tutorial,但请记住,脚本现在位于^{}中,而不再位于contrib中,如教程中所述。在

相关问题 更多 >