win10*anaconda*python3*vs2015*(cuda8.0+cuDNN5.1)*caffe安装+借鉴 = 论小白是如何安装caffe的
- 所需软件、环境和目标、注意事项
-
- 其他链接
- 完整步骤总结(站在巨人的肩膀上填坑)
- 后期使用
- 以上就是所谓的“站在巨人肩膀上填坑”,结合别人的教程,再结合实际填自己的坑。鼓捣了一天@_@~~
所需软件、环境和目标、注意事项
如题,本人是win10,anaconda3,vs2015,记得安装一个cmake,后面编译有用,还要安装一个git(GitHub必备啊)。(这里给出cmake下载链接,花了大半天时间下出来的,屎都等出来了@_@(不存在镜像的,别想了))。
https://download.csdn.net/download/qq_38251389/10927861
目标是安装gpu版caffe(严格来说是在win10下编译好caffe,让其能被python3.5调用)。
注意,本人用的是python3.5(anaconda版本只要是3.5以上的就行,不要求完全对应所用python3.x的版本,因为后面创建虚拟环境时可随便创建各种3.x版本)
其他链接
这里给出本人整理好的“前人”的安装caffe教程,亲测后真行,只不过有一些需要注意的点,我会在下面写出来,以防后来者confused。这样应该很具体了吧。。。
1、https://blog.csdn.net/hanzy88/article/details/79196846
2、https://blog.csdn.net/hu_guan_jie/article/details/80071656
完整步骤总结(站在巨人的肩膀上填坑)
1、安装vs2015(勾选visual c++组件)
2、安装anaconda3
3、安装cuda8.0、cuDNN5.1
4、安装python3.5
注:到这步为止都默认你已经都安装好以上的东西了(网上一堆教程)
5、通过anaconda创建一个叫caffe的新环境(conda create -n caffe python=3.5)
6、是时候展现真正的技术了。。
安装Caffe:
首先,在BVLC上以git的方式下载caffe:
调出系统的运行(win+R,输入cmd后,Enter)
输入git clone https://github.com/BVLC/caffe.git
然后:输入cd caffe
再次:输入git checkout windows ,再enter
好了,到这里先别急着关
找到刚刚得到的caffe文件夹,我的在这里:C:\Users\Administrator\caffe,进入scripts文件夹,有一个build_win.cmd的文件,用文本编辑器打开,进行如下更改:
按照图中所有的地方来设置,不要怀疑。。(MSVC_VERSION=14表示是的vs2015
CPU_ONLY = 0 表示安装GPU版本
PYTHON_VERSION=3 表示python3.5,WITH_NINJA=0表示不使用ninja编译,其他的自己看图中绿色注释部分 )
也就是更改主要是关闭ONLY-CPU运算和关闭使用ninja,同时把python支持打开,设置为3,以及设置Anaconda3的位置。 还要设置一下cuDNN路径(默认你已经按照cuda8.0与cuDNN5.1配套安装好了),你的build_win文件有其他不同的地方的话,都按图中来设置就行,别删、别添加其他命令就行。
改好之后保存。
回到运行窗口,输入scripts\build_win.cmd
或者shift+右键,调出powershell,把文件拖进去,等待加载编译就行了。
其中在运行时,可能会出错,是程序在下载一个文件libraries_v140_x64_py35_1.1.0.tar时出错(0%几乎不动弹),手动下载,大家可以戳我邮箱1215668540@qq.com,给你发文件
注意:我在这卡了,按照前人的教程来也不行,后来定睛一看,程序里显示一句“Found suitable python, ‘xx\xx\Python27\python.exe’”,下的是libraries_v140_x64_py27_1.1.0.tar!!瞬间明朗!因为我电脑同时安装了py3.5与py2.7,它优先寻找了minimum版本2.7的!发现问题后马上卸了python2.7,然后执行下面蓝色字体。
下载后放在制定文件夹内,我的是 C:\Users\Administrator.caffe\dependencies\download文件夹内(压缩文件) (注意是.caffe ,有个点,这个路径是你执行了之前的命令后系统自动生成的,在administrator路径下可找到),解压到download同级文件夹里。
重新加载编译一次, 如果出错删除scripts目录下bulid中所有文件,重新加载scripts中的build_win.cmd,否则一直错在同一个地方(每一次更改变动,最好都要删除build文件里的所有文件) 。
重新加载编译应该都没有问题,没有报错就是编译成功了。
注:如果报错类似error MSB6006: "CL.exe"已退出,代码为2
等等类似的,3个原因:
A、可能之前的运行的exe还没有关闭,在任务管理器里面干掉它。
B、关掉vc,删除ncb文件,再重新编译。
C、杀毒软件和系统不兼容,建议卸载查毒软件。
反正我先退出杀毒软件了,然后就好啦
洋洋洒洒的一堆warning,问题不大(问题是我是gtx1060的,自我感觉好像没有用1个多小时啊???好像也就二十几分钟??所以这已用时间是怎么回事??一脸懵逼)
7、编译完成后,会在caffe文件夹下生产一个build文件夹,下一步是进行生成
build文件夹内找到caffe.sln这个解决方案(默认你会使用visual studio),打开caffe.sln,右键ALL_BUILD工程进行生成。
坐等生成完毕
生成完成后,在如下图的文件夹下,会生成caffe.exe等执行文件
7、caffe进行mnist测试
首先去官网http://yann.lecun.com/exdb/mnist/下载mnist数据集,解压后放到如下两个文件夹下,训练数据和测试数据分开,文件夹自己新建一下。
在caffe的目录
下创建creat_mnist.bat,train_mnist.bat文件
在creat_mnist.bat中输入(用notepad++(或其他文本编辑器)打开):(trian_mnist.bat文件的话,后面的时候再盘它)
.\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.
.\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\examples\mnist下,这种格式读取速度快。)
双击该create_mnist.bat文件,执行完成后,会在caffe\examples\mnist下生成对应数据文件
在caffe\examples\mnist文件夹下,除了刚刚生成的数据文件,还有mnist的模型文件lenet_train_test.prototxt,还有lenet_solver.prototxt模型配置文件。
模型文件lenet_train_test.prototxt,需要给出对应的训练和测试数据路径(这里就给你看看,不用动)
lenet_solver.prototxt模型配置文件中,要给出模型文件的路径,以及训练方式,我这边用的是GPU
这些路径都是相对于caffe这个根目录的相对路径,然后文本编辑器打开前面创建的train_mnist.bat文件,输入:
.\build\tools\Release\caffe.exe train --solver=examples/mnist/lenet_solver.prototxt
pause
注意,/和\这两者要区别清楚,不然很可能会找不到对应的数据或者模型而出错
然后同样双击train_mnist.bat文件,就可以开始训练了,如图训练完成!
8、python接口的配置
在编译完后的caffe根目录下的python文件夹下,会生成pycaffe(即那个caffe文件夹),用于python调用caffe。
将里面的caffe文件夹复制到:
F:\anaconda3\envs\caffe\Lib\site-packages,也就是之前创建的caffe环境对应的包文件夹site-packages内。
然后打开anaconda prompt,执行activate caffe进入环境,安装一些依赖库:
pip install numpy scipy protobuf==3.1.0 six scikit-image pyyaml pydotplus graphviz
安装完后输入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())
后期使用
在用caffe的时候,要先打开anaconda prompt,然后activate caffe,在里面打开对应的IDE,比如说spyder。
以上就是所谓的“站在巨人肩膀上填坑”,结合别人的教程,再结合实际填自己的坑。鼓捣了一天@_@~~
有问题戳企鹅1215668540,不喜勿喷