caffe-windows已經編譯成功(win7+1080ti+cuda8.0+cudnn5.0+caffe安裝),現在需要在自己的工程中使用caffe,經過一陣子的摸索,找到了乙個稍微不那麼麻煩的方法(不需要複製各種路徑),現總結如下:
說明:1、caffe-windows指的是caffe的根目錄
2、新增的工程一般引用libcaffe.lib,include directories、library directories有一些多餘的設定,這個可以參考後面寫的一篇部落格簡單快捷建立自己的caffe工程
step 1、建立新工程
step 2、工程屬性設定
1、開啟工程的屬性視窗,找到c/c++/treat warning as errors,將其改為no。
2、開啟工程的屬性視窗,將配置改為release,平台改為x64,沒有x64,則新建乙個,在new platform中選擇x64即可,因為我的caffe-windows是這樣設定並編譯的
4、在屬性視窗中找到vc++ directories/library directories,新增$(windowssdk_librarypath_x64)、$(vc_librarypath_x64),這兩個路徑也是對照caffe的分類工程新增的,新增這兩個目錄的原因是編譯時出現error lnk1181:cannot open input file 'kernel32.lib',這個問題一直沒解決,後來即使進行了上述操作,也沒能消除該錯誤,後來突然就編譯通過了,不知道什麼情況。
5、在屬性視窗中找到linker/input/additional dependencies。新增libcaffe.lib
6、這一步解決問題check failed: registry.count(t ype) == 1 (0 vs. 1) unknown layer type:
***xx(known types: ***xx )。
第一種辦法:在屬性視窗中找到common properties/references,新增新的引用,選擇libcaffe,並設定屬性use library dependency inputs為true,如圖所示
這種辦法的優點是比較簡單,缺點很多:工程只能新增到caffe.sln中,每次都會重新編譯libcaffe,速度很慢。
第二種辦法:新增乙個.h標頭檔案到工程,將這些layers包含進來並註冊,先貼我的例子
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace caffe
extern instantiate_class(inputlayer);
extern instantiate_class(convolutionlayer);
register_layer_class(convolution);
extern instantiate_class(relulayer);
register_layer_class(relu);
extern instantiate_class(poolinglayer);
register_layer_class(pooling);
extern instantiate_class(croplayer);
//register_layer_class(crop);
extern instantiate_class(sigmoidlayer);
register_layer_class(sigmoid);
extern instantiate_class(sigmoidlayer);
//register_layer_class(sigmoid);
extern instantiate_class(deconvolutionlayer);
//register_layer_class(deconvolution);
extern instantiate_class(concatlayer);
//register_layer_class(concat);
extern instantiate_class(splitlayer);
//register_layer_class(split);
模型用到的layers都需要包含進來,並擴充套件extern instantiate_class(***xx),註冊的話register_layer_class(***xx),可以先都註冊,然後根據編譯或者執行的重複註冊的提示注釋掉一些重複的,這個需要慢慢調整。
step 3、修改工程vcxproj檔案
1、關閉vs,用編輯器開啟my-hed.vcxproj,可以開啟classification.vcxproj作為對比
2、新增三個props
nugetpackages資料夾和caffe-windows同目錄。
3、新增commonsettings.props
4、新增nugetpackage相關的依賴
首先將classification/packages.config複製到my-hed工程目錄,然後新增如下
step 4、右擊工程,編譯
如果沒有問題,應該能編譯通過,有問題的話,根據錯誤提示解決吧
參考的文獻
【caffe-windows】新增工程-以classification為例 - 程式園
how to include caffe to visual studio 2013?
neil z. shao's blog
caffe windows新增自定義的新層
前面的步驟大家應該都有所了解,基本三步 1.編寫.cpp cu h檔案,並新增至專案中。2.更改.proto檔案,新增自定義層的message,埠號之類的。3.重新編譯專案。相信到這為止,大家應該都試過很多遍了,但是還是不能用,你是不是覺得很奇怪,然後各種跪懷疑專案出錯。其實,有可能只是你定義的新層...
QGraphicsTextItem新增自定義下劃線
qt中有原生的新增下劃線的方式 如下 但這種方式效果可能不是很好.class xx public qgraphicstextitem 效果如下 黃色波浪線 我找了一下好像也不能繼承然後新增自定義的下劃線型別,所以我目前用的方法是在paint函式種繪製 有其他好辦法的話,請大神們賜教啊,拜託了 可以看...
PySpark DataFrame 新增自增 ID
在用 spark 處理資料的時候,經常需要給全量資料增加一列自增 id 序 號,在存入資料庫的時候,自增 id 也常常是乙個很關鍵的要素。在 dataframe 的 api 中沒有實現這一功能,所以只能通過其他方式實 現,或者轉成 rdd 再用 rdd 的 zipwithindex 運算元實現。下面...