[Caffe配置]SSD(Single Shot MultiBox Detector)在Windows下配置步驟

1.SSD簡介

SSD全稱Single Shot MultiBox Detector,是一個(gè)用于目標(biāo)檢測的深度學(xué)習(xí)框架。
By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg.

SSD是一個(gè)單一的網(wǎng)絡(luò)對象檢測的統(tǒng)一框架。你可以使用代碼來訓(xùn)練/評估一個(gè)用于目標(biāo)檢測任務(wù)的網(wǎng)絡(luò)。(http://arxiv.org/abs/1512.02325).

作者的Github上https://github.com/weiliu89/caffe 只給出了linux下的代碼,下面內(nèi)容是將代碼移植到windows上的實(shí)現(xiàn)步驟。本文參考了samylee的博文Windows-SSD配置與測試,在此表示感謝。

2. 配置環(huán)境

windows7 + vs2013 + Cuda8.0


3. 所需文件

vs2013,windows-caffe,ubuntu-ssd,libboost,cudnn,OpenCV(可選)ssd_detect.cpp,io.cpp

windows-caffe地址: 鏈接:http://pan.baidu.com/s/1hrGRu1A 密碼:j82rhttps://github.com/conner99/caffe,推薦使用后者。
ubuntu-ssd地址: 鏈接:http://pan.baidu.com/s/1mhYuf7y 密碼:3jp2
libboost地址:鏈接:http://pan.baidu.com/s/1pLbBMpP 密碼:41tq
cudnn地址:鏈接:http://pan.baidu.com/s/1o8vWBhw 密碼:kdj4
opencv地址:鏈接:http://pan.baidu.com/s/1eSkHBj0 密碼:nhch
ssd_detect.cpp地址:鏈接:http://pan.baidu.com/s/1nvwECNv 密碼:e3yn
io.cpp地址:鏈接:http://pan.baidu.com/s/1i4CL7QP 密碼:g623
signal_handler地址:鏈接:http://pan.baidu.com/s/1mhYuf7y 密碼:iubq


4. 配置步驟和出現(xiàn)的問題

本人配置的是使用GPU的版本,以下為配置步驟和出現(xiàn)的問題:

  1. 從上述網(wǎng)址下載的windows-caffe使用的Cuda版本為7.5,我使用的Cuda版本為8.0,所以將其版本改為8.0,重命名.\caffe-master\windows\\路徑下的CommonSettings.props.exampleCommonSettings.props,修改Cuda配置為<CudaVersion>8.0</CudaVersion>,此外設(shè)置<CpuOnlyBuild>true</CpuOnlyBuild><UseCuDNN>false</UseCuDNN>

  2. 編譯項(xiàng)目,報(bào)錯(cuò)“未能生成object文件(視警告為錯(cuò)誤)”,解決方法:右擊選擇屬性->配置屬性->c/c++->常規(guī),將“警告視為錯(cuò)誤”的選項(xiàng)改為“否”,若還報(bào)錯(cuò),將math_functions.obj文件放到路徑caffe-master\Build\Int\libcaffe\x64\[Release|Debug]下。

  3. 復(fù)制.\ssd_new下所有文件(除builddataexample以及models之外)至.\windows-caffe,替換原來文件夾中對應(yīng)的文件。

  4. 編譯文件,報(bào)錯(cuò)error C3861: “mkdir”: 找不到標(biāo)識(shí)符。解決辦法:在db_lmdb.cpp文件的

CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << " failed";

語句上下添加語句,使得:

#ifdef MSC_VER
        CHECK_EQ(mkdir(source.c_str(), 0744), 0) << "mkdir " << source << " failed";
#endif
  1. 編譯文件,報(bào)錯(cuò)error C2360: “occurrences_32”的初始化操作由“case”標(biāo)簽跳過。解決辦法:在hdf5.cpp文件中將所有出錯(cuò)的case語句下的內(nèi)容都括上大括號(hào){ },比如,將語句
  case H5T_FLOAT:
      LOG_FIRST_N(INFO, 1) << "Datatype class: H5T_FLOAT";
      break;

改為:

  case H5T_FLOAT:
{
      LOG_FIRST_N(INFO, 1) << "Datatype class: H5T_FLOAT";
      break;
}
  1. 選擇解決方案下的libcaffe項(xiàng)目,進(jìn)入include/layers文件夾中,將路徑.\caffe-master\include\caffe\layers下除了roi_pooling_layer.hpp的所有hpp文件添加到include/layers中。進(jìn)入src/layers文件夾中,將路徑.\caffe-master\src\caffe\layers下除了roi_pooling_layers.cpp的所有cpp文件添加到src/layers中。

  2. 編譯項(xiàng)目,報(bào)錯(cuò)error C2065: “SIGHUP”: 未聲明的標(biāo)識(shí)符。解決辦法:在common.cpp文件最上邊一行添加語句

#include "process.h"
  1. 編譯項(xiàng)目,報(bào)了都是關(guān)于signal_handler.cpp文件相關(guān)的錯(cuò)誤,在本文章第三部分享文件中下載signal_handler.cpp文件替換即可。

  2. 編譯項(xiàng)目,報(bào)錯(cuò)找不到boost庫,在解決方案的caffeclassification項(xiàng)目下的VC++選項(xiàng)下,在包含目錄中添加 ~/boost_1_59_0/,在庫目錄中添加~\boost_1_59_0\stage\lib

  3. 選擇解決方案下的libcaffe項(xiàng)目,進(jìn)入libcaffe/src/util文件夾中,將路徑\ssd_new\src\caffe\util下的bbox_util.cpp文件添加到libcaffe/src/util中。

  4. 編譯項(xiàng)目,報(bào)錯(cuò)找不到標(biāo)識(shí)符"snprintf",解決辦法:在bbox_util文件中,在標(biāo)識(shí)符snprintf前面加上下劃線_,修改為_snprintf

  5. 編譯項(xiàng)目,報(bào)錯(cuò):

error LNK2001: 無法解析的外部符號(hào) "__declspec(dllimport) void __cdecl google::InstallFailureSignalHandler(void)"

采用了粗暴的解決方式,在common.cpp文件中,將出錯(cuò)的函數(shù)::google::InstallFailureSignalHandler()注釋掉。

  1. 選擇解決方案下的classification項(xiàng)目,將ssd_detect.cpp文件添加到項(xiàng)目中,去除注釋,修改相應(yīng)的模型文件和網(wǎng)絡(luò)結(jié)構(gòu)定義文件的路徑。

至此,SSD目標(biāo)檢測的CPU版本,已經(jīng)可以在windows下運(yùn)行,接下來配置 SSD的GPU加速版本


  1. 在路徑.\caffe-master\windows\\下進(jìn)入CommonSettings.props配置文件中,設(shè)置<CpuOnlyBuild>false</CpuOnlyBuild><UseCuDNN>true</UseCuDNN>

  2. 進(jìn)入.\caffe-master\windows\\路徑下,啟動(dòng)Caffe工程,編譯工程,報(bào)錯(cuò):

error MSB3721: 命令“……”已退出,返回代碼為1。

修改.\caffe-master\windows\\路徑下的CommonSettings.props文件,修改對應(yīng)內(nèi)容為:

<CudaArchitecture>compute_30,sm_30;compute_50,sm_50</CudaArchitecture>
  1. 之后編譯工程,報(bào)錯(cuò):無法打開cudnn.h文件,從本博客第二部分下載cudnn,之后在項(xiàng)目工程的屬性中的vc++包含目錄中添加~/cuda/include路徑。在庫目錄中添加~/cuda/lib/x64路徑。
  2. 編譯工程,報(bào)錯(cuò):error : declaration is incompatible with "const char *cudnnGetErrorString(cudnnStatus_t)",解決方法:修改cudnn.hpp文件中
inline const char* cudnnGetErrorString(cudnnStatus_t status)

inline const char* CUDNNWINAPI cudnnGetErrorString(cudnnStatus_t status)
  1. 編譯工程,報(bào)錯(cuò):"::caffe::kBNLL_THRESHOLD" is undefined in device code",解決方法:修改bnll_layer.cu
Dtype expval = exp(min(in_data[index], Dtype(kBNLL_THRESHOLD)));

Dtype expval = exp(min(in_data[index], Dtype(50)));
  1. 編譯工程,報(bào)錯(cuò):error : too few arguments in function call. conv_layer.cu。修改conv_layer.cu文件中
this->forward_gpu_gemm(bottom_data + n * this->bottom_dim_, weight, top_data + n * this->top_dim_);

this->forward_gpu_gemm(bottom_data + n * this->bottom_dim_, weight, top_data + n * this->top_dim_, false);
  1. 編譯項(xiàng)目,報(bào)錯(cuò)error MSB3073,解決辦法:進(jìn)入項(xiàng)目libcaffe的屬性設(shè)置,設(shè)置生成事件 -> 預(yù)先生成事件 -> 在生成中使用 -> 否,設(shè)置生成事件 -> 后期生成事件 -> 在生成中使用 -> 否

  2. 編譯項(xiàng)目,報(bào)與boost相關(guān)的regex正則表達(dá)式庫出現(xiàn)問題,在項(xiàng)目中我們不需要正則表達(dá)式,所以將相關(guān)語句注釋掉即可。進(jìn)入項(xiàng)目libcaffe中,進(jìn)入detection_output_layer.cu文件,將所有出現(xiàn)regexrv的語句注釋掉。進(jìn)入detection_output_layer.cpp文件,將所有出現(xiàn)regexrv的語句注釋掉。進(jìn)入detection_output_layer.hpp中,將語句#include <boost/regex.hpp>注釋掉。

  3. 編譯項(xiàng)目,報(bào)錯(cuò):找不到".\caffe\3rdparty\hungarian.h"文件,在路徑.\caffe-master\include\caffe\3rdparty\\下添加hungarian.h文件。編譯項(xiàng)目,報(bào)錯(cuò):找不到".\src\caffe\3rdparty\hungarian.cpp"文件,在路徑.\caffe-master\\src\caffe\3rdparty\\下添加hungarian.cpp文件。

  4. 編譯項(xiàng)目,報(bào)與thrust相關(guān)的錯(cuò)誤,進(jìn)入項(xiàng)目libcaffe中,注釋掉

#include "thrust/functional.h"
#include "thrust/sort.h"
……
  thrust::sort_by_key(&confidences[0], &confidences[0] + num_remain, &idx[0],
  thrust::greater<Dtype>());

這些語句。

  1. 進(jìn)入解決方案下的classification項(xiàng)目的ssd_detect.cpp文件中,去除注釋,修改相應(yīng)的模型文件和網(wǎng)絡(luò)結(jié)構(gòu)定義文件的路徑。

至此,SSD目標(biāo)檢測的GPU版本,已經(jīng)可以在windows下運(yùn)行。


5. 感謝

感謝一直踩雷的婦老師,解決了上面提到的大部分錯(cuò)誤。希望本篇文章可以給想要在windows環(huán)境下運(yùn)行SSD的程序員們一些幫助。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,616評論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容