caffe windows新增自己的工程

2021-08-07 09:07:59 字數 3165 閱讀 5513

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 運算元實現。下面...