详细教程:window下安装Caffe深度学习框架!(同时安装pycaffe)

第一步.假若你的电脑有NVIDIA的GPU,想要用它来训练神经网络,需要下载安装CUDA

下载地址:https://developer.nvidia.com/cuda-downloads

我这里以win10、 64位,安装的是cuda8.0,你也可以安装其他版本(高于7.5版本):


一直next安装即可!装好之后把CUDA安装目录下的bin和lib\x64添加到Path环境变量中。

 

第二步.接着还需要安装对应版本cuDNN

1.下载地址(需要注册下载):https://developer.nvidia.com/rdp/cudnn-download

2.解压,把解压出来的中bin,include,lib中的文件分别拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0路径下的对应文件夹里面!




3.C:\Program Files\NVIDIA GPUComputing Toolkit\CUDA\v8.0\extras\CUPTI\libx64里面的cupti64_80.dll复制到C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin路径下,如下图所示:


这样就把使用GPU的环境配置好了!!!注意:cuda安装好后,它的环境变量同时也被自动设置好了,无需自己手动设置。


配置好GPU驱动后,接下来,我们就可以开始安装Caffe

 第一步Microsoft官方Github上下载Caffe的源码压缩包。微软移植了Caffe,windows下面做了些调整,使得我们的安装配置会比较简单一点。

下载地址:https://github.com/Microsoft/caffe


 

第二步安装

1.   经过上述步骤,我假设你的GPU cuda驱动已经正确安装。解压已经下载好的caffe源码压缩包windows-caffe-master.zip


进入解压的得到的windows-caffe-master文件夹。将之前安装cudnn时用到的整个cuda文件夹复制一份到windows-caffe-master文件夹。

 

         

     打开caffe-master文件夹,可以看到有一个windows文件夹,然后继续打开windows文件夹,看到里面有一个CommonSettings.props.example文件,复制出来一份,并改名字为CommonSettings.props


VS2013打开本文件夹下的Caffe.sln,如下图:


 

首先设置libcaffe为启动项目!

可能大家会看到提示libcaffe没有加载成功。主要原因在于propos里面的默认设置cuda版本是7.5,而如果你装的是8.0(或其他),就出现了冲突!

解决办法很简单,打开CommonSettings.props文件,找到<CudaVersion>,将里面的版本改为你的版本(比如我这里装的是8.0)。然后关闭vs工程,重新打开caffe.sln


还有一个原因是vs2013的安装路径中缺少 CUDA 8.0.props (和CUDA 8.0.targets),

其实 CUDA 8.0.props(和CUDA 8.0.targets就在cuda的安装目录下,我的cuda安装路径如下:

C:\ProgramFiles\NVIDIA GPU ComputingToolkit\CUDA\v8.0\extras\visual_studio_integration\MSBuildExtensions

把该路径下所有文件全部拷贝到vs2013安装路径下即可!

我的vs2013安装路径如下:

C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations

做了上面的工作,libcaffetestall的加载就应该都不会再有错误提示了!


 2.打开CommenSetting.probs.<CuDnnPath>那里把cuda文件夹所在路径填进去。

(比如我这里是把从cudnn-8.0-windows10-x64-v5.1.zip解压出的cuda文件夹,放在了D:\caffe_GPU下,所以这里我就填写D:\caffe_GPU) 




此时,我们可以开始准备编译项目了!我这里选择编译类型为release,x64


 打开libcaffe属性设置,关闭视警告为错误(即设置为No)如果不设置的话,在编译boost库的时候会由于文字编码的警告而报错!!!

然后就开始编译生成(ctrl+F5),注意我们这时候首先编译生成的是libcaffe !!!

在编译生成的前期阶段,你可能会发现Visual Studio很卡,这是因为在安装一些第三方库(opencv,boost之类的,MicroSoft用Nuget集成在了这一步)!

之后会发现caffe-master目录下自动多了一个文件夹NugetPackages!

注意:之所以选择微软官方的版本,是因为在编译过程中会自动下载一些依赖库,不用手动选择,所以非常简单方便.。


注意:在libcaffe的编译生成过程中,可能会出现以下报错:



解决方案:

在路径NugetPackages/OpenCV.2.4.10/build/native/中找到OpenCV.props,打开作如下修改后保存!


等了一段时间后,libcaffe项目终于成功生成了!在我们的caffe-master路径下就会自动出现一个名叫Build的文件夹!

                                             

 进入Build\x64\Release

以后编译成功和运行需要的文件都会存放在这个Build\x64\Release下面。



       接下来,可以选择更多的项目来编译。类似地,我们接下来也可以只选择caffe项目(C++接口的caffe)和convert_mnist_data项目来编译,同样的要注意配置成release和x64,还有关闭视警告为错误(即设置为No))。然后类似的build (ctrl+f5),这样在Build\x64\Release下面就会多出caffe.exe和convert_mnist_data.exe(因为下面测试mnist数据集要用到,所以先编译出来)。还有一些其他的文件需要的时候再编译(比如pycaffe, matcaffe) (同样的要注意release和X64,还有关闭视警告为错误(即设置为No))


测试安装好的Caffe

1.    在这个地址下载Mnist数据集(    其实国内网站也有很多下载,比如CSDN):

http://yann.lecun.com/exdb/mnist/

下载完后解压得到对应的四个文件,这四个文件不能直接用于caffe的训练和测试。需要利用编译生成的convert_mnist_data.exe把四个文件转换为caffe所支持的leveldb或lmdb文件。

所以我们先把下载好的四个文件放到caffe根目录下的data\mnist文件夹下。

第一步:在caffe-windows安装的根目录下,新建一个mnist_data_convert.bat文件,用来将原始的mnist数据转换成caffe能读入的lmdb格式,并在文件中添加以下命令:

Build\x64\Release\convert_mnist_data --backend=lmdbdata/mnist/train-images.idx3-ubyte data/mnist/train-labels.idx1-ubyteexamples/mnist/mnist_train_lmdb

Build\x64\Release\convert_mnist_data --backend=lmdbdata/mnist/t10k-images.idx3-ubyte data/mnist/t10k-labels.idx1-ubyteexamples/mnist/mnist_test_lmdb

Pause

 

如下图所示:

 


保存并双击运行mnist_data_convert.bat文件,就会将原始的mnist数据转换成caffe能读入的lmdb格式!


第二步:开始测试利用mnist训练lenet网络,在caffe-windows根目录下新建一个mnist_test_run.bat.bat文件,在文件中添加:

Build\x64\Release\caffe.exe  train--solver=examples/mnist/lenet_solver_adam.prototxt

pause 

保存并双击运行,caffe开始用mnist数据集训练lenet网络。表明Caffe框架安装成功!!!


 

 

附录

Pycaffe安装教程(gordon2018.5.23):

1.  因为pycaffe基于python2.7,所以我们要在在已有Anconda3环境下安装python2虚拟环境:

安装Anaconda3后,自带Python3.5,但我们有时候还需要一个Python2.7来执行一些老的脚本程序,此时可以给Anaconda3再创建一个新的独立的python2.7的环境。调出Anaconda3的命令行工具AnacondaPrompt。如下图所示,执行命令:

$ conda create -n py2 anacondapython=2.7 


1.  其中py2就是你的新的python2.7环境的名称,接下来提示你是否安装一大堆的包!全部选择yes!安装成功界面如下:

如何使用python2.7环境?命令如下:

Windows: activatepy2

Linux and Mac OS X: source activate py2

如何结束python2.7环境:

Windows: deactivate

Linux and Mac OS X:source deactivate 

想要删除指定路径下的虚拟环境,使用如下的命令:

conda remove--prefix=D:\Anaconda3\envs\py2 –all


3.python2虚拟环境是安装在D:\Anaconda3\envs\py2目录下的!我们现在来编译pycaffe。首先需要确认配置文件CommonSettings.props的参数中第13、48行已修改,如下:

 <PythonSupport>true</PythonSupport>

<PythonDir>D:\Anaconda3\envs\py2</PythonDir>



4.设置编译方式为release,x64,设置pycaffe为启动项目,设置“将警告视为错误”为!!!设置ctrl+f5开始生成!


 

编译完成以后,会生成一个:caffe-master\caffe-master\Build\x64\Release\pycaffe文件夹,进入以后如下图所示:


接着将那个caffe文件夹复制到python2虚拟环境根目录下:

D:\Anaconda3\envs\py2\Lib\site-packages

1.     最后,打开AncondaPrompt,切换到Python2环境(activatepy2

),然后就可以尝试:import caffe

 

出现报错!ImportError:No module named google.protobuf.internal

直接在python2虚拟环境下执行pip install protobuf即可!

模块安装完成以后,再import caffe,就OK了。

 

安装完pycaffe后,可以复制下面的代码,测试一下!

(下面代码主要是导入caffe安装目录下提供的一个预训练好的模型bvlc_reference_caffenet.caffemodel,它支持1000个分类,用它来预测一张图片是什么类别,可以找一只猫来试一下!!!synset_words.txt文件时imagenet1000个分类所对应的名称,没有的话网上找一个就行了,到处都是

#python2环境默认的是ascii编码, python3默认的是utf-8编码。

import sys

print sys.getdefaultencoding()

default_encoding ='utf-8'

if sys.getdefaultencoding()!= default_encoding:

    reload(sys)

    sys.setdefaultencoding(default_encoding)  

print sys.getdefaultencoding()

 

import caffe

import numpy as np

deploy='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/deploy.prototxt'#deploy文件

caffe_model='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'

img='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/peacock.jpg'    #随机找的一张待测图片

labels_filename='D:/caffe_GPU/caffe-master/caffe-master/models/bvlc_reference_caffenet/synset_words.txt'  #类别名称文件,将数字标签转换回类别名称

net = caffe.Net(deploy,caffe_model,caffe.TEST)   #加载modelnetwork

print"load caffemodel ..."

#图片预处理设置

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})  #设定图片的shape格式(1,3,28,28)

transformer.set_transpose('data',(2,0,1))    #改变维度的顺序,由原始图片(28,28,3)变为(3,28,28)

#transformer.set_mean('data',np.load(mean_file).mean(1).mean(1))    #减去均值,前面训练模型时没有减均值,这儿就不用

transformer.set_raw_scale('data',255)    # 缩放到【0255】之间

transformer.set_channel_swap('data',(2,1,0))   #交换通道,将图片由RGB变为BGR

im=caffe.io.load_image(img)                   #加载图片

net.blobs['data'].data[...]= transformer.preprocess('data',im)      #执行上面设置的图片预处理操作,并将图片载入到blob

#执行测试

out = net.forward()

labels = np.loadtxt(labels_filename, str, delimiter='\t')   #读取类别名称文件

prob= net.blobs['prob'].data[0].flatten()#取出最后一层(Softmax)属于某个类别的概率值,并打印

print prob

order=prob.argsort()[-1]  #将概率值排序,取出最大值所在的序号

print'the class is:',labels[order]   #将该序号转换成对应的类别名称,并打印

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章