即使在发布模式下,使用 QT MinGW 的 dlib 也很慢

dlib with QT MinGW slow even in Release mode

我正在 dlib 18.18 上 Windows 10 编译 QT 5.6MinGW 4.9.2

我已阅读所有建议 (http://dlib.net/faq.html#Whyisdlibslow):AVX 或 SSE4 说明,发布模式。

示例 "webcam_face_pose_ex.exe" 非常有效,非常快

问题:

但是当我在 QT 下使用 frontal_face_detector 时,帧率真的很低

系统配置:Windows10 (x64),英特尔酷睿 i5-3550,QT 5.6,OpenCV 3.1.0,MinGW 4.9.2

尝试了在 dlib 和 opencv 中使用 AVX/SSE4 指令的所有变体。 但我认为这是不同的——因为这个例子很快。 QT 中使用的代码也是从示例中复制粘贴的,即使没有 GUI。

在调试模式下,处理 640x480 帧需要 6-7 秒。

.pro 文件转储:

DIR_DLIB = "$${LIBSDIR}dlib/dlib18.18/"
DEFINES += DLIB_ENABLE_ASSERTS
LIBS += -luser32 -lws2_32 -lgdi32 -lcomctl32 -limm32 -lwinmm
INCLUDEPATH += "$${DIR_DLIB}include"
DEPENDPATH += "$${DIR_DLIB}include"
LIBS += -L"$${DIR_DLIB}lib"
LIBS += -ldlib

Dlib 人脸检测器 header-based 并且不依赖于用于编译 dlib.lib 本身的编译器标志。

Dlib 有一个已记录的选项“-DUSE_AVX_INSTRUCTIONS=ON”,但如果您没有使用 CMAKE 构建并将 dlib/cmake 文件包含到您的 CMakeLists.txt[=10 中,它就不会工作=]

您应该将编译器的 AVX 启用标志添加到您的项目中以使其快速运行

解决方案是在您的 .pro 文件中添加一个显式参数:

QMAKE_CXXFLAGS_RELEASE += -mavx

当您在Qt Creator 中编译项目时,您可以看到它是如何调用编译器的以及使用了哪些标志。确保您有 -mavx 标志。 -msse2 会慢 20%