Caffe配置:Ubuntu_16.04+CUDA_9.0+CUDNN_7+Anaconda_3+OpenCV_3

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后,当然要试验一下,这里用官网提供的第一个例子,作为试验。这里分享一下代码。

 
  1. import numpy as np

  2. import matplotlib.pyplot as plt

  3. import matplotlib.image as mpimg

  4.  
  5. #append the caffe path,you can append your path

  6. import sys

  7. sys.path.append("/home/oliver/caffe/python")

  8. import caffe

  9.  
  10. caffe_root = "/home/oliver/caffe/"

  11. #choose cpu mode

  12. caffe.set_mode_cpu()

  13.  
  14. model_def = caffe_root + "models/bvlc_reference_caffenet/deploy.prototxt"

  15. model_weights = caffe_root + "models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel"

  16.  
  17. net = caffe.Net(model_def,model_weights,caffe.TEST)

  18.  
  19. mu = np.load(caffe_root + "python/caffe/imagenet/ilsvrc_2012_mean.npy")

  20. mu = mu.mean(1).mean(1)

  21. #print("mean-subtracted values:",zip("BGR",mu))

  22.  
  23. transformer = caffe.io.Transformer({"data" : net.blobs["data"].data.shape})

  24. transformer.set_transpose("data",(2,0,1))

  25. transformer.set_mean("data", mu)

  26. transformer.set_raw_scale("data", 255)

  27. transformer.set_channel_swap("data", (2,1,0))

  28.  
  29. #net.blobs["data"].reshape(50,3,227,227)

  30.  
  31. #This cat's name is flower,hahaha

  32. image = caffe.io.load_image(caffe_root + "examples/images/flower.jpg")

  33. transformed_image = transformer.preprocess("data", image)

  34.  
  35. net.blobs["data"].data[...] = transformed_image

  36.  
  37. output = net.forward()

  38.  
  39. output_prob = output["prob"][0]

  40. print("Predicted class is :",output_prob.argmax())

  41.  
  42. labels_file = caffe_root + "data/ilsvrc12/synset_words.txt"

  43. labels = np.loadtxt(labels_file,str,delimiter="\t")

  44. print("Output label:",labels[output_prob.argmax()])

  45. top_inds = output_prob.argsort()[::-1][:5]

  46. #print("probabilities and labels:",zip(output_prob[top_inds],labels[top_inds]))

  47. for each in zip(output_prob[top_inds],labels[top_inds]):

  48. print(each)

  49.  
  50. plt.imshow(image)

  51. plt.show()

看看结果是怎么样。

感觉分类还凑合吧。

至此,Caffe已经成功编译安装了。

猜你喜欢

转载自blog.csdn.net/CVAIDL/article/details/89100129