win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)
在计算机视觉和机器学习方向有一个特别好用但是比较低调的库,也就是dlib,与opencv相比其包含了很多最新的算法,尤其是深度学习方面的,因此很有必要学习一下。恰好最近换了一台笔记本,内含一块GTX1060的显卡,可以用来更快地跑深度学习算法。以前用公司HP的工作站配置过dlib,GPU是Quadro K420,用dlib自带的人脸识别算法(ResNet)测试过,相比较1060的速度确实要快上很多。dlib、cuda和cudnn的版本经常会更新,每次重新配置环境会遇到一些问题,在这里记下来吧。
一、dlib介绍
- 介绍
dlib是一个非常非常非常好用的机器学习库,所有的源代码都用C++实现,而且也提供了编译得到的供python使用的接口。很多算法在工业界和学术界都取得了广泛应用,有不少对实时计算的性能要求很高的场合已经用到这些了吧,比如嵌入式、手机等等。官方网址戳这里: http://dlib.net/,官方博客http://blog.dlib.net/也会经常更新一些新的算法介绍,不过博客网站可能需要翻墙,下面的评论很多~从官网的介绍可以看出来里面实现了不少像矩阵计算、图像处理、机器学习之类的算法,并且提供了好用的接口;你可以按照教程使用cmake+vs2015(这个至少需要比update3的vs版本,否则cmake会报错)编译得到lib库,然后在C++环境下对库中的算法进行使用,不过对于很多人还是喜欢用python来捣鼓~~一般情况直接用pip安装就可以了。不过非常重要的一点是,默认的安装是不带某些特殊功能的,比如使用GPU对深度学习算法进行加速,或者利用CPU架构的特性提高逻辑运算的速度,这种情况下需要手动编译了,这个在后面部分会提高怎样配置这些~
- 与opencv的比较
大部分同学接触的计算机视觉方面的库应该是opencv,不过相比较而言dlib提供了一些最近几年很新的算法,而且实现的效果非常的好,比如在人脸检测方面,opencv依然用的是Viloa-Jones的haar特征+adaboost级联分类的经典算法,opencv自带的训练模型跑起来的检测效果会很差;dlib上会使用到HOG特征+回归树,其提供的已经训练好的模型检测效果要远好于opencv上面的,不过代价是提高了计算开销,在我的机器上测试一张640x480的图像大概需要0.2s不到;不过dlib也封装了一套用cnn实现的人脸检测算法,如果开启了cuda,检测同样大小的图像(以我的GTX1060为例)只需要0.07s左右,完全可以满足实时性,并且实际效果非常的好。其他一些比较经典或者新的算法就不一一说明了,都可以在官网上查到相应的接口和实现。
二、配置工具
本文主要介绍在Windows10下编译python版本dlib并且使用cuda对深度学习算法加速的方法,需要使用到的配置工具如下:
1.Anaconda3-4.2.0-Windows-x86_64,自带了python3.5,并且附带了很多python的库,anaconda首页上给出的一般都是最新的版本,先前的老版本戳这里:https://repo.continuum.io/archive/;
2.dlib19.9,新的dlib版本相比较以前更好配置,不需要手动配置boost之类的库了,记得之前19.4版本的需要手动安装,非常麻烦~
3.vs2015 update3,新的dlib版本需要用比较新的vs版本,版本至少新于vs2015 update3;
4.cmake,因为dlib的源代码是用C/C++写的,所以用cmake进行编译非常方便,作者也非常提倡使用,到官网下个就可以了;
5.cuda9.0 + cudnn5.1,如果你想让dlib中的深度学习算法跑得更快并且显卡支持GPU加速,那么可以使用cuda大大提高计算性能。
三、配置过程
python版本的dlib安装大致分成两种,一种是直接安装编译好的dlib库,通过pip install dlib执行安装,如果报错则可以手动下载指定版本的wheel文件到指定的目录,以本机为例,cd到C:\anaconda\anaconda\Lib\site-packages目录,然后pip install packname.whl就可以了,这一种方式非常简单,不过这种安装方式的劣势是默认不会开启GPU加速,以及一些其他提供编译选项的功能,否则就必须手动编译出dlib的python库了,这也是本文要说的安装方法,大致过程如下:
1.安装anaconda,这个没什么,一直下一步即可;
2.安装visual studio比较新的版本,之前已经说过了,至少新于2015 update3,整个文件很大,等待安装完毕之后自己手动建立一个C++工程,如果不能,则提示需要再次更新以支持C++项目;
3.安装cuda和cudnn,cuda的下载目录:https://developer.nvidia.com/cuda-downloads,注意一下cuda的版本,因为你可能也会使用其他的深度学习平台,比如tensorflow,它不一定支持最新的cuda版本,所以可以选择图中的“legacy release”,也就是老的版本。
其次是下载cudnn,戳这里:https://developer.nvidia.com/rdp/cudnn-download,需要注册nvidia的账号,然后进去下载,下载cudnn:
因为cuda会需要cudnn中的库文件以及头文件,需要把cudnn目录下的bin、include以及lib目录中的文件拷贝到相应的cuda目录中的bin、include和lib目录中去;
4.安装cmake,安装的过程中一定注意要添加系统环境变量选项打勾,重启机器后生效。为验证是否可以编译dlib项目,重启之后打开cmake,然后点击途中的“configure”按钮选择相应的vs版本,对于vs2015 update3应该选择“visual studio 14 2015 win64”选项;在上面的源码路径填写解压之后dlib的目录,注意是dlib目录,而不是包含版本信息的那个目录;然后选择编译输出的二进制文件目录,点击完成,开始配置。
如果这个过程顺利,cmake会提示类似于下面的信息,表示cuda版本的dlib已经顺利编译完成,在使用的时候可以开启gpu加速。
5.第4步只是验证是否能够正确的编译dlib的二进制文件,对于C++开发的同学可以使用编译好的dlib库文件,而对于需要使用python的同学,需要编译得到供python使用的库文件。以我使用anaconda为例,在Windows命令行中切换到C:\anaconda\anaconda\Lib\site-packages\dlib-19.9目录,然后输入python setup.py install --yes DLIB_USE_CUDA命令,等待编译完成python版本的dlib库文件。
在cmake编译的过程中可能会报出各种问题,稍微总结一下:
- 如果出现类似于没找到相应编译器的原因,说明vs安装可能有问题,可能是vs版本比较老,vs安装不正确,或者vs安装不完整。不管怎么说vs的安装时间会需要很长时间,而且由于vs版本的问题,安装新的vs可能会出现各种问题,如果想手动卸载重装就更坑了,这个时候可以用卸载工具进行卸载:https://github.com/Microsoft/VisualStudioUninstaller/releases,下载之后直接解压然后以运行可执行程序,等待自动清理完成,然后重新安装vs;
- 如果出现类似于找不到cuda的问题,请确认是否正确安装cuda;并且,如果提示找到了cuda但没有正确的cudnn,请确认是否正确地把cudnn中的lib、include和bin目录中的文件拷贝到相应的cuda目录底下;
- 在使用cmake编译的时候如果你更改了配置,那么需要在cmake‘中点击file中的delete cache,然后重新configure;
- 有一种很奇葩的现象是,有可能你的机器上已经安装过了cuda和cudnn,并且之前使用cmake configure的时候成功编译完成得到dlib的python库,但是出于某些原因需要重新安装cuda和cudnn,那么不仅需要手动卸载之前的cuda,而且最好也删除site-packages目录中所有和dlib相关的目录和文件,以及cmake输出得到的临时文件,然后重新安装cuda和cudnn,并且按照之前的步骤执行python setup.py install --yes DLIB_USE_CUDA,得到dlib的python库文件。我在这里就卡了很久,原因是因为为了匹配tensoflow,所以并没有卸载以前的cudn,而是继续安装了新的cuda和cudnn,但是编译dlib的时候总是提示能找到cuda目录但是找不到cudnn,并且cuda还是以前的版本,这说明cmake使用了之前的临时信息,找到的还是以前使用的cuda版本,这是不正确的。
如果编译顺利,并且中间没有报错,可以新建一个python程序,然后import dlib成功,大功告成。
四、验证dlib开启cuda进行gpu加速功能
在编译完成开启gpu加速之后的dlib之后,可以写一个小demo体验一下gpu加速之后人脸检测的效果,这里我用女神黎姿的图像进行测试,图像大小788x394,包含三张人脸。使用dlib自带的卷积神经网络算法,并且用它已经训练好的训练模型(即mmod_human_face_detector.dat文件,如果没有训练模型请戳这里http://dlib.net/files/进行下载,解压之后把dat文件放到同目录),同时使用opencv进行输入输出显示(dlib中也有图像输入输出的接口,不过我还是习惯使用opencv)。测试代码如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 13 23:28:44 2018 @author: czz
""" import dlib
import cv2
from datetime import datetime img = cv2.imread('test.jpg')#载入测试图片
cnn_face_detector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat')#加载训练好的人脸检测模型 t1= datetime.now()#测试起始时间
dets = cnn_face_detector(img, 1)#使用卷局神经网络进行检测
print("Number of faces detected: {}".format(len(dets))) for k, d in enumerate(dets):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
k, d.rect.left(), d.rect.top(), d.rect.right(), d.rect.bottom()))
face = dlib.rectangle(d.rect.left(),d.rect.top(),d.rect.right(),d.rect.bottom())
cv2.rectangle(img, (face.left(), face.top()+10), (face.right(), face.bottom()), (0, 255, 0), 2)#显示人脸区域
cv2.imshow('image', img) t2 = datetime.now()#测试结束时间
print('time spend: ',(t2-t1).microseconds)#显示总的时间开销 cv2.waitKey(0)
cv2.destroyAllWindows()
运行,finally,显示框出的人脸图像~
终端显示:
Number of faces detected: 3
Detection 0: Left: 550 Top: 54 Right: 668 Bottom: 172
Detection 1: Left: 368 Top: 62 Right: 450 Bottom: 144
Detection 2: Left: 73 Top: 86 Right: 215 Bottom: 228
time spend: 176613
结果看出788x394大小包含三张人脸的图像检测花费了0.17s左右。Windows下cuda dlib的配置就到这里,本文也小试了一把用dlib进行人脸检测,后面有时间再写一下使用dlib进行实时人脸识别的过程吧~
(完)
win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)的更多相关文章
- TVM 优化 ARM GPU 上的移动深度学习
TVM 优化 ARM GPU 上的移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与桌面平台上所做的类似,在移动设备中使用 GPU 既有利于推理速度,也有利于能源 ...
- TVM在ARM GPU上优化移动深度学习
TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...
- Google Colab——用谷歌免费GPU跑你的深度学习代码
Google Colab简介 Google Colaboratory是谷歌开放的一款研究工具,主要用于机器学习的开发和研究.这款工具现在可以免费使用,但是不是永久免费暂时还不确定.Google Col ...
- Ubuntu16.04下安装配置numpy,scipy,matplotlibm,pandas 以及sklearn+深度学习tensorflow配置+Keras2.0.6(非Anaconda环境)
1.ubuntu镜像源准备(防止下载过慢): 参考博文:http://www.cnblogs.com/top5/archive/2009/10/07/1578815.html 步骤如下: 首先,备份一 ...
- 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 环境配置
本节详细说明一下深度学习环境配置,Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.0 + cuDNN 7.1 + TensorFlow 1.6 ...
- 深度学习应用系列(一)| 在Ubuntu 18.04安装tensorflow 1.10 GPU版本
tensorflow目前已经升级至r1.10版本.在之前的深度学习中,我是在MAC的虚拟机上跑CPU版本的tensorflow程序,当数据量变大后,tensorflow跑的非常慢,在内存不足情况下,又 ...
- (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX10 ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- 玩深度学习选哪块英伟达 GPU?有性价比排名还不够!
本文來源地址:https://www.leiphone.com/news/201705/uo3MgYrFxgdyTRGR.html 与“传统” AI 算法相比,深度学习(DL)的计算性能要求,可以说完 ...
随机推荐
- Intellij-创建Maven项目速度慢
原因: IDEA根据maven archetype的本质,其实是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件. 该命令 ...
- Git工具的使用教程
Git 是一种版本控制工具,也叫作版本管理软件(分布式管理软件).这里介绍Git的基本使用步骤,关于 Git 更详细的介绍,读者可以参考其官方网站提供的文档. 1 安装Git 在Ubuntu系统中安 ...
- 重温MFC
1. Button控件 2. 旋转和高级编辑控件 3. 标签控件和属性页 4. 列表控件 5. 树控件 6. 进度条控件和滑动条控件 7. 滚动条 8.工具栏和状态栏
- 使用copy命令合并二进制文件
CMD下的copy命令可以将一份或多份文件复制到另一个位置. 也具备连接文件的功能. 使用如下命令格式可以将多个二进制文件合并为一个二进制文件: copy /b file1+file2+...+f ...
- sping中防止定时任务多处运行解决方法
@Servicepublic class TimerJobService implements LzhTimerJobDao{ Logger logger = LoggerFactory.getLog ...
- linkin大话数据结构--泛型
泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...
- JAVA中文件与Byte数组相互转换的方法
JAVA中文件与Byte数组相互转换的方法,如下: public class FileUtil { //将文件转换成Byte数组 public static byte[] getBytesByFile ...
- svn: resource out of date; try updating的解决
问题: svn提交文件时提示错误:resource out of date; try updating.说明该资源版本有问题,尝试更新svn,发现该文件没有可更新的内容.于是查看资源历史,发现有人第一 ...
- ios MVVM实践 刷新网络请求+tableView展示数据
[实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...
- Spring 4.x (三)
1 Spring中加入DataSource并引入jdbc.properties 步骤: ①加入c3p0的jar包和mysql的驱动包 ②在src下新建jdbc.propertes文件 jdbc.dri ...