1. 程式人生 > >windows下的caffe配置過程

windows下的caffe配置過程

1.準備工作

我在自己的筆記本配置的caffe,配置的環境為:Windows10 64+ cuda7.5 + Opencv2.49 + boost1.56+VS2013

安裝完第三方庫之後,有的需要手動建立環境變數,方法如下:

找到計算機,右鍵->屬性->高階系統設定->頁籤:高階->環境變數(右下角)->系統變數:新建;然後在彈出的對話方塊中,輸入對應的變數名,及變數值(檔案位置)。


1.1安裝CUDA7.5

1.2安裝boost1.56

1.3安裝opencv2.4.9

1.4第三方庫

這一部分主要包括Glog+Gflag+Protobuf+LevelDB+HDF5+LMDB+Openblas,不容易下載。使用的是

Neil Z. SHAO‘s Blog提供的編譯好的。

下載完,解壓得到3rdparty資料夾。

1.5下載caffe原始碼

下載地址:https://github.com/BVLC/caffe,下載master版本得到caffe_master資料夾,將上一步下載的得到的3rdparty資料夾放到caffe_master資料夾目錄。

2.增添部分缺失的檔案

2.1缺少的caffe.pb.h檔案

proto.exe放到caffe_master/3rdparty/bin資料夾,GernaratePB.bat放在caffe_master/scripts資料夾

雙擊GernaratePB.bat執行,將在caffe_master/src/caffe/proto

生成caffe.pb.h檔案。

2.2準備mkstemp.hpp和mkstemp.cpp檔案

(1)將mkstemp.hpp放在caffe_master/include/caffe/util/路徑下,mkstemp.hpp中的內容為

#include <windows.h>    
#include <io.h>    
int mkstemp(char *templates);    

(2將mkstemp.cpp放在caffe_master/src/caffe/util/路徑下,mkstemp.cpp中的內容為

 /* mkstemp extracted from libc/sysdeps/posix/tempname.c.  Copyright  
        (C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc.  
       
        The GNU C Library is free software; you can redistribute it and/or  
        modify it under the terms of the GNU Lesser General Public  
        License as published by the Free Software Foundation; either  
        version 2.1 of the License, or (at your option) any later version.  */    
        
     #include "caffe/util/mkstemp.hpp"    
     #include <errno.h>    
     #include <fcntl.h>    
     #include <sys/stat.h>    
         
     static const char letters[] =    
     "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";    
         
     /* Generate a temporary file name based on TMPL.  TMPL must match the  
        rules for mk[s]temp (i.e. end in "XXXXXX").  The name constructed  
        does not exist at the time of the call to mkstemp.  TMPL is  
        overwritten with the result.  */    
     int mkstemp (char *tmpl)    
     {    
       int len;    
       char *XXXXXX;    
       static unsigned long long value;    
       unsigned long long random_time_bits;    
       unsigned int count;    
       int fd = -1;    
       int save_errno = errno;    
         
       /* A lower bound on the number of temporary files to attempt to  
          generate.  The maximum total number of temporary file names that  
          can exist for a given template is 62**6.  It should never be  
          necessary to try all these combinations.  Instead if a reasonable  
          number of names is tried (we define reasonable as 62**3) fail to  
          give the system administrator the chance to remove the problems.  */    
     #define ATTEMPTS_MIN (62 * 62 * 62)    
         
       /* The number of times to attempt to generate a temporary file.  To  
          conform to POSIX, this must be no smaller than TMP_MAX.  */    
     #if ATTEMPTS_MIN < TMP_MAX    
       unsigned int attempts = TMP_MAX;    
     #else    
       unsigned int attempts = ATTEMPTS_MIN;    
     #endif    
         
       len = strlen (tmpl);    
       if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX"))    
         {    
           errno = EINVAL;    
           return -1;    
         }    
         
     /* This is where the Xs start.  */    
       XXXXXX = &tmpl[len - 6];    
         
       /* Get some more or less random data.  */    
       {    
         SYSTEMTIME      stNow;    
         FILETIME ftNow;    
         
         // get system time    
         GetSystemTime(&stNow);    
         stNow.wMilliseconds = 500;    
         if (!SystemTimeToFileTime(&stNow, &ftNow))    
         {    
             errno = -1;    
             return -1;    
         }    
         
         random_time_bits = (((unsigned long long)ftNow.dwHighDateTime << 32)    
                             | (unsigned long long)ftNow.dwLowDateTime);    
       }    
       value += random_time_bits ^ (unsigned long long)GetCurrentThreadId ();    
         
       for (count = 0; count < attempts; value += 7777, ++count)    
         {    
           unsigned long long v = value;    
         
           /* Fill in the random bits.  */    
           XXXXXX[0] = letters[v % 62];    
           v /= 62;    
           XXXXXX[1] = letters[v % 62];    
           v /= 62;    
           XXXXXX[2] = letters[v % 62];    
           v /= 62;    
           XXXXXX[3] = letters[v % 62];    
           v /= 62;    
           XXXXXX[4] = letters[v % 62];    
           v /= 62;    
           XXXXXX[5] = letters[v % 62];    
         
           fd = open (tmpl, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);    
           if (fd >= 0)    
         {    
           errno = save_errno;    
           return fd;    
         }    
           else if (errno != EEXIST)    
         return -1;    
         }    
         
       /* We got out of the loop because we ran out of combinations to try.  */    
       errno = EEXIST;    
       return -1;    
     }   

 

3.建立caffe工程

準備好了caffe需要的依賴庫和環境之後,下面就可以建立caffevs專案,進行編譯了。

3.1建立新的工程

新建一個空的控制檯VS2013工程,起名為caffe

將專案改為64位的專案:右鍵專案->屬性->配置管理器->活動解決平臺方案->新建x64平臺;

將caffe_master內的3rdparty、includesrctools資料夾拷貝到工程根目錄下


3.2修改專案屬性

專案——屬性——C/C++——常規——附加包含目錄

../include

../src

../3rdparty/include

../3rdparty

../3rdparty/include/openblas

../3rdparty/include/hdf5

../3rdparty/include/lmdb

../3rdparty/include/leveldb

../3rdparty/include/gflag

../3rdparty/include/glog

../3rdparty/include/google/protobuf

專案——屬性——VC++目錄——包含目錄

$(CUDA_PATH_V7_5)\include

$(OPENCV_2_49)\include\opencv

$(OPENCV_2_49)\include\opencv2

$(BOOST_1_56)

專案——屬性——連結器——常規——附加庫目錄

$(CUDA_PATH_V7_5)\lib\$(PlatformName)

$(OPENCV_2_49)\x64\vc12\lib

$(BOOST_1_56)\lib64-msvc-12.0

..\3rdparty\lib

專案——屬性——連結器——輸入——附加依賴項

debug新增:

opencv_ml249d.libopencv_calib3d249d.libopencv_contrib249d.libopencv_core249d.libopencv_features2d249d.libopencv_flann249d.libopencv_gpu249d.libopencv_highgui249d.libopencv_imgproc249d.libopencv_legacy249d.libopencv_objdetect249d.libopencv_ts249d.libopencv_video249d.libopencv_nonfree249d.libopencv_ocl249d.libopencv_photo249d.libopencv_stitching249d.libopencv_superres249d.libopencv_videostab249d.libcudart.libcuda.libnppi.libcufft.libcublas.libcurand.libgflagsd.liblibglog.liblibopenblas.dll.alibprotobufd.liblibprotoc.libleveldbd.liblmdbd.liblibhdf5_D.liblibhdf5_hl_D.libShlwapi.libgflags.liblibprotobuf.libleveldb.liblmdb.liblibhdf5.liblibhdf5_hl.lib

release新增:

opencv_ml249.libopencv_calib3d249.libopencv_contrib249.libopencv_core249.libopencv_features2d249.libopencv_flann249.libopencv_gpu249.libopencv_highgui249.libopencv_imgproc249.libopencv_legacy249.libopencv_objdetect249.libopencv_ts249.libopencv_video249.libopencv_nonfree249.libopencv_ocl249.libopencv_photo249.libopencv_stitching249.libopencv_superres249.libopencv_videostab249.libcudart.libcuda.libnppi.libcufft.libcublas.libcurand.libgflags.liblibglog.liblibopenblas.dll.alibprotobuf.liblibprotoc.libleveldb.liblmdb.liblibhdf5.liblibhdf5_hl.libShlwapi.lib

3.3新增專案檔案

3.3.1./src/caffe中的檔案

../src/caffe資料夾中所有的*.cpp檔案新增到工程中


3.3.2./src/caffe/layers中的檔案

專案:右鍵->生成依賴項->生成自定義->勾選CUDA7.5->確定


./src/caffe/layers中的所有的cppcu檔案都新增到專案中。


3.3.3./src/caffe/util中的檔案

./src/caffe/util中所有的檔案新增到專案


3.3.4./src/proto中的檔案

proto中的caffe.pb.cc新增到專案


3.3.5./tools中的檔案

本資料夾下有多個cpp檔案,通過它們的名字就可以知道相應的功能。新增不同的cpp檔案到專案中,然後生成專案,就可以得到不同功能的exe檔案。

caffe.cpp新增到工程,生成專案,得到caffe.exe檔案,可用於訓練模型

computer_image_mean.cpp新增到工程,生成專案,得到的exe檔案可用於將訓練樣本轉換為caffe使用的leveldb/lmdb資料集。

依次類推。

3.4 修改部分檔案

有一些檔案在編譯的過程中將會報錯,先預先修改這些檔案內容。

3.4.1 ./src/caffe中的檔案

1.blob.cpp

出現錯誤:error C4996: 'std::_Copy_impl'

解決辦法:屬性-> c\c++->前處理器->前處理器定義裡新增_SCL_SECURE_NO_WARNINGS

2.common.cpp

出現關於getidfopen_s的錯誤。可通過如下步驟修改:

(1在程式碼前面新增:#include <process.h>

(2修改專案屬性:專案——屬性——C/C++——前處理器——前處理器定義->新增:_CRT_SECURE_NO_WARNINGS

(3在程式碼中getpid的位置進行如下修改:

#ifdef _MSC_VER

pid = _getpid();

#else

pid = _getpid();

#endif

4)註釋語句::google::InstallFailureSignalHandler()。

3.4.2 ./src/caffe/layers中的檔案

(1bnll_layer.cu檔案,進行如下修改:

float kBNLL_THRESHOLD = 50  ->  #define kBNLL_THRESHOLD 50.0

2)在base_data_layer.cpp中,在“stream”的定義處初始化為0

3)在infogain_loss_layer.cpp中,將

Dtype prob = std::max(bottom_data[i *dim+j], Dtype(kLOG_THRESHOLD))

改為: 

Dtype prob = (std::max)(bottom_data[i*dim+j], Dtype(kLOG_THRESHOLD));

3.4.3 ./src/caffe/util中的檔案

1.hdf5.cpp

switch語句中的頭兩個case中的內容用{}括起來。

2.在io.cpp

(1io.hpp標頭檔案中新增:#include“mkstemp.hpp”

(2修改ReadProtoFromBinaryFile函式

O_RDONLY  ——> O_RDONLY | O_BINARY

(3在程式碼中新增:

#ifdef _MSC_VER

#define open _open

#endif

(4close()改為_close()

3.在signal_handler.cpp

1)增加巨集定義:#define SIGHUP 1

2)註釋掉HookupHandler函式和UnhookHandler函式的定義和引用

3.5新增動態連結庫

程式缺乏三個動態連結庫:libgfortran-3.dlllibglog.dlllibopenblas.dll

(3)libglog.dll:

開啟專案工程,將生成器改為x64,編譯即可得到64位的libglog.dll

將以上3dll檔案放在caffe/x64/debug/檔案目錄下。

4.生成解決方案

編譯所有的檔案並連結,然後執行,程式正常執行。

相關推薦

windowscaffe配置過程

1.準備工作 我在自己的筆記本配置的caffe,配置的環境為:Windows10 64位+ cuda7.5 + Opencv2.49 + boost1.56+VS2013。 安裝完第三方庫之後,有的需要手動建立環境變數,方法如下: 找到計算機,右鍵->屬性->

windowscaffe GPU版本配置

得到 詳細步驟 drive nbsp ubunt cudnn www uget caff 由於項目需要,所以在自己本子上配置了一下windows下GPU版本的caffe; 硬件: win10 ; gtx1070獨顯(計算能力6.1); 安裝軟件:

windowscaffe特徵圖視覺化之前的配置

深度學習網路調參是一個技術活,那麼我們怎麼知道自己的引數好不好呢?可能看網路的準確率和損失值是一個不錯的選擇,但是,這並不直觀,而且,我們也無法知道聖經網路自己選擇的特徵是不是我們想要的特徵。對此,將特徵圖輸出來看一看就顯得很有必要了。 開始之前,我們先介紹一下 條件: 1

windowsVS2015配置caffe

Windows下VS2015配置caffe,是一件其實挺簡單但是坑特別多的事情,稍有不慎就爬不出來,寫部落格來記錄最後在老師幫助下才配置成功的經驗(嚴格按照老師的教程一步也不能錯才行),當然我寫得也詳細一點,也讓大家少掉坑。 前提(開發環境):1、安裝完成VS2015

windowspython配置caffe介面

配置電腦情況: windows7 64位,無GPU,anaconda2,  python2.7,  VS 2013 之前已經成功安裝並配置了VS2013+caffe,在此基礎上想用python im

Caffe-ssd 在 windows 配置,及 python 呼叫

本文主要是針對 runhang 的工作,修復了其中在用 Pycaffe 呼叫時得一個問題- Unknown layer type: Normalize: Check failed: registry

Caffe學習筆記(一)——Windows caffe安裝與配置

本文主要介紹:經過一番周折,在Windows7 64位系統下成功配置Caffe,下面總結一下基本的配置過程,以及配置過程中遇到的問題。 配置環境:Windows7 X64 + CUDA7.0 + VS2013 + Matlab2014a 1.安裝C

Windows與linuxcaffe配置(僅CPU)

            1)下載MNIST資料集,MNIST資料集包含四個檔案,如表1所示:              表1:MNIST資料集及其檔案解釋             下載完後解壓得到對應的四個檔案,這四個檔案不能直接用於caffe的訓練和測試。需要利用第4步生成的convert_mnis

windowsvs2013配置caffe及基本使用(一)

目前已經用python程式碼搭建了CNN來做目標分類、檢測、分割(用python搭建速度快,非常方便)。之後又轉用tensorflow的C++ API來搭建CNN重新實現一遍目標分類、檢測、分割(執行效率高)。現在再轉用caffe實現一遍。先從配置說起。1.準備環境(1) V

WindowsVim配置插件Vundle

arc comm htm version mfile git安裝 pts 所有 keyword 第一步:安裝git並配置curl 不多說,vundle是基於git的架構,so,這是必須的。 下載msysgit並安裝(具體可見http://drupalchina.cn/c

windows安裝配置RabbitMQ

控制臺 打開 api 開啟 啟用 pmd src start 安裝配置 安裝部署 1.當前環境以及參考資料出處 部署環境:windows server 2008 r2 enterprise 官方安裝部署文檔:http://www.rabbitmq.com/inst

Cts框架解析(1)-windowscts配置

javac 啟動 snippet htm html stc host ech 技術分享 環境搭建 下載 cts工具的下載地址:http://source.android.com/compatibility/downloads.html

windows安裝配置Ulipad

右鍵 運行 自動 log file 推薦 一點 python 註冊 在windows下安裝配置Ulipad   今天推薦一款輕便的文本編輯器Ulipad,用來寫一些小的Python腳本非常方便。   Ulipad下載地址:   https://github.com/limo

Windowscaffe安裝詳解(僅CPU)

net library dad 新建 math 錯誤 format ack 訓練集 本文大多轉載自 http://blog.csdn.net/guoyk1990/article/details/52909864,加入部分自己實戰心得。 1、環境:windows 7\VS20

windowsphp配置redis

修改 src nload php red html nec ads art 方法/步驟 1.使用phpinfo()函數查看PHP的版本信息,這會決定擴展文件版本 2.根據PHP版本號,編譯器版本號和CPU架構, 選擇php_redis-2.2.5-5.5-

windowsnode配置npm全局路徑(踩坑)

系統變量 conf path class efi fig 建議 相關 沒有 事情的起因是:Koa要求v7.6.0以上的nodejs。 但是window環境下升級node不容易,試過npm install -g n 和n stable等命令無效,而網上推薦的nvm並不支持wi

windowskafka配置入門 示例

keep bsp col fine program summer actor 回車 打開 實驗平臺與軟件: 操作系統:windows7 32 位 java 開發包: jdk1.8.0_144 集群: zookeeper-3.3.6 消息隊列: kafka_2.11

windowsnginx配置報錯GetFileAttributesEx

cnblogs req oot rect ear app windows 外文 127.0.0.1 因為電腦屏幕出現亮點,拿去換屏了,所以使用了windows環境,安裝了下wlmp環境 在配置Nginx的時候,發現配置沒有問題,但是老是訪問不了。 2015/0

windows簡單配置Tensorflow

裏的 net cti span pre art color 下載速度 conda 配置tensorflow之前先要裝好Anaconda Anaconda下載地址:https://www.anaconda.com/download/ 在Windows上面裝Tensorflow

windowseclipse配置maven

maven mir adc 路徑 set yun mirrorof 添加 配置文件 windows下eclipse配置maven 一、maven安裝 1、下載到http://maven.apache.org/download.cgi 上面下載對應的maven包2、解壓將剛剛