Deep Learning -- Caffe学习
来源:互联网 发布:c语言最大公倍数 编辑:程序博客网 时间:2024/05/16 06:49
Step 1 -- 了解Caffe:
把网页http://caffe.berkeleyvision.org看一遍。
Step2 -- 下载源码:
最好Windows版和Linux版结合使用,感觉能更快上手,我是以Windows版为主,弄不清楚的地方就去Linux下看看。
源码下载地址:https://github.com/BVLC/caffe,Windows版下载地址:https://github.com/BVLC/caffe/tree/windows。
Step3 -- 工程编译:
最好Win7以上OS,Visual Studio 2013,CUDA 7.5,cuDNN v4,其他的依赖库在编译时会通过Nuget包管理器自动下载。
编译前复制CommonSettings.props.example并改名为CommonSettings.props,该工程的基本配置都在该文件中,可以好好看下。
打开解决方案Caffe.sln,在CommonSettings.props中配置好是否使用GPU、cuDNN以及cuDNN的路径等等,配好后编译libcaffe工程,编译通过就ok啦。
遇到问题1:Error MSB3073:vcend with code 1,提示信息大概说BinplaceCudaDependencies.cmd里有错,打开发现命令的意思是要将CUDA和cuDNN的.dll文件拷贝到程序运行目录下结果找不到。
解决方法:问题出在我手欠将cuDNN下载下来时的“cuda”目录给删了,因为强迫症不喜欢无缘无故多一层看起来没什么用的目录,所以%CUDNN_PATH%\cuda\bin\cudnn*.dll改为%CUDNN_PATH%\bin\cudnn*.dll就好了。
Step4 -- 准备数据:
先以最简单的mnist为例,mnist最大的好处就是简单易懂,并且cuDNN的sample也是以此为例,学习素材丰富。
训练的话首先要有数据,可以从网站http://yann.lecun.com/exdb/mnist上下载。需要的数据分别是训练集图片train-images.idx3-ubyte、训练集标签train-labels.idx1-ubyte、测试集图片t10k-images.idx3-ubyte、测试集标签t10k-labels.idx1-ubyte。
下载好后需要将数据转换为lmdb(或者leveldb)格式,默认为lmdb,如果想用leveldb可以在代码中修改,或者用命令--backend=leveldb来修改。把数据放到caffe-windows\data\mnist目录下吧,将convert_mnist_data工程设置为启动项,工作目录配置为$(ProjectDir)..\..\data\mnist\。转换训练集的命令参数为train-images.idx3-ubyte train-labels.idx1-ubyte mnist_train_lmdb,转换测试集的命令参数为t10k-images.idx3-ubyte t10k-labels.idx1-ubyte mnist_test_lmdb。
这时可以编译运行程序了,但是很可能会崩溃报错。
这是我遇到的问题2:如果崩在CHECK_EQ(mdb_env_set_mapsize(mdb_env, 1099511627776), MDB_SUCCESS) // 1TB这句,一般情况是申请的空间不够。
解决办法:改成CHECK_EQ(mdb_env_set_mapsize(mdb_env, 107374182), MDB_SUCCESS) // 100MB即可运行成功,得到训练集和测试集。(最新的代码好像没有这段了?)
Step5 -- 开始训练:
训练可以选择仅仅使用CPU,或者使用GPU,选择使用GPU的基础上可以选择是否使用cuDNN库进行加速。CPU/GPU的选择需要在CommonSettings.props和solver.prototxt中同时设置,务必一致。
将上一步转换好的数据拷贝到caffe_windows\examples\mnist路径下会更方便。将caffe工程设为启动项,训练的solver选择example中的lenet_solver.prototxt,工作目录$(SolutionDir)..\,命令参数train --solver=examples/mnist/lenet_solver.prototxt --gpu=0。
运行程序训练开始,结束后可得到lenet_iter_5000.caffemodel和lenet_iter_10000.caffemodel两个文件。
Step6 -- 测试一下:
网络模型的定义文件lenet_train_test.prototxt中输入数据层同时定义了TRAIN跟TEST情况下的输入文件,所以不需要做什么修改。仅仅将命令参数替换为test --model=examples\mnist\lenet_train_test.prototxt --weights=examples\mnist\lenet_iter_10000.caffemodel --gpu=0即可。
可以看到测试结果:accuracy=0.9866,loss=0.0410526。
Step7 -- 实际使用:
如果我们对训练结果的accuracy和loss感到满意的话,就可以将训练好的数据投入实际使用,找几张真实的手写字符(数字0~9)来测试了。我的测试图片是从cuDNN的sample程序mnistCUDNN中找来的,one_28x28.pgm、three_28x28.pgm和five_28x28.pgm。
如果要利用解决方案自带的classification工程进行测试,要对代码稍做一些修改,因为原工程的流程与mnist的不同,多了减均值等操作。需要修改的地方包括入参检查、输入文件路径、SetMean、check labels_.size()、Preprocess和结果的呈现等。
修改好后运行可以看到,输入图片five_28x28.pgm,则10分类中5对应的score是最大的,其他都很小,说明分类器认为这张图片上最可能写的是“5”!
小小总结一下:
基本上经过上面这一轮的学习,对Windows版的Caffe工程就比较熟悉了,可以开始用来干活了。可以将faster-rcnn、SSD加进来,丰富这个解决方案,也可以将自己的工程加到当前解决方案下,像caffe或者classification工程一样调用libcaffe,实现自己的深度学习demo。关于工程配置可能会遇到很多坑,所以最好不要自己添加新工程,而是直接拷贝现有工程,需要的地方稍作修改,会轻松很多。
- Deep Learning -- Caffe学习
- deep learning学习-caffe安装记录
- Caffe (CNN, deep learning )
- caffe|deep learning framework
- Deep Learning(深度学习) caffe模型 特征提取 (windows/linux)
- 清晰高效的深度学习(Deep Learning)框架:Caffe
- Caffe-清晰高效的深度学习(deep learning)框架
- Caffe —— Deep learning in Practice 深度学习实践
- 【Deep Learning】caffe学习笔记(一):安装
- 【Deep Learning】caffe学习笔记(二):mnist
- Deep Learning学习 之 Deep learning简介
- Deep Learning深度学习
- 学习Deep learning必读
- deep learning学习
- 机器学习 -- Deep Learning
- Deep Learning学习网站
- Deep Learning 学习资料
- Deep learning -深度学习
- linux下忘记mysql密码的找回方法--谷营中西
- 自定义控件_day01
- fsync()
- 使用arduino作为programer对新的mcu烧录bootloader
- linux下忘记mysql密码的找回方法--谷营中西
- Deep Learning -- Caffe学习
- win7 host 中 vbox 虚拟机无法 attach USB device的问题
- mysql单表多次自关联查询
- 【Android】killProcessesWithOpenFiles分析
- java基础学习总结——多态(动态绑定)
- 使用lombok.jar可以在Java代码中可以省略setter、getter方法了
- 安卓开发基础知识0(五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程)
- 103------java中的几种内部类
- ioctl()