caffe原始碼學習--blob基本用法(基於《21天實戰caffe》)
1、p102頁編寫blob_demo.cpp後g++編譯生成app檔案。
在趙老師的書中,很簡單就寫成功,估計會有人出現一些錯誤。其實不是路徑問題,是格式的問題,嘿嘿!
在你寫好Blob模板類。生成可執行程式app的時候就會出現錯誤!
CAFFE_ROOT是您之前安轉caffe的根目錄。
原先是:
~/caffe$ g++ -o app blob_demo.cpp -I $CAFFE_ROOT/include/ -D CPU_ONLY -I $CAFFE_ROOT/.build_release/src/ -L $CAFFE_ROOT/build/lib/ -lcaffe
- 1
- 1
改寫:
~/caffe$ g++ -o app blob_demo.cpp -I/home/ 您伺服器名字/caffe(博主caffe安裝所在路徑,與上面CAFFE_ROOT類似)/include/ -D CPU_ONLY -I/home/您伺服器名字/caffe/.build_release/src/ -L/home/您伺服器名字/CAFFE_ROOT/build/lib/ -lcaffe
- 1
- 1
改寫成這樣就好了。
之後,執行改程式的時候,還會有一些錯誤。
原先是:
$export LD_LIBRARY_PATH=$CAFFE_ROOT/build/lib/:$LD_LIBRARY_PATH
$./app
Size: (0)
Size: 1 2 3 4 (24)
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
改為:
$export LD_LIBRARY_PATH =/home/您伺服器名字/caffe/build/lib/:$LD_LIBRARY_PATH
$./app
Size: (0)
Size: 1 2 3 4 (24)
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
即新增
- Blob<float> a;
- a.Reshape(1,2,3,4);
- float *p=a.mutable_cpu_data();
- float *q=a.mutable_cpu_diff();
- for(int i=0;i<a.count();i++){
- p[i]=i;
-
q[i]=a.count()-i-1;
- }
- a.Update();
- for(int u=0;u<a.num();u++){
- for(int v=0;v<a.channels();v++){
- for(int w=0;w<a.height();w++){
- for(int x=0;x<a.width();x++){
- cout<<"a["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"]="
- <<a.data_at(u,v,w,x)<<endl;
- }
- }
- }
- }
- retun 0;
- }
後利用1中命令編譯g++發現以下報錯:
問題原因:沒有新增正確的glog共享物件庫,應該在Miscellaneous->Other Objects中新增/usr/local/lib/libglog.so,同時Libraries(-I)中新增glog。
解決方案:下載並安裝glog
第一步:
// 檢視目錄 /usr/lib 或 /usr/local/lib的目錄下是否存在libglog.so.0
$ find libglog*
libglog.a
libglog.la
libglog.so
libglog.so.0
libglog.so.0.0.0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
如果不存在需要安裝,方法如下:
Google Logging Library(glog),下載地址:https://code.google.com/p/google-glog/(下載不下來百度搜索glog-0.3.3.找別人分享的),然後解壓安裝:
$ tar zxvf glog-0.3.3.tar.gz
$ cd glog-0.3.3
$ ./configure
$ make
$ sudo make install
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如果沒有許可權就chmod a+x glog-0.3.3 -R , 或者索性 chmod 777 glog-0.3.3 -R(獲取許可權解鎖) , 裝完之後,這個資料夾就可以kill了。
注意:安裝完之後如果還是報錯,要在編譯命令g++後面加入-lglog:
g++-o app blob_demo.cpp-lglog
3、如果繼續報錯
/usr/bin/ld: /tmp/ccaK5QcQ.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
//usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0: error adding symbols: DSO missing from command line
問題原因:未安裝bloost庫,樓主本來以為自己安裝了,結果一搜索才知道是在配置tensorflow時下載的。不能相互通用,因為TensorFlow是內建在框架中的,而caffe是呼叫ubuntu系統安裝的bloost。
解決方案:下載並安裝,先下載boost_1_58_0.tar.bz2,具體百度搜索,然後解壓
解壓命令:tar jxvf
boost_1_58_0.tar.bz2
安裝命令:
cd boost_1_58_0 #進入boost_1_58_0
# 只安裝caffe需要的3個元件,全部安裝十分耗時,還可能報錯
./bootstrap.sh --with-libraries=system,thread,python
./b2
sudo ./b2 install
注意:在g++編譯語句的後面要加上-lboost_system,再次執行之後發現生成了app檔案完美
總結:在安裝了glog和boost庫之後的完整編譯語句為:
$ g++ -o app blob_demo.cpp -lglog -lboost_system -I/home/您伺服器名字/caffe/include/ -D CPU_ONLY -I/home/您伺服器名字/caffe/.build_release/src/ -L/home/您伺服器名字/caffe/build/lib/ -lcaffe
之後就可以繼續執行app檔案了, 語句:
$exportLD_LIBRARY_PATH=$caffe/build/lib/:$LD_LIBRARY_PATH $./app 結果: Size : (0)
Size : 1 2 3 4 (24)
a[0][0][0][0] = 0
a[0][0][0][1] = 1
a[0][0][0][2] = 2
a[0][0][0][3] = 3
a[0][0][1][0] = 4
a[0][0][1][1] = 5
a[0][0][1][2] = 6
a[0][0][1][3] = 7
a[0][0][2][0] = 8
a[0][0][2][1] = 9
a[0][0][2][2] = 10
a[0][0][2][3] = 11
a[0][1][0][0] = 12
a[0][1][0][1] = 13
a[0][1][0][2] = 14
a[0][1][0][3] = 15
a[0][1][1][0] = 16
a[0][1][1][1] = 17
a[0][1][1][2] = 18
a[0][1][1][3] = 19
a[0][1][2][0] = 20
a[0][1][2][1] = 21
a[0][1][2][2] = 22
a[0][1][2][3] = 23
ASUM = 276
SUMSQ = 4324
- 1
- 2
- 3
- 4
- 5
3、太不幸了,博主之前編譯好的app竟然在隔日重新開機後再次執行卻再次出現報錯,在命令$ ./app之後出現錯誤:
./app: error while loading shared libraries: libcaffe.so.1.0.0-rc5: cannot open shared object file: No such file or directory
錯誤原因:無法呼叫共享庫libcaffe.so.1.0.0-rc5,網上搜索,此檔案在caffe框架下build/lib路徑下,將此檔案拷貝複製一份在你的app檔案所在目錄下,再次執行./app,成功!!!心好累