Caffe编译安装:Ubuntu_16.04+CUDA_9.0+CUDNN_7+Anaconda_3+OpenCV_3

编译安装

编译安装Caffe绕来绕去也走了好多的路,这里分享自己的一些经验。

主要流程参照这篇博客https://blog.csdn.net/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已经成功编译安装了。

 

 

猜你喜欢

转载自blog.csdn.net/OliverLee456/article/details/83023566
今日推荐