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)。測試代碼如下:

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Tue Feb 13 23:28:44 2018
 4 
 5 @author: czz
 6 """
 7 
 8 import dlib
 9 import cv2
10 from datetime import datetime
11 
12 img = cv2.imread('test.jpg')#載入測試圖片
13 cnn_face_detector = dlib.cnn_face_detection_model_v1('mmod_human_face_detector.dat')#加載訓練好的人臉檢測模型
14 
15 t1= datetime.now()#測試起始時間
16 dets = cnn_face_detector(img, 1)#使用卷局神經網絡進行檢測
17 print("Number of faces detected: {}".format(len(dets)))
18 
19 for k, d in enumerate(dets):
20     print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
21           k, d.rect.left(), d.rect.top(), d.rect.right(), d.rect.bottom()))
22     face = dlib.rectangle(d.rect.left(),d.rect.top(),d.rect.right(),d.rect.bottom())
23     cv2.rectangle(img, (face.left(), face.top()+10), (face.right(), face.bottom()), (0, 255, 0), 2)#顯示人臉區域
24     cv2.imshow('image', img) 
25 
26 t2 = datetime.now()#測試結束時間
27 print('time spend: ',(t2-t1).microseconds)#顯示總的時間開銷
28 
29 cv2.waitKey(0)
30 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進行實時人臉識別的過程吧~

(完)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM