dlib人脸检测加速

最近使用dlib进行人脸检测时遭遇严重的性能问题,在ubuntu下处理一张640*480的图像,耗时将近4s,重新编译dlib无数次,问题依旧没有解决,最后居然一个g++的编译命令拯救了为,还是学艺不精,因此把整个过程下来,很多linux命令也可以在以后复用。

下载dlib源码,目前应该是19.17的版本

解压后依次执行下面命令,这个网上大部分提供的都一样

sudo mkdir build
sudo chmod -R 777 build(not needed)
cd build
cmake .. -DDLIB_USE_CUDA=0 -DDLIB_USE_AVX_INSTRUCTIONS=1 -DBUILD_SHARED_LIBS=ON -DDLIB_USE_LAPACK=1
sudo cmake --build . --config Release
sudo make install
sudo ldconfig

这里主要是经用cuda的显卡加速,启用cpu的AVX加速,特别注意如果不加-DBUILD_SHARED_LIBS=ON,默认生成的是libdlib.a静态库文件,如果需要其他功能可以自行把指令加上去

sudo make install后会打印出所有的生成文件,可以看到(默认路径)/usr/local/lib/pkgconfig下多了一个dlib-1.pc文件,这个是自动生成的可用于pkg-config的,opencv是不会自动生成的,但是提供了一个pc.in的文件模板,可以自己配置一下,cp到/usr/local/lib/pkgconfig,这里就顺带提一下。

执行pkg-config --libs --cflags dlib-1可以看到dlib的头文件路径和库文件路径,该命令可以在需要链接到dlib时使用,非常方便,不用写一堆路径和文件名

由于项目需要输出jni接口的.so文件,这里把编译.so文件的命令也贴上来

g++ -Ofast 项目本身包含的实现.cpp文件 -I包含的头文件路径 -Ijni.h路径 -Ijni_md.h路径 -shared -fPIC -o libFaceIQA.so $(pkg-config --libs --cflags dlib-1 +其他依赖库)

划重点,性能提升的最最最关键,-Ofast,此标志为g++的优化等级,共有O,O1,O2,O3,Os,Ofast这几个等级,Ofast为最高优化等级,加上以后会自动添加很多编译选项,目前暂时还不知道利弊,得去查一下,只是知道,使用Ofast会不遵循语言标准,同时需要较多的stack,如果程序同样需要较大的stack,最好再加上-stack选项

好了,最后是性能比较:

原本一张640*480的图片,只做face_detect耗时4s,Ofast后需要44ms,可能会有波动,但是不会超过50ms,这提升,简直可怕,顺带提一下,opencv的cascade需要80多90ms左右

然后我又把图片大小限制了一下,尺寸在300以下的图片,基本只要几毫秒就可以搞掂了,与opencv没什么差别

最后再说常用的几个dlib提速方法吧

1. release编译

2. 人脸检测的时候采用灰度图像

3. 控制图片大小,尽量不超过600以上

4. 编译优化,感兴趣的朋友可以试试其他优化等级

Visual Studio的编译优化:Visual Studio的编译器是cl,-Ofast是不存在的,右键点击项目属性-C/C++-优化-优化设置为Ox(还有其他等级),同时修改C/C++-代码生成-基本运行时检查改为默认。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值