Caffe配置:Ubuntu_16.04+CUDA_9.0+CUDNN_7+Anaconda_3+OpenCV_3
配置
配置Caffe绕来绕去也走了好多的路,这里分享自己的一些经验。
主要流程参照这篇博客https://blog.youkuaiyun.com/weixin_40824648/article/details/80265943。博主已经写的很详细了。我的配置流程基本仿照这篇博客来。CUDA、CUDNN、Anaconda安装都不会遇到什么太大的问题,OpenCV直接编译源码遇到了一些问题,所以我这里是直接通过Anaconda安装的OpenCV,而不是直接编译源文件。
安装流程的主要问题还是在编译Caffe上面,具体会遇到许多的奇怪的错误。在这里,分享我的一个经验,当遇到错误时,要保持冷静,首先得看懂报错是什么意思,在哪一个流程出现错误,再进行分析可能是哪里错误了,这样不管是自己解决还是网上搜索都有条理有思路,而不是一股脑复制粘贴错误去Google,这样往往会很盲目。
这里分享一下Makefile.config和Makefile两个文件修改内容。如果有需要文件,可以向我联系。在配置路径时,以你具体安装的Anaconda的路径为准。配置后,当import caffe后,会出现no module name caffe的错误,这个错误的解决通过增加系统变量;在.py文件下增加caffe相关路径即可解决(可参照下面的例子)。
1.Makefile.config
(1)取消以下注释
USE_CUDNN := 1
OPENCV_VERSION := 3
WITH_PYTHON_LAYER := 1
(2)修改CUDA结构设置

(3)Python有关目录修改为


(4)最后修改INCLUDE_DIRS,LIBRARY_DIRS

2.Makefile
(1)搜索NVGGFLAGS,修改如下

(2)继续搜索NVGGFLAGS
将NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
(3)在第181行修改LIBRARIES为
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui
一个例子
虽然照着步骤一步一步来,但是仍然会遇到许多的错误,这时就需要开动你的小脑瓜了。安装Caffe后,当然要试验一下,这里用官网提供的第一个例子,作为试验。这里分享一下代码。
-
import numpy as np -
import matplotlib.pyplot as plt -
import matplotlib.image as mpimg -
#append the caffe path,you can append your path -
import sys -
sys.path.append("/home/oliver/caffe/python") -
import caffe -
caffe_root = "/home/oliver/caffe/" -
#choose cpu mode -
caffe.set_mode_cpu() -
model_def = caffe_root + "models/bvlc_reference_caffenet/deploy.prototxt" -
model_weights = caffe_root + "models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel" -
net = caffe.Net(model_def,model_weights,caffe.TEST) -
mu = np.load(caffe_root + "python/caffe/imagenet/ilsvrc_2012_mean.npy") -
mu = mu.mean(1).mean(1) -
#print("mean-subtracted values:",zip("BGR",mu)) -
transformer = caffe.io.Transformer({"data" : net.blobs["data"].data.shape}) -
transformer.set_transpose("data",(2,0,1)) -
transformer.set_mean("data", mu) -
transformer.set_raw_scale("data", 255) -
transformer.set_channel_swap("data", (2,1,0)) -
#net.blobs["data"].reshape(50,3,227,227) -
#This cat's name is flower,hahaha -
image = caffe.io.load_image(caffe_root + "examples/images/flower.jpg") -
transformed_image = transformer.preprocess("data", image) -
net.blobs["data"].data[...] = transformed_image -
output = net.forward() -
output_prob = output["prob"][0] -
print("Predicted class is :",output_prob.argmax()) -
labels_file = caffe_root + "data/ilsvrc12/synset_words.txt" -
labels = np.loadtxt(labels_file,str,delimiter="\t") -
print("Output label:",labels[output_prob.argmax()]) -
top_inds = output_prob.argsort()[::-1][:5] -
#print("probabilities and labels:",zip(output_prob[top_inds],labels[top_inds])) -
for each in zip(output_prob[top_inds],labels[top_inds]): -
print(each) -
plt.imshow(image) -
plt.show()
看看结果是怎么样。

感觉分类还凑合吧。
至此,Caffe已经成功编译安装了。
本文详细介绍如何在Ubuntu_16.04环境下配置Caffe,并结合CUDA_9.0、CUDNN_7、Anaconda_3及OpenCV_3等组件。文章提供了具体的Makefile配置方法,以及解决常见错误的经验分享。
824

被折叠的 条评论
为什么被折叠?



