DLIB。如何解决实时优化约束?地标融合的想法?

时间:2016-06-17 09:56:32

标签: c++ optimization dlib

我想使用dlib库实时检测面部地标。 该算法基于论文:Vahid Kazemi和Josephine Sullivan的回归树集合的一毫秒面对齐

我使用现有的库:dlib,它很慢。我在http://dlib.net/faq.html上阅读了如何快速完成此操作,但在我的计算机上无法实现,因为在SSE4或AVX之前我无法优化。最后,我使用SSE2。 所以我有以下问题:

- 可以在移动/网络应用程序库dlib中使用它以实时工作吗?我不熟悉优化设置等等,这就是为什么它有多少限制的原因。

- 可以在没有优化SSE4的情况下在我的电脑中使用,以便它能够实时工作吗?

- 此文件shape_predictor_68_face_landmarks.dat的重量为95 Mb。我只需要面对+地标检测,这个文件是否根据我的需要包含冗余信息?

- 一个算法问题:点(地标)的收敛取决于人脸检测的边界框,可以解释一下,怎么做?我们在边界框内拟合平均面的点,然后我们正在寻找其附近的每个地标最佳位置?这附近多少钱?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

-It is possible to use in mobile/web application library dlib in order that it works in real time ? I am not familar with optimization settings and so on, that is why it is interesting how much restrictions there are.

-It is possible to use in my computer without optimisation SSE4 in order that it works in real time ?

人脸地标检测有两个步骤:人脸检测和人脸检测。最耗费CPU的部分是第一步 - 检测面部(运行simple_object_detector),只有这部分有利用AVX / SSE

为什么它很慢 - 面部大小从80x80像素和更大的像素消耗,如果你将一些高分辨率图像放入探测器,它将花费很多时间在不同尺度的滑动窗口。大多数情况下需要在同一帧上有1-3张脸,而现代移动相机的分辨率相当高。

所以我建议你减少用于面部检测的图像尺寸 - 缩小它并按照一些感兴趣的区域裁剪它。这将使您获得最大可能的性能优化。

下一步可能是让人脸探测器不以不同的比例运行,但可能会进行1-2次迭代。看一下这个问题 - 它描述了这个问题(dlib's scan_fhog_pyramid : set max_pyramid_levels

-This file shape_predictor_68_face_landmarks.dat weights 95 Mb. I need just face+landmark detection, does this file contain redundant information according to my needs?

此文件仅包含在iBug数据集上训练的68个面部地标的数据模型。里面没有人脸检测模型。人脸检测模型在dlib / image_processing / frontal_face_detector.h文件中提供

是的,这个文件很大,但这是它的质量价格。您可以训练一些新的面部地标检测模型(在http://dlib.net/train_shape_predictor_ex.cpp.html示例中描述),没有标记点或质量较差 - 这可以使您的文件更小

-One algorithm question...

要回答它 - 请考虑阅读原始(http://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Kazemi_One_Millisecond_Face_2014_CVPR_paper.pdf)和dlib / image_processing / shape_predictor.h源代码

短暂地 - 在检测到面部(找到边界框)之后,形状预测器相对于面部边界框在预训练位置搜索一些特征(图像像素值)。根据特征值,shape_predictor将平均面形状更改为新的面部形状(预测的形状),并且对于形状预测模型内的每个训练回归树迭代地进行此过程