我最近安装安装了老版本的caffe,安装过程真是两个字“想死”,所以我的错误一般都是比较经典的。
我是使用cuda的版本,所以可能会出现undefined refference to cudnn.h。这个时候该做的就是把所有版本全都装一遍试试,而如果不追求速度的话,直接转cudnn1,最原始的版本,一般不会有问题。gpu版本一定是比cpu快n倍的,这个不用怀疑。
在编译caffe的时候,报错:
couldn't find hdf5.h
在网上很容易找到普通解决方法:
--- INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include +++ INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/ --- LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 +++ LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
但是老版本的caffe真的是很争气,即使已经改掉了还是找不到,当时内心是奔溃的WTF
奔溃的我在github找到了这个,大神都在github把所有的包含hdf5.h头文件的文件都改了
https://github.com/BVLC/caffe/issues/2690
diff --git a/Makefile.config.example b/Makefile.config.example index a873502..33441b3 100644 --- a/Makefile.config.example +++ b/Makefile.config.example @@ -70,7 +70,7 @@ PYTHON_LIB := /usr/lib # Whatever else you find you need goes here. INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include -LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib +LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial # If Homebrew is installed at a non standard location (for example your home directory) and you use it for general dependencies # INCLUDE_DIRS += $(shell brew --prefix)/include diff --git a/include/caffe/data_layers.hpp b/include/caffe/data_layers.hpp index 3958cb7..2ccbaec 100644 --- a/include/caffe/data_layers.hpp +++ b/include/caffe/data_layers.hpp @@ -6,7 +6,7 @@ #include <vector> #include "boost/scoped_ptr.hpp" -#include "hdf5.h" +#include "hdf5/serial/hdf5.h" #include "caffe/blob.hpp" #include "caffe/common.hpp" diff --git a/include/caffe/util/io.hpp b/include/caffe/util/io.hpp index 3a62c3c..f4363f0 100644 --- a/include/caffe/util/io.hpp +++ b/include/caffe/util/io.hpp @@ -5,8 +5,8 @@ #include <string> #include "google/protobuf/message.h" -#include "hdf5.h" -#include "hdf5_hl.h" +#include "hdf5/serial/hdf5.h" +#include "hdf5/serial/hdf5_hl.h" #include "caffe/blob.hpp" #include "caffe/common.hpp" diff --git a/src/caffe/layers/hdf5_data_layer.cpp b/src/caffe/layers/hdf5_data_layer.cpp index 8a782f7..42890be 100644 --- a/src/caffe/layers/hdf5_data_layer.cpp +++ b/src/caffe/layers/hdf5_data_layer.cpp @@ -10,8 +10,8 @@ TODO: #include <string> #include <vector> -#include "hdf5.h" -#include "hdf5_hl.h" +#include "hdf5/serial/hdf5.h" +#include "hdf5/serial/hdf5_hl.h" #include "stdint.h" #include "caffe/data_layers.hpp" diff --git a/src/caffe/layers/hdf5_data_layer.cu b/src/caffe/layers/hdf5_data_layer.cu index 5e3e4ce..23bc02a 100644 --- a/src/caffe/layers/hdf5_data_layer.cu +++ b/src/caffe/layers/hdf5_data_layer.cu @@ -7,8 +7,8 @@ TODO: #include <string> #include <vector> -#include "hdf5.h" -#include "hdf5_hl.h" +#include "hdf5/serial/hdf5.h" +#include "hdf5/serial/hdf5_hl.h" #include "caffe/data_layers.hpp" #include "caffe/layer.hpp" diff --git a/src/caffe/layers/hdf5_output_layer.cpp b/src/caffe/layers/hdf5_output_layer.cpp index f63375c..0b57eb9 100644 --- a/src/caffe/layers/hdf5_output_layer.cpp +++ b/src/caffe/layers/hdf5_output_layer.cpp @@ -1,7 +1,7 @@ #include <vector> -#include "hdf5.h" -#include "hdf5_hl.h" +#include "hdf5/serial/hdf5.h" +#include "hdf5/serial/hdf5_hl.h" #include "caffe/blob.hpp" #include "caffe/common.hpp" diff --git a/src/caffe/layers/hdf5_output_layer.cu b/src/caffe/layers/hdf5_output_layer.cu index ae497c3..ada682f 100644 --- a/src/caffe/layers/hdf5_output_layer.cu +++ b/src/caffe/layers/hdf5_output_layer.cu @@ -1,7 +1,7 @@ #include <vector> -#include "hdf5.h" -#include "hdf5_hl.h" +#include "hdf5/serial/hdf5.h" +#include "hdf5/serial/hdf5_hl.h" #include "caffe/blob.hpp" #include "caffe/common.hpp"
然后在使用的时候出现了can't find features
之前傻不拉几的pip isntall features结果并没有卵用,于是下载了
https://github.com/cvondrick/pyvision/blob/master/vision/features.pyx
发现出现一定问题:
im=Image.fromarray(im)
width, height = im.size
cython -a features.pyx gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing \ -I/usr/include/python2.7 -o features.so features.c
最后在需要的代码之前对features路径进行引用,比如我把features在vision文件中,在py文件开头加一句这个
sys.path = ['/home/hu/pyvision/vision'] + sys.path
在调用程序的时候发现narray和image对象存在不兼容,所以我就写了一个PIL与array之间的转换程序
def array2PIL(arr, size=[96,96]): mode = 'RGBA' arr = arr.reshape(arr.shape[0]*arr.shape[1], arr.shape[2]) if len(arr[0]) == 3: arr = np.c_[arr, 255*np.ones((len(arr),1), np.uint8)] return Image.frombuffer(mode, size, arr.tostring(), 'raw', mode, 0, 1)
最终程序能够跑了,代码也看的差不多了。
幸运之神总是眷顾努力的人,加油
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:caffe ubuntu16安装报错和程序总结 - Python技术站