【问题标题】:C++ Program with shared Dlib libraries extremely slow on Ubuntu 14.04具有共享 Dlib 库的 C++ 程序在 Ubuntu 14.04 上速度极慢
【发布时间】:2016-12-17 09:56:30
【问题描述】:

根据 Davis Kings 对该问题的回答:Create a shared library for dlib,我为 Dlib 创建了共享库,并将它们链接到一个程序,该程序使用 Dlib 人脸检测来检测相机图片中的人脸,使用以下命令:

cd dlib-19.0/dlib
mkdir build
cd build
cmake ..
make
sudo make install

还有-ldlib 选项。

我可以编译和执行程序,但是人脸检测非常慢。

我在 Windows 上使用 Visual Studio 2013 尝试了相同的程序。当我使用调试模式时,人脸检测也非常慢,但在发布模式下运行得很好。所以我想,共享库也可能处于调试模式,并尝试使用以下命令强制它们处于发布模式:

cd examples
mkdir build
cd build
cmake ..
cmake --build . --config Release 
sudo make install

但结果和以前一样。

有没有人有想法,可能是什么原因,它这么慢?

感谢您的帮助。

【问题讨论】:

  • 编译中是否有任何警告,例如它抱怨找不到BLAS 库?它可能会有所帮助。您也可以尝试cmake CMAKE_CXX_FLAGS=-mavx ..,它将在编译中添加-mavx 选项——它可能会优化构建。 TBH,尽管您需要比较库的编译后代码以确定性能差异的原因
  • 所有人脸检测代码都是基于头部的。它不依赖于使用共享/静态库(但它们是加载面部检测器模型所必需的)。问题出在其他地方。请告诉我们有关此性能问题的更多详细信息:CPU 型号/速度、图像分辨率、两种情况下的检测时间

标签: c++ shared-libraries dlib


【解决方案1】:

我想分享我的经验。 ^^

您应该使用 -O3-mavx 选项来加快速度。

-O3 编译选项对于加速至关重要)

如上所述,我为 dlib 创建了一个共享库。

并使用 dlib 共享库编译 web_face_pose_ex.cpp

操作系统Ubuntu 14.04

dlib 版本19.0.0

输入分辨率:640 x 480 网络摄像头 (Logitech C920)

  1. 我在路径下导出。

    $ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    
  2. 没有 -O3 选项:时间:2674.25 毫秒

    g++ -o my_web_face webcam_face_pose_ex.cpp -lpthread -lX11 -lblas -llapack `pkg-config --cflags --libs opencv dlib-1`
    
  3. 使用 -O3 选项:时间:55 毫秒

    g++ -o -O3 my_web_face webcam_face_pose_ex.cpp -lpthread -lX11 -lblas -llapack `pkg-config --cflags --libs opencv dlib-1`
    
  4. 同时使用 -O3-mavx(使用 AVX):时间:45 毫秒

    g++ -o -O3 -mavx my_web_face webcam_face_pose_ex.cpp -lpthread -lX11 -lblas -llapack `pkg-config --cflags --libs opencv dlib-1`
    

【讨论】:

  • 感谢您的回答!在遇到这个问题之前,我做了很多搜索,只是确信 dlib 的面部检测速度非常慢。关键是,因为它完全包含在头文件中,所以程序的优化在这里很重要! (令人惊讶的是,调试版本和发布版本之间的差异会是几秒而不是几毫秒)。
猜你喜欢
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2012-06-18
  • 2019-09-30
  • 1970-01-01
  • 2015-12-02
相关资源
最近更新 更多