A卡 caffe 如何搭建深度学习的编译caffessd的方式环境 求

ubuntu15.04搭建caffe深度学习环境流程及遇到的问题
ubuntu 15.04 搭建caffe深度学习环境流程及遇到的问题
做深度学习避免不了要装caffe的环境,之前很不容易装好了一次,然后更新了个nvidia驱动后,又坏了。然后找了很多解决方法,均不能使得caffe再次运行。只能重新安装一次。并把遇到的各种问题记录下,方便以后重装。
安装完成后请不要更新Nvidia驱动
第一步:ubuntu安装
下载ubuntu 15.04的安装包 然后刻录到U盘里,设置U盘启动然后安装ubuntu。
遇到的问题如下:
1、由于一些新的显卡 ubuntu15.04内置驱动不能支持,会报cpu死锁的错误。
解决方法:进入ubuntu界面的时候 按F6在更多选项里选择 Nomodeset就可以了。
2、initramfs unable to find a medium
解决方法:和USB3.0接口有问题 需要将USB3.0硬件插入USB3.0接口
同时和U盘刻录可能也有关系,换一个硬盘刻录软件就可以了。
3、软件下载速度慢的问题
建议多试试几个软件源,在软件中心里能够更改。由于我们是教育网,使用科大的源,下载速度很快。
第二部分:nVidia CUDA Toolkit的安装(*.deb方法)
PS:特别推荐.deb的方法,目前已提供离线版的deb文件,该方法比较简单,不需要切换到tty模式,因此不再提供原来的.run安装方法,这里以CUDA 7.5为例。
一、CUDA Repository
获取CUDA安装包,安装包请自行去NVidia官网下载。()
$ sudo dpkg -i cuda-repo-ubuntu-local_7.5-18_amd64
$ sudo apt-get update
$ sudo apt-get install -y cuda
验证安装成功的标志:/usr/local/cuda-7.5/samples/bin/x86_64/linux/release
首先make下samples 然后 ./devicequery
第二部分 Matlab安装和调试(以Matlab 2014a为例)
由于该软件为商业软件,请大家自行寻找,安装学习,并确保不使用做商业目的,下载24小时删除&&
选择Mathworks.Matlab.R2014a.Unix.iso & 右键 & 使用磁盘映像挂载器打开&,进入装载的虚拟光盘,拷贝全部文件至home/Matlab 文件夹(PS:我的原则是能GUI就GUI,喜欢CMD的可以参照执行)
复制Crack/install.jar至 home/Matlab/java/jar/ 并覆盖源文件
$ sudo cp install.jar /home/Matlab/java/jar/
授权安装文件夹
$ chmod a+x Matlab -R
$ sudo ./install
选项:不使用Internet安装
序列号: -
默认路径:/usr/local/MATLAB/R2014a
勾选从默认启动路径创建符号链接(实现在任意位置运行matlab启动程序)
激活文件:license_14a.lic
拷贝 libmwservices.so 至 /usr/local/MATLAB/R2014a/bin/glnxa64
$ sudo cp libmwservices.so /usr/local/MATLAB/R2014a/bin/glnxa64/
5.解决编译器gcc/g++版本问题。
因为Ubuntu 15.04的gcc/g++版本是4.9.2,而Matlab 2014a(2015a)的版本是4.7.x所以在使用matla调用mex文件的时候,基本上都会报错,根据报错信息,考虑如下两步解决方案。
A. 降级安装gcc/g++版本为4.7.x
(a). 下载gcc/g++ 4.7.x
$ sudo apt-get install -y gcc-4.7
$ sudo apt-get install -y g++-4.7
(b). 链接gcc/g++实现降级
$ cd /usr/bin
$ sudo rm gcc
$ sudo ln -s gcc-4.7 gcc
$ sudo rm g++
$ sudo ln -s g++-4.7 g++
. 暴力引用新版本GLIBCXX_3.4.20
$ sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6.0.20
(libstdc++.so.6.0.20的版本,可能因为不同而不同,使用最新的就可以了。)
目录切换到 /usr/local/MATLAB/R2014a/sys/os/glnxa64/ ,非常重要!
$ sudo mv libstdc++.so.6 libstdc++.so.6.backup (仅仅是备份,可以不备份,直接删除)。
$ sudo ln -s libstdc++.so.6.0.20 libstdc++.so.6
$ sudo ldconfig -v
strings /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6 | grep GLIBCXX_
可以看一下,是否已经成功包含了GLIBCXX_3.4.20,如果已经存在,基本上就成功了。
6.编译Matlab用到的caffe文件(见第五部分)
遇到的问题如下:
安装即将结束的时候提示输入安装密钥位置时要选择文件 不能立即关闭软件。否则会提示权限不够。
第五部分 Caffe-Master的安装和测试
对于Caffe的安装严格遵照官网的要求来:
一、安装BLAS
这里可以选择(ATLAS,MKL或者OpenBLAS),我这里使用MKL,首先下载并安装英特尔? 数学内核库 * 版MKL(Intel(R) Parallel Studio XE Cluster Edition for Linux 2016),下载链接是:, 使用学生身份(邮件 + 学校)下载Student版,填好各种信息,可以直接下载,同时会给你一个邮件告知序列号。下载完之后,要把文件解压到home文件夹(或直接把tar.gz文件拷贝到home文件夹,为了节省空间,安装完记得把压缩文件给删除喔~),或者其他的ext4的文件系统中。
接下来是安装过程,先授权,然后安装:
$ tar zxvf parallel_studio_xe_2016.tar.gz
$ chmod a+x parallel_studio_xe_2016 -R
$ sh install_GUI.sh
PS: 安装的时候,建议使用root权限安装,过程中会要求输入Linux的root口令。
sudo gedit /etc/ld.so.conf.d/intel_mkl.conf
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
新建cuda.conf,并编辑之:
$ sudo gedit /etc/ld.so.conf.d/cuda.conf
/usr/local/cuda/lib64
完成lib文件的链接操作,执行:
$ sudo ldconfig -v
三、安装OpenCV 3.0.0
下载并编译OpenCV(官网原版OpenCV:), 或者使用我提供的修改版的安装包(前面的百度云下载)(下面的安装方式使用该包完成,安装包修改了dependencies.sh文件并增加了OpenCV 3.0.0的安装文件)切换到文件保存的文件夹,然后安装依赖项:
$ sudo sh Ubuntu/dependencies.sh
切换目录Ubuntu\3.0\安装OpenCV 3.0.0:
$ sudo sh opencv3_0_0.sh
保证网络畅通,因为软件需要联网这里时间较长,请耐心等待。。。,
遇到的问题:
opencv 3.0可以通过离线安装方法,在我的安装包里,先安装一个CMAKE 然后cmake cmakelist。
由于网速的问题,可能下载某个安装包比较慢,幸运的是csdn里有这个下载包。下载后放到指定的文件夹就可以了。
四、安装其他依赖项
Google Logging Library(glog),下载地址:,然后解压安装:
$ tar zxvf glog-0.3.3.tar.gz
$ ./configure
$ sudo make install
如果没有权限就chmod a+x glog-0.3.3 -R , 或者索性 chmod 777 glog-0.3.3 -R , 装完之后,这个文件夹就可以kill了。
2. 其他依赖项,确保都成功
$ sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler protobuf-c-compiler protobuf-compiler
五、安装Caffe并测试
安装pycaffe必须的一些依赖项:
$ sudo apt-get install -y python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags cython ipython
安装配置nVidia cuDNN 加速Caffe模型运算
a. 安装前请去先官网下载最新的cuDNN (cudnn-7.0-linux-x64-v4.0-prod)。
$ sudo cp include/cudnn.h /usr/local/include
$ sudo cp lib64/libcudnn.* /usr/local/lib
b. 链接cuDNN的库文件
$ sudo ln -sf /usr/local/lib/libcudnn.so.4.0.7 /usr/local/lib/libcudnn.so.4
$ sudo ln -sf /usr/local/lib/libcudnn.so.4 /usr/local/lib/libcudnn.so
$ sudo ldconfig -v
切换到Caffe-master的文件夹,生成Makefile.config配置文件,执行:
$ cp Makefile.config.example Makefile.config
配置Makefile.config文件(仅列出修改部分)
a. 启用CUDNN,去掉USE_CUDNN := 1配置一些引用文件(增加部分主要是解决新版本下,HDF5的路径问题)
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
c. 启用Intel Parallel Studio XE 2016
BLAS := mkl
d. 配置路径,实现caffe对和Matlab接口的支持
PYTHON_LIB := /usr/local/lib
MATLAB_DIR := /usr/local/MATLAB/R2014a
c. 启用OpenCV 3.0, 去掉&#&
OPENCV_VERSION =3
这部分如果没有就算了,不用额外添加
编译caffe-master!!!&-j16&P是使用CPU的多核进行编译,可以极大地加速编译的速度,建议使用。
$ make all -j16
$ make test -j16
$ make runtest -j16
编译Python和Matlab用到的caffe文件
$ make pycaffe -j16
$ make matcaffe -j16
**遇到的问题:
一、我用的这个版本的caffe只支持3.0版本的cudnn,因此需要下载对应的版本。
二、./include/caffe/util/cudnn.hpp:8:34: 致命错误: caffe/proto/caffe.pb.h:没有那个文件或目录
解决方法如下:
pip install protobuf &upgrade -i http://pypi.douban.com/simple
pip install pillow &upgrade -i http://pypi.douban.com/simple
六、使用MNIST数据集进行测试
Caffe默认情况会安装在CAFFEROOT,就是解压到那个目录,例如: home/username/caffe-master,所以下面的工作,默认已经切换到了该工作目录。下面的工作主要是,用于测试Caffe是否工作正常,不做详细评估。具体设置请参考官网:
1. 数据预处理
$ sh data/mnist/get_mnist.sh
重建lmdb文件。Caffe支持多种数据格式输入网络,包括Image(.jpg, .png等),leveldb,lmdb,HDF5等,根据自己需要选择不同输入吧。
$ sh examples/mnist/create_mnist.sh
生成mnist-train-lmdb 和 mnist-train-lmdb文件夹,这里包含了lmdb格式的数据集
3. 训练mnist
$ sh examples/mnist/train_lenet.sh
至此,Caffe安装的所有步骤完结,下面是一组简单的数据对比,实验来源于MNIST数据集,主要是考察一下不同系统下CPU和GPU的性能。可以看到明显的差别了,虽然MNIST数据集很简单,相信复杂得数据集,差别会更大,Ubuntu+GPU是唯一的选择了。
测试平台1:i7-4770K/16G/GTX 770/CUDA 6.5
MNIST Windows8.1 on CPU:620s
MNIST Windows8.1 on GPU:190s
MNIST Ubuntu 14.04 on CPU:270s
MNIST Ubuntu 14.04 on GPU:160s
MNIST Ubuntu 14.04 on GPU with cuDNN:30s
Cifar10_full on GPU wihtout cuDNN:73m45s = 4428s (Iteration 70000)
Cifar10_full on GPU with cuDNN:20m7s = 1207s (Iteration 70000)
测试平台2:技嘉P35X v3,i7-4720HQ@2.6G/16G/NVidia GTX 980 8G
MNIST Ubuntu 15.04 on GPU with cuDNN:33s
测试平台3:Dell 7910,E5 .0G *2 /128G/ NVidia Titan X 12G
MNIST Ubuntu 15.04 on GPU with cuDNN:23s (真是逆天啊!)
对比测试1:2*E5-2620(12CPUs)/128G/Tesla K20M/CUDA5.5/CuDNN:30s
对比测试3:GTX 660/CUDA6.5/ubuntu 14.04
MNIST on GPU with cuDNN:49s
MNIST CentOS 6.4 on GPU:294s
对比测试2:Tesla K40M/CUDA6.5/ubuntu 14.04
MNIST on GPU with cuDNN:30s
对比测试3:GTX 660/CUDA6.5/ubuntu 14.04
MNIST on GPU with cuDNN:49s
其实,使用cudnn能提高几倍的计算性能,给出性能标准可以方便大家测试自己是否安装完整。青云QingCloud 深度学习平台 Deep Learning on QingCloud 基于强劲的 GPU 计算资源,在配置 CUDA 8.0
和 cuDNN5 的基础上,搭载 Caffe、 TensorFlow、PyTorch 和 Keras 等多个主流深度学习框架,同时集成 Jupyter notebook 开发环境及 numpy、scipy、pandas、matplotlib、nltk、scikit-learn 等众多数据科学工具包。用户可在深度学习平台上使用 GPU 或 CPU 进行单机或分布式深度学习模型训练与推断,并可享受云计算弹性特性,按需进行横向、纵向扩展。
一键完成部署 极速搭建深度学习开发环境
即使是有经验的深度学习开发者,想部署构建一套深度学习开发环境也需要大量时间完成复杂的配置工作。Deep Learning on QingCloud 通过 AppCenter 交付,可一键完成云端部署,并提供应用全生命周期管理能力(创建、扩容、监控、健康监测等),助力开发者极速搭建深度学习开发环境。
支持 CPU、GPU 多种部署模式
支持使用 GPU 或仅使用 CPU 进行深度学习开发与训练,同时可根据自身需求选择单节点或分布式部署模式。
仅使用 CPU
QingCloud 采用专为人工智能计算设计的 NVIDIA Tesla P100 GPU ,并以直通的方式与平台内的节点对接,使得节点可以独占整个 GPU ,避免了虚拟化带来的损耗,全面释放 GPU 计算能力。
GPU 性能虽然强劲,但费用也相对较高,如果开发者希望以较低成本进行深度学习开发,也可选择仅使用 CPU资源进行单节点或分布式训练。目前,Tensorflow、PyTorch 及 Keras支持使用 CPU 进行深度学习应用训练和测试, Caffe 需要重新编译才支持。
无缝对接 QingStor(TM) 对象存储 存储海量训练数据
集成 QingStor(TM) 对象存储命令行工具,通过配置 QingStor(TM) 对象存储相关参数,可便捷地从 QingStor(TM) 对象存储中获取海量训练数据,完成模型的训练。
集成主流深度学习开发框架
集成 Caffe、TensorFlow、PyTorch 和 Keras 等主流深度学习框架和 Jupyter notebook 前端开发环境,助力用户快速部署深度学习开发环境。
预置主流科学工具包 加速深度学习开发
为加速深度学习开发与模型训练,Deep Learning on QingCloud 预置 CUDA8.0 和 cuDNN5 驱动,并安装有 numpy、scipy、pandas、matplotlib、nltk、scikit-learn 等众多数据科学工具包。
按需计费 灵活掌握开发成本
支持按需付费、包月、包年计费模式,为用户提供更加全面和灵活的成本管理支持。在离线训练、临时测试、算法验证以及 AI 框架学习等场景中较适于按需付费模式,而在生产环境稳定训练需求和在线训练等场景中使用包月、包年模式成本更低。
互联网时代带来了爆炸式增长的数据量,面对海量的图像、语音和文本数据,训练模型需要性能极高的计算速度,青云 QingCloud 深度学习平台可以提供极致计算性能,全力加速深度学习领域人工智能产品的开发。
图像、语音和文本等数据源通过上传至海量数据存储服务 QingStor(TM) 对象存储进行持久化存储,同时也可直接通过云端 Kafka 将数据源传输到 Storm、Spark 等集群进行数据预处理,生成样本数据。经过 QingCloud 深度学习平台进行模型训练与验证,并根据最新样本数据不断更新模型。
训练好的模型即可用于图像、语音的智能识别以及自然语言理解等 AI 服务,可广泛应用于安全、电商、智能交通等领域。
全方位AI服务支持
Face++ 证件识别
证件识别提供多种场景下精准的身份证、驾照和行驶证关键字段识别。可以识别证件中的关键字段内容,并支持证件版本判断、图片质量检测和真实性判断。提供身份证、驾照和行驶证识别。
Face++ 人脸识别
人脸识别是权威的人脸识别方案,能够精确识别图片中的人脸信息,提供人脸检测、人脸关键点、人脸属性、人脸比对等多种能力,为青云QingCloud 平台上的开发者提供人脸识别技术能力。
爱因问答机器人
爱因问答机器人提供智能问答服务,用于解决企业在问答场景中面临的问题。使用场景包含客户服务(包括常见问题回答,订单状态查询,投诉等等)、售前咨询、产品功能说明、以及社区问答服务等,实现 24*7 全时段在线解答问题,提高客服接待效率。
更多应用将逐步上线,敬请关注 !
本产品没有可供您使用的区域,请到提交工单开通该产品所对应区域。Win7(64位)+VS2013+cuda7.5环境下搭建深度学习Caffe计算框架 - caffe- - ITkeyowrd
Win7(64位)+VS2013+cuda7.5环境下搭建深度学习Caffe计算框架
领取地址:
&&&& 0、前言 &&&&&&&&&&& 经过一个星期,在查阅了很多网络资源(例如
薛开宇大神等)后,终于在不断摸索中,找到适合了自己电脑配置【Win7(64)+VS2013+cuda7.5】的Caffe教程。感谢
happynear大神[
小咸鱼_前辈[
],这两位前辈的博客给了我非常大的帮助,尤其是,happynear的博客会关注官网最新动态,不断更新上传的原创Github源码,且非常有爱的贴出亲手制作的第三方库以及已经转换好的MNIST的leveldb数据文件,解决了困惑我好几天的关于如何配置boost、snappy等依赖库的问题,让我这枚门外小菜鸟以最简洁明了的方式成功编译Caffe,对他们的无私付出表示衷心的感谢,我会继续关注并学习他们以及更多前辈的优秀博文。
&&&&&&&&&&&& 我在自己小本本上跑通了深度学习Caffe框架经典的MNIST测试集,灰常鸡冻。【如图1所示】在经过4000次的迭代后,正确率为0.9911。证实,我的Caffe框架搭建完成,且各种配置无误。
图1 Win7(64位)下MNIST测试结果
&&&&&&&&&&& 终于跑通MNIST,我想做些这几天来的搭建Caffe记录,以便今后的学习。内容是以本机配置:Win7(64位)+Visual Studio 2013+OpenCV3.1.0(点击)+CUDA 7.5(配置CUDA,点击)+Python 2.7.0+笔记本自带显卡:NVDIA FeForce 610M(【计算机&&属性&&设备管理器&&显示适配器】即可查看,注意安装NVDIA驱动)为基础,转载了happynear及小咸鱼_的部分博文,尽量忠于原文,并在他们的基础上,关于我的安装时候出现的问题做些整理。(我本人整合了二位的内容,并尽可能认真地给出了自己出现的常见问题、相应解决方法,图1-10都是本人的工程截图。因此恬不知耻的标了原创二字,若本文引文中的任一原作者认为此举不妥,请务必与我联系立刻修改。捂脸==)
&&&&&&&& 不多说了,本文内容如下:
  happynear的Windows下的caffe源代码:。有happynear亲手制作的第三方库,在源码的根目录下建立个3rdparty文件夹,把文件解压进去就可以了。解压好之后,要将3rdparty/bin文件夹添加到环境变量的PATH中(计算机&&属性&&高级系统设置&&系统属性&&环境变量【如图2所示】),这样才能让程序找到这些第三方库的dll。在第三方库包中还提供了openblas的库文件。
图2 添加环境变量3rdparty/bin
  编译非常简单,分为以下几步:
  1、双击./src/caffe/proto/extract_proto.bat批处理文件来生成caffe.pb.h和caffe.pb.cc两个c++文件,和caffe_pb2.py这个使用的文件。   2、打开./buildVS2013/MainBuilder.sln,打开之后切换编译模式至Release X64模式。如果打开之后显示加载失败,可能你的CUDA版本和我不一致,我的是CUDA 7.5版,这时就要用记事本打开./buildVS2013目录下各个文件夹内的.vcxproj文件,搜索CUDA 7.5,把这个7.5换成你自己的CUDA版本,就可以正常打开了。
&&&&&&& 3、右键caffe项目,
&&&&&&& a.修改附加包含目录
&&&&&&&&&&&&&&& C/C++ && 常规&&附加包含目录&&修改如下(CUDA路径按自己的修改)【如图3、4所示】
图3 附加包含目录
图4 修改附加包含目录
&&&&&&& b.修改附加库目录 &&&&&&&&&&&&&&& 链接器 && 常规&&附加库目录修改如下(CUDA路径按自己的修改)【如图5、6所示】:
图5 附加库目录
图6 修改附加库目录
&& &&&&&&& 设置好之后,右键解决方案,重新生成。倘若,编译结束后会出现失败**个,因为你可能没有配置matlab接口和python接口,所以这些编译失败。我使用的是python接口【如图4、6所示】。如果需要matlab接口,可参考的博文设置(路径按自己的设置),
&&&  4、另外,如果你的显卡比较老或者没有显卡,请使用./build_cpu_only/MainBuilder.sln。
  5、点上边工具栏中的绿色三角编译吧。编译大概需要半小时左右,请耐心等待。
  如果要用matlab wrapper来提取特征、观察训练好的权重的话呢,只需要把matcaffe项目里面的matlab目录修改成你自己的,然后编译,你就能从matlab/+caffe/private文件夹里面找到一个叫caffe_.mexw64的文件啦。   python的wrapper类似,把pycaffe项目里的python目录改成你自己的(happynear用的是Anaconda),就能在python/caffe文件夹中生成_caffe.pyd的python dll文件。
下载已经转换好的MNIST的leveldb数据文件,解压至./examples/mnist文件夹中,然后运行根目录下的run_mnist.bat即可开始训练,训练日志会保存在./log文件夹中,以INFO开头,txt格式的日志文件中。
ps:如果你编译成功的话,不要忘了给happynear大神的github工程点个star!
四、常见问题
&&&&&&& 我在做MNIST数据集测试时,遇到了以下问题:
问题1:cudnn_conv_layer.cpp: Check failed:status==CUDNN_STATUS_SUCCESS&6 vs. 0& &&&&& CUDNN_STATUS_ARCH_MISMATCH
*********check failure stack trace:***************
&&&&&&&&&&& 解决:运行caffe训练时,提示以上错误:简单讲就是GPU的加速性能不够,CUDNN只支持CUDA Capability 3.0以上的GPU加速。因为我笔记本上的GeForce 610M的CUDA Capability是2.1,而官方的cudnn加速是不支持3.0以下的版本的。于是, 我是在度娘上找到了这个,方法可行且操作性强。在每个项目点击右键【属性&&C/C++&&所有选项&&预处理器定义&&编辑,每个项目都去掉:USE_CUDNN,重新执行以下即可(再次强调,每个项目必须都检查务必确认删除USE_CUDNN)。【如图7、8所示】
图7 预处理器
图8 预处理器删除USE_CUDNN
&&&&&&&&&&& 问题2:im2col.cu&&&&&&&& Check failed :error == cudaSuccess&8 vs. 0& invalid device function &&&&&&&&&&&&&&&&&&&&&&&&&&&&& ****Check failure stack trace:**********
&&&&&&&&&&& 解决:报错提示的是: invalid device function,则需要修改CUDA C/C++选项下的Device。在每个项目点击右键【属性&&CUDA C/C++&&Device&&Code Generation&&编辑,添上compute_20,sm_20,重新执行以下即可(再次强调,每个项目必须都检查务必确认添上compute_20,sm_20)。详见这个。另外要注意检查NVIDIA显卡的驱动是否与CUDA的版本匹配,不匹配就尽量更新NVIDIA的显卡驱动。【如图9、10所示】
图9 CUDA Device
图 10 修改CUDA Device
&&&&&&&& 至此,本文完。再次感谢Caffe前辈们的热心分享,使我顺利搭建Caffe。
&&&&&&&& 我很庆幸能够得到帮助,收获了顺利解决问题的成就感。感叹“网络资源是无限”之余,大神们的严谨博学、不断探究、乐于无私地分享传递他们的所知所得更让我敬佩。学海无涯,他们是我努力前行的榜样。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
经过一个星期,在查阅了很多网络资源(例如 欧新宇、 薛开宇大神等)后,终于在不断摸索中,找到适合了自己电脑配置【Win7(64)+VS2013+cuda7.5】的Caffe教
相关阅读排行
相关内容推荐
请激活账号
为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。
您的注册邮箱:
如果您没有收到激活邮件,请注意检查垃圾箱。Caffe 深度学习框架上手教程
发表于 09:08|
来源suanfazu|
摘要:Caffe是一个清晰而高效的深度学习框架,本文详细介绍了caffe的优势、架构,网络定义、各层定义,Caffe的安装与配置,解读了Caffe实现的图像分类模型AlexNet,并演示了CIFAR-10在caffe上进行训练与学习。
是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的
,目前在Google工作。
Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:
Caffe::set_mode(Caffe::GPU);
Caffe的优势
上手快:模型与相应优化都是以文本形式而非代码形式给出。
Caffe给出了模型的定义、最优化设置以及预训练的权重,方便立即上手。
速度快:能够运行最棒的模型与海量的数据。
Caffe与cuDNN结合使用,测试AlexNet模型,在K40上处理每张图片只需要1.17ms.
模块化:方便扩展到新的任务和设置上。
可以使用Caffe提供的各层类型来定义自己的模型。
开放性:公开的代码和参考模型用于再现。
社区好:可以通过BSD-2参与开发与讨论。
Caffe的网络定义
Caffe中的网络都是有向无环图的集合,可以直接定义:&name: "dummy-net"
layers {&span&&span&name: &span&"data" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"conv" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"pool" …&/span&&/span&&/span&}
layers {&span&&span&name: &span&"loss" …&/span&&/span&&/span&}
数据及其导数以blobs的形式在层间流动。Caffe的各层定义Caffe层的定义由2部分组成:层属性与层参数,例如
name:"conv1"
type:CONVOLUTION
bottom:"data"
top:"conv1"
convolution_param{
num_output:&span&20
kernel_size:5
weight_filler{
type: "&span style="color: #c0504d;"&xavier&/span&"
}这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数。
Blob是用以存储数据的4维数组,例如
对于数据:Number*Channel*Height*Width
对于卷积权重:Output*Input*Height*Width
对于卷积偏置:Output*1*1*1
网络参数的定义也非常方便,可以随意设置相应参数。
甚至调用GPU运算只需要写一句话:
solver_mode:GPU
Caffe的安装与配置
Caffe需要预先安装一些依赖项,首先是CUDA驱动。不论是CentOS还是Ubuntu都预装了开源的nouveau显卡驱动(SUSE没有这种问题),如果不禁用,则CUDA驱动不能正确安装。以Ubuntu为例,介绍一下这里的处理方法,当然也有其他处理方法。
生成mnist-train-leveldb/ 和 mnist-test-leveldb/,把数据转化成leveldb格式:
# sudo vi/etc/modprobe.d/blacklist.conf
# 增加一行 :blacklist nouveau
sudoapt-get --purge remove xserver-xorg-video-nouveau
#把官方驱动彻底卸载:
sudoapt-get --purge remove nvidia-*
#清除之前安装的任何NVIDIA驱动
sudo service lightdm stop
#进命令行,关闭Xserver
sudo kill all Xorg
安装了CUDA之后,依次按照安装BLAS、OpenCV、Boost即可。
Caffe跑跑MNIST试试
在Caffe安装目录之下,首先获得MNIST数据集:cd data/mnist
sh get_mnist.sh
生成mnist-train-leveldb/ 和&mnist-test-leveldb/,把数据转化成leveldb格式:
cd examples/lenet
sh create_mnist.sh
训练网络:sh train_lenet.sh
让Caffe生成的数据集能在Theano上直接运行
不论使用何种框架进行CNNs训练,共有3种数据集:
Training Set:用于训练网络
Validation Set:用于训练时测试网络准确率
Test Set:用于测试网络训练完成后的最终正确率
Caffe生成的数据分为2种格式:Lmdb和Leveldb
它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。
虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。
因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。
Google Protocol Buffer的安装
Protocol Buffer是一种类似于XML的用于序列化数据的自动机制。
首先在Protocol Buffers的中下载最新版本:
解压后运行:./configure
$ make check
$ make install
pip installprotobuf
添加动态链接库export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Lmdb的安装pip install lmdb
要parse(解析)一个protobuf类型数据,首先要告诉计算机你这个protobuf数据内部是什么格式(有哪些项,这些项各是什么数据类型的决定了占用多少字节,这些项可否重复,重复几次),安装protobuf这个module就可以用protobuf专用的语法来定义这些格式(这个是.proto文件)了,然后用protoc来编译这个.proto文件就可以生成你需要的目标文件。
想要定义自己的.proto文件请阅读:
编译.proto文件protoc--proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR--python_out=DST_DIR path/to/file.proto--proto_path 也可以简写成-I 是.proto所在的路径
输出路径:
--cpp_out 要生成C++可用的头文件,分别是***.pb.h(包含申明类)***.pb.cc(包含可执行类),使用的时候只要include “***.pb.h”
--java_out 生成java可用的头文件
--python_out 生成python可用的头文件,**_pb2.py,使用的时候import**_pb2.py即可
最后一个参数就是你的.proto文件完整路径。
Caffe (CNN, deep learning) 介绍
Caffe -----------Convolution Architecture For Feature Embedding (Extraction)
Caffe 是什么东东?
CNN (Deep Learning) 工具箱
C++ 语言架构
CPU 和GPU 无缝交换
Python 和matlab的封装
但是,Decaf只是CPU 版本。
为什么要用Caffe?
运算速度快。简单 友好的架构 用到的一些库:
Google Logging library (Glog): 一个C++语言的应用级日志记录框架,提供了C++风格的流操作和各种助手宏.
lebeldb(数据存储): 是一个google实现的非常高效的kv数据库,单进程操作。
CBLAS library(CPU版本的矩阵操作)
CUBLAS library (GPU 版本的矩阵操作)
Caffe 架构
预处理图像的leveldb构建
输入:一批图像和label (2和3)
输出:leveldb (4)
指令里包含如下信息:
conver_imageset (构建leveldb的可运行程序)
train/ (此目录放处理的jpg或者其他格式的图像)
label.txt (图像文件名及其label信息)
输出的leveldb文件夹的名字
CPU/GPU (指定是在cpu上还是在gpu上运行code)
CNN网络配置文件
Imagenet_solver.prototxt (包含全局参数的配置的文件)
Imagenet.prototxt (包含训练网络的配置的文件)
Imagenet_val.prototxt (包含测试网络的配置文件)
Caffe深度学习之图像分类模型AlexNet解读
在imagenet上的图像分类challenge上Alex提出的alexnet网络结构模型赢得了2012届的冠军。要研究CNN类型DL网络模型在图像分类上的应用,就逃不开研究alexnet,这是CNN在图像分类上的经典模型(DL火起来之后)。
在DL开源实现caffe的model样例中,它也给出了alexnet的复现,具体网络配置文件如下
接下来本文将一步步对该网络配置结构中各个层进行详细的解读(训练阶段):
各种layer的operation更多解释可以参考
从计算该模型的数据流过程中,该模型参数大概5kw+。
conv1阶段DFD(data flow diagram):&
conv2阶段DFD(data flow diagram):
conv3阶段DFD(data flow diagram):
conv4阶段DFD(data flow diagram):
conv5阶段DFD(data flow diagram):
fc6阶段DFD(data flow diagram):
fc7阶段DFD(data flow diagram):
& & & & & & &
fc8阶段DFD(data flow diagram):
& & & & & & &
caffe的输出中也有包含这块的内容日志,详情如下:
I:15.92 net.cpp:125] Top shape: 256 3 227 227 ()
I:15.92 net.cpp:125] Top shape: 256 1 1 1 (256)
I:15.92 net.cpp:156] data does not need backward computation.
I:15.92 net.cpp:74] Creating Layer conv1
I:15.92 net.cpp:84] conv1 &- data
I:15.92 net.cpp:110] conv1 -& conv1
I:16.92 net.cpp:125] Top shape: 256 96 55 55 ()
I:16.92 net.cpp:151] conv1 needs backward computation.
I:16.92 net.cpp:74] Creating Layer relu1
I:16.92 net.cpp:84] relu1 &- conv1
I:16.92 net.cpp:98] relu1 -& conv1 (in-place)
I:16.92 net.cpp:125] Top shape: 256 96 55 55 ()
I:16.92 net.cpp:151] relu1 needs backward computation.
I:16.92 net.cpp:74] Creating Layer pool1
I:16.92 net.cpp:84] pool1 &- conv1
I:16.92 net.cpp:110] pool1 -& pool1
I:16.92 net.cpp:125] Top shape: 256 96 27 27 ()
I:16.92 net.cpp:151] pool1 needs backward computation.
I:16.92 net.cpp:74] Creating Layer norm1
I:16.92 net.cpp:84] norm1 &- pool1
I:16.92 net.cpp:110] norm1 -& norm1
I:16.92 net.cpp:125] Top shape: 256 96 27 27 ()
I:16.92 net.cpp:151] norm1 needs backward computation.
I:16.92 net.cpp:74] Creating Layer conv2
I:16.92 net.cpp:84] conv2 &- norm1
I:16.92 net.cpp:110] conv2 -& conv2
I:16.92 net.cpp:125] Top shape: 256 256 27 27 ()
I:16.92 net.cpp:151] conv2 needs backward computation.
I:16.92 net.cpp:74] Creating Layer relu2
I:16.92 net.cpp:84] relu2 &- conv2
I:16.92 net.cpp:98] relu2 -& conv2 (in-place)
I:16.92 net.cpp:125] Top shape: 256 256 27 27 ()
I:16.92 net.cpp:151] relu2 needs backward computation.
I:16.92 net.cpp:74] Creating Layer pool2
I:16.92 net.cpp:84] pool2 &- conv2
I:16.92 net.cpp:110] pool2 -& pool2
I:16.92 net.cpp:125] Top shape: 256 256 13 13 ()
I:16.92 net.cpp:151] pool2 needs backward computation.
I:16.92 net.cpp:74] Creating Layer norm2
I:16.92 net.cpp:84] norm2 &- pool2
I:16.92 net.cpp:110] norm2 -& norm2
I:16.92 net.cpp:125] Top shape: 256 256 13 13 ()
I:16.92 net.cpp:151] norm2 needs backward computation.
I:16.92 net.cpp:74] Creating Layer conv3
I:16.92 net.cpp:84] conv3 &- norm2
I:16.92 net.cpp:110] conv3 -& conv3
I:16.92 net.cpp:125] Top shape: 256 384 13 13 ()
I:16.92 net.cpp:151] conv3 needs backward computation.
I:16.92 net.cpp:74] Creating Layer relu3
I:16.92 net.cpp:84] relu3 &- conv3
I:16.92 net.cpp:98] relu3 -& conv3 (in-place)
I:16.92 net.cpp:125] Top shape: 256 384 13 13 ()
I:16.92 net.cpp:151] relu3 needs backward computation.
I:16.92 net.cpp:74] Creating Layer conv4
I:16.92 net.cpp:84] conv4 &- conv3
I:16.92 net.cpp:110] conv4 -& conv4
I:16.92 net.cpp:125] Top shape: 256 384 13 13 ()
I:16.92 net.cpp:151] conv4 needs backward computation.
I:16.92 net.cpp:74] Creating Layer relu4
I:16.92 net.cpp:84] relu4 &- conv4
I:16.92 net.cpp:98] relu4 -& conv4 (in-place)
I:16.92 net.cpp:125] Top shape: 256 384 13 13 ()
I:16.92 net.cpp:151] relu4 needs backward computation.
I:16.92 net.cpp:74] Creating Layer conv5
I:16.92 net.cpp:84] conv5 &- conv4
I:16.92 net.cpp:110] conv5 -& conv5
I:16.92 net.cpp:125] Top shape: 256 256 13 13 ()
I:16.92 net.cpp:151] conv5 needs backward computation.
I:16.92 net.cpp:74] Creating Layer relu5
I:16.92 net.cpp:84] relu5 &- conv5
I:16.92 net.cpp:98] relu5 -& conv5 (in-place)
I:16.92 net.cpp:125] Top shape: 256 256 13 13 ()
I:16.92 net.cpp:151] relu5 needs backward computation.
I:16.92 net.cpp:74] Creating Layer pool5
I:16.92 net.cpp:84] pool5 &- conv5
I:16.92 net.cpp:110] pool5 -& pool5
I:16.92 net.cpp:125] Top shape: 256 256 6 6 (2359296)
I:16.92 net.cpp:151] pool5 needs backward computation.
I:16.92 net.cpp:74] Creating Layer fc6
I:16.92 net.cpp:84] fc6 &- pool5
I:16.92 net.cpp:110] fc6 -& fc6
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] fc6 needs backward computation.
I:17.92 net.cpp:74] Creating Layer relu6
I:17.92 net.cpp:84] relu6 &- fc6
I:17.92 net.cpp:98] relu6 -& fc6 (in-place)
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] relu6 needs backward computation.
I:17.92 net.cpp:74] Creating Layer drop6
I:17.92 net.cpp:84] drop6 &- fc6
I:17.92 net.cpp:98] drop6 -& fc6 (in-place)
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] drop6 needs backward computation.
I:17.92 net.cpp:74] Creating Layer fc7
I:17.92 net.cpp:84] fc7 &- fc6
I:17.92 net.cpp:110] fc7 -& fc7
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] fc7 needs backward computation.
I:17.92 net.cpp:74] Creating Layer relu7
I:17.92 net.cpp:84] relu7 &- fc7
I:17.92 net.cpp:98] relu7 -& fc7 (in-place)
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] relu7 needs backward computation.
I:17.92 net.cpp:74] Creating Layer drop7
I:17.92 net.cpp:84] drop7 &- fc7
I:17.92 net.cpp:98] drop7 -& fc7 (in-place)
I:17.92 net.cpp:125] Top shape: 256
I:17.92 net.cpp:151] drop7 needs backward computation.
I:17.92 net.cpp:74] Creating Layer fc8
I:17.92 net.cpp:84] fc8 &- fc7
I:17.92 net.cpp:110] fc8 -& fc8
I:17.92 net.cpp:125] Top shape: 256 22 1 1 (5632)
I:17.92 net.cpp:151] fc8 needs backward computation.
I:17.92 net.cpp:74] Creating Layer loss
I:17.92 net.cpp:84] loss &- fc8
I:17.92 net.cpp:84] loss &- label
I:17.92 net.cpp:151] loss needs backward computation.
I:17.92 net.cpp:173] Collecting Learning Rate and Weight Decay.
I:17.92 net.cpp:166] Network initialization done.
I:17.92 net.cpp:167] Memory required for Data
CIFAR-10在caffe上进行训练与学习
使用数据库:CIFAR-10
60000张 32X32 彩色图像 10类,50000张训练,10000张测试
在终端运行以下指令:cd $CAFFE_ROOT/data/cifar10
./get_cifar10.sh
cd $CAFFE_ROOT/examples/cifar10
./create_cifar10.sh
其中CAFFE_ROOT是caffe-master在你机子的地址
运行之后,将会在examples中出现数据库文件./cifar10-leveldb和数据库图像均值二进制文件./mean.binaryproto
该CNN由卷积层,POOLing层,非线性变换层,在顶端的局部对比归一化线性分类器组成。该模型的定义在CAFFE_ROOT/examples/cifar10
directory’s cifar10_quick_train.prototxt中,可以进行修改。其实后缀为prototxt很多都是用来修改配置的。
训练和测试
训练这个模型非常简单,当我们写好参数设置的文件cifar10_quick_solver.prototxt和定义的文件cifar10_quick_train.prototxt和cifar10_quick_test.prototxt后,运行train_quick.sh或者在终端输入下面的命令:cd $CAFFE_ROOT/examples/cifar10
./train_quick.sh
即可,train_quick.sh是一个简单的脚本,会把执行的信息显示出来,培训的工具是train_net.bin,cifar10_quick_solver.prototxt作为参数。
然后出现类似以下的信息:这是搭建模型的相关信息I:48.8298256 net.cpp:74] Creating Layer conv1
I:48.8298256 net.cpp:84] conv1 &- data
I:48.8298256 net.cpp:110] conv1 -& conv1
I:49.8298256 net.cpp:125] Top shape: 100 32 32 32 (3276800)
I:49.8298256 net.cpp:151] conv1 needs backward computation.
接着::49.8298256 net.cpp:166] Network initialization done.
I:49.8298256 net.cpp:167] Memory required for Data
I:49.8298256 solver.cpp:36] Solver scaffolding done.
I:49.8298256 solver.cpp:47] Solving CIFAR10_quick_train
之后,训练开始I:12.8298256 solver.cpp:208] Iteration 100, lr = 0.001
I:12.8298256 solver.cpp:65] Iteration 100, loss = 1.73643
I:41.8298256 solver.cpp:87] Iteration 500, Testing net
I:47.8298256 solver.cpp:114] Test score #0: 0.5504
I:47.8298256 solver.cpp:114] Test score #1: 1.27805
其中每100次迭代次数显示一次训练时lr(learningrate),和loss(训练损失函数),每500次测试一次,输出score 0(准确率)和score
1(测试损失函数)
当5000次迭代之后,正确率约为75%,模型的参数存储在二进制protobuf格式在cifar10_quick_iter_5000
然后,这个模型就可以用来运行在新数据上了。
另外,更改cifar*solver.prototxt文件可以使用CPU训练,# solver mode: CPU or GPU
solver_mode: CPU
可以看看CPU和GPU训练的差别。
主要资料来源:caffe官网教程
原文链接: (责编:周建丁)
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 caffevs2013编译 的文章

 

随机推荐