声明:本文纯转载,主要用来自己学习提高
原文链接:https://blog.csdn.net/hu_guan_jie/article/details/80071656
这几天需要安装caffe,但是大部分教程都没有说怎么在已经有tensorflow的同时安装caffe。在这里记录一下,主要写一下整个安装过程中的大致流程,忽略详细步骤。
首先需要安装anaconda,这里安装anaconda的主要原因是,它能够管理环境,也就是说可以将tensorflow和caffe的安装环境隔离开。(网上有不少文章已经表示,直接将两者装在一个环境下会出问题)。anaconda的版本无所谓,3.6也没关系,因为在里面可以新建环境。
假设你已经安装好了anaconda,打开anaconda Navigator,创建两个python3.5新的环境,分别命名为caffe和tensorflow。完成后,如下图所示:
PS:也可以用pip方式安装。
tensorflow的安装
1、首先打开anaconda prompt,输入activate tensorflow,这样表面你后续的安装操作,都是在tensorflow这个环境下进行的。所有的安装依赖都可以在以下目录中查询。
E:\studySoftware\anaconda\envs\tensorflow\Lib\site-packages
2、安装GPU版本需要CUDA8.0和cudnn5.1(这里一定要安装cudnn5.1版本,这是因为caffe只能支持这个版本)
CUDA安装:https://developer.nvidia.com/cuda-downloads
CuDNN安装:https://developer.nvidia.com/cudnn
3、安装numpy
pip install numpy
由于网络的某些原因,可能会导致通过pip安装会很慢,可以选择直接去https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost该网址用ctrl+F找到并下载对应的wheel文件,以 pip install numpy‑1.11.2+mkl‑cp35‑cp35m‑win_amd64.whl 的形式来安装。
4、安装tensorflow
pip install tensorflow-gpu
如果慢一样可以下载对应的wheel文件,输入pip install tensorflow_gpu-0.12.0rc0-cp35-cp35m-win_amd64.whl
所有的操作要在activate tensorflow 后进行,如图示例:(这里还有一大堆依赖包,不一一列举,pip能自动安装)
5、测试tensorflow
进入python,输入import tensorflow as tf,若这句话通过,基本上就可以表明tensorflow安装成功
安装caffe
1、首先打开anaconda prompt,一样输入activate caffe,所有的安装依赖一样也都可以在以下目录中查询。
E:\studySoftware\anaconda\envs\caffe\Lib\site-packages
2、上面已经安装过CUDA8.0和cudnn5.1了,所以这边可以跳过。
3、安装visual stduio 2015,我这边用的是2015版,官网上说2013也可以
4、安装cmake,最好下一个高版本,我一开始下了一个cmake3.4.1,虽然满足官网的要求,但是编译的时候一直显示找不到vs的编译器,后来换了一个高版本的cmake这个问题就没有了。
5、到官网https://github.com/BVLC/caffe/tree/windows先下载windows版的caffe,解压后,进入scripts文件夹中找到build_win.cmd。右键用notepad++或者其他工具打开。
ps:个人推荐下载方式:
git clone https://github.com/BVLC/caffe.git
cd caffe
git checkout windows
打开后,对其中70到99行的选项进行配置,我的配置是这样的
MSVC_VERSION=14表示是的vs2015
CPU_ONLY = 0 表示安装GPU版本
PYTHON_VERSION=3 表示python3.5
其他的选项默认就好
然后修改好build_win.cmd文件后保存退出,然后在anaconda prompt中cd到caffe-windows文件下,输入:
.\scripts\build_win.cmd
期间会下载 libraries_v140_x64_py35_1.1.0.tar.bz2这个依赖包,但是下载速度很慢,可能会出错,所以先下载完然后放到对应文件夹下,这样可以快很多。
Python3.5的:libraries_v140_x64_py35_1.1.0.tar.bz2
6、编译完成后,会在scripts文件夹下生产一个build文件夹,下一步是进行生成
打开caffe.sln这个工程,右键ALL_BUILD工程进行生成。
生成完成后,在如下图的文件夹下,会生成caffe.exe等执行文件
7、caffe进行mnist测试
首先去官网http://yann.lecun.com/exdb/mnist/下载mnist数据集,解压后放到如下两个文件夹下,训练数据和测试数据分开,文件夹自己新建一下。
在caffe-windows的目录下创建creat_mnist.bat,trian_mnist.bat文件
在creat_mnist.bat中输入:(trian_mnist.bat文件后面再用)
.\scripts\build\examples\mnist\Release\convert_mnist_data.exe .\data\mnist\mnist_train_lmdb\train-images.idx3-ubyte .\data\mnist\mnist_train_lmdb\train-labels.idx1-ubyte .\examples\mnist\mnist_train_lmdb
echo.
.\scripts\build\examples\mnist\Release\convert_mnist_data.exe .\data\mnist\mnist_test_lmdb\t10k-images.idx3-ubyte .\data\mnist\mnist_test_lmdb\t10k-labels.idx1-ubyte .\examples\mnist\mnist_test_lmdb
pause
这是把原始的文件格式转换成mdb的格式,并放到caffe-windows\examples\mnist下,这种格式读取速度快。执行完成后,会在caffe-windows\examples\mnist下生成对应数据文件
在caffe-windows\examples\mnist文件夹下,除了刚刚生成的数据文件,还有mnist的模型文件lenet_train_test.prototxt,还有lenet_solver.prototxt模型配置文件。
模型文件lenet_train_test.prototxt,需要给出对应的训练和测试数据路径
lenet_solver.prototxt模型配置文件中,要给出模型文件的路径,以及训练方式,我这边用的是GPU
这些路径都是相对于caffe-windows这个根目录的相对路径,然后打开前面创建的trian_mnist.bat文件,输入:
.\scripts\build\tools\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
pause
这边需要注意,/和\这两者要区别清楚,不然很可能会找不到对应的数据或者模型而出错。错误示例如下:
然后,就可以开始训练了,训练完成!
8、python接口的配置
在编译完后的根目录下的python文件夹下,会生成pycaffe,用于python调用caffe。
将里面的caffe文件夹复制到:
E:\studySoftware\anaconda\envs\caffe\Lib\site-packages,也就是caffe环境对应的包文件夹。
然后安装一些依赖库:
pip install numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz
打开anaconda prompt,然后activate caffe,打开python,尝试import caffe,这时可能会有一些包不存在,只需要pip install 对应的包就可以了。
9、python调用示例
import numpy as np
import sys,os
import time
import matplotlib.pyplot as plt
# 设置当前的工作环境在caffe下
caffe_root = 'E:/studySoftware/caffe-windows/'
# 我们也把caffe/python也添加到当前环境
sys.path.insert(0, caffe_root + 'python')
import caffe
os.chdir(caffe_root)#更换工作目录
# 设置网络结构
net_file=caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'
# 添加训练之后的参数
#下载地址:http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
caffe_model=caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'
# 均值文件
mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy'
# 这里对任何一个程序都是通用的,就是处理图片
# 把上面添加的两个变量都作为参数构造一个Net
net = caffe.Net(net_file,caffe_model,caffe.TEST)
# 得到data的形状,这里的图片是默认matplotlib底层加载的
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
# matplotlib加载的image是像素[0-1],图片的数据格式[weight,high,channels],RGB
# caffe加载的图片需要的是[0-255]像素,数据格式[channels,weight,high],BGR,那么就需要转换
# channel 放到前面
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
# 图片像素放大到[0-255]
transformer.set_raw_scale('data', 255)
# RGB-->BGR 转换
transformer.set_channel_swap('data', (2,1,0))
# 这里是加载图片
im=caffe.io.load_image(caffe_root+'examples/images/cat.jpg')
# 用上面的transformer.preprocess来处理刚刚加载图片
net.blobs['data'].data[...] = transformer.preprocess('data',im)
#caffe.set_mode_gpu()
since = time.time()
#注意,网络开始向前传播啦
out = net.forward()
time_elapsed = time.time() - since
print(time_elapsed)
#加载标签
imagenet_labels_filename = caffe_root + 'data/ilsvrc12/synset_words.txt'
labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t')
# 最终的结果: 当前这个图片的属于哪个物体的概率(列表表示)
output_prob = out['prob'][0]
# 找出最大的那个概率
print ('predicted class is:', output_prob.argmax())
后期使用
在用tensorflow的时候,要先打开anaconda prompt,然后activate tensorflow,在里面打开对应的IDE,比如说spyder。
使用caffe时,一样。